internal/content: run go generate

In order to pick up the change CL 585479 we need to renegerate
the minified javascript.

A test to detect this automatically will be nice, but
I am not sure if the Go project CI has all dependency tools
(esbuild, tsc, ...).

Fixes golang/go#67397

Change-Id: If4e6c5cf9d52c273e385a3db4a9bea4726aa7a08
Reviewed-on: https://go-review.googlesource.com/c/telemetry/+/591177
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Robert Findley <rfindley@google.com>
diff --git a/internal/content/telemetrygodev/static/charts.min.js b/internal/content/telemetrygodev/static/charts.min.js
index 9decedb..7933e43 100644
--- a/internal/content/telemetrygodev/static/charts.min.js
+++ b/internal/content/telemetrygodev/static/charts.min.js
@@ -58,7 +58,7 @@
 .${a} text,
 .${a} tspan {
   white-space: pre;
-}`)).call(Oo,n);for(let A of f){let{channels:N,values:L,facets:D}=p.get(A);if(l===void 0||A.facet==="super"){let tt=null;if(D&&(tt=D[0],tt=A.filter(tt,N,L),tt.length===0))continue;let Z=A.render(tt,h,L,y,w);if(Z==null)continue;T.appendChild(Z)}else{let tt;for(let Z of l){if(!(A.facetAnchor?.(l,F,Z)??!Z.empty))continue;let G=null;if(D){let at=c.has(A);if(G=D[at?Z.i:0],G=A.filter(G,N,L),G.length===0)continue;!at&&G===D[0]&&(G=Pg(G)),G.fx=Z.x,G.fy=Z.y,G.fi=Z.i}let Q=A.render(G,h,L,M,w);if(Q!=null){(tt??=mn(T).append("g")).append(()=>Q).datum(Z);for(let at of["aria-label","aria-description","aria-hidden","transform"])Q.hasAttribute(at)&&(tt.attr(at,Q.getAttribute(at)),Q.removeAttribute(at))}}tt?.selectChildren().attr("transform",_)}}let P=cy(m,w,t);if(r!=null||P.length>0){I=v.createElement("figure"),I.style.maxWidth="initial";for(let A of P)I.appendChild(A);if(I.appendChild(T),r!=null){let A=v.createElement("figcaption");A.appendChild(r?.ownerDocument?r:v.createTextNode(r)),I.appendChild(A)}}I.scale=nx(m),I.legend=ay(m,w,t);let S=c1();return S>0&&mn(T).append("text").attr("x",R).attr("y",20).attr("dy","-1em").attr("text-anchor","end").attr("font-family","initial").text("\u26A0\uFE0F").append("title").text(`${S.toLocaleString("en-US")} warning${S===1?"":"s"}. Please check the console.`),I}function D5({marks:t=[],...e}={}){return Na({...e,marks:[...t,this]})}Nt.prototype.plot=D5;function dy(t){return t.flat(1/0).filter(e=>e!=null).map(R5)}function R5(t){return typeof t.render=="function"?t:new kp(t)}var kp=class extends Nt{constructor(e){if(typeof e!="function")throw new TypeError("invalid mark; missing render function");super(),this.render=e}render(){}};function Np(t,e){for(let n in t)gy(t[n],e);return t}function gy(t,e){let{scale:n,transform:r=!0}=t;if(n==null||!r)return;let{type:o,percent:i,interval:a,transform:f=i?u=>u*100:Cd(a,o)}=e[n]??{};f!=null&&(t.value=pt(t.value,f),t.transform=!1)}function P5(t){for(let e in t)Fd(e,t[e])}function ka(t,e,n,r=$g){for(let{channels:o}of e.values())for(let i in o){let a=o[i],{scale:f}=a;if(f!=null&&r(f))if(f==="projection"){if(!g1(n)){let u=n.x?.domain===void 0,c=n.y?.domain===void 0;if(u||c){let[s,d]=y1(a);u&&Ep(t,"x",s),c&&Ep(t,"y",d)}}}else Ep(t,f,a)}return t}function Ep(t,e,n){let r=t.get(e);r!==void 0?r.push(n):t.set(e,[n])}function L5(t,e){if(t==null)return;let{x:n,y:r}=t;if(n==null&&r==null)return;let o=kt(t.data);if(o==null)throw new Error("missing facet data");let i={};n!=null&&(i.fx=Io(o,{value:n,scale:"fx"})),r!=null&&(i.fy=Io(o,{value:r,scale:"fy"})),Np(i,e);let a=Bc(o,i);return{channels:i,groups:a,data:t.data}}function py(t,e,n){if(t.facet===null||t.facet==="super")return;let{fx:r,fy:o}=t;if(r!=null||o!=null){let u=kt(t.data??r??o);if(u===void 0)throw new Error(`missing facet data in ${t.ariaLabel}`);if(u===null)return;let c={};return r!=null&&(c.fx=Io(u,{value:r,scale:"fx"})),o!=null&&(c.fy=Io(u,{value:o,scale:"fy"})),Np(c,n),{channels:c,groups:Bc(u,c)}}if(e===void 0)return;let{channels:i,groups:a,data:f}=e;if(t.facet!=="auto"||t.data===f)return{channels:i,groups:a};f.length>0&&(a.size>1||a.size===1&&i.fx&&i.fy&&[...a][0][1].size>1)&&kt(t.data)?.length===f.length&&an(`Warning: the ${t.ariaLabel} mark appears to use faceted data, but isn\u2019t faceted. The mark data has the same length as the facet data and the mark facet option is "auto", but the mark data and facet data are distinct. If this mark should be faceted, set the mark facet option to true; otherwise, suppress this warning by setting the mark facet option to false.`)}function O5(t,e={}){return Ir({...e,x:null,y:null},(n,r,o,i,a,f)=>f.getMarkState(t))}function F5(t){let e=[];for(let n of t){let r=n.tip;if(r){let i=(r==="x"?gx:r==="y"?xx:hx)(O5(n));i.title=null,e.push(ly(n.data,i))}}return e}function q5(t,e,n){let{projection:r,x:o={},y:i={},fx:a={},fy:f={},axis:u,grid:c,facet:s={},facet:{axis:d=u,grid:l}=s,x:{axis:p=u,grid:m=p===null?null:c}=o,y:{axis:h=u,grid:g=h===null?null:c}=i,fx:{axis:b=d,grid:x=b===null?null:l}=a,fy:{axis:M=d,grid:y=M===null?null:l}=f}=n;(r||!yo(o)&&!my("x",t))&&(p=m=null),(r||!yo(i)&&!my("y",t))&&(h=g=null),e.has("fx")||(b=x=null),e.has("fy")||(M=y=null),p===void 0&&(p=!rs(t,"x")),h===void 0&&(h=!rs(t,"y")),b===void 0&&(b=!rs(t,"fx")),M===void 0&&(M=!rs(t,"fy")),p===!0&&(p="bottom"),h===!0&&(h="left"),b===!0&&(b=p==="top"||p===null?"bottom":"top"),M===!0&&(M=h==="right"||h===null?"left":"right");let w=[];return ns(w,y,Sp,f),es(w,M,wp,"right","left",s,f),ns(w,x,_p,a),es(w,b,vp,"top","bottom",s,a),ns(w,g,Mp,i),es(w,h,Jc,"left","right",n,i),ns(w,m,Tp,o),es(w,p,Nr,"bottom","top",n,o),w}function es(t,e,n,r,o,i,a){if(!e)return;let f=z5(e);a=Y5(f?r:e,i,a);let{line:u}=a;(n===Jc||n===Nr)&&u&&!$r(u)&&t.push(Uo(B5(a))),t.push(n(a)),f&&t.push(n({...a,anchor:o,label:null}))}function ns(t,e,n,r){!e||$r(e)||t.push(n(U5(e,r)))}function z5(t){return/^\s*both\s*$/i.test(t)}function Y5(t,e,{line:n=e.line,ticks:r,tickSize:o,tickSpacing:i,tickPadding:a,tickFormat:f,tickRotate:u,fontVariant:c,ariaLabel:s,ariaDescription:d,label:l=e.label,labelAnchor:p,labelArrow:m=e.labelArrow,labelOffset:h}){return{anchor:t,line:n,ticks:r,tickSize:o,tickSpacing:i,tickPadding:a,tickFormat:f,tickRotate:u,fontVariant:c,ariaLabel:s,ariaDescription:d,label:l,labelAnchor:p,labelArrow:m,labelOffset:h}}function B5(t){let{anchor:e,line:n}=t;return{anchor:e,facetAnchor:e+"-empty",stroke:n===!0?void 0:n}}function U5(t,{stroke:e=vo(t)?t:void 0,ticks:n=X5(t)?t:void 0,tickSpacing:r,ariaLabel:o,ariaDescription:i}){return{stroke:e,ticks:n,tickSpacing:r,ariaLabel:o,ariaDescription:i}}function X5(t){switch(typeof t){case"number":return!0;case"string":return!vo(t)}return re(t)||typeof t?.range=="function"}function rs(t,e){let n=`${e}-axis `;return t.some(r=>r.ariaLabel?.startsWith(n))}function my(t,e){for(let n of e)for(let r in n.channels){let{scale:o}=n.channels[r];if(o===t||o==="projection")return!0}return!1}function W5(t,e){for(let n in t){let r=t[n],o=e[n];r.label===void 0&&o&&(r.label=o.label)}return t}function G5({fx:t,fy:e},n){let{marginTop:r,marginRight:o,marginBottom:i,marginLeft:a,width:f,height:u}=Fc(n),c=t&&hy(t),s=e&&hy(e);return{marginTop:e?s[0]:r,marginRight:t?f-c[1]:o,marginBottom:e?u-s[1]:i,marginLeft:t?c[0]:a,inset:{marginTop:n.marginTop,marginRight:n.marginRight,marginBottom:n.marginBottom,marginLeft:n.marginLeft},width:f,height:u}}function hy(t){let e=t.domain(),n=t(e[0]),r=t(e[e.length-1]);return r<n&&([n,r]=[r,n]),[n,r+t.bandwidth()]}function Dp(t={y:"count"},e={}){[t,e]=V5(t,e);let{x:n,y:r}=e;return H5(j5(n,e,wt),null,null,r,t,Ea(e))}function H5(t,e,n,r,{data:o=Pd,filter:i=Ma,sort:a,reverse:f,...u}={},c={}){t=xy(t),e=xy(e),u=K5(u,c),o=vy(o,wt),a=a==null?void 0:by("sort",a,c),i=i==null?void 0:wy("filter",i,c),n!=null&&Sa(u,"x","x1","x2")&&(n=null),r!=null&&Sa(u,"y","y1","y2")&&(r=null);let[s,d]=Te(t),[l,p]=Te(t),[m,h]=Te(e),[g,b]=Te(e),[x,M]=n!=null?[n,"x"]:r!=null?[r,"y"]:[],[y,w]=Te(x),{x:v,y:T,z:I,fill:E,stroke:F,x1:_,x2:R,y1:O,y2:P,domain:S,cumulative:A,thresholds:N,interval:L,...D}=c,[tt,Z]=Te(I),[G]=ie(E),[Q]=ie(F),[at,Ut]=Te(G),[Fe,H]=Te(Q);return{..."z"in c&&{z:tt||I},..."fill"in c&&{fill:at||E},..."stroke"in c&&{stroke:Fe||F},...$o(D,(X,$,q)=>{let z=va(gt(X,x),q?.[M]),C=gt(X,I),j=gt(X,G),J=gt(X,Q),ot=t1(u,{z:C,fill:j,stroke:J}),lt=[],Xt=[],Zn=z&&w([]),Ra=C&&Z([]),Pa=j&&Ut([]),La=J&&H([]),Oa=t&&d([]),fs=t&&p([]),Lp=e&&h([]),ky=e&&b([]),Ny=e3(t?.(X),e?.(X)),Dy=0;for(let Dr of u)Dr.initialize(X);a&&a.initialize(X),i&&i.initialize(X);for(let Dr of $){let Op=[];for(let Xo of u)Xo.scope("facet",Dr);a&&a.scope("facet",Dr),i&&i.scope("facet",Dr);for(let[Xo,Ry]of Rd(Dr,ot))for(let[Py,Ly]of Rd(Ry,z))for(let[Kn,Qn]of Ny(Ly))if(!(i&&!i.reduce(Kn,Qn))){Op.push(Dy++),Xt.push(o.reduceIndex(Kn,X,Qn)),z&&Zn.push(Py),C&&Ra.push(ot===C?Xo:C[Kn[0]]),j&&Pa.push(ot===j?Xo:j[Kn[0]]),J&&La.push(ot===J?Xo:J[Kn[0]]),Oa&&(Oa.push(Qn.x1),fs.push(Qn.x2)),Lp&&(Lp.push(Qn.y1),ky.push(Qn.y2));for(let Oy of u)Oy.reduce(Kn,Qn);a&&a.reduce(Kn)}lt.push(Op)}return e1(lt,a,f),{data:Xt,facets:lt}}),...!Sa(u,"x")&&(s?{x1:s,x2:l,x:wa(s,l)}:{x:v,x1:_,x2:R}),...!Sa(u,"y")&&(m?{y1:m,y2:g,y:wa(m,g)}:{y:T,y1:O,y2:P}),...y&&{[M]:y},...Object.fromEntries(u.map(({name:X,output:$})=>[X,$]))}}function V5({cumulative:t,domain:e,thresholds:n,interval:r,...o},i){return[o,{cumulative:t,domain:e,thresholds:n,interval:r,...i}]}function j5(t,{cumulative:e,domain:n,thresholds:r,interval:o},i){return t={...on(t)},t.domain===void 0&&(t.domain=n),t.cumulative===void 0&&(t.cumulative=e),t.thresholds===void 0&&(t.thresholds=r),t.interval===void 0&&(t.interval=o),t.value===void 0&&(t.value=i),t.thresholds=Z5(t.thresholds,t.interval),t}function xy(t){if(t==null)return;let{value:e,cumulative:n,domain:r=Ct,thresholds:o}=t,i=a=>{let f=gt(a,e),u;if(Yt(f)||J5(o)){f=pt(f,Sd,Float64Array);let[s,d]=typeof r=="function"?r(f):r,l=typeof o=="function"&&!Da(o)?o(f,s,d):o;typeof l=="number"&&(l=Gi(s,d,l)),Da(l)&&(r===Ct&&(s=l.floor(s),d=l.offset(l.floor(d))),l=l.range(s,l.offset(d))),u=l}else{f=Tr(f);let[s,d]=typeof r=="function"?r(f):r,l=typeof o=="function"&&!Da(o)?o(f,s,d):o;if(typeof l=="number")if(r===Ct){let p=tr(s,d,l);if(isFinite(p))if(p>0){let m=Math.round(s/p),h=Math.round(d/p);m*p<=s||--m,h*p>d||++h;let g=h-m+1;l=new Float64Array(g);for(let b=0;b<g;++b)l[b]=(m+b)*p}else if(p<0){p=-p;let m=Math.round(s*p),h=Math.round(d*p);m/p<=s||--m,h/p>d||++h;let g=h-m+1;l=new Float64Array(g);for(let b=0;b<g;++b)l[b]=(m+b)/p}else l=[s];else l=[s]}else l=$e(s,d,l);else Da(l)&&(r===Ct&&(s=l.floor(s),d=l.offset(l.floor(d))),l=l.range(s,l.offset(d)));u=l}let c=[];if(u.length===1)c.push([u[0],u[0]]);else for(let s=1;s<u.length;++s)c.push([u[s-1],u[s]]);return c.bin=(n<0?r3:n>0?n3:Rp)(c,u,f),c};return i.label=Pe(e),i}function Z5(t,e,n=yy){if(t===void 0)return e===void 0?n:rn(e);if(typeof t=="string"){switch(t.toLowerCase()){case"freedman-diaconis":return Wa;case"scott":return Zo;case"sturges":return Ya;case"auto":return yy}return $c(t)}return t}function K5(t,e){return Jg(t,e,by)}function by(t,e,n){return Nd(t,e,n,wy)}function wy(t,e,n){return Dd(t,e,n,vy)}function vy(t,e){return Ta(t,e,Q5)}function Q5(t){switch(`${t}`.toLowerCase()){case"x":return o3;case"x1":return a3;case"x2":return f3;case"y":return i3;case"y1":return u3;case"y2":return c3}throw new Error(`invalid bin reduce: ${t}`)}function yy(t,e,n){return Math.min(200,Zo(t,e,n))}function J5(t){return t3(t)||re(t)&&Yt(t)}function t3(t){return Da(t)&&typeof t=="function"&&t()instanceof Date}function Da(t){return typeof t?.range=="function"}function e3(t,e){return t&&e?function*(n){let r=t.bin(n);for(let[o,[i,a]]of t.entries()){let f=e.bin(r[o]);for(let[u,[c,s]]of e.entries())yield[f[u],{x1:i,y1:c,x2:a,y2:s}]}}:t?function*(n){let r=t.bin(n);for(let[o,[i,a]]of t.entries())yield[r[o],{x1:i,x2:a}]}:function*(n){let r=e.bin(n);for(let[o,[i,a]]of e.entries())yield[r[o],{y1:i,y2:a}]}}function Rp(t,e,n){return e=Tr(e),r=>{let o=t.map(()=>[]);for(let i of r)o[un(e,n[i])-1]?.push(i);return o}}function n3(t,e,n){let r=Rp(t,e,n);return o=>{let i=r(o);for(let a=1,f=i.length;a<f;++a){let u=i[a-1],c=i[a];for(let s of u)c.push(s)}return i}}function r3(t,e,n){let r=Rp(t,e,n);return o=>{let i=r(o);for(let a=i.length-2;a>=0;--a){let f=i[a+1],u=i[a];for(let c of f)u.push(c)}return i}}function My(t,e){let n=(+t+ +e)/2;return t instanceof Date?new Date(n):n}var o3={reduceIndex(t,e,{x1:n,x2:r}){return My(n,r)}},i3={reduceIndex(t,e,{y1:n,y2:r}){return My(n,r)}},a3={reduceIndex(t,e,{x1:n}){return n}},f3={reduceIndex(t,e,{x2:n}){return n}},u3={reduceIndex(t,e,{y1:n}){return n}},c3={reduceIndex(t,e,{y2:n}){return n}};function Sy(t={}){return Td(t)?t:{...t,y:wt}}function s3(t={},e={}){arguments.length===1&&([t,e]=l3(t));let{x1:n,x:r=n,y:o,...i}=e,[a,f,u,c]=p3(r,o,"x","y",t,i);return{...a,x1:n,x:f,y1:u,y2:c,y:wa(u,c)}}function Cy({y:t,y1:e,y2:n,...r}={}){return r=Ia(r,"x"),e===void 0&&n===void 0?s3({y:t,...r}):([e,n]=Dg(t,e,n),{...r,y1:e,y2:n})}function l3(t){let{offset:e,order:n,reverse:r,...o}=t;return[{offset:e,order:n,reverse:r},o]}var d3={length:!0};function p3(t,e=Ag,n,r,{offset:o,order:i,reverse:a},f){let u=Rg(f),[c,s]=Te(t),[d,l]=wo(e),[p,m]=wo(e);return d.hint=p.hint=d3,o=m3(o),i=x3(i,o,r),[$o(f,(h,g,b)=>{let x=t==null?void 0:s(va(gt(h,t),b?.[n])),M=gt(h,e,Float64Array),y=gt(h,u),w=i&&i(h,x,M,y),v=h.length,T=l(new Float64Array(v)),I=m(new Float64Array(v)),E=[];for(let F of g){let _=x?Array.from(cn(F,R=>x[R]).values()):[F];if(w)for(let R of _)R.sort(w);for(let R of _){let O=0,P=0;a&&R.reverse();for(let S of R){let A=M[S];A<0?O=I[S]=(T[S]=O)+A:A>0?P=I[S]=(T[S]=P)+A:I[S]=T[S]=P}}E.push(_)}return o&&o(E,T,I,y),{data:h,facets:g}}),c,d,p]}function m3(t){if(t!=null){if(typeof t=="function")return t;switch(`${t}`.toLowerCase()){case"expand":case"normalize":return h3;case"center":case"silhouette":return g3;case"wiggle":return $y}throw new Error(`unknown offset: ${t}`)}}function Ay(t,e){let n=0,r=0;for(let o of t){let i=e[o];i<n&&(n=i),i>r&&(r=i)}return[n,r]}function h3(t,e,n){for(let r of t)for(let o of r){let[i,a]=Ay(o,n);for(let f of o){let u=1/(a-i||1);e[f]=u*(e[f]-i),n[f]=u*(n[f]-i)}}}function g3(t,e,n){for(let r of t){for(let o of r){let[i,a]=Ay(o,n);for(let f of o){let u=(a+i)/2;e[f]-=u,n[f]-=u}}Iy(r,e,n)}Ey(t,e,n)}function $y(t,e,n,r){for(let o of t){let i=new Qt,a=0;for(let f of o){let u=-1,c=f.map(p=>Math.abs(n[p]-e[p])),s=f.map(p=>{u=r?r[p]:++u;let m=n[p]-e[p],h=i.has(u)?m-i.get(u):0;return i.set(u,m),h}),d=[0,...qa(s)];for(let p of f)e[p]+=a,n[p]+=a;let l=fe(c);l&&(a-=fe(c,(p,m)=>(s[m]/2+d[m])*p)/l)}Iy(o,e,n)}Ey(t,e,n)}function Iy(t,e,n){let r=Jt(t,o=>Jt(o,i=>e[i]));for(let o of t)for(let i of o)e[i]-=r,n[i]-=r}function Ey(t,e,n){let r=t.length;if(r===1)return;let o=t.map(f=>f.flat()),i=o.map(f=>(Jt(f,u=>e[u])+Wt(f,u=>n[u]))/2),a=Jt(i);for(let f=0;f<r;f++){let u=a-i[f];for(let c of o[f])e[c]+=u,n[c]+=u}}function x3(t,e,n){if(t===void 0&&e===$y)return Ty(Kt);if(t!=null){if(typeof t=="string"){let r=t.startsWith("-"),o=r?Mr:Kt;switch((r?t.slice(1):t).toLowerCase()){case"value":case n:return y3(o);case"z":return b3(o);case"sum":return w3(o);case"appearance":return v3(o);case"inside-out":return Ty(o)}return _y(vd(t))}if(typeof t=="function")return(t.length===1?_y:M3)(t);if(Array.isArray(t))return S3(t);throw new Error(`invalid order: ${t}`)}}function y3(t){return(e,n,r)=>(o,i)=>t(r[o],r[i])}function b3(t){return(e,n,r,o)=>(i,a)=>t(o[i],o[a])}function w3(t){return os(t,(e,n,r,o)=>Lr(ne(e),i=>fe(i,a=>r[a]),i=>o[i]))}function v3(t){return os(t,(e,n,r,o)=>Lr(ne(e),i=>n[jo(i,a=>r[a])],i=>o[i]))}function Ty(t){return os(t,(e,n,r,o)=>{let i=ne(e),a=Lr(i,d=>n[jo(d,l=>r[l])],d=>o[d]),f=Ae(i,d=>fe(d,l=>r[l]),d=>o[d]),u=[],c=[],s=0;for(let d of a)s<0?(s+=f.get(d),u.push(d)):(s-=f.get(d),c.push(d));return c.reverse().concat(u)})}function _y(t){return e=>{let n=gt(e,t);return(r,o)=>Kt(n[r],n[o])}}function M3(t){return e=>(n,r)=>t(e[n],e[r])}function S3(t){return os(Kt,()=>t)}function os(t,e){return(n,r,o,i)=>{if(!i)throw new Error("missing channel: z");let a=new Qt(e(n,r,o,i).map((f,u)=>[f,u]));return(f,u)=>t(a.get(i[f]),a.get(i[u]))}}var Pp=class extends Nt{constructor(e,n,r={},o){super(e,n,r,o);let{inset:i=0,insetTop:a=i,insetRight:f=i,insetBottom:u=i,insetLeft:c=i,rx:s,ry:d}=r;this.insetTop=ct(a),this.insetRight=ct(f),this.insetBottom=ct(u),this.insetLeft=ct(c),this.rx=St(s,"auto"),this.ry=St(d,"auto")}render(e,n,r,o,i){let{rx:a,ry:f}=this;return yt("svg:g",i).call(me,this,o,i).call(this._transform,this,n).call(u=>u.selectAll().data(e).enter().append("rect").call(he,this).attr("x",this._x(n,r,o)).attr("width",this._width(n,r,o)).attr("y",this._y(n,r,o)).attr("height",this._height(n,r,o)).call(et,"rx",a).call(et,"ry",f).call(Oe,this,r)).node()}_x(e,{x:n},{marginLeft:r}){let{insetLeft:o}=this;return n?i=>n[i]+o:r+o}_y(e,{y:n},{marginTop:r}){let{insetTop:o}=this;return n?i=>n[i]+o:r+o}_width({x:e},{x:n},{marginRight:r,marginLeft:o,width:i}){let{insetLeft:a,insetRight:f}=this,u=n&&e?e.bandwidth():i-r-o;return Math.max(0,u-a-f)}_height({y:e},{y:n},{marginTop:r,marginBottom:o,height:i}){let{insetTop:a,insetBottom:f}=this,u=n&&e?e.bandwidth():i-r-o;return Math.max(0,u-a-f)}},T3={ariaLabel:"bar"};var is=class extends Pp{constructor(e,n={}){let{x:r,y1:o,y2:i}=n;super(e,{y1:{value:o,scale:"y"},y2:{value:i,scale:"y"},x:{value:r,scale:"x",type:"band",optional:!0}},n,T3)}_transform(e,n,{y:r}){e.call(ge,n,{y:r},0,0)}_y({y:e},{y1:n,y2:r},{marginTop:o}){let{insetTop:i}=this;return Gn(e)?o+i:a=>Math.min(n[a],r[a])+i}_height({y:e},{y1:n,y2:r},{marginTop:o,marginBottom:i,height:a}){let{insetTop:f,insetBottom:u}=this;return Gn(e)?a-o-i-f-u:c=>Math.max(0,Math.abs(r[c]-n[c])-f-u)}};function as(t,e={}){return Ng(e)||(e={...e,x:Ic,y2:wt}),new is(t,Cy(Hc(Sy(e))))}for(let t of Page.Charts.Programs)for(let e of t.Charts)switch(e.Type){case"partition":document.querySelector(`[data-chart-id="${e.ID}"]`)?.append(C3(e));break;case"histogram":document.querySelector(`[data-chart-id="${e.ID}"]`)?.append(A3(e));break;default:console.error("unknown chart type");break}function C3({Data:t,Name:e}){return t??=[],Na({color:{type:"ordinal",scheme:"Spectral"},nice:!0,x:{label:e,labelOffset:Number.MAX_SAFE_INTEGER,tickRotate:45,domain:t.map(n=>n.Key)},y:{label:"Frequency",domain:[0,1]},width:1024,style:"overflow:visible;background:transparent;margin-bottom:3rem;",marks:[as(t,{tip:!0,fill:n=>isNaN(Number(n.Key))?n.Key:Number(n.Key),x:n=>n.Key,y:n=>n.Value}),Uo()]})}function A3({Data:t}){t??=[];let e=3,n=f=>isNaN(Number(f))?f:Number(f),r=Array.from(ja(t.map(f=>n(f.Key)))),o=new Map(r.map((f,u)=>[f,u])),i=f=>(o.get(f)??0)%e,a=f=>Math.floor((o.get(f)??0)/e);return Na({marginLeft:60,width:1024,grid:!0,nice:!0,x:{label:"Distribution"},color:{type:"ordinal",legend:!0,scheme:"Spectral",label:"Counter"},y:{insetTop:16,domain:[0,1]},fx:{ticks:[]},fy:{ticks:[]},style:"background:transparent;",marks:[as(t,Dp({y:"proportion-facet",x:"x1",interval:.1,cumulative:1},{tip:!0,fill:f=>n(f.Key),x:f=>f.Value,fx:f=>i(n(f.Key)),fy:f=>a(n(f.Key))})),qo(r,{frameAnchor:"top",dy:3,fx:i,fy:a}),Nr({anchor:"bottom",tickSpacing:35}),Nr({anchor:"top",tickSpacing:35}),Uo()]})}})();
+}`)).call(Oo,n);for(let A of f){let{channels:N,values:L,facets:D}=p.get(A);if(l===void 0||A.facet==="super"){let tt=null;if(D&&(tt=D[0],tt=A.filter(tt,N,L),tt.length===0))continue;let Z=A.render(tt,h,L,y,w);if(Z==null)continue;T.appendChild(Z)}else{let tt;for(let Z of l){if(!(A.facetAnchor?.(l,F,Z)??!Z.empty))continue;let G=null;if(D){let at=c.has(A);if(G=D[at?Z.i:0],G=A.filter(G,N,L),G.length===0)continue;!at&&G===D[0]&&(G=Pg(G)),G.fx=Z.x,G.fy=Z.y,G.fi=Z.i}let Q=A.render(G,h,L,M,w);if(Q!=null){(tt??=mn(T).append("g")).append(()=>Q).datum(Z);for(let at of["aria-label","aria-description","aria-hidden","transform"])Q.hasAttribute(at)&&(tt.attr(at,Q.getAttribute(at)),Q.removeAttribute(at))}}tt?.selectChildren().attr("transform",_)}}let P=cy(m,w,t);if(r!=null||P.length>0){I=v.createElement("figure"),I.style.maxWidth="initial";for(let A of P)I.appendChild(A);if(I.appendChild(T),r!=null){let A=v.createElement("figcaption");A.appendChild(r?.ownerDocument?r:v.createTextNode(r)),I.appendChild(A)}}I.scale=nx(m),I.legend=ay(m,w,t);let S=c1();return S>0&&mn(T).append("text").attr("x",R).attr("y",20).attr("dy","-1em").attr("text-anchor","end").attr("font-family","initial").text("\u26A0\uFE0F").append("title").text(`${S.toLocaleString("en-US")} warning${S===1?"":"s"}. Please check the console.`),I}function D5({marks:t=[],...e}={}){return Na({...e,marks:[...t,this]})}Nt.prototype.plot=D5;function dy(t){return t.flat(1/0).filter(e=>e!=null).map(R5)}function R5(t){return typeof t.render=="function"?t:new kp(t)}var kp=class extends Nt{constructor(e){if(typeof e!="function")throw new TypeError("invalid mark; missing render function");super(),this.render=e}render(){}};function Np(t,e){for(let n in t)gy(t[n],e);return t}function gy(t,e){let{scale:n,transform:r=!0}=t;if(n==null||!r)return;let{type:o,percent:i,interval:a,transform:f=i?u=>u*100:Cd(a,o)}=e[n]??{};f!=null&&(t.value=pt(t.value,f),t.transform=!1)}function P5(t){for(let e in t)Fd(e,t[e])}function ka(t,e,n,r=$g){for(let{channels:o}of e.values())for(let i in o){let a=o[i],{scale:f}=a;if(f!=null&&r(f))if(f==="projection"){if(!g1(n)){let u=n.x?.domain===void 0,c=n.y?.domain===void 0;if(u||c){let[s,d]=y1(a);u&&Ep(t,"x",s),c&&Ep(t,"y",d)}}}else Ep(t,f,a)}return t}function Ep(t,e,n){let r=t.get(e);r!==void 0?r.push(n):t.set(e,[n])}function L5(t,e){if(t==null)return;let{x:n,y:r}=t;if(n==null&&r==null)return;let o=kt(t.data);if(o==null)throw new Error("missing facet data");let i={};n!=null&&(i.fx=Io(o,{value:n,scale:"fx"})),r!=null&&(i.fy=Io(o,{value:r,scale:"fy"})),Np(i,e);let a=Bc(o,i);return{channels:i,groups:a,data:t.data}}function py(t,e,n){if(t.facet===null||t.facet==="super")return;let{fx:r,fy:o}=t;if(r!=null||o!=null){let u=kt(t.data??r??o);if(u===void 0)throw new Error(`missing facet data in ${t.ariaLabel}`);if(u===null)return;let c={};return r!=null&&(c.fx=Io(u,{value:r,scale:"fx"})),o!=null&&(c.fy=Io(u,{value:o,scale:"fy"})),Np(c,n),{channels:c,groups:Bc(u,c)}}if(e===void 0)return;let{channels:i,groups:a,data:f}=e;if(t.facet!=="auto"||t.data===f)return{channels:i,groups:a};f.length>0&&(a.size>1||a.size===1&&i.fx&&i.fy&&[...a][0][1].size>1)&&kt(t.data)?.length===f.length&&an(`Warning: the ${t.ariaLabel} mark appears to use faceted data, but isn\u2019t faceted. The mark data has the same length as the facet data and the mark facet option is "auto", but the mark data and facet data are distinct. If this mark should be faceted, set the mark facet option to true; otherwise, suppress this warning by setting the mark facet option to false.`)}function O5(t,e={}){return Ir({...e,x:null,y:null},(n,r,o,i,a,f)=>f.getMarkState(t))}function F5(t){let e=[];for(let n of t){let r=n.tip;if(r){let i=(r==="x"?gx:r==="y"?xx:hx)(O5(n));i.title=null,e.push(ly(n.data,i))}}return e}function q5(t,e,n){let{projection:r,x:o={},y:i={},fx:a={},fy:f={},axis:u,grid:c,facet:s={},facet:{axis:d=u,grid:l}=s,x:{axis:p=u,grid:m=p===null?null:c}=o,y:{axis:h=u,grid:g=h===null?null:c}=i,fx:{axis:b=d,grid:x=b===null?null:l}=a,fy:{axis:M=d,grid:y=M===null?null:l}=f}=n;(r||!yo(o)&&!my("x",t))&&(p=m=null),(r||!yo(i)&&!my("y",t))&&(h=g=null),e.has("fx")||(b=x=null),e.has("fy")||(M=y=null),p===void 0&&(p=!rs(t,"x")),h===void 0&&(h=!rs(t,"y")),b===void 0&&(b=!rs(t,"fx")),M===void 0&&(M=!rs(t,"fy")),p===!0&&(p="bottom"),h===!0&&(h="left"),b===!0&&(b=p==="top"||p===null?"bottom":"top"),M===!0&&(M=h==="right"||h===null?"left":"right");let w=[];return ns(w,y,Sp,f),es(w,M,wp,"right","left",s,f),ns(w,x,_p,a),es(w,b,vp,"top","bottom",s,a),ns(w,g,Mp,i),es(w,h,Jc,"left","right",n,i),ns(w,m,Tp,o),es(w,p,Nr,"bottom","top",n,o),w}function es(t,e,n,r,o,i,a){if(!e)return;let f=z5(e);a=Y5(f?r:e,i,a);let{line:u}=a;(n===Jc||n===Nr)&&u&&!$r(u)&&t.push(Uo(B5(a))),t.push(n(a)),f&&t.push(n({...a,anchor:o,label:null}))}function ns(t,e,n,r){!e||$r(e)||t.push(n(U5(e,r)))}function z5(t){return/^\s*both\s*$/i.test(t)}function Y5(t,e,{line:n=e.line,ticks:r,tickSize:o,tickSpacing:i,tickPadding:a,tickFormat:f,tickRotate:u,fontVariant:c,ariaLabel:s,ariaDescription:d,label:l=e.label,labelAnchor:p,labelArrow:m=e.labelArrow,labelOffset:h}){return{anchor:t,line:n,ticks:r,tickSize:o,tickSpacing:i,tickPadding:a,tickFormat:f,tickRotate:u,fontVariant:c,ariaLabel:s,ariaDescription:d,label:l,labelAnchor:p,labelArrow:m,labelOffset:h}}function B5(t){let{anchor:e,line:n}=t;return{anchor:e,facetAnchor:e+"-empty",stroke:n===!0?void 0:n}}function U5(t,{stroke:e=vo(t)?t:void 0,ticks:n=X5(t)?t:void 0,tickSpacing:r,ariaLabel:o,ariaDescription:i}){return{stroke:e,ticks:n,tickSpacing:r,ariaLabel:o,ariaDescription:i}}function X5(t){switch(typeof t){case"number":return!0;case"string":return!vo(t)}return re(t)||typeof t?.range=="function"}function rs(t,e){let n=`${e}-axis `;return t.some(r=>r.ariaLabel?.startsWith(n))}function my(t,e){for(let n of e)for(let r in n.channels){let{scale:o}=n.channels[r];if(o===t||o==="projection")return!0}return!1}function W5(t,e){for(let n in t){let r=t[n],o=e[n];r.label===void 0&&o&&(r.label=o.label)}return t}function G5({fx:t,fy:e},n){let{marginTop:r,marginRight:o,marginBottom:i,marginLeft:a,width:f,height:u}=Fc(n),c=t&&hy(t),s=e&&hy(e);return{marginTop:e?s[0]:r,marginRight:t?f-c[1]:o,marginBottom:e?u-s[1]:i,marginLeft:t?c[0]:a,inset:{marginTop:n.marginTop,marginRight:n.marginRight,marginBottom:n.marginBottom,marginLeft:n.marginLeft},width:f,height:u}}function hy(t){let e=t.domain(),n=t(e[0]),r=t(e[e.length-1]);return r<n&&([n,r]=[r,n]),[n,r+t.bandwidth()]}function Dp(t={y:"count"},e={}){[t,e]=V5(t,e);let{x:n,y:r}=e;return H5(j5(n,e,wt),null,null,r,t,Ea(e))}function H5(t,e,n,r,{data:o=Pd,filter:i=Ma,sort:a,reverse:f,...u}={},c={}){t=xy(t),e=xy(e),u=K5(u,c),o=vy(o,wt),a=a==null?void 0:by("sort",a,c),i=i==null?void 0:wy("filter",i,c),n!=null&&Sa(u,"x","x1","x2")&&(n=null),r!=null&&Sa(u,"y","y1","y2")&&(r=null);let[s,d]=Te(t),[l,p]=Te(t),[m,h]=Te(e),[g,b]=Te(e),[x,M]=n!=null?[n,"x"]:r!=null?[r,"y"]:[],[y,w]=Te(x),{x:v,y:T,z:I,fill:E,stroke:F,x1:_,x2:R,y1:O,y2:P,domain:S,cumulative:A,thresholds:N,interval:L,...D}=c,[tt,Z]=Te(I),[G]=ie(E),[Q]=ie(F),[at,Ut]=Te(G),[Fe,H]=Te(Q);return{..."z"in c&&{z:tt||I},..."fill"in c&&{fill:at||E},..."stroke"in c&&{stroke:Fe||F},...$o(D,(X,$,q)=>{let z=va(gt(X,x),q?.[M]),C=gt(X,I),j=gt(X,G),J=gt(X,Q),ot=t1(u,{z:C,fill:j,stroke:J}),lt=[],Xt=[],Zn=z&&w([]),Ra=C&&Z([]),Pa=j&&Ut([]),La=J&&H([]),Oa=t&&d([]),fs=t&&p([]),Lp=e&&h([]),ky=e&&b([]),Ny=e3(t?.(X),e?.(X)),Dy=0;for(let Dr of u)Dr.initialize(X);a&&a.initialize(X),i&&i.initialize(X);for(let Dr of $){let Op=[];for(let Xo of u)Xo.scope("facet",Dr);a&&a.scope("facet",Dr),i&&i.scope("facet",Dr);for(let[Xo,Ry]of Rd(Dr,ot))for(let[Py,Ly]of Rd(Ry,z))for(let[Kn,Qn]of Ny(Ly))if(!(i&&!i.reduce(Kn,Qn))){Op.push(Dy++),Xt.push(o.reduceIndex(Kn,X,Qn)),z&&Zn.push(Py),C&&Ra.push(ot===C?Xo:C[Kn[0]]),j&&Pa.push(ot===j?Xo:j[Kn[0]]),J&&La.push(ot===J?Xo:J[Kn[0]]),Oa&&(Oa.push(Qn.x1),fs.push(Qn.x2)),Lp&&(Lp.push(Qn.y1),ky.push(Qn.y2));for(let Oy of u)Oy.reduce(Kn,Qn);a&&a.reduce(Kn)}lt.push(Op)}return e1(lt,a,f),{data:Xt,facets:lt}}),...!Sa(u,"x")&&(s?{x1:s,x2:l,x:wa(s,l)}:{x:v,x1:_,x2:R}),...!Sa(u,"y")&&(m?{y1:m,y2:g,y:wa(m,g)}:{y:T,y1:O,y2:P}),...y&&{[M]:y},...Object.fromEntries(u.map(({name:X,output:$})=>[X,$]))}}function V5({cumulative:t,domain:e,thresholds:n,interval:r,...o},i){return[o,{cumulative:t,domain:e,thresholds:n,interval:r,...i}]}function j5(t,{cumulative:e,domain:n,thresholds:r,interval:o},i){return t={...on(t)},t.domain===void 0&&(t.domain=n),t.cumulative===void 0&&(t.cumulative=e),t.thresholds===void 0&&(t.thresholds=r),t.interval===void 0&&(t.interval=o),t.value===void 0&&(t.value=i),t.thresholds=Z5(t.thresholds,t.interval),t}function xy(t){if(t==null)return;let{value:e,cumulative:n,domain:r=Ct,thresholds:o}=t,i=a=>{let f=gt(a,e),u;if(Yt(f)||J5(o)){f=pt(f,Sd,Float64Array);let[s,d]=typeof r=="function"?r(f):r,l=typeof o=="function"&&!Da(o)?o(f,s,d):o;typeof l=="number"&&(l=Gi(s,d,l)),Da(l)&&(r===Ct&&(s=l.floor(s),d=l.offset(l.floor(d))),l=l.range(s,l.offset(d))),u=l}else{f=Tr(f);let[s,d]=typeof r=="function"?r(f):r,l=typeof o=="function"&&!Da(o)?o(f,s,d):o;if(typeof l=="number")if(r===Ct){let p=tr(s,d,l);if(isFinite(p))if(p>0){let m=Math.round(s/p),h=Math.round(d/p);m*p<=s||--m,h*p>d||++h;let g=h-m+1;l=new Float64Array(g);for(let b=0;b<g;++b)l[b]=(m+b)*p}else if(p<0){p=-p;let m=Math.round(s*p),h=Math.round(d*p);m/p<=s||--m,h/p>d||++h;let g=h-m+1;l=new Float64Array(g);for(let b=0;b<g;++b)l[b]=(m+b)/p}else l=[s];else l=[s]}else l=$e(s,d,l);else Da(l)&&(r===Ct&&(s=l.floor(s),d=l.offset(l.floor(d))),l=l.range(s,l.offset(d)));u=l}let c=[];if(u.length===1)c.push([u[0],u[0]]);else for(let s=1;s<u.length;++s)c.push([u[s-1],u[s]]);return c.bin=(n<0?r3:n>0?n3:Rp)(c,u,f),c};return i.label=Pe(e),i}function Z5(t,e,n=yy){if(t===void 0)return e===void 0?n:rn(e);if(typeof t=="string"){switch(t.toLowerCase()){case"freedman-diaconis":return Wa;case"scott":return Zo;case"sturges":return Ya;case"auto":return yy}return $c(t)}return t}function K5(t,e){return Jg(t,e,by)}function by(t,e,n){return Nd(t,e,n,wy)}function wy(t,e,n){return Dd(t,e,n,vy)}function vy(t,e){return Ta(t,e,Q5)}function Q5(t){switch(`${t}`.toLowerCase()){case"x":return o3;case"x1":return a3;case"x2":return f3;case"y":return i3;case"y1":return u3;case"y2":return c3}throw new Error(`invalid bin reduce: ${t}`)}function yy(t,e,n){return Math.min(200,Zo(t,e,n))}function J5(t){return t3(t)||re(t)&&Yt(t)}function t3(t){return Da(t)&&typeof t=="function"&&t()instanceof Date}function Da(t){return typeof t?.range=="function"}function e3(t,e){return t&&e?function*(n){let r=t.bin(n);for(let[o,[i,a]]of t.entries()){let f=e.bin(r[o]);for(let[u,[c,s]]of e.entries())yield[f[u],{x1:i,y1:c,x2:a,y2:s}]}}:t?function*(n){let r=t.bin(n);for(let[o,[i,a]]of t.entries())yield[r[o],{x1:i,x2:a}]}:function*(n){let r=e.bin(n);for(let[o,[i,a]]of e.entries())yield[r[o],{y1:i,y2:a}]}}function Rp(t,e,n){return e=Tr(e),r=>{let o=t.map(()=>[]);for(let i of r)o[un(e,n[i])-1]?.push(i);return o}}function n3(t,e,n){let r=Rp(t,e,n);return o=>{let i=r(o);for(let a=1,f=i.length;a<f;++a){let u=i[a-1],c=i[a];for(let s of u)c.push(s)}return i}}function r3(t,e,n){let r=Rp(t,e,n);return o=>{let i=r(o);for(let a=i.length-2;a>=0;--a){let f=i[a+1],u=i[a];for(let c of f)u.push(c)}return i}}function My(t,e){let n=(+t+ +e)/2;return t instanceof Date?new Date(n):n}var o3={reduceIndex(t,e,{x1:n,x2:r}){return My(n,r)}},i3={reduceIndex(t,e,{y1:n,y2:r}){return My(n,r)}},a3={reduceIndex(t,e,{x1:n}){return n}},f3={reduceIndex(t,e,{x2:n}){return n}},u3={reduceIndex(t,e,{y1:n}){return n}},c3={reduceIndex(t,e,{y2:n}){return n}};function Sy(t={}){return Td(t)?t:{...t,y:wt}}function s3(t={},e={}){arguments.length===1&&([t,e]=l3(t));let{x1:n,x:r=n,y:o,...i}=e,[a,f,u,c]=p3(r,o,"x","y",t,i);return{...a,x1:n,x:f,y1:u,y2:c,y:wa(u,c)}}function Cy({y:t,y1:e,y2:n,...r}={}){return r=Ia(r,"x"),e===void 0&&n===void 0?s3({y:t,...r}):([e,n]=Dg(t,e,n),{...r,y1:e,y2:n})}function l3(t){let{offset:e,order:n,reverse:r,...o}=t;return[{offset:e,order:n,reverse:r},o]}var d3={length:!0};function p3(t,e=Ag,n,r,{offset:o,order:i,reverse:a},f){let u=Rg(f),[c,s]=Te(t),[d,l]=wo(e),[p,m]=wo(e);return d.hint=p.hint=d3,o=m3(o),i=x3(i,o,r),[$o(f,(h,g,b)=>{let x=t==null?void 0:s(va(gt(h,t),b?.[n])),M=gt(h,e,Float64Array),y=gt(h,u),w=i&&i(h,x,M,y),v=h.length,T=l(new Float64Array(v)),I=m(new Float64Array(v)),E=[];for(let F of g){let _=x?Array.from(cn(F,R=>x[R]).values()):[F];if(w)for(let R of _)R.sort(w);for(let R of _){let O=0,P=0;a&&R.reverse();for(let S of R){let A=M[S];A<0?O=I[S]=(T[S]=O)+A:A>0?P=I[S]=(T[S]=P)+A:I[S]=T[S]=P}}E.push(_)}return o&&o(E,T,I,y),{data:h,facets:g}}),c,d,p]}function m3(t){if(t!=null){if(typeof t=="function")return t;switch(`${t}`.toLowerCase()){case"expand":case"normalize":return h3;case"center":case"silhouette":return g3;case"wiggle":return $y}throw new Error(`unknown offset: ${t}`)}}function Ay(t,e){let n=0,r=0;for(let o of t){let i=e[o];i<n&&(n=i),i>r&&(r=i)}return[n,r]}function h3(t,e,n){for(let r of t)for(let o of r){let[i,a]=Ay(o,n);for(let f of o){let u=1/(a-i||1);e[f]=u*(e[f]-i),n[f]=u*(n[f]-i)}}}function g3(t,e,n){for(let r of t){for(let o of r){let[i,a]=Ay(o,n);for(let f of o){let u=(a+i)/2;e[f]-=u,n[f]-=u}}Iy(r,e,n)}Ey(t,e,n)}function $y(t,e,n,r){for(let o of t){let i=new Qt,a=0;for(let f of o){let u=-1,c=f.map(p=>Math.abs(n[p]-e[p])),s=f.map(p=>{u=r?r[p]:++u;let m=n[p]-e[p],h=i.has(u)?m-i.get(u):0;return i.set(u,m),h}),d=[0,...qa(s)];for(let p of f)e[p]+=a,n[p]+=a;let l=fe(c);l&&(a-=fe(c,(p,m)=>(s[m]/2+d[m])*p)/l)}Iy(o,e,n)}Ey(t,e,n)}function Iy(t,e,n){let r=Jt(t,o=>Jt(o,i=>e[i]));for(let o of t)for(let i of o)e[i]-=r,n[i]-=r}function Ey(t,e,n){let r=t.length;if(r===1)return;let o=t.map(f=>f.flat()),i=o.map(f=>(Jt(f,u=>e[u])+Wt(f,u=>n[u]))/2),a=Jt(i);for(let f=0;f<r;f++){let u=a-i[f];for(let c of o[f])e[c]+=u,n[c]+=u}}function x3(t,e,n){if(t===void 0&&e===$y)return Ty(Kt);if(t!=null){if(typeof t=="string"){let r=t.startsWith("-"),o=r?Mr:Kt;switch((r?t.slice(1):t).toLowerCase()){case"value":case n:return y3(o);case"z":return b3(o);case"sum":return w3(o);case"appearance":return v3(o);case"inside-out":return Ty(o)}return _y(vd(t))}if(typeof t=="function")return(t.length===1?_y:M3)(t);if(Array.isArray(t))return S3(t);throw new Error(`invalid order: ${t}`)}}function y3(t){return(e,n,r)=>(o,i)=>t(r[o],r[i])}function b3(t){return(e,n,r,o)=>(i,a)=>t(o[i],o[a])}function w3(t){return os(t,(e,n,r,o)=>Lr(ne(e),i=>fe(i,a=>r[a]),i=>o[i]))}function v3(t){return os(t,(e,n,r,o)=>Lr(ne(e),i=>n[jo(i,a=>r[a])],i=>o[i]))}function Ty(t){return os(t,(e,n,r,o)=>{let i=ne(e),a=Lr(i,d=>n[jo(d,l=>r[l])],d=>o[d]),f=Ae(i,d=>fe(d,l=>r[l]),d=>o[d]),u=[],c=[],s=0;for(let d of a)s<0?(s+=f.get(d),u.push(d)):(s-=f.get(d),c.push(d));return c.reverse().concat(u)})}function _y(t){return e=>{let n=gt(e,t);return(r,o)=>Kt(n[r],n[o])}}function M3(t){return e=>(n,r)=>t(e[n],e[r])}function S3(t){return os(Kt,()=>t)}function os(t,e){return(n,r,o,i)=>{if(!i)throw new Error("missing channel: z");let a=new Qt(e(n,r,o,i).map((f,u)=>[f,u]));return(f,u)=>t(a.get(i[f]),a.get(i[u]))}}var Pp=class extends Nt{constructor(e,n,r={},o){super(e,n,r,o);let{inset:i=0,insetTop:a=i,insetRight:f=i,insetBottom:u=i,insetLeft:c=i,rx:s,ry:d}=r;this.insetTop=ct(a),this.insetRight=ct(f),this.insetBottom=ct(u),this.insetLeft=ct(c),this.rx=St(s,"auto"),this.ry=St(d,"auto")}render(e,n,r,o,i){let{rx:a,ry:f}=this;return yt("svg:g",i).call(me,this,o,i).call(this._transform,this,n).call(u=>u.selectAll().data(e).enter().append("rect").call(he,this).attr("x",this._x(n,r,o)).attr("width",this._width(n,r,o)).attr("y",this._y(n,r,o)).attr("height",this._height(n,r,o)).call(et,"rx",a).call(et,"ry",f).call(Oe,this,r)).node()}_x(e,{x:n},{marginLeft:r}){let{insetLeft:o}=this;return n?i=>n[i]+o:r+o}_y(e,{y:n},{marginTop:r}){let{insetTop:o}=this;return n?i=>n[i]+o:r+o}_width({x:e},{x:n},{marginRight:r,marginLeft:o,width:i}){let{insetLeft:a,insetRight:f}=this,u=n&&e?e.bandwidth():i-r-o;return Math.max(0,u-a-f)}_height({y:e},{y:n},{marginTop:r,marginBottom:o,height:i}){let{insetTop:a,insetBottom:f}=this,u=n&&e?e.bandwidth():i-r-o;return Math.max(0,u-a-f)}},T3={ariaLabel:"bar"};var is=class extends Pp{constructor(e,n={}){let{x:r,y1:o,y2:i}=n;super(e,{y1:{value:o,scale:"y"},y2:{value:i,scale:"y"},x:{value:r,scale:"x",type:"band",optional:!0}},n,T3)}_transform(e,n,{y:r}){e.call(ge,n,{y:r},0,0)}_y({y:e},{y1:n,y2:r},{marginTop:o}){let{insetTop:i}=this;return Gn(e)?o+i:a=>Math.min(n[a],r[a])+i}_height({y:e},{y1:n,y2:r},{marginTop:o,marginBottom:i,height:a}){let{insetTop:f,insetBottom:u}=this;return Gn(e)?a-o-i-f-u:c=>Math.max(0,Math.abs(r[c]-n[c])-f-u)}};function as(t,e={}){return Ng(e)||(e={...e,x:Ic,y2:wt}),new is(t,Cy(Hc(Sy(e))))}for(let t of Page.Charts.Programs)for(let e of t.Charts)if(e)switch(e.Type){case"partition":document.querySelector(`[data-chart-id="${e.ID}"]`)?.append(C3(e));break;case"histogram":document.querySelector(`[data-chart-id="${e.ID}"]`)?.append(A3(e));break;default:console.error("unknown chart type");break}function C3({Data:t,Name:e}){return t??=[],Na({color:{type:"ordinal",scheme:"Spectral"},nice:!0,x:{label:e,labelOffset:Number.MAX_SAFE_INTEGER,tickRotate:45,domain:t.map(n=>n.Key)},y:{label:"Frequency",domain:[0,1]},width:1024,style:"overflow:visible;background:transparent;margin-bottom:3rem;",marks:[as(t,{tip:!0,fill:n=>isNaN(Number(n.Key))?n.Key:Number(n.Key),x:n=>n.Key,y:n=>n.Value}),Uo()]})}function A3({Data:t}){t??=[];let e=3,n=f=>isNaN(Number(f))?f:Number(f),r=Array.from(ja(t.map(f=>n(f.Key)))),o=new Map(r.map((f,u)=>[f,u])),i=f=>(o.get(f)??0)%e,a=f=>Math.floor((o.get(f)??0)/e);return Na({marginLeft:60,width:1024,grid:!0,nice:!0,x:{label:"Distribution"},color:{type:"ordinal",legend:!0,scheme:"Spectral",label:"Counter"},y:{insetTop:16,domain:[0,1]},fx:{ticks:[]},fy:{ticks:[]},style:"background:transparent;",marks:[as(t,Dp({y:"proportion-facet",x:"x1",interval:.1,cumulative:1},{tip:!0,fill:f=>n(f.Key),x:f=>f.Value,fx:f=>i(n(f.Key)),fy:f=>a(n(f.Key))})),qo(r,{frameAnchor:"top",dy:3,fx:i,fy:a}),Nr({anchor:"bottom",tickSpacing:35}),Nr({anchor:"top",tickSpacing:35}),Uo()]})}})();
 /**
  * @license
  * Copyright 2023 The Go Authors. All rights reserved.
diff --git a/internal/content/telemetrygodev/static/charts.min.js.map b/internal/content/telemetrygodev/static/charts.min.js.map
index 2c14194..e967f6e 100644
--- a/internal/content/telemetrygodev/static/charts.min.js.map
+++ b/internal/content/telemetrygodev/static/charts.min.js.map
@@ -1,7 +1,7 @@
 {
   "version": 3,
   "sources": ["../../../../node_modules/d3-array/src/ascending.js", "../../../../node_modules/d3-array/src/descending.js", "../../../../node_modules/d3-array/src/bisector.js", "../../../../node_modules/d3-array/src/number.js", "../../../../node_modules/d3-array/src/bisect.js", "../../../../node_modules/d3-array/src/count.js", "../../../../node_modules/d3-array/src/cross.js", "../../../../node_modules/d3-array/src/cumsum.js", "../../../../node_modules/d3-array/src/variance.js", "../../../../node_modules/d3-array/src/deviation.js", "../../../../node_modules/d3-array/src/extent.js", "../../../../node_modules/d3-array/src/fsum.js", "../../../../node_modules/internmap/src/index.js", "../../../../node_modules/d3-array/src/identity.js", "../../../../node_modules/d3-array/src/group.js", "../../../../node_modules/d3-array/src/permute.js", "../../../../node_modules/d3-array/src/sort.js", "../../../../node_modules/d3-array/src/groupSort.js", "../../../../node_modules/d3-array/src/ticks.js", "../../../../node_modules/d3-array/src/threshold/sturges.js", "../../../../node_modules/d3-array/src/max.js", "../../../../node_modules/d3-array/src/maxIndex.js", "../../../../node_modules/d3-array/src/min.js", "../../../../node_modules/d3-array/src/minIndex.js", "../../../../node_modules/d3-array/src/quickselect.js", "../../../../node_modules/d3-array/src/greatest.js", "../../../../node_modules/d3-array/src/quantile.js", "../../../../node_modules/d3-array/src/threshold/freedmanDiaconis.js", "../../../../node_modules/d3-array/src/threshold/scott.js", "../../../../node_modules/d3-array/src/mean.js", "../../../../node_modules/d3-array/src/median.js", "../../../../node_modules/d3-array/src/merge.js", "../../../../node_modules/d3-array/src/mode.js", "../../../../node_modules/d3-array/src/pairs.js", "../../../../node_modules/d3-array/src/range.js", "../../../../node_modules/d3-array/src/sum.js", "../../../../node_modules/d3-array/src/reverse.js", "../../../../node_modules/d3-array/src/union.js", "../../../../node_modules/d3-axis/src/identity.js", "../../../../node_modules/d3-axis/src/axis.js", "../../../../node_modules/d3-dispatch/src/dispatch.js", "../../../../node_modules/d3-selection/src/namespaces.js", "../../../../node_modules/d3-selection/src/namespace.js", "../../../../node_modules/d3-selection/src/creator.js", "../../../../node_modules/d3-selection/src/selector.js", "../../../../node_modules/d3-selection/src/selection/select.js", "../../../../node_modules/d3-selection/src/array.js", "../../../../node_modules/d3-selection/src/selectorAll.js", "../../../../node_modules/d3-selection/src/selection/selectAll.js", "../../../../node_modules/d3-selection/src/matcher.js", "../../../../node_modules/d3-selection/src/selection/selectChild.js", "../../../../node_modules/d3-selection/src/selection/selectChildren.js", "../../../../node_modules/d3-selection/src/selection/filter.js", "../../../../node_modules/d3-selection/src/selection/sparse.js", "../../../../node_modules/d3-selection/src/selection/enter.js", "../../../../node_modules/d3-selection/src/constant.js", "../../../../node_modules/d3-selection/src/selection/data.js", "../../../../node_modules/d3-selection/src/selection/exit.js", "../../../../node_modules/d3-selection/src/selection/join.js", "../../../../node_modules/d3-selection/src/selection/merge.js", "../../../../node_modules/d3-selection/src/selection/order.js", "../../../../node_modules/d3-selection/src/selection/sort.js", "../../../../node_modules/d3-selection/src/selection/call.js", "../../../../node_modules/d3-selection/src/selection/nodes.js", "../../../../node_modules/d3-selection/src/selection/node.js", "../../../../node_modules/d3-selection/src/selection/size.js", "../../../../node_modules/d3-selection/src/selection/empty.js", "../../../../node_modules/d3-selection/src/selection/each.js", "../../../../node_modules/d3-selection/src/selection/attr.js", "../../../../node_modules/d3-selection/src/window.js", "../../../../node_modules/d3-selection/src/selection/style.js", "../../../../node_modules/d3-selection/src/selection/property.js", "../../../../node_modules/d3-selection/src/selection/classed.js", "../../../../node_modules/d3-selection/src/selection/text.js", "../../../../node_modules/d3-selection/src/selection/html.js", "../../../../node_modules/d3-selection/src/selection/raise.js", "../../../../node_modules/d3-selection/src/selection/lower.js", "../../../../node_modules/d3-selection/src/selection/append.js", "../../../../node_modules/d3-selection/src/selection/insert.js", "../../../../node_modules/d3-selection/src/selection/remove.js", "../../../../node_modules/d3-selection/src/selection/clone.js", "../../../../node_modules/d3-selection/src/selection/datum.js", "../../../../node_modules/d3-selection/src/selection/on.js", "../../../../node_modules/d3-selection/src/selection/dispatch.js", "../../../../node_modules/d3-selection/src/selection/iterator.js", "../../../../node_modules/d3-selection/src/selection/index.js", "../../../../node_modules/d3-selection/src/select.js", "../../../../node_modules/d3-selection/src/sourceEvent.js", "../../../../node_modules/d3-selection/src/pointer.js", "../../../../node_modules/d3-color/src/define.js", "../../../../node_modules/d3-color/src/color.js", "../../../../node_modules/d3-color/src/math.js", "../../../../node_modules/d3-color/src/lab.js", "../../../../node_modules/d3-color/src/cubehelix.js", "../../../../node_modules/d3-interpolate/src/basis.js", "../../../../node_modules/d3-interpolate/src/basisClosed.js", "../../../../node_modules/d3-interpolate/src/constant.js", "../../../../node_modules/d3-interpolate/src/color.js", "../../../../node_modules/d3-interpolate/src/rgb.js", "../../../../node_modules/d3-interpolate/src/numberArray.js", "../../../../node_modules/d3-interpolate/src/array.js", "../../../../node_modules/d3-interpolate/src/date.js", "../../../../node_modules/d3-interpolate/src/number.js", "../../../../node_modules/d3-interpolate/src/object.js", "../../../../node_modules/d3-interpolate/src/string.js", "../../../../node_modules/d3-interpolate/src/value.js", "../../../../node_modules/d3-interpolate/src/round.js", "../../../../node_modules/d3-interpolate/src/transform/decompose.js", "../../../../node_modules/d3-interpolate/src/transform/parse.js", "../../../../node_modules/d3-interpolate/src/transform/index.js", "../../../../node_modules/d3-interpolate/src/hsl.js", "../../../../node_modules/d3-interpolate/src/lab.js", "../../../../node_modules/d3-interpolate/src/hcl.js", "../../../../node_modules/d3-interpolate/src/cubehelix.js", "../../../../node_modules/d3-interpolate/src/piecewise.js", "../../../../node_modules/d3-interpolate/src/quantize.js", "../../../../node_modules/d3-timer/src/timer.js", "../../../../node_modules/d3-timer/src/timeout.js", "../../../../node_modules/d3-transition/src/transition/schedule.js", "../../../../node_modules/d3-transition/src/interrupt.js", "../../../../node_modules/d3-transition/src/selection/interrupt.js", "../../../../node_modules/d3-transition/src/transition/tween.js", "../../../../node_modules/d3-transition/src/transition/interpolate.js", "../../../../node_modules/d3-transition/src/transition/attr.js", "../../../../node_modules/d3-transition/src/transition/attrTween.js", "../../../../node_modules/d3-transition/src/transition/delay.js", "../../../../node_modules/d3-transition/src/transition/duration.js", "../../../../node_modules/d3-transition/src/transition/ease.js", "../../../../node_modules/d3-transition/src/transition/easeVarying.js", "../../../../node_modules/d3-transition/src/transition/filter.js", "../../../../node_modules/d3-transition/src/transition/merge.js", "../../../../node_modules/d3-transition/src/transition/on.js", "../../../../node_modules/d3-transition/src/transition/remove.js", "../../../../node_modules/d3-transition/src/transition/select.js", "../../../../node_modules/d3-transition/src/transition/selectAll.js", "../../../../node_modules/d3-transition/src/transition/selection.js", "../../../../node_modules/d3-transition/src/transition/style.js", "../../../../node_modules/d3-transition/src/transition/styleTween.js", "../../../../node_modules/d3-transition/src/transition/text.js", "../../../../node_modules/d3-transition/src/transition/textTween.js", "../../../../node_modules/d3-transition/src/transition/transition.js", "../../../../node_modules/d3-transition/src/transition/end.js", "../../../../node_modules/d3-transition/src/transition/index.js", "../../../../node_modules/d3-ease/src/cubic.js", "../../../../node_modules/d3-transition/src/selection/transition.js", "../../../../node_modules/d3-transition/src/selection/index.js", "../../../../node_modules/d3-brush/src/brush.js", "../../../../node_modules/d3-path/src/path.js", "../../../../node_modules/d3-format/src/formatDecimal.js", "../../../../node_modules/d3-format/src/exponent.js", "../../../../node_modules/d3-format/src/formatGroup.js", "../../../../node_modules/d3-format/src/formatNumerals.js", "../../../../node_modules/d3-format/src/formatSpecifier.js", "../../../../node_modules/d3-format/src/formatTrim.js", "../../../../node_modules/d3-format/src/formatPrefixAuto.js", "../../../../node_modules/d3-format/src/formatRounded.js", "../../../../node_modules/d3-format/src/formatTypes.js", "../../../../node_modules/d3-format/src/identity.js", "../../../../node_modules/d3-format/src/locale.js", "../../../../node_modules/d3-format/src/defaultLocale.js", "../../../../node_modules/d3-format/src/precisionFixed.js", "../../../../node_modules/d3-format/src/precisionPrefix.js", "../../../../node_modules/d3-format/src/precisionRound.js", "../../../../node_modules/d3-geo/src/math.js", "../../../../node_modules/d3-geo/src/noop.js", "../../../../node_modules/d3-geo/src/stream.js", "../../../../node_modules/d3-geo/src/cartesian.js", "../../../../node_modules/d3-geo/src/compose.js", "../../../../node_modules/d3-geo/src/rotation.js", "../../../../node_modules/d3-geo/src/circle.js", "../../../../node_modules/d3-geo/src/clip/buffer.js", "../../../../node_modules/d3-geo/src/pointEqual.js", "../../../../node_modules/d3-geo/src/clip/rejoin.js", "../../../../node_modules/d3-geo/src/polygonContains.js", "../../../../node_modules/d3-geo/src/clip/index.js", "../../../../node_modules/d3-geo/src/clip/antimeridian.js", "../../../../node_modules/d3-geo/src/clip/circle.js", "../../../../node_modules/d3-geo/src/clip/line.js", "../../../../node_modules/d3-geo/src/clip/rectangle.js", "../../../../node_modules/d3-geo/src/identity.js", "../../../../node_modules/d3-geo/src/path/area.js", "../../../../node_modules/d3-geo/src/path/bounds.js", "../../../../node_modules/d3-geo/src/path/centroid.js", "../../../../node_modules/d3-geo/src/path/context.js", "../../../../node_modules/d3-geo/src/path/measure.js", "../../../../node_modules/d3-geo/src/path/string.js", "../../../../node_modules/d3-geo/src/path/index.js", "../../../../node_modules/d3-geo/src/transform.js", "../../../../node_modules/d3-geo/src/projection/fit.js", "../../../../node_modules/d3-geo/src/projection/resample.js", "../../../../node_modules/d3-geo/src/projection/index.js", "../../../../node_modules/d3-geo/src/projection/conic.js", "../../../../node_modules/d3-geo/src/projection/cylindricalEqualArea.js", "../../../../node_modules/d3-geo/src/projection/conicEqualArea.js", "../../../../node_modules/d3-geo/src/projection/albers.js", "../../../../node_modules/d3-geo/src/projection/albersUsa.js", "../../../../node_modules/d3-geo/src/projection/azimuthal.js", "../../../../node_modules/d3-geo/src/projection/azimuthalEqualArea.js", "../../../../node_modules/d3-geo/src/projection/azimuthalEquidistant.js", "../../../../node_modules/d3-geo/src/projection/mercator.js", "../../../../node_modules/d3-geo/src/projection/conicConformal.js", "../../../../node_modules/d3-geo/src/projection/equirectangular.js", "../../../../node_modules/d3-geo/src/projection/conicEquidistant.js", "../../../../node_modules/d3-geo/src/projection/equalEarth.js", "../../../../node_modules/d3-geo/src/projection/gnomonic.js", "../../../../node_modules/d3-geo/src/projection/orthographic.js", "../../../../node_modules/d3-geo/src/projection/stereographic.js", "../../../../node_modules/d3-geo/src/projection/transverseMercator.js", "../../../../node_modules/d3-scale/src/init.js", "../../../../node_modules/d3-scale/src/ordinal.js", "../../../../node_modules/d3-scale/src/band.js", "../../../../node_modules/d3-scale/src/constant.js", "../../../../node_modules/d3-scale/src/number.js", "../../../../node_modules/d3-scale/src/continuous.js", "../../../../node_modules/d3-scale/src/tickFormat.js", "../../../../node_modules/d3-scale/src/linear.js", "../../../../node_modules/d3-scale/src/identity.js", "../../../../node_modules/d3-scale/src/nice.js", "../../../../node_modules/d3-scale/src/log.js", "../../../../node_modules/d3-scale/src/symlog.js", "../../../../node_modules/d3-scale/src/pow.js", "../../../../node_modules/d3-scale/src/quantile.js", "../../../../node_modules/d3-scale/src/threshold.js", "../../../../node_modules/d3-time/src/interval.js", "../../../../node_modules/d3-time/src/millisecond.js", "../../../../node_modules/d3-time/src/second.js", "../../../../node_modules/d3-time/src/minute.js", "../../../../node_modules/d3-time/src/hour.js", "../../../../node_modules/d3-time/src/day.js", "../../../../node_modules/d3-time/src/week.js", "../../../../node_modules/d3-time/src/month.js", "../../../../node_modules/d3-time/src/year.js", "../../../../node_modules/d3-time/src/ticks.js", "../../../../node_modules/d3-time-format/src/locale.js", "../../../../node_modules/d3-time-format/src/defaultLocale.js", "../../../../node_modules/d3-scale/src/time.js", "../../../../node_modules/d3-scale/src/utcTime.js", "../../../../node_modules/d3-scale/src/sequential.js", "../../../../node_modules/d3-scale/src/diverging.js", "../../../../node_modules/d3-scale-chromatic/src/colors.js", "../../../../node_modules/d3-scale-chromatic/src/categorical/category10.js", "../../../../node_modules/d3-scale-chromatic/src/categorical/Accent.js", "../../../../node_modules/d3-scale-chromatic/src/categorical/Dark2.js", "../../../../node_modules/d3-scale-chromatic/src/categorical/Paired.js", "../../../../node_modules/d3-scale-chromatic/src/categorical/Pastel1.js", "../../../../node_modules/d3-scale-chromatic/src/categorical/Pastel2.js", "../../../../node_modules/d3-scale-chromatic/src/categorical/Set1.js", "../../../../node_modules/d3-scale-chromatic/src/categorical/Set2.js", "../../../../node_modules/d3-scale-chromatic/src/categorical/Set3.js", "../../../../node_modules/d3-scale-chromatic/src/categorical/Tableau10.js", "../../../../node_modules/d3-scale-chromatic/src/ramp.js", "../../../../node_modules/d3-scale-chromatic/src/diverging/BrBG.js", "../../../../node_modules/d3-scale-chromatic/src/diverging/PRGn.js", "../../../../node_modules/d3-scale-chromatic/src/diverging/PiYG.js", "../../../../node_modules/d3-scale-chromatic/src/diverging/PuOr.js", "../../../../node_modules/d3-scale-chromatic/src/diverging/RdBu.js", "../../../../node_modules/d3-scale-chromatic/src/diverging/RdGy.js", "../../../../node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js", "../../../../node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js", "../../../../node_modules/d3-scale-chromatic/src/diverging/Spectral.js", "../../../../node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js", "../../../../node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js", "../../../../node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js", "../../../../node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js", "../../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js", "../../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js", "../../../../node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js", "../../../../node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js", "../../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js", "../../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js", "../../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js", "../../../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js", "../../../../node_modules/d3-scale-chromatic/src/sequential-single/Blues.js", "../../../../node_modules/d3-scale-chromatic/src/sequential-single/Greens.js", "../../../../node_modules/d3-scale-chromatic/src/sequential-single/Greys.js", "../../../../node_modules/d3-scale-chromatic/src/sequential-single/Purples.js", "../../../../node_modules/d3-scale-chromatic/src/sequential-single/Reds.js", "../../../../node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js", "../../../../node_modules/d3-scale-chromatic/src/sequential-multi/cividis.js", "../../../../node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js", "../../../../node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js", "../../../../node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js", "../../../../node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js", "../../../../node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js", "../../../../node_modules/d3-shape/src/math.js", "../../../../node_modules/d3-shape/src/symbol/asterisk.js", "../../../../node_modules/d3-shape/src/symbol/circle.js", "../../../../node_modules/d3-shape/src/symbol/cross.js", "../../../../node_modules/d3-shape/src/symbol/diamond.js", "../../../../node_modules/d3-shape/src/symbol/diamond2.js", "../../../../node_modules/d3-shape/src/symbol/plus.js", "../../../../node_modules/d3-shape/src/symbol/square.js", "../../../../node_modules/d3-shape/src/symbol/square2.js", "../../../../node_modules/d3-shape/src/symbol/star.js", "../../../../node_modules/d3-shape/src/symbol/triangle.js", "../../../../node_modules/d3-shape/src/symbol/triangle2.js", "../../../../node_modules/d3-shape/src/symbol/wye.js", "../../../../node_modules/d3-shape/src/symbol/times.js", "../../../../node_modules/d3-shape/src/symbol.js", "../../../../node_modules/d3-zoom/src/transform.js", "../../../../node_modules/@observablehq/plot/src/defined.js", "../../../../node_modules/isoformat/src/format.js", "../../../../node_modules/isoformat/src/parse.js", "../../../../node_modules/@observablehq/plot/src/time.js", "../../../../node_modules/@observablehq/plot/src/options.js", "../../../../node_modules/@observablehq/plot/src/scales/index.js", "../../../../node_modules/@observablehq/plot/src/symbol.js", "../../../../node_modules/@observablehq/plot/src/transforms/basic.js", "../../../../node_modules/@observablehq/plot/src/transforms/group.js", "../../../../node_modules/@observablehq/plot/src/channel.js", "../../../../node_modules/@observablehq/plot/src/context.js", "../../../../node_modules/@observablehq/plot/src/warnings.js", "../../../../node_modules/@observablehq/plot/src/projection.js", "../../../../node_modules/@observablehq/plot/src/scales/schemes.js", "../../../../node_modules/@observablehq/plot/src/scales/quantitative.js", "../../../../node_modules/@observablehq/plot/src/scales/diverging.js", "../../../../node_modules/@observablehq/plot/src/scales/temporal.js", "../../../../node_modules/@observablehq/plot/src/scales/ordinal.js", "../../../../node_modules/@observablehq/plot/src/scales.js", "../../../../node_modules/@observablehq/plot/src/memoize.js", "../../../../node_modules/@observablehq/plot/src/format.js", "../../../../node_modules/@observablehq/plot/src/style.js", "../../../../node_modules/@observablehq/plot/src/dimensions.js", "../../../../node_modules/@observablehq/plot/src/facet.js", "../../../../node_modules/@observablehq/plot/src/mark.js", "../../../../node_modules/@observablehq/plot/src/interactions/pointer.js", "../../../../node_modules/@observablehq/plot/src/axes.js", "../../../../node_modules/@observablehq/plot/src/legends/ramp.js", "../../../../node_modules/@observablehq/plot/src/math.js", "../../../../node_modules/@observablehq/plot/src/marker.js", "../../../../node_modules/@observablehq/plot/src/transforms/inset.js", "../../../../node_modules/@observablehq/plot/src/transforms/interval.js", "../../../../node_modules/@observablehq/plot/src/marks/rule.js", "../../../../node_modules/@observablehq/plot/src/template.js", "../../../../node_modules/@observablehq/plot/src/marks/text.js", "../../../../node_modules/@observablehq/plot/src/marks/vector.js", "../../../../node_modules/@observablehq/plot/src/marks/axis.js", "../../../../node_modules/@observablehq/plot/src/legends/swatches.js", "../../../../node_modules/@observablehq/plot/src/legends.js", "../../../../node_modules/@observablehq/plot/src/marks/frame.js", "../../../../node_modules/@observablehq/plot/src/marks/tip.js", "../../../../node_modules/@observablehq/plot/src/plot.js", "../../../../node_modules/@observablehq/plot/src/transforms/bin.js", "../../../../node_modules/@observablehq/plot/src/transforms/identity.js", "../../../../node_modules/@observablehq/plot/src/transforms/stack.js", "../../../../node_modules/@observablehq/plot/src/marks/bar.js", "../charts.ts"],
-  "sourcesContent": ["export default function ascending(a, b) {\n  return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n", "export default function descending(a, b) {\n  return a == null || b == null ? NaN\n    : b < a ? -1\n    : b > a ? 1\n    : b >= a ? 0\n    : NaN;\n}\n", "import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n  let compare1, compare2, delta;\n\n  // If an accessor is specified, promote it to a comparator. In this case we\n  // can test whether the search value is (self-) comparable. We can\u2019t do this\n  // for a comparator (except for specific, known comparators) because we can\u2019t\n  // tell if the comparator is symmetric, and an asymmetric comparator can\u2019t be\n  // used to test whether a single value is comparable.\n  if (f.length !== 2) {\n    compare1 = ascending;\n    compare2 = (d, x) => ascending(f(d), x);\n    delta = (d, x) => f(d) - x;\n  } else {\n    compare1 = f === ascending || f === descending ? f : zero;\n    compare2 = f;\n    delta = f;\n  }\n\n  function left(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) < 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function right(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) <= 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function center(a, x, lo = 0, hi = a.length) {\n    const i = left(a, x, lo, hi - 1);\n    return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n  }\n\n  return {left, center, right};\n}\n\nfunction zero() {\n  return 0;\n}\n", "export default function number(x) {\n  return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  }\n}\n", "import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n", "export default function count(values, valueof) {\n  let count = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        ++count;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        ++count;\n      }\n    }\n  }\n  return count;\n}\n", "function length(array) {\n  return array.length | 0;\n}\n\nfunction empty(length) {\n  return !(length > 0);\n}\n\nfunction arrayify(values) {\n  return typeof values !== \"object\" || \"length\" in values ? values : Array.from(values);\n}\n\nfunction reducer(reduce) {\n  return values => reduce(...values);\n}\n\nexport default function cross(...values) {\n  const reduce = typeof values[values.length - 1] === \"function\" && reducer(values.pop());\n  values = values.map(arrayify);\n  const lengths = values.map(length);\n  const j = values.length - 1;\n  const index = new Array(j + 1).fill(0);\n  const product = [];\n  if (j < 0 || lengths.some(empty)) return product;\n  while (true) {\n    product.push(index.map((j, i) => values[i][j]));\n    let i = j;\n    while (++index[i] === lengths[i]) {\n      if (i === 0) return reduce ? product.map(reduce) : product;\n      index[i--] = 0;\n    }\n  }\n}\n", "export default function cumsum(values, valueof) {\n  var sum = 0, index = 0;\n  return Float64Array.from(values, valueof === undefined\n    ? v => (sum += +v || 0)\n    : v => (sum += +valueof(v, index++, values) || 0));\n}", "export default function variance(values, valueof) {\n  let count = 0;\n  let delta;\n  let mean = 0;\n  let sum = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        delta = value - mean;\n        mean += delta / ++count;\n        sum += delta * (value - mean);\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        delta = value - mean;\n        mean += delta / ++count;\n        sum += delta * (value - mean);\n      }\n    }\n  }\n  if (count > 1) return sum / (count - 1);\n}\n", "import variance from \"./variance.js\";\n\nexport default function deviation(values, valueof) {\n  const v = variance(values, valueof);\n  return v ? Math.sqrt(v) : v;\n}\n", "export default function extent(values, valueof) {\n  let min;\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null) {\n        if (min === undefined) {\n          if (value >= value) min = max = value;\n        } else {\n          if (min > value) min = value;\n          if (max < value) max = value;\n        }\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null) {\n        if (min === undefined) {\n          if (value >= value) min = max = value;\n        } else {\n          if (min > value) min = value;\n          if (max < value) max = value;\n        }\n      }\n    }\n  }\n  return [min, max];\n}\n", "// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nexport class Adder {\n  constructor() {\n    this._partials = new Float64Array(32);\n    this._n = 0;\n  }\n  add(x) {\n    const p = this._partials;\n    let i = 0;\n    for (let j = 0; j < this._n && j < 32; j++) {\n      const y = p[j],\n        hi = x + y,\n        lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n      if (lo) p[i++] = lo;\n      x = hi;\n    }\n    p[i] = x;\n    this._n = i + 1;\n    return this;\n  }\n  valueOf() {\n    const p = this._partials;\n    let n = this._n, x, y, lo, hi = 0;\n    if (n > 0) {\n      hi = p[--n];\n      while (n > 0) {\n        x = hi;\n        y = p[--n];\n        hi = x + y;\n        lo = y - (hi - x);\n        if (lo) break;\n      }\n      if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\n        y = lo * 2;\n        x = hi + y;\n        if (y == x - hi) hi = x;\n      }\n    }\n    return hi;\n  }\n}\n\nexport function fsum(values, valueof) {\n  const adder = new Adder();\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value = +value) {\n        adder.add(value);\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if (value = +valueof(value, ++index, values)) {\n        adder.add(value);\n      }\n    }\n  }\n  return +adder;\n}\n\nexport function fcumsum(values, valueof) {\n  const adder = new Adder();\n  let index = -1;\n  return Float64Array.from(values, valueof === undefined\n      ? v => adder.add(+v || 0)\n      : v => adder.add(+valueof(v, ++index, values) || 0)\n  );\n}\n", "export class InternMap extends Map {\n  constructor(entries, key = keyof) {\n    super();\n    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n    if (entries != null) for (const [key, value] of entries) this.set(key, value);\n  }\n  get(key) {\n    return super.get(intern_get(this, key));\n  }\n  has(key) {\n    return super.has(intern_get(this, key));\n  }\n  set(key, value) {\n    return super.set(intern_set(this, key), value);\n  }\n  delete(key) {\n    return super.delete(intern_delete(this, key));\n  }\n}\n\nexport class InternSet extends Set {\n  constructor(values, key = keyof) {\n    super();\n    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n    if (values != null) for (const value of values) this.add(value);\n  }\n  has(value) {\n    return super.has(intern_get(this, value));\n  }\n  add(value) {\n    return super.add(intern_set(this, value));\n  }\n  delete(value) {\n    return super.delete(intern_delete(this, value));\n  }\n}\n\nfunction intern_get({_intern, _key}, value) {\n  const key = _key(value);\n  return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n  const key = _key(value);\n  if (_intern.has(key)) return _intern.get(key);\n  _intern.set(key, value);\n  return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n  const key = _key(value);\n  if (_intern.has(key)) {\n    value = _intern.get(key);\n    _intern.delete(key);\n  }\n  return value;\n}\n\nfunction keyof(value) {\n  return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n", "export default function identity(x) {\n  return x;\n}\n", "import {InternMap} from \"internmap\";\nimport identity from \"./identity.js\";\n\nexport default function group(values, ...keys) {\n  return nest(values, identity, identity, keys);\n}\n\nexport function groups(values, ...keys) {\n  return nest(values, Array.from, identity, keys);\n}\n\nfunction flatten(groups, keys) {\n  for (let i = 1, n = keys.length; i < n; ++i) {\n    groups = groups.flatMap(g => g.pop().map(([key, value]) => [...g, key, value]));\n  }\n  return groups;\n}\n\nexport function flatGroup(values, ...keys) {\n  return flatten(groups(values, ...keys), keys);\n}\n\nexport function flatRollup(values, reduce, ...keys) {\n  return flatten(rollups(values, reduce, ...keys), keys);\n}\n\nexport function rollup(values, reduce, ...keys) {\n  return nest(values, identity, reduce, keys);\n}\n\nexport function rollups(values, reduce, ...keys) {\n  return nest(values, Array.from, reduce, keys);\n}\n\nexport function index(values, ...keys) {\n  return nest(values, identity, unique, keys);\n}\n\nexport function indexes(values, ...keys) {\n  return nest(values, Array.from, unique, keys);\n}\n\nfunction unique(values) {\n  if (values.length !== 1) throw new Error(\"duplicate key\");\n  return values[0];\n}\n\nfunction nest(values, map, reduce, keys) {\n  return (function regroup(values, i) {\n    if (i >= keys.length) return reduce(values);\n    const groups = new InternMap();\n    const keyof = keys[i++];\n    let index = -1;\n    for (const value of values) {\n      const key = keyof(value, ++index, values);\n      const group = groups.get(key);\n      if (group) group.push(value);\n      else groups.set(key, [value]);\n    }\n    for (const [key, values] of groups) {\n      groups.set(key, regroup(values, i));\n    }\n    return map(groups);\n  })(values, 0);\n}\n", "export default function permute(source, keys) {\n  return Array.from(keys, key => source[key]);\n}\n", "import ascending from \"./ascending.js\";\nimport permute from \"./permute.js\";\n\nexport default function sort(values, ...F) {\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n  values = Array.from(values);\n  let [f] = F;\n  if ((f && f.length !== 2) || F.length > 1) {\n    const index = Uint32Array.from(values, (d, i) => i);\n    if (F.length > 1) {\n      F = F.map(f => values.map(f));\n      index.sort((i, j) => {\n        for (const f of F) {\n          const c = ascendingDefined(f[i], f[j]);\n          if (c) return c;\n        }\n      });\n    } else {\n      f = values.map(f);\n      index.sort((i, j) => ascendingDefined(f[i], f[j]));\n    }\n    return permute(values, index);\n  }\n  return values.sort(compareDefined(f));\n}\n\nexport function compareDefined(compare = ascending) {\n  if (compare === ascending) return ascendingDefined;\n  if (typeof compare !== \"function\") throw new TypeError(\"compare is not a function\");\n  return (a, b) => {\n    const x = compare(a, b);\n    if (x || x === 0) return x;\n    return (compare(b, b) === 0) - (compare(a, a) === 0);\n  };\n}\n\nexport function ascendingDefined(a, b) {\n  return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\n}\n", "import ascending from \"./ascending.js\";\nimport group, {rollup} from \"./group.js\";\nimport sort from \"./sort.js\";\n\nexport default function groupSort(values, reduce, key) {\n  return (reduce.length !== 2\n    ? sort(rollup(values, reduce, key), (([ak, av], [bk, bv]) => ascending(av, bv) || ascending(ak, bk)))\n    : sort(group(values, key), (([ak, av], [bk, bv]) => reduce(av, bv) || ascending(ak, bk))))\n    .map(([key]) => key);\n}\n", "const e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n  const step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log10(step)),\n      error = step / Math.pow(10, power),\n      factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n  let i1, i2, inc;\n  if (power < 0) {\n    inc = Math.pow(10, -power) / factor;\n    i1 = Math.round(start * inc);\n    i2 = Math.round(stop * inc);\n    if (i1 / inc < start) ++i1;\n    if (i2 / inc > stop) --i2;\n    inc = -inc;\n  } else {\n    inc = Math.pow(10, power) * factor;\n    i1 = Math.round(start / inc);\n    i2 = Math.round(stop / inc);\n    if (i1 * inc < start) ++i1;\n    if (i2 * inc > stop) --i2;\n  }\n  if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n  return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  if (!(count > 0)) return [];\n  if (start === stop) return [start];\n  const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n  if (!(i2 >= i1)) return [];\n  const n = i2 - i1 + 1, ticks = new Array(n);\n  if (reverse) {\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n    else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n  } else {\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n    else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n  }\n  return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n  return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n", "import count from \"../count.js\";\n\nexport default function thresholdSturges(values) {\n  return Math.max(1, Math.ceil(Math.log(count(values)) / Math.LN2) + 1);\n}\n", "export default function max(values, valueof) {\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  }\n  return max;\n}\n", "export default function maxIndex(values, valueof) {\n  let max;\n  let maxIndex = -1;\n  let index = -1;\n  if (valueof === undefined) {\n    for (const value of values) {\n      ++index;\n      if (value != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value, maxIndex = index;\n      }\n    }\n  } else {\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value, maxIndex = index;\n      }\n    }\n  }\n  return maxIndex;\n}\n", "export default function min(values, valueof) {\n  let min;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value;\n      }\n    }\n  }\n  return min;\n}\n", "export default function minIndex(values, valueof) {\n  let min;\n  let minIndex = -1;\n  let index = -1;\n  if (valueof === undefined) {\n    for (const value of values) {\n      ++index;\n      if (value != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value, minIndex = index;\n      }\n    }\n  } else {\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value, minIndex = index;\n      }\n    }\n  }\n  return minIndex;\n}\n", "import {ascendingDefined, compareDefined} from \"./sort.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = Infinity, compare) {\n  k = Math.floor(k);\n  left = Math.floor(Math.max(0, left));\n  right = Math.floor(Math.min(array.length - 1, right));\n\n  if (!(left <= k && k <= right)) return array;\n\n  compare = compare === undefined ? ascendingDefined : compareDefined(compare);\n\n  while (right > left) {\n    if (right - left > 600) {\n      const n = right - left + 1;\n      const m = k - left + 1;\n      const z = Math.log(n);\n      const s = 0.5 * Math.exp(2 * z / 3);\n      const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n      const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n      const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n      quickselect(array, k, newLeft, newRight, compare);\n    }\n\n    const t = array[k];\n    let i = left;\n    let j = right;\n\n    swap(array, left, k);\n    if (compare(array[right], t) > 0) swap(array, left, right);\n\n    while (i < j) {\n      swap(array, i, j), ++i, --j;\n      while (compare(array[i], t) < 0) ++i;\n      while (compare(array[j], t) > 0) --j;\n    }\n\n    if (compare(array[left], t) === 0) swap(array, left, j);\n    else ++j, swap(array, j, right);\n\n    if (j <= k) left = j + 1;\n    if (k <= j) right = j - 1;\n  }\n\n  return array;\n}\n\nfunction swap(array, i, j) {\n  const t = array[i];\n  array[i] = array[j];\n  array[j] = t;\n}\n", "import ascending from \"./ascending.js\";\n\nexport default function greatest(values, compare = ascending) {\n  let max;\n  let defined = false;\n  if (compare.length === 1) {\n    let maxValue;\n    for (const element of values) {\n      const value = compare(element);\n      if (defined\n          ? ascending(value, maxValue) > 0\n          : ascending(value, value) === 0) {\n        max = element;\n        maxValue = value;\n        defined = true;\n      }\n    }\n  } else {\n    for (const value of values) {\n      if (defined\n          ? compare(value, max) > 0\n          : compare(value, value) === 0) {\n        max = value;\n        defined = true;\n      }\n    }\n  }\n  return max;\n}\n", "import max from \"./max.js\";\nimport maxIndex from \"./maxIndex.js\";\nimport min from \"./min.js\";\nimport minIndex from \"./minIndex.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\nimport {ascendingDefined} from \"./sort.js\";\nimport greatest from \"./greatest.js\";\n\nexport default function quantile(values, p, valueof) {\n  values = Float64Array.from(numbers(values, valueof));\n  if (!(n = values.length) || isNaN(p = +p)) return;\n  if (p <= 0 || n < 2) return min(values);\n  if (p >= 1) return max(values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n      value1 = min(values.subarray(i0 + 1));\n  return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n  if (!(n = values.length) || isNaN(p = +p)) return;\n  if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n  if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = +valueof(values[i0], i0, values),\n      value1 = +valueof(values[i0 + 1], i0 + 1, values);\n  return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileIndex(values, p, valueof) {\n  values = Float64Array.from(numbers(values, valueof));\n  if (!(n = values.length) || isNaN(p = +p)) return;\n  if (p <= 0 || n < 2) return minIndex(values);\n  if (p >= 1) return maxIndex(values);\n  var n,\n      i = Math.floor((n - 1) * p),\n      order = (i, j) => ascendingDefined(values[i], values[j]),\n      index = quickselect(Uint32Array.from(values, (_, i) => i), i, 0, n - 1, order);\n  return greatest(index.subarray(0, i + 1), i => values[i]);\n}\n", "import count from \"../count.js\";\nimport quantile from \"../quantile.js\";\n\nexport default function thresholdFreedmanDiaconis(values, min, max) {\n  const c = count(values), d = quantile(values, 0.75) - quantile(values, 0.25);\n  return c && d ? Math.ceil((max - min) / (2 * d * Math.pow(c, -1 / 3))) : 1;\n}\n", "import count from \"../count.js\";\nimport deviation from \"../deviation.js\";\n\nexport default function thresholdScott(values, min, max) {\n  const c = count(values), d = deviation(values);\n  return c && d ? Math.ceil((max - min) * Math.cbrt(c) / (3.49 * d)) : 1;\n}\n", "export default function mean(values, valueof) {\n  let count = 0;\n  let sum = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        ++count, sum += value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        ++count, sum += value;\n      }\n    }\n  }\n  if (count) return sum / count;\n}\n", "import quantile, {quantileIndex} from \"./quantile.js\";\n\nexport default function median(values, valueof) {\n  return quantile(values, 0.5, valueof);\n}\n\nexport function medianIndex(values, valueof) {\n  return quantileIndex(values, 0.5, valueof);\n}\n", "function* flatten(arrays) {\n  for (const array of arrays) {\n    yield* array;\n  }\n}\n\nexport default function merge(arrays) {\n  return Array.from(flatten(arrays));\n}\n", "import {InternMap} from \"internmap\";\n\nexport default function mode(values, valueof) {\n  const counts = new InternMap();\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && value >= value) {\n        counts.set(value, (counts.get(value) || 0) + 1);\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && value >= value) {\n        counts.set(value, (counts.get(value) || 0) + 1);\n      }\n    }\n  }\n  let modeValue;\n  let modeCount = 0;\n  for (const [value, count] of counts) {\n    if (count > modeCount) {\n      modeCount = count;\n      modeValue = value;\n    }\n  }\n  return modeValue;\n}\n", "export default function pairs(values, pairof = pair) {\n  const pairs = [];\n  let previous;\n  let first = false;\n  for (const value of values) {\n    if (first) pairs.push(pairof(previous, value));\n    previous = value;\n    first = true;\n  }\n  return pairs;\n}\n\nexport function pair(a, b) {\n  return [a, b];\n}\n", "export default function range(start, stop, step) {\n  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n  var i = -1,\n      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n      range = new Array(n);\n\n  while (++i < n) {\n    range[i] = start + i * step;\n  }\n\n  return range;\n}\n", "export default function sum(values, valueof) {\n  let sum = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value = +value) {\n        sum += value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if (value = +valueof(value, ++index, values)) {\n        sum += value;\n      }\n    }\n  }\n  return sum;\n}\n", "export default function reverse(values) {\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n  return Array.from(values).reverse();\n}\n", "import {InternSet} from \"internmap\";\n\nexport default function union(...others) {\n  const set = new InternSet();\n  for (const other of others) {\n    for (const o of other) {\n      set.add(o);\n    }\n  }\n  return set;\n}\n", "export default function(x) {\n  return x;\n}\n", "import identity from \"./identity.js\";\n\nvar top = 1,\n    right = 2,\n    bottom = 3,\n    left = 4,\n    epsilon = 1e-6;\n\nfunction translateX(x) {\n  return \"translate(\" + x + \",0)\";\n}\n\nfunction translateY(y) {\n  return \"translate(0,\" + y + \")\";\n}\n\nfunction number(scale) {\n  return d => +scale(d);\n}\n\nfunction center(scale, offset) {\n  offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n  if (scale.round()) offset = Math.round(offset);\n  return d => +scale(d) + offset;\n}\n\nfunction entering() {\n  return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n  var tickArguments = [],\n      tickValues = null,\n      tickFormat = null,\n      tickSizeInner = 6,\n      tickSizeOuter = 6,\n      tickPadding = 3,\n      offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\n      k = orient === top || orient === left ? -1 : 1,\n      x = orient === left || orient === right ? \"x\" : \"y\",\n      transform = orient === top || orient === bottom ? translateX : translateY;\n\n  function axis(context) {\n    var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n        format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n        spacing = Math.max(tickSizeInner, 0) + tickPadding,\n        range = scale.range(),\n        range0 = +range[0] + offset,\n        range1 = +range[range.length - 1] + offset,\n        position = (scale.bandwidth ? center : number)(scale.copy(), offset),\n        selection = context.selection ? context.selection() : context,\n        path = selection.selectAll(\".domain\").data([null]),\n        tick = selection.selectAll(\".tick\").data(values, scale).order(),\n        tickExit = tick.exit(),\n        tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n        line = tick.select(\"line\"),\n        text = tick.select(\"text\");\n\n    path = path.merge(path.enter().insert(\"path\", \".tick\")\n        .attr(\"class\", \"domain\")\n        .attr(\"stroke\", \"currentColor\"));\n\n    tick = tick.merge(tickEnter);\n\n    line = line.merge(tickEnter.append(\"line\")\n        .attr(\"stroke\", \"currentColor\")\n        .attr(x + \"2\", k * tickSizeInner));\n\n    text = text.merge(tickEnter.append(\"text\")\n        .attr(\"fill\", \"currentColor\")\n        .attr(x, k * spacing)\n        .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n    if (context !== selection) {\n      path = path.transition(context);\n      tick = tick.transition(context);\n      line = line.transition(context);\n      text = text.transition(context);\n\n      tickExit = tickExit.transition(context)\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute(\"transform\"); });\n\n      tickEnter\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); });\n    }\n\n    tickExit.remove();\n\n    path\n        .attr(\"d\", orient === left || orient === right\n            ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\n            : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\n\n    tick\n        .attr(\"opacity\", 1)\n        .attr(\"transform\", function(d) { return transform(position(d) + offset); });\n\n    line\n        .attr(x + \"2\", k * tickSizeInner);\n\n    text\n        .attr(x, k * spacing)\n        .text(format);\n\n    selection.filter(entering)\n        .attr(\"fill\", \"none\")\n        .attr(\"font-size\", 10)\n        .attr(\"font-family\", \"sans-serif\")\n        .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n    selection\n        .each(function() { this.__axis = position; });\n  }\n\n  axis.scale = function(_) {\n    return arguments.length ? (scale = _, axis) : scale;\n  };\n\n  axis.ticks = function() {\n    return tickArguments = Array.from(arguments), axis;\n  };\n\n  axis.tickArguments = function(_) {\n    return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();\n  };\n\n  axis.tickValues = function(_) {\n    return arguments.length ? (tickValues = _ == null ? null : Array.from(_), axis) : tickValues && tickValues.slice();\n  };\n\n  axis.tickFormat = function(_) {\n    return arguments.length ? (tickFormat = _, axis) : tickFormat;\n  };\n\n  axis.tickSize = function(_) {\n    return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeInner = function(_) {\n    return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeOuter = function(_) {\n    return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n  };\n\n  axis.tickPadding = function(_) {\n    return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n  };\n\n  axis.offset = function(_) {\n    return arguments.length ? (offset = +_, axis) : offset;\n  };\n\n  return axis;\n}\n\nexport function axisTop(scale) {\n  return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n  return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n  return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n  return axis(left, scale);\n}\n", "var noop = {value: () => {}};\n\nfunction dispatch() {\n  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n    if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n    _[t] = [];\n  }\n  return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n  this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n    return {type: t, name: name};\n  });\n}\n\nDispatch.prototype = dispatch.prototype = {\n  constructor: Dispatch,\n  on: function(typename, callback) {\n    var _ = this._,\n        T = parseTypenames(typename + \"\", _),\n        t,\n        i = -1,\n        n = T.length;\n\n    // If no callback was specified, return the callback of the given type and name.\n    if (arguments.length < 2) {\n      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n      return;\n    }\n\n    // If a type was specified, set the callback for the given type and name.\n    // Otherwise, if a null callback was specified, remove callbacks of the given name.\n    if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n    while (++i < n) {\n      if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n      else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n    }\n\n    return this;\n  },\n  copy: function() {\n    var copy = {}, _ = this._;\n    for (var t in _) copy[t] = _[t].slice();\n    return new Dispatch(copy);\n  },\n  call: function(type, that) {\n    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  },\n  apply: function(type, that, args) {\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  }\n};\n\nfunction get(type, name) {\n  for (var i = 0, n = type.length, c; i < n; ++i) {\n    if ((c = type[i]).name === name) {\n      return c.value;\n    }\n  }\n}\n\nfunction set(type, name, callback) {\n  for (var i = 0, n = type.length; i < n; ++i) {\n    if (type[i].name === name) {\n      type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n      break;\n    }\n  }\n  if (callback != null) type.push({name: name, value: callback});\n  return type;\n}\n\nexport default dispatch;\n", "export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n  svg: \"http://www.w3.org/2000/svg\",\n  xhtml: xhtml,\n  xlink: \"http://www.w3.org/1999/xlink\",\n  xml: \"http://www.w3.org/XML/1998/namespace\",\n  xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n", "import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n  var prefix = name += \"\", i = prefix.indexOf(\":\");\n  if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n", "import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n  return function() {\n    var document = this.ownerDocument,\n        uri = this.namespaceURI;\n    return uri === xhtml && document.documentElement.namespaceURI === xhtml\n        ? document.createElement(name)\n        : document.createElementNS(uri, name);\n  };\n}\n\nfunction creatorFixed(fullname) {\n  return function() {\n    return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n  };\n}\n\nexport default function(name) {\n  var fullname = namespace(name);\n  return (fullname.local\n      ? creatorFixed\n      : creatorInherit)(fullname);\n}\n", "function none() {}\n\nexport default function(selector) {\n  return selector == null ? none : function() {\n    return this.querySelector(selector);\n  };\n}\n", "import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n", "// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don\u2019t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n  return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n", "function empty() {\n  return [];\n}\n\nexport default function(selector) {\n  return selector == null ? empty : function() {\n    return this.querySelectorAll(selector);\n  };\n}\n", "import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n  return function() {\n    return array(select.apply(this, arguments));\n  };\n}\n\nexport default function(select) {\n  if (typeof select === \"function\") select = arrayAll(select);\n  else select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        subgroups.push(select.call(node, node.__data__, i, group));\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, parents);\n}\n", "export default function(selector) {\n  return function() {\n    return this.matches(selector);\n  };\n}\n\nexport function childMatcher(selector) {\n  return function(node) {\n    return node.matches(selector);\n  };\n}\n\n", "import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n  return function() {\n    return find.call(this.children, match);\n  };\n}\n\nfunction childFirst() {\n  return this.firstElementChild;\n}\n\nexport default function(match) {\n  return this.select(match == null ? childFirst\n      : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n", "import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n  return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n  return function() {\n    return filter.call(this.children, match);\n  };\n}\n\nexport default function(match) {\n  return this.selectAll(match == null ? children\n      : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n", "import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n", "export default function(update) {\n  return new Array(update.length);\n}\n", "import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n  this.ownerDocument = parent.ownerDocument;\n  this.namespaceURI = parent.namespaceURI;\n  this._next = null;\n  this._parent = parent;\n  this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n  constructor: EnterNode,\n  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n  querySelector: function(selector) { return this._parent.querySelector(selector); },\n  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n", "export default function(x) {\n  return function() {\n    return x;\n  };\n}\n", "import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n  var i = 0,\n      node,\n      groupLength = group.length,\n      dataLength = data.length;\n\n  // Put any non-null nodes that fit into update.\n  // Put any null nodes into enter.\n  // Put any remaining data into enter.\n  for (; i < dataLength; ++i) {\n    if (node = group[i]) {\n      node.__data__ = data[i];\n      update[i] = node;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Put any non-null nodes that don\u2019t fit into exit.\n  for (; i < groupLength; ++i) {\n    if (node = group[i]) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n  var i,\n      node,\n      nodeByKeyValue = new Map,\n      groupLength = group.length,\n      dataLength = data.length,\n      keyValues = new Array(groupLength),\n      keyValue;\n\n  // Compute the key for each node.\n  // If multiple nodes have the same key, the duplicates are added to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if (node = group[i]) {\n      keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n      if (nodeByKeyValue.has(keyValue)) {\n        exit[i] = node;\n      } else {\n        nodeByKeyValue.set(keyValue, node);\n      }\n    }\n  }\n\n  // Compute the key for each datum.\n  // If there a node associated with this key, join and add it to update.\n  // If there is not (or the key is a duplicate), add it to enter.\n  for (i = 0; i < dataLength; ++i) {\n    keyValue = key.call(parent, data[i], i, data) + \"\";\n    if (node = nodeByKeyValue.get(keyValue)) {\n      update[i] = node;\n      node.__data__ = data[i];\n      nodeByKeyValue.delete(keyValue);\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Add any remaining nodes that were not bound to data to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction datum(node) {\n  return node.__data__;\n}\n\nexport default function(value, key) {\n  if (!arguments.length) return Array.from(this, datum);\n\n  var bind = key ? bindKey : bindIndex,\n      parents = this._parents,\n      groups = this._groups;\n\n  if (typeof value !== \"function\") value = constant(value);\n\n  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n    var parent = parents[j],\n        group = groups[j],\n        groupLength = group.length,\n        data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n        dataLength = data.length,\n        enterGroup = enter[j] = new Array(dataLength),\n        updateGroup = update[j] = new Array(dataLength),\n        exitGroup = exit[j] = new Array(groupLength);\n\n    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n    // Now connect the enter nodes to their following update node, such that\n    // appendChild can insert the materialized enter node before this node,\n    // rather than at the end of the parent node.\n    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n      if (previous = enterGroup[i0]) {\n        if (i0 >= i1) i1 = i0 + 1;\n        while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n        previous._next = next || null;\n      }\n    }\n  }\n\n  update = new Selection(update, parents);\n  update._enter = enter;\n  update._exit = exit;\n  return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn\u2019t worried about \u201Clive\u201D collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don\u2019t; we\u2019d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n  return typeof data === \"object\" && \"length\" in data\n    ? data // Array, TypedArray, NodeList, array-like\n    : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n", "import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n", "export default function(onenter, onupdate, onexit) {\n  var enter = this.enter(), update = this, exit = this.exit();\n  if (typeof onenter === \"function\") {\n    enter = onenter(enter);\n    if (enter) enter = enter.selection();\n  } else {\n    enter = enter.append(onenter + \"\");\n  }\n  if (onupdate != null) {\n    update = onupdate(update);\n    if (update) update = update.selection();\n  }\n  if (onexit == null) exit.remove(); else onexit(exit);\n  return enter && update ? enter.merge(update).order() : update;\n}\n", "import {Selection} from \"./index.js\";\n\nexport default function(context) {\n  var selection = context.selection ? context.selection() : context;\n\n  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Selection(merges, this._parents);\n}\n", "export default function() {\n\n  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n      if (node = group[i]) {\n        if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n        next = node;\n      }\n    }\n  }\n\n  return this;\n}\n", "import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n  if (!compare) compare = ascending;\n\n  function compareNode(a, b) {\n    return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n  }\n\n  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        sortgroup[i] = node;\n      }\n    }\n    sortgroup.sort(compareNode);\n  }\n\n  return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n", "export default function() {\n  var callback = arguments[0];\n  arguments[0] = this;\n  callback.apply(null, arguments);\n  return this;\n}\n", "export default function() {\n  return Array.from(this);\n}\n", "export default function() {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n      var node = group[i];\n      if (node) return node;\n    }\n  }\n\n  return null;\n}\n", "export default function() {\n  let size = 0;\n  for (const node of this) ++size; // eslint-disable-line no-unused-vars\n  return size;\n}\n", "export default function() {\n  return !this.node();\n}\n", "export default function(callback) {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) callback.call(node, node.__data__, i, group);\n    }\n  }\n\n  return this;\n}\n", "import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, value) {\n  return function() {\n    this.setAttribute(name, value);\n  };\n}\n\nfunction attrConstantNS(fullname, value) {\n  return function() {\n    this.setAttributeNS(fullname.space, fullname.local, value);\n  };\n}\n\nfunction attrFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttribute(name);\n    else this.setAttribute(name, v);\n  };\n}\n\nfunction attrFunctionNS(fullname, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n    else this.setAttributeNS(fullname.space, fullname.local, v);\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name);\n\n  if (arguments.length < 2) {\n    var node = this.node();\n    return fullname.local\n        ? node.getAttributeNS(fullname.space, fullname.local)\n        : node.getAttribute(fullname);\n  }\n\n  return this.each((value == null\n      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)\n      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n", "export default function(node) {\n  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n      || (node.document && node) // node is a Window\n      || node.defaultView; // node is a Document\n}\n", "import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, value, priority) {\n  return function() {\n    this.style.setProperty(name, value, priority);\n  };\n}\n\nfunction styleFunction(name, value, priority) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.style.removeProperty(name);\n    else this.style.setProperty(name, v, priority);\n  };\n}\n\nexport default function(name, value, priority) {\n  return arguments.length > 1\n      ? this.each((value == null\n            ? styleRemove : typeof value === \"function\"\n            ? styleFunction\n            : styleConstant)(name, value, priority == null ? \"\" : priority))\n      : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n  return node.style.getPropertyValue(name)\n      || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n", "function propertyRemove(name) {\n  return function() {\n    delete this[name];\n  };\n}\n\nfunction propertyConstant(name, value) {\n  return function() {\n    this[name] = value;\n  };\n}\n\nfunction propertyFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) delete this[name];\n    else this[name] = v;\n  };\n}\n\nexport default function(name, value) {\n  return arguments.length > 1\n      ? this.each((value == null\n          ? propertyRemove : typeof value === \"function\"\n          ? propertyFunction\n          : propertyConstant)(name, value))\n      : this.node()[name];\n}\n", "function classArray(string) {\n  return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n  return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n  this._node = node;\n  this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n  add: function(name) {\n    var i = this._names.indexOf(name);\n    if (i < 0) {\n      this._names.push(name);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  remove: function(name) {\n    var i = this._names.indexOf(name);\n    if (i >= 0) {\n      this._names.splice(i, 1);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  contains: function(name) {\n    return this._names.indexOf(name) >= 0;\n  }\n};\n\nfunction classedAdd(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n  return function() {\n    classedAdd(this, names);\n  };\n}\n\nfunction classedFalse(names) {\n  return function() {\n    classedRemove(this, names);\n  };\n}\n\nfunction classedFunction(names, value) {\n  return function() {\n    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n  };\n}\n\nexport default function(name, value) {\n  var names = classArray(name + \"\");\n\n  if (arguments.length < 2) {\n    var list = classList(this.node()), i = -1, n = names.length;\n    while (++i < n) if (!list.contains(names[i])) return false;\n    return true;\n  }\n\n  return this.each((typeof value === \"function\"\n      ? classedFunction : value\n      ? classedTrue\n      : classedFalse)(names, value));\n}\n", "function textRemove() {\n  this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.textContent = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? textRemove : (typeof value === \"function\"\n          ? textFunction\n          : textConstant)(value))\n      : this.node().textContent;\n}\n", "function htmlRemove() {\n  this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n  return function() {\n    this.innerHTML = value;\n  };\n}\n\nfunction htmlFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.innerHTML = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? htmlRemove : (typeof value === \"function\"\n          ? htmlFunction\n          : htmlConstant)(value))\n      : this.node().innerHTML;\n}\n", "function raise() {\n  if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n  return this.each(raise);\n}\n", "function lower() {\n  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n  return this.each(lower);\n}\n", "import creator from \"../creator.js\";\n\nexport default function(name) {\n  var create = typeof name === \"function\" ? name : creator(name);\n  return this.select(function() {\n    return this.appendChild(create.apply(this, arguments));\n  });\n}\n", "import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n  return null;\n}\n\nexport default function(name, before) {\n  var create = typeof name === \"function\" ? name : creator(name),\n      select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n  return this.select(function() {\n    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n  });\n}\n", "function remove() {\n  var parent = this.parentNode;\n  if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n  return this.each(remove);\n}\n", "function selection_cloneShallow() {\n  var clone = this.cloneNode(false), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n  var clone = this.cloneNode(true), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n", "export default function(value) {\n  return arguments.length\n      ? this.property(\"__data__\", value)\n      : this.node().__data__;\n}\n", "function contextListener(listener) {\n  return function(event) {\n    listener.call(this, event, this.__data__);\n  };\n}\n\nfunction parseTypenames(typenames) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    return {type: t, name: name};\n  });\n}\n\nfunction onRemove(typename) {\n  return function() {\n    var on = this.__on;\n    if (!on) return;\n    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n      } else {\n        on[++i] = o;\n      }\n    }\n    if (++i) on.length = i;\n    else delete this.__on;\n  };\n}\n\nfunction onAdd(typename, value, options) {\n  return function() {\n    var on = this.__on, o, listener = contextListener(value);\n    if (on) for (var j = 0, m = on.length; j < m; ++j) {\n      if ((o = on[j]).type === typename.type && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n        this.addEventListener(o.type, o.listener = listener, o.options = options);\n        o.value = value;\n        return;\n      }\n    }\n    this.addEventListener(typename.type, listener, options);\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n    if (!on) this.__on = [o];\n    else on.push(o);\n  };\n}\n\nexport default function(typename, value, options) {\n  var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n  if (arguments.length < 2) {\n    var on = this.node().__on;\n    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n      for (i = 0, o = on[j]; i < n; ++i) {\n        if ((t = typenames[i]).type === o.type && t.name === o.name) {\n          return o.value;\n        }\n      }\n    }\n    return;\n  }\n\n  on = value ? onAdd : onRemove;\n  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n  return this;\n}\n", "import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n  var window = defaultView(node),\n      event = window.CustomEvent;\n\n  if (typeof event === \"function\") {\n    event = new event(type, params);\n  } else {\n    event = window.document.createEvent(\"Event\");\n    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n    else event.initEvent(type, false, false);\n  }\n\n  node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params);\n  };\n}\n\nfunction dispatchFunction(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params.apply(this, arguments));\n  };\n}\n\nexport default function(type, params) {\n  return this.each((typeof params === \"function\"\n      ? dispatchFunction\n      : dispatchConstant)(type, params));\n}\n", "export default function*() {\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) yield node;\n    }\n  }\n}\n", "import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n  this._groups = groups;\n  this._parents = parents;\n}\n\nfunction selection() {\n  return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n  return this;\n}\n\nSelection.prototype = selection.prototype = {\n  constructor: Selection,\n  select: selection_select,\n  selectAll: selection_selectAll,\n  selectChild: selection_selectChild,\n  selectChildren: selection_selectChildren,\n  filter: selection_filter,\n  data: selection_data,\n  enter: selection_enter,\n  exit: selection_exit,\n  join: selection_join,\n  merge: selection_merge,\n  selection: selection_selection,\n  order: selection_order,\n  sort: selection_sort,\n  call: selection_call,\n  nodes: selection_nodes,\n  node: selection_node,\n  size: selection_size,\n  empty: selection_empty,\n  each: selection_each,\n  attr: selection_attr,\n  style: selection_style,\n  property: selection_property,\n  classed: selection_classed,\n  text: selection_text,\n  html: selection_html,\n  raise: selection_raise,\n  lower: selection_lower,\n  append: selection_append,\n  insert: selection_insert,\n  remove: selection_remove,\n  clone: selection_clone,\n  datum: selection_datum,\n  on: selection_on,\n  dispatch: selection_dispatch,\n  [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n", "import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n      : new Selection([[selector]], root);\n}\n", "export default function(event) {\n  let sourceEvent;\n  while (sourceEvent = event.sourceEvent) event = sourceEvent;\n  return event;\n}\n", "import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n  event = sourceEvent(event);\n  if (node === undefined) node = event.currentTarget;\n  if (node) {\n    var svg = node.ownerSVGElement || node;\n    if (svg.createSVGPoint) {\n      var point = svg.createSVGPoint();\n      point.x = event.clientX, point.y = event.clientY;\n      point = point.matrixTransform(node.getScreenCTM().inverse());\n      return [point.x, point.y];\n    }\n    if (node.getBoundingClientRect) {\n      var rect = node.getBoundingClientRect();\n      return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n    }\n  }\n  return [event.pageX, event.pageY];\n}\n", "export default function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n", "import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex = /^#([0-9a-f]{3,8})$/,\n    reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n    reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n    reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n    reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n    reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n    reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  copy(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHex8: color_formatHex8,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n  return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n      : null) // invalid hex\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb() {\n    return this;\n  },\n  clamp() {\n    return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n  },\n  displayable() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatHex8: rgb_formatHex8,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n  const a = clampa(this.opacity);\n  return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n  return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n  return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n  value = clampi(value);\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  clamp() {\n    return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n  },\n  displayable() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl() {\n    const a = clampa(this.opacity);\n    return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n  }\n}));\n\nfunction clamph(value) {\n  value = (value || 0) % 360;\n  return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n  return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n", "export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n", "import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n    Xn = 0.96422,\n    Yn = 1,\n    Zn = 0.82521,\n    t0 = 4 / 29,\n    t1 = 6 / 29,\n    t2 = 3 * t1 * t1,\n    t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n  if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n  if (o instanceof Hcl) return hcl2lab(o);\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\n  var r = rgb2lrgb(o.r),\n      g = rgb2lrgb(o.g),\n      b = rgb2lrgb(o.b),\n      y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n  if (r === g && g === b) x = z = y; else {\n    x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n    z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n  }\n  return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n  return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n  return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n  this.l = +l;\n  this.a = +a;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n  brighter(k) {\n    return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  darker(k) {\n    return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  rgb() {\n    var y = (this.l + 16) / 116,\n        x = isNaN(this.a) ? y : y + this.a / 500,\n        z = isNaN(this.b) ? y : y - this.b / 200;\n    x = Xn * lab2xyz(x);\n    y = Yn * lab2xyz(y);\n    z = Zn * lab2xyz(z);\n    return new Rgb(\n      lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n      lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n      lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n      this.opacity\n    );\n  }\n}));\n\nfunction xyz2lab(t) {\n  return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n  return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n  return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n  return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n  if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n  if (!(o instanceof Lab)) o = labConvert(o);\n  if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n  var h = Math.atan2(o.b, o.a) * degrees;\n  return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n  return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n  return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n  this.h = +h;\n  this.c = +c;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n  if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n  var h = o.h * radians;\n  return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n  brighter(k) {\n    return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n  },\n  darker(k) {\n    return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n  },\n  rgb() {\n    return hcl2lab(this).rgb();\n  }\n}));\n", "import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\nvar A = -0.14861,\n    B = +1.78277,\n    C = -0.29227,\n    D = -0.90649,\n    E = +1.97294,\n    ED = E * D,\n    EB = E * B,\n    BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n  if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n      bl = b - l,\n      k = (E * (g - l) - C * bl) / D,\n      s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n      h = s ? Math.atan2(k, bl) * degrees - 120 : NaN;\n  return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n  return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb() {\n    var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\n        l = +this.l,\n        a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n        cosh = Math.cos(h),\n        sinh = Math.sin(h);\n    return new Rgb(\n      255 * (l + a * (A * cosh + B * sinh)),\n      255 * (l + a * (C * cosh + D * sinh)),\n      255 * (l + a * (E * cosh)),\n      this.opacity\n    );\n  }\n}));\n", "export function basis(t1, v0, v1, v2, v3) {\n  var t2 = t1 * t1, t3 = t2 * t1;\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n      + (4 - 6 * t2 + 3 * t3) * v1\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n      + t3 * v3) / 6;\n}\n\nexport default function(values) {\n  var n = values.length - 1;\n  return function(t) {\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n        v1 = values[i],\n        v2 = values[i + 1],\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n", "import {basis} from \"./basis.js\";\n\nexport default function(values) {\n  var n = values.length;\n  return function(t) {\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n        v0 = values[(i + n - 1) % n],\n        v1 = values[i % n],\n        v2 = values[(i + 1) % n],\n        v3 = values[(i + 2) % n];\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n", "export default x => () => x;\n", "import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n", "import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n", "export default function(a, b) {\n  if (!b) b = [];\n  var n = a ? Math.min(b.length, a.length) : 0,\n      c = b.slice(),\n      i;\n  return function(t) {\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n    return c;\n  };\n}\n\nexport function isNumberArray(x) {\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n", "import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n", "export default function(a, b) {\n  var d = new Date;\n  return a = +a, b = +b, function(t) {\n    return d.setTime(a * (1 - t) + b * t), d;\n  };\n}\n", "export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n", "import value from \"./value.js\";\n\nexport default function(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = value(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n}\n", "import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n", "import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? constant(b)\n      : (t === \"number\" ? number\n      : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n      : b instanceof color ? rgb\n      : b instanceof Date ? date\n      : isNumberArray(b) ? numberArray\n      : Array.isArray(b) ? genericArray\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n      : number)(a, b);\n}\n", "export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return Math.round(a * (1 - t) + b * t);\n  };\n}\n", "var degrees = 180 / Math.PI;\n\nexport var identity = {\n  translateX: 0,\n  translateY: 0,\n  rotate: 0,\n  skewX: 0,\n  scaleX: 1,\n  scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n  var scaleX, scaleY, skewX;\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n  return {\n    translateX: e,\n    translateY: f,\n    rotate: Math.atan2(b, a) * degrees,\n    skewX: Math.atan(skewX) * degrees,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n", "import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n  const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n  return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n  if (value == null) return identity;\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n  svgNode.setAttribute(\"transform\", value);\n  if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n  value = value.matrix;\n  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n", "import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n  function pop(s) {\n    return s.length ? s.pop() + \" \" : \"\";\n  }\n\n  function translate(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb || yb) {\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n    }\n  }\n\n  function rotate(a, b, s, q) {\n    if (a !== b) {\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"rotate(\" + b + degParen);\n    }\n  }\n\n  function skewX(a, b, s, q) {\n    if (a !== b) {\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"skewX(\" + b + degParen);\n    }\n  }\n\n  function scale(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb !== 1 || yb !== 1) {\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n    }\n  }\n\n  return function(a, b) {\n    var s = [], // string constants and placeholders\n        q = []; // number interpolators\n    a = parse(a), b = parse(b);\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n    rotate(a.rotate, b.rotate, s, q);\n    skewX(a.skewX, b.skewX, s, q);\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n    a = b = null; // gc\n    return function(t) {\n      var i = -1, n = q.length, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n", "import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hsl(hue) {\n  return function(start, end) {\n    var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n        s = color(start.s, end.s),\n        l = color(start.l, end.l),\n        opacity = color(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.s = s(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n", "import {lab as colorLab} from \"d3-color\";\nimport color from \"./color.js\";\n\nexport default function lab(start, end) {\n  var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),\n      a = color(start.a, end.a),\n      b = color(start.b, end.b),\n      opacity = color(start.opacity, end.opacity);\n  return function(t) {\n    start.l = l(t);\n    start.a = a(t);\n    start.b = b(t);\n    start.opacity = opacity(t);\n    return start + \"\";\n  };\n}\n", "import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hcl(hue) {\n  return function(start, end) {\n    var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n        c = color(start.c, end.c),\n        l = color(start.l, end.l),\n        opacity = color(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.c = c(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n", "import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n  return (function cubehelixGamma(y) {\n    y = +y;\n\n    function cubehelix(start, end) {\n      var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n          s = color(start.s, end.s),\n          l = color(start.l, end.l),\n          opacity = color(start.opacity, end.opacity);\n      return function(t) {\n        start.h = h(t);\n        start.s = s(t);\n        start.l = l(Math.pow(t, y));\n        start.opacity = opacity(t);\n        return start + \"\";\n      };\n    }\n\n    cubehelix.gamma = cubehelixGamma;\n\n    return cubehelix;\n  })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n", "import {default as value} from \"./value.js\";\n\nexport default function piecewise(interpolate, values) {\n  if (values === undefined) values = interpolate, interpolate = value;\n  var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n  while (i < n) I[i] = interpolate(v, v = values[++i]);\n  return function(t) {\n    var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n    return I[i](t - i);\n  };\n}\n", "export default function(interpolator, n) {\n  var samples = new Array(n);\n  for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n  return samples;\n}\n", "var frame = 0, // is an animation frame pending?\n    timeout = 0, // is a timeout pending?\n    interval = 0, // are any timers active?\n    pokeDelay = 1000, // how frequently we check for clock skew\n    taskHead,\n    taskTail,\n    clockLast = 0,\n    clockNow = 0,\n    clockSkew = 0,\n    clock = typeof performance === \"object\" && performance.now ? performance : Date,\n    setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n  clockNow = 0;\n}\n\nexport function Timer() {\n  this._call =\n  this._time =\n  this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n  constructor: Timer,\n  restart: function(callback, delay, time) {\n    if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n    if (!this._next && taskTail !== this) {\n      if (taskTail) taskTail._next = this;\n      else taskHead = this;\n      taskTail = this;\n    }\n    this._call = callback;\n    this._time = time;\n    sleep();\n  },\n  stop: function() {\n    if (this._call) {\n      this._call = null;\n      this._time = Infinity;\n      sleep();\n    }\n  }\n};\n\nexport function timer(callback, delay, time) {\n  var t = new Timer;\n  t.restart(callback, delay, time);\n  return t;\n}\n\nexport function timerFlush() {\n  now(); // Get the current time, if not already set.\n  ++frame; // Pretend we\u2019ve set an alarm, if we haven\u2019t already.\n  var t = taskHead, e;\n  while (t) {\n    if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n    t = t._next;\n  }\n  --frame;\n}\n\nfunction wake() {\n  clockNow = (clockLast = clock.now()) + clockSkew;\n  frame = timeout = 0;\n  try {\n    timerFlush();\n  } finally {\n    frame = 0;\n    nap();\n    clockNow = 0;\n  }\n}\n\nfunction poke() {\n  var now = clock.now(), delay = now - clockLast;\n  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n  var t0, t1 = taskHead, t2, time = Infinity;\n  while (t1) {\n    if (t1._call) {\n      if (time > t1._time) time = t1._time;\n      t0 = t1, t1 = t1._next;\n    } else {\n      t2 = t1._next, t1._next = null;\n      t1 = t0 ? t0._next = t2 : taskHead = t2;\n    }\n  }\n  taskTail = t0;\n  sleep(time);\n}\n\nfunction sleep(time) {\n  if (frame) return; // Soonest alarm already set, or will be.\n  if (timeout) timeout = clearTimeout(timeout);\n  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n  if (delay > 24) {\n    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n    if (interval) interval = clearInterval(interval);\n  } else {\n    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n    frame = 1, setFrame(wake);\n  }\n}\n", "import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n  var t = new Timer;\n  delay = delay == null ? 0 : +delay;\n  t.restart(elapsed => {\n    t.stop();\n    callback(elapsed + delay);\n  }, delay, time);\n  return t;\n}\n", "import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n  var schedules = node.__transition;\n  if (!schedules) node.__transition = {};\n  else if (id in schedules) return;\n  create(node, id, {\n    name: name,\n    index: index, // For context during callback.\n    group: group, // For context during callback.\n    on: emptyOn,\n    tween: emptyTween,\n    time: timing.time,\n    delay: timing.delay,\n    duration: timing.duration,\n    ease: timing.ease,\n    timer: null,\n    state: CREATED\n  });\n}\n\nexport function init(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n  return schedule;\n}\n\nexport function set(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n  return schedule;\n}\n\nexport function get(node, id) {\n  var schedule = node.__transition;\n  if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n  return schedule;\n}\n\nfunction create(node, id, self) {\n  var schedules = node.__transition,\n      tween;\n\n  // Initialize the self timer when the transition is created.\n  // Note the actual delay is not known until the first callback!\n  schedules[id] = self;\n  self.timer = timer(schedule, 0, self.time);\n\n  function schedule(elapsed) {\n    self.state = SCHEDULED;\n    self.timer.restart(start, self.delay, self.time);\n\n    // If the elapsed delay is less than our first sleep, start immediately.\n    if (self.delay <= elapsed) start(elapsed - self.delay);\n  }\n\n  function start(elapsed) {\n    var i, j, n, o;\n\n    // If the state is not SCHEDULED, then we previously errored on start.\n    if (self.state !== SCHEDULED) return stop();\n\n    for (i in schedules) {\n      o = schedules[i];\n      if (o.name !== self.name) continue;\n\n      // While this element already has a starting transition during this frame,\n      // defer starting an interrupting transition until that transition has a\n      // chance to tick (and possibly end); see d3/d3-transition#54!\n      if (o.state === STARTED) return timeout(start);\n\n      // Interrupt the active transition, if any.\n      if (o.state === RUNNING) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n\n      // Cancel any pre-empted transitions.\n      else if (+i < id) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n    }\n\n    // Defer the first tick to end of the current frame; see d3/d3#1576.\n    // Note the transition may be canceled after start and before the first tick!\n    // Note this must be scheduled before the start event; see d3/d3-transition#16!\n    // Assuming this is successful, subsequent callbacks go straight to tick.\n    timeout(function() {\n      if (self.state === STARTED) {\n        self.state = RUNNING;\n        self.timer.restart(tick, self.delay, self.time);\n        tick(elapsed);\n      }\n    });\n\n    // Dispatch the start event.\n    // Note this must be done before the tween are initialized.\n    self.state = STARTING;\n    self.on.call(\"start\", node, node.__data__, self.index, self.group);\n    if (self.state !== STARTING) return; // interrupted\n    self.state = STARTED;\n\n    // Initialize the tween, deleting null tween.\n    tween = new Array(n = self.tween.length);\n    for (i = 0, j = -1; i < n; ++i) {\n      if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n        tween[++j] = o;\n      }\n    }\n    tween.length = j + 1;\n  }\n\n  function tick(elapsed) {\n    var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n        i = -1,\n        n = tween.length;\n\n    while (++i < n) {\n      tween[i].call(node, t);\n    }\n\n    // Dispatch the end event.\n    if (self.state === ENDING) {\n      self.on.call(\"end\", node, node.__data__, self.index, self.group);\n      stop();\n    }\n  }\n\n  function stop() {\n    self.state = ENDED;\n    self.timer.stop();\n    delete schedules[id];\n    for (var i in schedules) return; // eslint-disable-line no-unused-vars\n    delete node.__transition;\n  }\n}\n", "import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n  var schedules = node.__transition,\n      schedule,\n      active,\n      empty = true,\n      i;\n\n  if (!schedules) return;\n\n  name = name == null ? null : name + \"\";\n\n  for (i in schedules) {\n    if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n    active = schedule.state > STARTING && schedule.state < ENDING;\n    schedule.state = ENDED;\n    schedule.timer.stop();\n    schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n    delete schedules[i];\n  }\n\n  if (empty) delete node.__transition;\n}\n", "import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n  return this.each(function() {\n    interrupt(this, name);\n  });\n}\n", "import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n  var tween0, tween1;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we\u2019re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = tween0 = tween;\n      for (var i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1 = tween1.slice();\n          tween1.splice(i, 1);\n          break;\n        }\n      }\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nfunction tweenFunction(id, name, value) {\n  var tween0, tween1;\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we\u2019re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = (tween0 = tween).slice();\n      for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1[i] = t;\n          break;\n        }\n      }\n      if (i === n) tween1.push(t);\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nexport default function(name, value) {\n  var id = this._id;\n\n  name += \"\";\n\n  if (arguments.length < 2) {\n    var tween = get(this.node(), id).tween;\n    for (var i = 0, n = tween.length, t; i < n; ++i) {\n      if ((t = tween[i]).name === name) {\n        return t.value;\n      }\n    }\n    return null;\n  }\n\n  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n  var id = transition._id;\n\n  transition.each(function() {\n    var schedule = set(this, id);\n    (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n  });\n\n  return function(node) {\n    return get(node, id).value[name];\n  };\n}\n", "import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n  var c;\n  return (typeof b === \"number\" ? interpolateNumber\n      : b instanceof color ? interpolateRgb\n      : (c = color(b)) ? (b = c, interpolateRgb)\n      : interpolateString)(a, b);\n}\n", "import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttribute(name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttributeNS(fullname.space, fullname.local);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttribute(name);\n    string0 = this.getAttribute(name);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n    string0 = this.getAttributeNS(fullname.space, fullname.local);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n  return this.attrTween(name, typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n      : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n      : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n", "import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n  return function(t) {\n    this.setAttribute(name, i.call(this, t));\n  };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n  return function(t) {\n    this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n  };\n}\n\nfunction attrTweenNS(fullname, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nfunction attrTween(name, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value) {\n  var key = \"attr.\" + name;\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  var fullname = namespace(name);\n  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n", "import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n  return function() {\n    init(this, id).delay = +value.apply(this, arguments);\n  };\n}\n\nfunction delayConstant(id, value) {\n  return value = +value, function() {\n    init(this, id).delay = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? delayFunction\n          : delayConstant)(id, value))\n      : get(this.node(), id).delay;\n}\n", "import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n  return function() {\n    set(this, id).duration = +value.apply(this, arguments);\n  };\n}\n\nfunction durationConstant(id, value) {\n  return value = +value, function() {\n    set(this, id).duration = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? durationFunction\n          : durationConstant)(id, value))\n      : get(this.node(), id).duration;\n}\n", "import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    set(this, id).ease = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each(easeConstant(id, value))\n      : get(this.node(), id).ease;\n}\n", "import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (typeof v !== \"function\") throw new Error;\n    set(this, id).ease = v;\n  };\n}\n\nexport default function(value) {\n  if (typeof value !== \"function\") throw new Error;\n  return this.each(easeVarying(this._id, value));\n}\n", "import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, this._name, this._id);\n}\n", "import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n  if (transition._id !== this._id) throw new Error;\n\n  for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Transition(merges, this._parents, this._name, this._id);\n}\n", "import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n  return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n    var i = t.indexOf(\".\");\n    if (i >= 0) t = t.slice(0, i);\n    return !t || t === \"start\";\n  });\n}\n\nfunction onFunction(id, name, listener) {\n  var on0, on1, sit = start(name) ? init : set;\n  return function() {\n    var schedule = sit(this, id),\n        on = schedule.on;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we\u2019re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, listener) {\n  var id = this._id;\n\n  return arguments.length < 2\n      ? get(this.node(), id).on.on(name)\n      : this.each(onFunction(id, name, listener));\n}\n", "function removeFunction(id) {\n  return function() {\n    var parent = this.parentNode;\n    for (var i in this.__transition) if (+i !== id) return;\n    if (parent) parent.removeChild(this);\n  };\n}\n\nexport default function() {\n  return this.on(\"end.remove\", removeFunction(this._id));\n}\n", "import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n        schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, name, id);\n}\n", "import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n          if (child = children[k]) {\n            schedule(child, name, id, k, children, inherit);\n          }\n        }\n        subgroups.push(children);\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, parents, name, id);\n}\n", "import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n  return new Selection(this._groups, this._parents);\n}\n", "import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        string1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, string10 = string1);\n  };\n}\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = style(this, name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction styleFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        value1 = value(this),\n        string1 = value1 + \"\";\n    if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction styleMaybeRemove(id, name) {\n  var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n  return function() {\n    var schedule = set(this, id),\n        on = schedule.on,\n        listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we\u2019re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, value, priority) {\n  var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n  return value == null ? this\n      .styleTween(name, styleNull(name, i))\n      .on(\"end.style.\" + name, styleRemove(name))\n    : typeof value === \"function\" ? this\n      .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n      .each(styleMaybeRemove(this._id, name))\n    : this\n      .styleTween(name, styleConstant(name, i, value), priority)\n      .on(\"end.style.\" + name, null);\n}\n", "function styleInterpolate(name, i, priority) {\n  return function(t) {\n    this.style.setProperty(name, i.call(this, t), priority);\n  };\n}\n\nfunction styleTween(name, value, priority) {\n  var t, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n    return t;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value, priority) {\n  var key = \"style.\" + (name += \"\");\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n", "import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var value1 = value(this);\n    this.textContent = value1 == null ? \"\" : value1;\n  };\n}\n\nexport default function(value) {\n  return this.tween(\"text\", typeof value === \"function\"\n      ? textFunction(tweenValue(this, \"text\", value))\n      : textConstant(value == null ? \"\" : value + \"\"));\n}\n", "function textInterpolate(i) {\n  return function(t) {\n    this.textContent = i.call(this, t);\n  };\n}\n\nfunction textTween(value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(value) {\n  var key = \"text\";\n  if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, textTween(value));\n}\n", "import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n  var name = this._name,\n      id0 = this._id,\n      id1 = newId();\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        var inherit = get(node, id0);\n        schedule(node, name, id1, i, group, {\n          time: inherit.time + inherit.delay + inherit.duration,\n          delay: 0,\n          duration: inherit.duration,\n          ease: inherit.ease\n        });\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id1);\n}\n", "import {set} from \"./schedule.js\";\n\nexport default function() {\n  var on0, on1, that = this, id = that._id, size = that.size();\n  return new Promise(function(resolve, reject) {\n    var cancel = {value: reject},\n        end = {value: function() { if (--size === 0) resolve(); }};\n\n    that.each(function() {\n      var schedule = set(this, id),\n          on = schedule.on;\n\n      // If this node shared a dispatch with the previous node,\n      // just assign the updated shared dispatch and we\u2019re done!\n      // Otherwise, copy-on-write.\n      if (on !== on0) {\n        on1 = (on0 = on).copy();\n        on1._.cancel.push(cancel);\n        on1._.interrupt.push(cancel);\n        on1._.end.push(end);\n      }\n\n      schedule.on = on1;\n    });\n\n    // The selection was empty, resolve end immediately\n    if (size === 0) resolve();\n  });\n}\n", "import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n  this._groups = groups;\n  this._parents = parents;\n  this._name = name;\n  this._id = id;\n}\n\nexport default function transition(name) {\n  return selection().transition(name);\n}\n\nexport function newId() {\n  return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n  constructor: Transition,\n  select: transition_select,\n  selectAll: transition_selectAll,\n  selectChild: selection_prototype.selectChild,\n  selectChildren: selection_prototype.selectChildren,\n  filter: transition_filter,\n  merge: transition_merge,\n  selection: transition_selection,\n  transition: transition_transition,\n  call: selection_prototype.call,\n  nodes: selection_prototype.nodes,\n  node: selection_prototype.node,\n  size: selection_prototype.size,\n  empty: selection_prototype.empty,\n  each: selection_prototype.each,\n  on: transition_on,\n  attr: transition_attr,\n  attrTween: transition_attrTween,\n  style: transition_style,\n  styleTween: transition_styleTween,\n  text: transition_text,\n  textTween: transition_textTween,\n  remove: transition_remove,\n  tween: transition_tween,\n  delay: transition_delay,\n  duration: transition_duration,\n  ease: transition_ease,\n  easeVarying: transition_easeVarying,\n  end: transition_end,\n  [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n", "export function cubicIn(t) {\n  return t * t * t;\n}\n\nexport function cubicOut(t) {\n  return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n", "import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n  time: null, // Set on use.\n  delay: 0,\n  duration: 250,\n  ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n  var timing;\n  while (!(timing = node.__transition) || !(timing = timing[id])) {\n    if (!(node = node.parentNode)) {\n      throw new Error(`transition ${id} not found`);\n    }\n  }\n  return timing;\n}\n\nexport default function(name) {\n  var id,\n      timing;\n\n  if (name instanceof Transition) {\n    id = name._id, name = name._name;\n  } else {\n    id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n  }\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        schedule(node, name, id, i, group, timing || inherit(node, id));\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id);\n}\n", "import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n", "import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolate} from \"d3-interpolate\";\nimport {pointer, select} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport BrushEvent from \"./event.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\nvar MODE_DRAG = {name: \"drag\"},\n    MODE_SPACE = {name: \"space\"},\n    MODE_HANDLE = {name: \"handle\"},\n    MODE_CENTER = {name: \"center\"};\n\nconst {abs, max, min} = Math;\n\nfunction number1(e) {\n  return [+e[0], +e[1]];\n}\n\nfunction number2(e) {\n  return [number1(e[0]), number1(e[1])];\n}\n\nvar X = {\n  name: \"x\",\n  handles: [\"w\", \"e\"].map(type),\n  input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; },\n  output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n};\n\nvar Y = {\n  name: \"y\",\n  handles: [\"n\", \"s\"].map(type),\n  input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; },\n  output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n};\n\nvar XY = {\n  name: \"xy\",\n  handles: [\"n\", \"w\", \"e\", \"s\", \"nw\", \"ne\", \"sw\", \"se\"].map(type),\n  input: function(xy) { return xy == null ? null : number2(xy); },\n  output: function(xy) { return xy; }\n};\n\nvar cursors = {\n  overlay: \"crosshair\",\n  selection: \"move\",\n  n: \"ns-resize\",\n  e: \"ew-resize\",\n  s: \"ns-resize\",\n  w: \"ew-resize\",\n  nw: \"nwse-resize\",\n  ne: \"nesw-resize\",\n  se: \"nwse-resize\",\n  sw: \"nesw-resize\"\n};\n\nvar flipX = {\n  e: \"w\",\n  w: \"e\",\n  nw: \"ne\",\n  ne: \"nw\",\n  se: \"sw\",\n  sw: \"se\"\n};\n\nvar flipY = {\n  n: \"s\",\n  s: \"n\",\n  nw: \"sw\",\n  ne: \"se\",\n  se: \"ne\",\n  sw: \"nw\"\n};\n\nvar signsX = {\n  overlay: +1,\n  selection: +1,\n  n: null,\n  e: +1,\n  s: null,\n  w: -1,\n  nw: -1,\n  ne: +1,\n  se: +1,\n  sw: -1\n};\n\nvar signsY = {\n  overlay: +1,\n  selection: +1,\n  n: -1,\n  e: null,\n  s: +1,\n  w: null,\n  nw: -1,\n  ne: -1,\n  se: +1,\n  sw: +1\n};\n\nfunction type(t) {\n  return {type: t};\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n  return !event.ctrlKey && !event.button;\n}\n\nfunction defaultExtent() {\n  var svg = this.ownerSVGElement || this;\n  if (svg.hasAttribute(\"viewBox\")) {\n    svg = svg.viewBox.baseVal;\n    return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];\n  }\n  return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\n// Like d3.local, but with the name \u201C__brush\u201D rather than auto-generated.\nfunction local(node) {\n  while (!node.__brush) if (!(node = node.parentNode)) return;\n  return node.__brush;\n}\n\nfunction empty(extent) {\n  return extent[0][0] === extent[1][0]\n      || extent[0][1] === extent[1][1];\n}\n\nexport function brushSelection(node) {\n  var state = node.__brush;\n  return state ? state.dim.output(state.selection) : null;\n}\n\nexport function brushX() {\n  return brush(X);\n}\n\nexport function brushY() {\n  return brush(Y);\n}\n\nexport default function() {\n  return brush(XY);\n}\n\nfunction brush(dim) {\n  var extent = defaultExtent,\n      filter = defaultFilter,\n      touchable = defaultTouchable,\n      keys = true,\n      listeners = dispatch(\"start\", \"brush\", \"end\"),\n      handleSize = 6,\n      touchending;\n\n  function brush(group) {\n    var overlay = group\n        .property(\"__brush\", initialize)\n      .selectAll(\".overlay\")\n      .data([type(\"overlay\")]);\n\n    overlay.enter().append(\"rect\")\n        .attr(\"class\", \"overlay\")\n        .attr(\"pointer-events\", \"all\")\n        .attr(\"cursor\", cursors.overlay)\n      .merge(overlay)\n        .each(function() {\n          var extent = local(this).extent;\n          select(this)\n              .attr(\"x\", extent[0][0])\n              .attr(\"y\", extent[0][1])\n              .attr(\"width\", extent[1][0] - extent[0][0])\n              .attr(\"height\", extent[1][1] - extent[0][1]);\n        });\n\n    group.selectAll(\".selection\")\n      .data([type(\"selection\")])\n      .enter().append(\"rect\")\n        .attr(\"class\", \"selection\")\n        .attr(\"cursor\", cursors.selection)\n        .attr(\"fill\", \"#777\")\n        .attr(\"fill-opacity\", 0.3)\n        .attr(\"stroke\", \"#fff\")\n        .attr(\"shape-rendering\", \"crispEdges\");\n\n    var handle = group.selectAll(\".handle\")\n      .data(dim.handles, function(d) { return d.type; });\n\n    handle.exit().remove();\n\n    handle.enter().append(\"rect\")\n        .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n        .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\n    group\n        .each(redraw)\n        .attr(\"fill\", \"none\")\n        .attr(\"pointer-events\", \"all\")\n        .on(\"mousedown.brush\", started)\n      .filter(touchable)\n        .on(\"touchstart.brush\", started)\n        .on(\"touchmove.brush\", touchmoved)\n        .on(\"touchend.brush touchcancel.brush\", touchended)\n        .style(\"touch-action\", \"none\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  brush.move = function(group, selection, event) {\n    if (group.tween) {\n      group\n          .on(\"start.brush\", function(event) { emitter(this, arguments).beforestart().start(event); })\n          .on(\"interrupt.brush end.brush\", function(event) { emitter(this, arguments).end(event); })\n          .tween(\"brush\", function() {\n            var that = this,\n                state = that.__brush,\n                emit = emitter(that, arguments),\n                selection0 = state.selection,\n                selection1 = dim.input(typeof selection === \"function\" ? selection.apply(this, arguments) : selection, state.extent),\n                i = interpolate(selection0, selection1);\n\n            function tween(t) {\n              state.selection = t === 1 && selection1 === null ? null : i(t);\n              redraw.call(that);\n              emit.brush();\n            }\n\n            return selection0 !== null && selection1 !== null ? tween : tween(1);\n          });\n    } else {\n      group\n          .each(function() {\n            var that = this,\n                args = arguments,\n                state = that.__brush,\n                selection1 = dim.input(typeof selection === \"function\" ? selection.apply(that, args) : selection, state.extent),\n                emit = emitter(that, args).beforestart();\n\n            interrupt(that);\n            state.selection = selection1 === null ? null : selection1;\n            redraw.call(that);\n            emit.start(event).brush(event).end(event);\n          });\n    }\n  };\n\n  brush.clear = function(group, event) {\n    brush.move(group, null, event);\n  };\n\n  function redraw() {\n    var group = select(this),\n        selection = local(this).selection;\n\n    if (selection) {\n      group.selectAll(\".selection\")\n          .style(\"display\", null)\n          .attr(\"x\", selection[0][0])\n          .attr(\"y\", selection[0][1])\n          .attr(\"width\", selection[1][0] - selection[0][0])\n          .attr(\"height\", selection[1][1] - selection[0][1]);\n\n      group.selectAll(\".handle\")\n          .style(\"display\", null)\n          .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\n          .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\n          .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\n          .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\n    }\n\n    else {\n      group.selectAll(\".selection,.handle\")\n          .style(\"display\", \"none\")\n          .attr(\"x\", null)\n          .attr(\"y\", null)\n          .attr(\"width\", null)\n          .attr(\"height\", null);\n    }\n  }\n\n  function emitter(that, args, clean) {\n    var emit = that.__brush.emitter;\n    return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean);\n  }\n\n  function Emitter(that, args, clean) {\n    this.that = that;\n    this.args = args;\n    this.state = that.__brush;\n    this.active = 0;\n    this.clean = clean;\n  }\n\n  Emitter.prototype = {\n    beforestart: function() {\n      if (++this.active === 1) this.state.emitter = this, this.starting = true;\n      return this;\n    },\n    start: function(event, mode) {\n      if (this.starting) this.starting = false, this.emit(\"start\", event, mode);\n      else this.emit(\"brush\", event);\n      return this;\n    },\n    brush: function(event, mode) {\n      this.emit(\"brush\", event, mode);\n      return this;\n    },\n    end: function(event, mode) {\n      if (--this.active === 0) delete this.state.emitter, this.emit(\"end\", event, mode);\n      return this;\n    },\n    emit: function(type, event, mode) {\n      var d = select(this.that).datum();\n      listeners.call(\n        type,\n        this.that,\n        new BrushEvent(type, {\n          sourceEvent: event,\n          target: brush,\n          selection: dim.output(this.state.selection),\n          mode,\n          dispatch: listeners\n        }),\n        d\n      );\n    }\n  };\n\n  function started(event) {\n    if (touchending && !event.touches) return;\n    if (!filter.apply(this, arguments)) return;\n\n    var that = this,\n        type = event.target.__data__.type,\n        mode = (keys && event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE),\n        signX = dim === Y ? null : signsX[type],\n        signY = dim === X ? null : signsY[type],\n        state = local(that),\n        extent = state.extent,\n        selection = state.selection,\n        W = extent[0][0], w0, w1,\n        N = extent[0][1], n0, n1,\n        E = extent[1][0], e0, e1,\n        S = extent[1][1], s0, s1,\n        dx = 0,\n        dy = 0,\n        moving,\n        shifting = signX && signY && keys && event.shiftKey,\n        lockX,\n        lockY,\n        points = Array.from(event.touches || [event], t => {\n          const i = t.identifier;\n          t = pointer(t, that);\n          t.point0 = t.slice();\n          t.identifier = i;\n          return t;\n        });\n\n    interrupt(that);\n    var emit = emitter(that, arguments, true).beforestart();\n\n    if (type === \"overlay\") {\n      if (selection) moving = true;\n      const pts = [points[0], points[1] || points[0]];\n      state.selection = selection = [[\n          w0 = dim === Y ? W : min(pts[0][0], pts[1][0]),\n          n0 = dim === X ? N : min(pts[0][1], pts[1][1])\n        ], [\n          e0 = dim === Y ? E : max(pts[0][0], pts[1][0]),\n          s0 = dim === X ? S : max(pts[0][1], pts[1][1])\n        ]];\n      if (points.length > 1) move(event);\n    } else {\n      w0 = selection[0][0];\n      n0 = selection[0][1];\n      e0 = selection[1][0];\n      s0 = selection[1][1];\n    }\n\n    w1 = w0;\n    n1 = n0;\n    e1 = e0;\n    s1 = s0;\n\n    var group = select(that)\n        .attr(\"pointer-events\", \"none\");\n\n    var overlay = group.selectAll(\".overlay\")\n        .attr(\"cursor\", cursors[type]);\n\n    if (event.touches) {\n      emit.moved = moved;\n      emit.ended = ended;\n    } else {\n      var view = select(event.view)\n          .on(\"mousemove.brush\", moved, true)\n          .on(\"mouseup.brush\", ended, true);\n      if (keys) view\n          .on(\"keydown.brush\", keydowned, true)\n          .on(\"keyup.brush\", keyupped, true)\n\n      dragDisable(event.view);\n    }\n\n    redraw.call(that);\n    emit.start(event, mode.name);\n\n    function moved(event) {\n      for (const p of event.changedTouches || [event]) {\n        for (const d of points)\n          if (d.identifier === p.identifier) d.cur = pointer(p, that);\n      }\n      if (shifting && !lockX && !lockY && points.length === 1) {\n        const point = points[0];\n        if (abs(point.cur[0] - point[0]) > abs(point.cur[1] - point[1]))\n          lockY = true;\n        else\n          lockX = true;\n      }\n      for (const point of points)\n        if (point.cur) point[0] = point.cur[0], point[1] = point.cur[1];\n      moving = true;\n      noevent(event);\n      move(event);\n    }\n\n    function move(event) {\n      const point = points[0], point0 = point.point0;\n      var t;\n\n      dx = point[0] - point0[0];\n      dy = point[1] - point0[1];\n\n      switch (mode) {\n        case MODE_SPACE:\n        case MODE_DRAG: {\n          if (signX) dx = max(W - w0, min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n          if (signY) dy = max(N - n0, min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n          break;\n        }\n        case MODE_HANDLE: {\n          if (points[1]) {\n            if (signX) w1 = max(W, min(E, points[0][0])), e1 = max(W, min(E, points[1][0])), signX = 1;\n            if (signY) n1 = max(N, min(S, points[0][1])), s1 = max(N, min(S, points[1][1])), signY = 1;\n          } else {\n            if (signX < 0) dx = max(W - w0, min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n            else if (signX > 0) dx = max(W - e0, min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n            if (signY < 0) dy = max(N - n0, min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n            else if (signY > 0) dy = max(N - s0, min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n          }\n          break;\n        }\n        case MODE_CENTER: {\n          if (signX) w1 = max(W, min(E, w0 - dx * signX)), e1 = max(W, min(E, e0 + dx * signX));\n          if (signY) n1 = max(N, min(S, n0 - dy * signY)), s1 = max(N, min(S, s0 + dy * signY));\n          break;\n        }\n      }\n\n      if (e1 < w1) {\n        signX *= -1;\n        t = w0, w0 = e0, e0 = t;\n        t = w1, w1 = e1, e1 = t;\n        if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n      }\n\n      if (s1 < n1) {\n        signY *= -1;\n        t = n0, n0 = s0, s0 = t;\n        t = n1, n1 = s1, s1 = t;\n        if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n      }\n\n      if (state.selection) selection = state.selection; // May be set by brush.move!\n      if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n      if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n      if (selection[0][0] !== w1\n          || selection[0][1] !== n1\n          || selection[1][0] !== e1\n          || selection[1][1] !== s1) {\n        state.selection = [[w1, n1], [e1, s1]];\n        redraw.call(that);\n        emit.brush(event, mode.name);\n      }\n    }\n\n    function ended(event) {\n      nopropagation(event);\n      if (event.touches) {\n        if (event.touches.length) return;\n        if (touchending) clearTimeout(touchending);\n        touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n      } else {\n        dragEnable(event.view, moving);\n        view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n      }\n      group.attr(\"pointer-events\", \"all\");\n      overlay.attr(\"cursor\", cursors.overlay);\n      if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\n      if (empty(selection)) state.selection = null, redraw.call(that);\n      emit.end(event, mode.name);\n    }\n\n    function keydowned(event) {\n      switch (event.keyCode) {\n        case 16: { // SHIFT\n          shifting = signX && signY;\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_HANDLE) {\n            if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n            if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n            mode = MODE_CENTER;\n            move(event);\n          }\n          break;\n        }\n        case 32: { // SPACE; takes priority over ALT\n          if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n            if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n            mode = MODE_SPACE;\n            overlay.attr(\"cursor\", cursors.selection);\n            move(event);\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent(event);\n    }\n\n    function keyupped(event) {\n      switch (event.keyCode) {\n        case 16: { // SHIFT\n          if (shifting) {\n            lockX = lockY = shifting = false;\n            move(event);\n          }\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n            if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n            mode = MODE_HANDLE;\n            move(event);\n          }\n          break;\n        }\n        case 32: { // SPACE\n          if (mode === MODE_SPACE) {\n            if (event.altKey) {\n              if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n              if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n              mode = MODE_CENTER;\n            } else {\n              if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n              if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n              mode = MODE_HANDLE;\n            }\n            overlay.attr(\"cursor\", cursors[type]);\n            move(event);\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent(event);\n    }\n  }\n\n  function touchmoved(event) {\n    emitter(this, arguments).moved(event);\n  }\n\n  function touchended(event) {\n    emitter(this, arguments).ended(event);\n  }\n\n  function initialize() {\n    var state = this.__brush || {selection: null};\n    state.extent = number2(extent.apply(this, arguments));\n    state.dim = dim;\n    return state;\n  }\n\n  brush.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant(number2(_)), brush) : extent;\n  };\n\n  brush.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), brush) : filter;\n  };\n\n  brush.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), brush) : touchable;\n  };\n\n  brush.handleSize = function(_) {\n    return arguments.length ? (handleSize = +_, brush) : handleSize;\n  };\n\n  brush.keyModifiers = function(_) {\n    return arguments.length ? (keys = !!_, brush) : keys;\n  };\n\n  brush.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? brush : value;\n  };\n\n  return brush;\n}\n", "const pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n  this._ += strings[0];\n  for (let i = 1, n = strings.length; i < n; ++i) {\n    this._ += arguments[i] + strings[i];\n  }\n}\n\nfunction appendRound(digits) {\n  let d = Math.floor(digits);\n  if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n  if (d > 15) return append;\n  const k = 10 ** d;\n  return function(strings) {\n    this._ += strings[0];\n    for (let i = 1, n = strings.length; i < n; ++i) {\n      this._ += Math.round(arguments[i] * k) / k + strings[i];\n    }\n  };\n}\n\nexport class Path {\n  constructor(digits) {\n    this._x0 = this._y0 = // start of current subpath\n    this._x1 = this._y1 = null; // end of current subpath\n    this._ = \"\";\n    this._append = digits == null ? append : appendRound(digits);\n  }\n  moveTo(x, y) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n  }\n  closePath() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._append`Z`;\n    }\n  }\n  lineTo(x, y) {\n    this._append`L${this._x1 = +x},${this._y1 = +y}`;\n  }\n  quadraticCurveTo(x1, y1, x, y) {\n    this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  bezierCurveTo(x1, y1, x2, y2, x, y) {\n    this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  arcTo(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let x0 = this._x1,\n        y0 = this._y1,\n        x21 = x2 - x1,\n        y21 = y2 - y1,\n        x01 = x0 - x1,\n        y01 = y0 - y1,\n        l01_2 = x01 * x01 + y01 * y01;\n\n    // Is this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._append`M${this._x1 = x1},${this._y1 = y1}`;\n    }\n\n    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n    else if (!(l01_2 > epsilon));\n\n    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n    // Equivalently, is (x1,y1) coincident with (x2,y2)?\n    // Or, is the radius zero? Line to (x1,y1).\n    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n      this._append`L${this._x1 = x1},${this._y1 = y1}`;\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      let x20 = x2 - x0,\n          y20 = y2 - y0,\n          l21_2 = x21 * x21 + y21 * y21,\n          l20_2 = x20 * x20 + y20 * y20,\n          l21 = Math.sqrt(l21_2),\n          l01 = Math.sqrt(l01_2),\n          l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n          t01 = l / l01,\n          t21 = l / l21;\n\n      // If the start tangent is not coincident with (x0,y0), line to.\n      if (Math.abs(t01 - 1) > epsilon) {\n        this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n      }\n\n      this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n    }\n  }\n  arc(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let dx = r * Math.cos(a0),\n        dy = r * Math.sin(a0),\n        x0 = x + dx,\n        y0 = y + dy,\n        cw = 1 ^ ccw,\n        da = ccw ? a0 - a1 : a1 - a0;\n\n    // Is this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._append`M${x0},${y0}`;\n    }\n\n    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n      this._append`L${x0},${y0}`;\n    }\n\n    // Is this arc empty? We\u2019re done.\n    if (!r) return;\n\n    // Does the angle go the wrong way? Flip the direction.\n    if (da < 0) da = da % tau + tau;\n\n    // Is this a complete circle? Draw two arcs to complete the circle.\n    if (da > tauEpsilon) {\n      this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n    }\n\n    // Is this arc non-empty? Draw an arc!\n    else if (da > epsilon) {\n      this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n    }\n  }\n  rect(x, y, w, h) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n  }\n  toString() {\n    return this._;\n  }\n}\n\nexport function path() {\n  return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n  return new Path(+digits);\n}\n", "export default function(x) {\n  return Math.abs(x = Math.round(x)) >= 1e21\n      ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n      : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, \u00B1Infinity\n  var i, coefficient = x.slice(0, i);\n\n  // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n  // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n  return [\n    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n    +x.slice(i + 1)\n  ];\n}\n", "import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n  return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n", "export default function(grouping, thousands) {\n  return function(value, width) {\n    var i = value.length,\n        t = [],\n        j = 0,\n        g = grouping[0],\n        length = 0;\n\n    while (i > 0 && g > 0) {\n      if (length + g + 1 > width) g = Math.max(1, width - length);\n      t.push(value.substring(i -= g, i + g));\n      if ((length += g + 1) > width) break;\n      g = grouping[j = (j + 1) % grouping.length];\n    }\n\n    return t.reverse().join(thousands);\n  };\n}\n", "export default function(numerals) {\n  return function(value) {\n    return value.replace(/[0-9]/g, function(i) {\n      return numerals[+i];\n    });\n  };\n}\n", "// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n  var match;\n  return new FormatSpecifier({\n    fill: match[1],\n    align: match[2],\n    sign: match[3],\n    symbol: match[4],\n    zero: match[5],\n    width: match[6],\n    comma: match[7],\n    precision: match[8] && match[8].slice(1),\n    trim: match[9],\n    type: match[10]\n  });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n  this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n  this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n  this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n  this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n  this.zero = !!specifier.zero;\n  this.width = specifier.width === undefined ? undefined : +specifier.width;\n  this.comma = !!specifier.comma;\n  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n  this.trim = !!specifier.trim;\n  this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n  return this.fill\n      + this.align\n      + this.sign\n      + this.symbol\n      + (this.zero ? \"0\" : \"\")\n      + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n      + (this.comma ? \",\" : \"\")\n      + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n      + (this.trim ? \"~\" : \"\")\n      + this.type;\n};\n", "// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n    switch (s[i]) {\n      case \".\": i0 = i1 = i; break;\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n      default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n", "import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1],\n      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n      n = coefficient.length;\n  return i === n ? coefficient\n      : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n      : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n      : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n", "import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1];\n  return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n      : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n", "import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n  \"%\": (x, p) => (x * 100).toFixed(p),\n  \"b\": (x) => Math.round(x).toString(2),\n  \"c\": (x) => x + \"\",\n  \"d\": formatDecimal,\n  \"e\": (x, p) => x.toExponential(p),\n  \"f\": (x, p) => x.toFixed(p),\n  \"g\": (x, p) => x.toPrecision(p),\n  \"o\": (x) => Math.round(x).toString(8),\n  \"p\": (x, p) => formatRounded(x * 100, p),\n  \"r\": formatRounded,\n  \"s\": formatPrefixAuto,\n  \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n  \"x\": (x) => Math.round(x).toString(16)\n};\n", "export default function(x) {\n  return x;\n}\n", "import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n    prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"\u00B5\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n  var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n      currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n      currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n      decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n      numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n      percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n      minus = locale.minus === undefined ? \"\u2212\" : locale.minus + \"\",\n      nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n  function newFormat(specifier) {\n    specifier = formatSpecifier(specifier);\n\n    var fill = specifier.fill,\n        align = specifier.align,\n        sign = specifier.sign,\n        symbol = specifier.symbol,\n        zero = specifier.zero,\n        width = specifier.width,\n        comma = specifier.comma,\n        precision = specifier.precision,\n        trim = specifier.trim,\n        type = specifier.type;\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // The \"\" type, and any invalid type, is an alias for \".12~g\".\n    else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    // Compute the prefix and suffix.\n    // For SI-prefix, the suffix is lazily computed.\n    var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n        suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n    // What format function should we use?\n    // Is this an integer type?\n    // Can this type generate exponential notation?\n    var formatType = formatTypes[type],\n        maybeSuffix = /[defgprs%]/.test(type);\n\n    // Set the default precision if not specified,\n    // or clamp the specified precision to the supported range.\n    // For significant precision, it must be in [1, 21].\n    // For fixed precision, it must be in [0, 20].\n    precision = precision === undefined ? 6\n        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n        : Math.max(0, Math.min(20, precision));\n\n    function format(value) {\n      var valuePrefix = prefix,\n          valueSuffix = suffix,\n          i, n, c;\n\n      if (type === \"c\") {\n        valueSuffix = formatType(value) + valueSuffix;\n        value = \"\";\n      } else {\n        value = +value;\n\n        // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n        var valueNegative = value < 0 || 1 / value < 0;\n\n        // Perform the initial formatting.\n        value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n        // Trim insignificant zeros.\n        if (trim) value = formatTrim(value);\n\n        // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n        if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n        // Compute the prefix and suffix.\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n        valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n        // Break the formatted value into the integer \u201Cvalue\u201D part that can be\n        // grouped, and fractional or exponential \u201Csuffix\u201D part that is not.\n        if (maybeSuffix) {\n          i = -1, n = value.length;\n          while (++i < n) {\n            if (c = value.charCodeAt(i), 48 > c || c > 57) {\n              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n              value = value.slice(0, i);\n              break;\n            }\n          }\n        }\n      }\n\n      // If the fill character is not \"0\", grouping is applied before padding.\n      if (comma && !zero) value = group(value, Infinity);\n\n      // Compute the padding.\n      var length = valuePrefix.length + value.length + valueSuffix.length,\n          padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n      // If the fill character is \"0\", grouping is applied after padding.\n      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n      // Reconstruct the final output based on the desired alignment.\n      switch (align) {\n        case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n        case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n        case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n        default: value = padding + valuePrefix + value + valueSuffix; break;\n      }\n\n      return numerals(value);\n    }\n\n    format.toString = function() {\n      return specifier + \"\";\n    };\n\n    return format;\n  }\n\n  function formatPrefix(specifier, value) {\n    var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n        e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n        k = Math.pow(10, -e),\n        prefix = prefixes[8 + e / 3];\n    return function(value) {\n      return f(k * value) + prefix;\n    };\n  }\n\n  return {\n    format: newFormat,\n    formatPrefix: formatPrefix\n  };\n}\n", "import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n  thousands: \",\",\n  grouping: [3],\n  currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  format = locale.format;\n  formatPrefix = locale.formatPrefix;\n  return locale;\n}\n", "import exponent from \"./exponent.js\";\n\nexport default function(step) {\n  return Math.max(0, -exponent(Math.abs(step)));\n}\n", "import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n", "import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n  step = Math.abs(step), max = Math.abs(max) - step;\n  return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n", "export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var hypot = Math.hypot;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n  return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n  return (x = sin(x / 2)) * x;\n}\n", "export default function noop() {}\n", "function streamGeometry(geometry, stream) {\n  if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n    streamGeometryType[geometry.type](geometry, stream);\n  }\n}\n\nvar streamObjectType = {\n  Feature: function(object, stream) {\n    streamGeometry(object.geometry, stream);\n  },\n  FeatureCollection: function(object, stream) {\n    var features = object.features, i = -1, n = features.length;\n    while (++i < n) streamGeometry(features[i].geometry, stream);\n  }\n};\n\nvar streamGeometryType = {\n  Sphere: function(object, stream) {\n    stream.sphere();\n  },\n  Point: function(object, stream) {\n    object = object.coordinates;\n    stream.point(object[0], object[1], object[2]);\n  },\n  MultiPoint: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n  },\n  LineString: function(object, stream) {\n    streamLine(object.coordinates, stream, 0);\n  },\n  MultiLineString: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamLine(coordinates[i], stream, 0);\n  },\n  Polygon: function(object, stream) {\n    streamPolygon(object.coordinates, stream);\n  },\n  MultiPolygon: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamPolygon(coordinates[i], stream);\n  },\n  GeometryCollection: function(object, stream) {\n    var geometries = object.geometries, i = -1, n = geometries.length;\n    while (++i < n) streamGeometry(geometries[i], stream);\n  }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n  var i = -1, n = coordinates.length - closed, coordinate;\n  stream.lineStart();\n  while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n  stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n  var i = -1, n = coordinates.length;\n  stream.polygonStart();\n  while (++i < n) streamLine(coordinates[i], stream, 1);\n  stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n  if (object && streamObjectType.hasOwnProperty(object.type)) {\n    streamObjectType[object.type](object, stream);\n  } else {\n    streamGeometry(object, stream);\n  }\n}\n", "import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function spherical(cartesian) {\n  return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n  var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n  return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n  return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n  a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n  return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n  var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n  d[0] /= l, d[1] /= l, d[2] /= l;\n}\n", "export default function(a, b) {\n\n  function compose(x, y) {\n    return x = a(x, y), b(x[0], x[1]);\n  }\n\n  if (a.invert && b.invert) compose.invert = function(x, y) {\n    return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n  };\n\n  return compose;\n}\n", "import compose from \"./compose.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n  if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n  return [lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n  return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n    : rotationLambda(deltaLambda))\n    : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n    : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n  return function(lambda, phi) {\n    lambda += deltaLambda;\n    if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n    return [lambda, phi];\n  };\n}\n\nfunction rotationLambda(deltaLambda) {\n  var rotation = forwardRotationLambda(deltaLambda);\n  rotation.invert = forwardRotationLambda(-deltaLambda);\n  return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n  var cosDeltaPhi = cos(deltaPhi),\n      sinDeltaPhi = sin(deltaPhi),\n      cosDeltaGamma = cos(deltaGamma),\n      sinDeltaGamma = sin(deltaGamma);\n\n  function rotation(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaPhi + x * sinDeltaPhi;\n    return [\n      atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n      asin(k * cosDeltaGamma + y * sinDeltaGamma)\n    ];\n  }\n\n  rotation.invert = function(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaGamma - y * sinDeltaGamma;\n    return [\n      atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n      asin(k * cosDeltaPhi - x * sinDeltaPhi)\n    ];\n  };\n\n  return rotation;\n}\n\nexport default function(rotate) {\n  rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n  function forward(coordinates) {\n    coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  }\n\n  forward.invert = function(coordinates) {\n    coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  };\n\n  return forward;\n}\n", "import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0\u00B0, 0\u00B0], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n  if (!delta) return;\n  var cosRadius = cos(radius),\n      sinRadius = sin(radius),\n      step = direction * delta;\n  if (t0 == null) {\n    t0 = radius + direction * tau;\n    t1 = radius - step / 2;\n  } else {\n    t0 = circleRadius(cosRadius, t0);\n    t1 = circleRadius(cosRadius, t1);\n    if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n  }\n  for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n    point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n    stream.point(point[0], point[1]);\n  }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n  point = cartesian(point), point[0] -= cosRadius;\n  cartesianNormalizeInPlace(point);\n  var radius = acos(-point[1]);\n  return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n  var center = constant([0, 0]),\n      radius = constant(90),\n      precision = constant(6),\n      ring,\n      rotate,\n      stream = {point: point};\n\n  function point(x, y) {\n    ring.push(x = rotate(x, y));\n    x[0] *= degrees, x[1] *= degrees;\n  }\n\n  function circle() {\n    var c = center.apply(this, arguments),\n        r = radius.apply(this, arguments) * radians,\n        p = precision.apply(this, arguments) * radians;\n    ring = [];\n    rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n    circleStream(stream, r, p, 1);\n    c = {type: \"Polygon\", coordinates: [ring]};\n    ring = rotate = null;\n    return c;\n  }\n\n  circle.center = function(_) {\n    return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n  };\n\n  circle.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n  };\n\n  circle.precision = function(_) {\n    return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n  };\n\n  return circle;\n}\n", "import noop from \"../noop.js\";\n\nexport default function() {\n  var lines = [],\n      line;\n  return {\n    point: function(x, y, m) {\n      line.push([x, y, m]);\n    },\n    lineStart: function() {\n      lines.push(line = []);\n    },\n    lineEnd: noop,\n    rejoin: function() {\n      if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n    },\n    result: function() {\n      var result = lines;\n      lines = [];\n      line = null;\n      return result;\n    }\n  };\n}\n", "import {abs, epsilon} from \"./math.js\";\n\nexport default function(a, b) {\n  return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n", "import pointEqual from \"../pointEqual.js\";\nimport {epsilon} from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n  this.x = point;\n  this.z = points;\n  this.o = other; // another intersection\n  this.e = entry; // is an entry?\n  this.v = false; // visited\n  this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n  var subject = [],\n      clip = [],\n      i,\n      n;\n\n  segments.forEach(function(segment) {\n    if ((n = segment.length - 1) <= 0) return;\n    var n, p0 = segment[0], p1 = segment[n], x;\n\n    if (pointEqual(p0, p1)) {\n      if (!p0[2] && !p1[2]) {\n        stream.lineStart();\n        for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n        stream.lineEnd();\n        return;\n      }\n      // handle degenerate cases by moving the point\n      p1[0] += 2 * epsilon;\n    }\n\n    subject.push(x = new Intersection(p0, segment, null, true));\n    clip.push(x.o = new Intersection(p0, null, x, false));\n    subject.push(x = new Intersection(p1, segment, null, false));\n    clip.push(x.o = new Intersection(p1, null, x, true));\n  });\n\n  if (!subject.length) return;\n\n  clip.sort(compareIntersection);\n  link(subject);\n  link(clip);\n\n  for (i = 0, n = clip.length; i < n; ++i) {\n    clip[i].e = startInside = !startInside;\n  }\n\n  var start = subject[0],\n      points,\n      point;\n\n  while (1) {\n    // Find first unvisited intersection.\n    var current = start,\n        isSubject = true;\n    while (current.v) if ((current = current.n) === start) return;\n    points = current.z;\n    stream.lineStart();\n    do {\n      current.v = current.o.v = true;\n      if (current.e) {\n        if (isSubject) {\n          for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.n.x, 1, stream);\n        }\n        current = current.n;\n      } else {\n        if (isSubject) {\n          points = current.p.z;\n          for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.p.x, -1, stream);\n        }\n        current = current.p;\n      }\n      current = current.o;\n      points = current.z;\n      isSubject = !isSubject;\n    } while (!current.v);\n    stream.lineEnd();\n  }\n}\n\nfunction link(array) {\n  if (!(n = array.length)) return;\n  var n,\n      i = 0,\n      a = array[0],\n      b;\n  while (++i < n) {\n    a.n = b = array[i];\n    b.p = a;\n    a = b;\n  }\n  a.n = b = array[0];\n  b.p = a;\n}\n", "import {Adder} from \"d3-array\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, epsilon2, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nfunction longitude(point) {\n  return abs(point[0]) <= pi ? point[0] : sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n  var lambda = longitude(point),\n      phi = point[1],\n      sinPhi = sin(phi),\n      normal = [sin(lambda), -cos(lambda), 0],\n      angle = 0,\n      winding = 0;\n\n  var sum = new Adder();\n\n  if (sinPhi === 1) phi = halfPi + epsilon;\n  else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n  for (var i = 0, n = polygon.length; i < n; ++i) {\n    if (!(m = (ring = polygon[i]).length)) continue;\n    var ring,\n        m,\n        point0 = ring[m - 1],\n        lambda0 = longitude(point0),\n        phi0 = point0[1] / 2 + quarterPi,\n        sinPhi0 = sin(phi0),\n        cosPhi0 = cos(phi0);\n\n    for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n      var point1 = ring[j],\n          lambda1 = longitude(point1),\n          phi1 = point1[1] / 2 + quarterPi,\n          sinPhi1 = sin(phi1),\n          cosPhi1 = cos(phi1),\n          delta = lambda1 - lambda0,\n          sign = delta >= 0 ? 1 : -1,\n          absDelta = sign * delta,\n          antimeridian = absDelta > pi,\n          k = sinPhi0 * sinPhi1;\n\n      sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n      angle += antimeridian ? delta + sign * tau : delta;\n\n      // Are the longitudes either side of the point\u2019s meridian (lambda),\n      // and are the latitudes smaller than the parallel (phi)?\n      if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n        var arc = cartesianCross(cartesian(point0), cartesian(point1));\n        cartesianNormalizeInPlace(arc);\n        var intersection = cartesianCross(normal, arc);\n        cartesianNormalizeInPlace(intersection);\n        var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n        if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n          winding += antimeridian ^ delta >= 0 ? 1 : -1;\n        }\n      }\n    }\n  }\n\n  // First, determine whether the South pole is inside or outside:\n  //\n  // It is inside if:\n  // * the polygon winds around it in a clockwise direction.\n  // * the polygon does not (cumulatively) wind around it, but has a negative\n  //   (counter-clockwise) area.\n  //\n  // Second, count the (signed) number of times a segment crosses a lambda\n  // from the point to the South pole.  If it is zero, then the point is the\n  // same side as the South pole.\n\n  return (angle < -epsilon || angle < epsilon && sum < -epsilon2) ^ (winding & 1);\n}\n", "import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n  return function(sink) {\n    var line = clipLine(sink),\n        ringBuffer = clipBuffer(),\n        ringSink = clipLine(ringBuffer),\n        polygonStarted = false,\n        polygon,\n        segments,\n        ring;\n\n    var clip = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() {\n        clip.point = pointRing;\n        clip.lineStart = ringStart;\n        clip.lineEnd = ringEnd;\n        segments = [];\n        polygon = [];\n      },\n      polygonEnd: function() {\n        clip.point = point;\n        clip.lineStart = lineStart;\n        clip.lineEnd = lineEnd;\n        segments = merge(segments);\n        var startInside = polygonContains(polygon, start);\n        if (segments.length) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n        } else if (startInside) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          interpolate(null, null, 1, sink);\n          sink.lineEnd();\n        }\n        if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n        segments = polygon = null;\n      },\n      sphere: function() {\n        sink.polygonStart();\n        sink.lineStart();\n        interpolate(null, null, 1, sink);\n        sink.lineEnd();\n        sink.polygonEnd();\n      }\n    };\n\n    function point(lambda, phi) {\n      if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n    }\n\n    function pointLine(lambda, phi) {\n      line.point(lambda, phi);\n    }\n\n    function lineStart() {\n      clip.point = pointLine;\n      line.lineStart();\n    }\n\n    function lineEnd() {\n      clip.point = point;\n      line.lineEnd();\n    }\n\n    function pointRing(lambda, phi) {\n      ring.push([lambda, phi]);\n      ringSink.point(lambda, phi);\n    }\n\n    function ringStart() {\n      ringSink.lineStart();\n      ring = [];\n    }\n\n    function ringEnd() {\n      pointRing(ring[0][0], ring[0][1]);\n      ringSink.lineEnd();\n\n      var clean = ringSink.clean(),\n          ringSegments = ringBuffer.result(),\n          i, n = ringSegments.length, m,\n          segment,\n          point;\n\n      ring.pop();\n      polygon.push(ring);\n      ring = null;\n\n      if (!n) return;\n\n      // No intersections.\n      if (clean & 1) {\n        segment = ringSegments[0];\n        if ((m = segment.length - 1) > 0) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n          sink.lineEnd();\n        }\n        return;\n      }\n\n      // Rejoin connected segments.\n      // TODO reuse ringBuffer.rejoin()?\n      if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n      segments.push(ringSegments.filter(validSegment));\n    }\n\n    return clip;\n  };\n}\n\nfunction validSegment(segment) {\n  return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n  return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n       - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n", "import clip from \"./index.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\n\nexport default clip(\n  function() { return true; },\n  clipAntimeridianLine,\n  clipAntimeridianInterpolate,\n  [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n  var lambda0 = NaN,\n      phi0 = NaN,\n      sign0 = NaN,\n      clean; // no intersections\n\n  return {\n    lineStart: function() {\n      stream.lineStart();\n      clean = 1;\n    },\n    point: function(lambda1, phi1) {\n      var sign1 = lambda1 > 0 ? pi : -pi,\n          delta = abs(lambda1 - lambda0);\n      if (abs(delta - pi) < epsilon) { // line crosses a pole\n        stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        stream.point(lambda1, phi0);\n        clean = 0;\n      } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n        if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n        if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n        phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        clean = 0;\n      }\n      stream.point(lambda0 = lambda1, phi0 = phi1);\n      sign0 = sign1;\n    },\n    lineEnd: function() {\n      stream.lineEnd();\n      lambda0 = phi0 = NaN;\n    },\n    clean: function() {\n      return 2 - clean; // if intersections, rejoin first and last segments\n    }\n  };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n  var cosPhi0,\n      cosPhi1,\n      sinLambda0Lambda1 = sin(lambda0 - lambda1);\n  return abs(sinLambda0Lambda1) > epsilon\n      ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n          - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n          / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n      : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n  var phi;\n  if (from == null) {\n    phi = direction * halfPi;\n    stream.point(-pi, phi);\n    stream.point(0, phi);\n    stream.point(pi, phi);\n    stream.point(pi, 0);\n    stream.point(pi, -phi);\n    stream.point(0, -phi);\n    stream.point(-pi, -phi);\n    stream.point(-pi, 0);\n    stream.point(-pi, phi);\n  } else if (abs(from[0] - to[0]) > epsilon) {\n    var lambda = from[0] < to[0] ? pi : -pi;\n    phi = direction * lambda / 2;\n    stream.point(-lambda, phi);\n    stream.point(0, phi);\n    stream.point(lambda, phi);\n  } else {\n    stream.point(to[0], to[1]);\n  }\n}\n", "import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n  var cr = cos(radius),\n      delta = 6 * radians,\n      smallRadius = cr > 0,\n      notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n  function interpolate(from, to, direction, stream) {\n    circleStream(stream, radius, delta, direction, from, to);\n  }\n\n  function visible(lambda, phi) {\n    return cos(lambda) * cos(phi) > cr;\n  }\n\n  // Takes a line and cuts into visible segments. Return values used for polygon\n  // clipping: 0 - there were intersections or the line was empty; 1 - no\n  // intersections 2 - there were intersections, and the first and last segments\n  // should be rejoined.\n  function clipLine(stream) {\n    var point0, // previous point\n        c0, // code for previous point\n        v0, // visibility of previous point\n        v00, // visibility of first point\n        clean; // no intersections\n    return {\n      lineStart: function() {\n        v00 = v0 = false;\n        clean = 1;\n      },\n      point: function(lambda, phi) {\n        var point1 = [lambda, phi],\n            point2,\n            v = visible(lambda, phi),\n            c = smallRadius\n              ? v ? 0 : code(lambda, phi)\n              : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n        if (!point0 && (v00 = v0 = v)) stream.lineStart();\n        if (v !== v0) {\n          point2 = intersect(point0, point1);\n          if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n            point1[2] = 1;\n        }\n        if (v !== v0) {\n          clean = 0;\n          if (v) {\n            // outside going in\n            stream.lineStart();\n            point2 = intersect(point1, point0);\n            stream.point(point2[0], point2[1]);\n          } else {\n            // inside going out\n            point2 = intersect(point0, point1);\n            stream.point(point2[0], point2[1], 2);\n            stream.lineEnd();\n          }\n          point0 = point2;\n        } else if (notHemisphere && point0 && smallRadius ^ v) {\n          var t;\n          // If the codes for two points are different, or are both zero,\n          // and there this segment intersects with the small circle.\n          if (!(c & c0) && (t = intersect(point1, point0, true))) {\n            clean = 0;\n            if (smallRadius) {\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1]);\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n            } else {\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1], 3);\n            }\n          }\n        }\n        if (v && (!point0 || !pointEqual(point0, point1))) {\n          stream.point(point1[0], point1[1]);\n        }\n        point0 = point1, v0 = v, c0 = c;\n      },\n      lineEnd: function() {\n        if (v0) stream.lineEnd();\n        point0 = null;\n      },\n      // Rejoin first and last segments if there were intersections and the first\n      // and last points were visible.\n      clean: function() {\n        return clean | ((v00 && v0) << 1);\n      }\n    };\n  }\n\n  // Intersects the great circle between a and b with the clip circle.\n  function intersect(a, b, two) {\n    var pa = cartesian(a),\n        pb = cartesian(b);\n\n    // We have two planes, n1.p = d1 and n2.p = d2.\n    // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 \u2A2F n2).\n    var n1 = [1, 0, 0], // normal\n        n2 = cartesianCross(pa, pb),\n        n2n2 = cartesianDot(n2, n2),\n        n1n2 = n2[0], // cartesianDot(n1, n2),\n        determinant = n2n2 - n1n2 * n1n2;\n\n    // Two polar points.\n    if (!determinant) return !two && a;\n\n    var c1 =  cr * n2n2 / determinant,\n        c2 = -cr * n1n2 / determinant,\n        n1xn2 = cartesianCross(n1, n2),\n        A = cartesianScale(n1, c1),\n        B = cartesianScale(n2, c2);\n    cartesianAddInPlace(A, B);\n\n    // Solve |p(t)|^2 = 1.\n    var u = n1xn2,\n        w = cartesianDot(A, u),\n        uu = cartesianDot(u, u),\n        t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n    if (t2 < 0) return;\n\n    var t = sqrt(t2),\n        q = cartesianScale(u, (-w - t) / uu);\n    cartesianAddInPlace(q, A);\n    q = spherical(q);\n\n    if (!two) return q;\n\n    // Two intersection points.\n    var lambda0 = a[0],\n        lambda1 = b[0],\n        phi0 = a[1],\n        phi1 = b[1],\n        z;\n\n    if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n    var delta = lambda1 - lambda0,\n        polar = abs(delta - pi) < epsilon,\n        meridian = polar || delta < epsilon;\n\n    if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n    // Check that the first point is between a and b.\n    if (meridian\n        ? polar\n          ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n          : phi0 <= q[1] && q[1] <= phi1\n        : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n      var q1 = cartesianScale(u, (-w + t) / uu);\n      cartesianAddInPlace(q1, A);\n      return [q, spherical(q1)];\n    }\n  }\n\n  // Generates a 4-bit vector representing the location of a point relative to\n  // the small circle's bounding box.\n  function code(lambda, phi) {\n    var r = smallRadius ? radius : pi - radius,\n        code = 0;\n    if (lambda < -r) code |= 1; // left\n    else if (lambda > r) code |= 2; // right\n    if (phi < -r) code |= 4; // below\n    else if (phi > r) code |= 8; // above\n    return code;\n  }\n\n  return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n", "export default function(a, b, x0, y0, x1, y1) {\n  var ax = a[0],\n      ay = a[1],\n      bx = b[0],\n      by = b[1],\n      t0 = 0,\n      t1 = 1,\n      dx = bx - ax,\n      dy = by - ay,\n      r;\n\n  r = x0 - ax;\n  if (!dx && r > 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dx > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = x1 - ax;\n  if (!dx && r < 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dx > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  r = y0 - ay;\n  if (!dy && r > 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dy > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = y1 - ay;\n  if (!dy && r < 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dy > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n  if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n  return true;\n}\n", "import {abs, epsilon} from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon\u2019s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n  function visible(x, y) {\n    return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n  }\n\n  function interpolate(from, to, direction, stream) {\n    var a = 0, a1 = 0;\n    if (from == null\n        || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n        || comparePoint(from, to) < 0 ^ direction > 0) {\n      do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n      while ((a = (a + direction + 4) % 4) !== a1);\n    } else {\n      stream.point(to[0], to[1]);\n    }\n  }\n\n  function corner(p, direction) {\n    return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n        : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n        : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n        : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n  }\n\n  function compareIntersection(a, b) {\n    return comparePoint(a.x, b.x);\n  }\n\n  function comparePoint(a, b) {\n    var ca = corner(a, 1),\n        cb = corner(b, 1);\n    return ca !== cb ? ca - cb\n        : ca === 0 ? b[1] - a[1]\n        : ca === 1 ? a[0] - b[0]\n        : ca === 2 ? a[1] - b[1]\n        : b[0] - a[0];\n  }\n\n  return function(stream) {\n    var activeStream = stream,\n        bufferStream = clipBuffer(),\n        segments,\n        polygon,\n        ring,\n        x__, y__, v__, // first point\n        x_, y_, v_, // previous point\n        first,\n        clean;\n\n    var clipStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: polygonStart,\n      polygonEnd: polygonEnd\n    };\n\n    function point(x, y) {\n      if (visible(x, y)) activeStream.point(x, y);\n    }\n\n    function polygonInside() {\n      var winding = 0;\n\n      for (var i = 0, n = polygon.length; i < n; ++i) {\n        for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n          a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n          if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n          else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n        }\n      }\n\n      return winding;\n    }\n\n    // Buffer geometry within a polygon and then clip it en masse.\n    function polygonStart() {\n      activeStream = bufferStream, segments = [], polygon = [], clean = true;\n    }\n\n    function polygonEnd() {\n      var startInside = polygonInside(),\n          cleanInside = clean && startInside,\n          visible = (segments = merge(segments)).length;\n      if (cleanInside || visible) {\n        stream.polygonStart();\n        if (cleanInside) {\n          stream.lineStart();\n          interpolate(null, null, 1, stream);\n          stream.lineEnd();\n        }\n        if (visible) {\n          clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n        }\n        stream.polygonEnd();\n      }\n      activeStream = stream, segments = polygon = ring = null;\n    }\n\n    function lineStart() {\n      clipStream.point = linePoint;\n      if (polygon) polygon.push(ring = []);\n      first = true;\n      v_ = false;\n      x_ = y_ = NaN;\n    }\n\n    // TODO rather than special-case polygons, simply handle them separately.\n    // Ideally, coincident intersection points should be jittered to avoid\n    // clipping issues.\n    function lineEnd() {\n      if (segments) {\n        linePoint(x__, y__);\n        if (v__ && v_) bufferStream.rejoin();\n        segments.push(bufferStream.result());\n      }\n      clipStream.point = point;\n      if (v_) activeStream.lineEnd();\n    }\n\n    function linePoint(x, y) {\n      var v = visible(x, y);\n      if (polygon) ring.push([x, y]);\n      if (first) {\n        x__ = x, y__ = y, v__ = v;\n        first = false;\n        if (v) {\n          activeStream.lineStart();\n          activeStream.point(x, y);\n        }\n      } else {\n        if (v && v_) activeStream.point(x, y);\n        else {\n          var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n              b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n          if (clipLine(a, b, x0, y0, x1, y1)) {\n            if (!v_) {\n              activeStream.lineStart();\n              activeStream.point(a[0], a[1]);\n            }\n            activeStream.point(b[0], b[1]);\n            if (!v) activeStream.lineEnd();\n            clean = false;\n          } else if (v) {\n            activeStream.lineStart();\n            activeStream.point(x, y);\n            clean = false;\n          }\n        }\n      }\n      x_ = x, y_ = y, v_ = v;\n    }\n\n    return clipStream;\n  };\n}\n", "export default x => x;\n", "import {Adder} from \"d3-array\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = new Adder(),\n    areaRingSum = new Adder(),\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar areaStream = {\n  point: noop,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: function() {\n    areaStream.lineStart = areaRingStart;\n    areaStream.lineEnd = areaRingEnd;\n  },\n  polygonEnd: function() {\n    areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n    areaSum.add(abs(areaRingSum));\n    areaRingSum = new Adder();\n  },\n  result: function() {\n    var area = areaSum / 2;\n    areaSum = new Adder();\n    return area;\n  }\n};\n\nfunction areaRingStart() {\n  areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n  areaStream.point = areaPoint;\n  x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n  areaRingSum.add(y0 * x - x0 * y);\n  x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n  areaPoint(x00, y00);\n}\n\nexport default areaStream;\n", "import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n    y0 = x0,\n    x1 = -x0,\n    y1 = x1;\n\nvar boundsStream = {\n  point: boundsPoint,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: noop,\n  polygonEnd: noop,\n  result: function() {\n    var bounds = [[x0, y0], [x1, y1]];\n    x1 = y1 = -(y0 = x0 = Infinity);\n    return bounds;\n  }\n};\n\nfunction boundsPoint(x, y) {\n  if (x < x0) x0 = x;\n  if (x > x1) x1 = x;\n  if (y < y0) y0 = y;\n  if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n", "import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n    Y0 = 0,\n    Z0 = 0,\n    X1 = 0,\n    Y1 = 0,\n    Z1 = 0,\n    X2 = 0,\n    Y2 = 0,\n    Z2 = 0,\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar centroidStream = {\n  point: centroidPoint,\n  lineStart: centroidLineStart,\n  lineEnd: centroidLineEnd,\n  polygonStart: function() {\n    centroidStream.lineStart = centroidRingStart;\n    centroidStream.lineEnd = centroidRingEnd;\n  },\n  polygonEnd: function() {\n    centroidStream.point = centroidPoint;\n    centroidStream.lineStart = centroidLineStart;\n    centroidStream.lineEnd = centroidLineEnd;\n  },\n  result: function() {\n    var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n        : Z1 ? [X1 / Z1, Y1 / Z1]\n        : Z0 ? [X0 / Z0, Y0 / Z0]\n        : [NaN, NaN];\n    X0 = Y0 = Z0 =\n    X1 = Y1 = Z1 =\n    X2 = Y2 = Z2 = 0;\n    return centroid;\n  }\n};\n\nfunction centroidPoint(x, y) {\n  X0 += x;\n  Y0 += y;\n  ++Z0;\n}\n\nfunction centroidLineStart() {\n  centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n  centroidStream.point = centroidPointLine;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n  var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n  X1 += z * (x0 + x) / 2;\n  Y1 += z * (y0 + y) / 2;\n  Z1 += z;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n  centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n  centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n  centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n  centroidStream.point = centroidPointRing;\n  centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n  var dx = x - x0,\n      dy = y - y0,\n      z = sqrt(dx * dx + dy * dy);\n\n  X1 += z * (x0 + x) / 2;\n  Y1 += z * (y0 + y) / 2;\n  Z1 += z;\n\n  z = y0 * x - x0 * y;\n  X2 += z * (x0 + x);\n  Y2 += z * (y0 + y);\n  Z2 += z * 3;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n", "import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n  this._context = context;\n}\n\nPathContext.prototype = {\n  _radius: 4.5,\n  pointRadius: function(_) {\n    return this._radius = _, this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._context.closePath();\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._context.moveTo(x, y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._context.lineTo(x, y);\n        break;\n      }\n      default: {\n        this._context.moveTo(x + this._radius, y);\n        this._context.arc(x, y, this._radius, 0, tau);\n        break;\n      }\n    }\n  },\n  result: noop\n};\n", "import {Adder} from \"d3-array\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = new Adder(),\n    lengthRing,\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar lengthStream = {\n  point: noop,\n  lineStart: function() {\n    lengthStream.point = lengthPointFirst;\n  },\n  lineEnd: function() {\n    if (lengthRing) lengthPoint(x00, y00);\n    lengthStream.point = noop;\n  },\n  polygonStart: function() {\n    lengthRing = true;\n  },\n  polygonEnd: function() {\n    lengthRing = null;\n  },\n  result: function() {\n    var length = +lengthSum;\n    lengthSum = new Adder();\n    return length;\n  }\n};\n\nfunction lengthPointFirst(x, y) {\n  lengthStream.point = lengthPoint;\n  x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n  x0 -= x, y0 -= y;\n  lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n  x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n", "// Simple caching for constant-radius points.\nlet cacheDigits, cacheAppend, cacheRadius, cacheCircle;\n\nexport default class PathString {\n  constructor(digits) {\n    this._append = digits == null ? append : appendRound(digits);\n    this._radius = 4.5;\n    this._ = \"\";\n  }\n  pointRadius(_) {\n    this._radius = +_;\n    return this;\n  }\n  polygonStart() {\n    this._line = 0;\n  }\n  polygonEnd() {\n    this._line = NaN;\n  }\n  lineStart() {\n    this._point = 0;\n  }\n  lineEnd() {\n    if (this._line === 0) this._ += \"Z\";\n    this._point = NaN;\n  }\n  point(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._append`M${x},${y}`;\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._append`L${x},${y}`;\n        break;\n      }\n      default: {\n        this._append`M${x},${y}`;\n        if (this._radius !== cacheRadius || this._append !== cacheAppend) {\n          const r = this._radius;\n          const s = this._;\n          this._ = \"\"; // stash the old string so we can cache the circle path fragment\n          this._append`m0,${r}a${r},${r} 0 1,1 0,${-2 * r}a${r},${r} 0 1,1 0,${2 * r}z`;\n          cacheRadius = r;\n          cacheAppend = this._append;\n          cacheCircle = this._;\n          this._ = s;\n        }\n        this._ += cacheCircle;\n        break;\n      }\n    }\n  }\n  result() {\n    const result = this._;\n    this._ = \"\";\n    return result.length ? result : null;\n  }\n}\n\nfunction append(strings) {\n  let i = 1;\n  this._ += strings[0];\n  for (const j = strings.length; i < j; ++i) {\n    this._ += arguments[i] + strings[i];\n  }\n}\n\nfunction appendRound(digits) {\n  const d = Math.floor(digits);\n  if (!(d >= 0)) throw new RangeError(`invalid digits: ${digits}`);\n  if (d > 15) return append;\n  if (d !== cacheDigits) {\n    const k = 10 ** d;\n    cacheDigits = d;\n    cacheAppend = function append(strings) {\n      let i = 1;\n      this._ += strings[0];\n      for (const j = strings.length; i < j; ++i) {\n        this._ += Math.round(arguments[i] * k) / k + strings[i];\n      }\n    };\n  }\n  return cacheAppend;\n}\n", "import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n  let digits = 3,\n      pointRadius = 4.5,\n      projectionStream,\n      contextStream;\n\n  function path(object) {\n    if (object) {\n      if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n      stream(object, projectionStream(contextStream));\n    }\n    return contextStream.result();\n  }\n\n  path.area = function(object) {\n    stream(object, projectionStream(pathArea));\n    return pathArea.result();\n  };\n\n  path.measure = function(object) {\n    stream(object, projectionStream(pathMeasure));\n    return pathMeasure.result();\n  };\n\n  path.bounds = function(object) {\n    stream(object, projectionStream(pathBounds));\n    return pathBounds.result();\n  };\n\n  path.centroid = function(object) {\n    stream(object, projectionStream(pathCentroid));\n    return pathCentroid.result();\n  };\n\n  path.projection = function(_) {\n    if (!arguments.length) return projection;\n    projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream;\n    return path;\n  };\n\n  path.context = function(_) {\n    if (!arguments.length) return context;\n    contextStream = _ == null ? (context = null, new PathString(digits)) : new PathContext(context = _);\n    if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n    return path;\n  };\n\n  path.pointRadius = function(_) {\n    if (!arguments.length) return pointRadius;\n    pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n    return path;\n  };\n\n  path.digits = function(_) {\n    if (!arguments.length) return digits;\n    if (_ == null) digits = null;\n    else {\n      const d = Math.floor(_);\n      if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n      digits = d;\n    }\n    if (context === null) contextStream = new PathString(digits);\n    return path;\n  };\n\n  return path.projection(projection).digits(digits).context(context);\n}\n", "export default function(methods) {\n  return {\n    stream: transformer(methods)\n  };\n}\n\nexport function transformer(methods) {\n  return function(stream) {\n    var s = new TransformStream;\n    for (var key in methods) s[key] = methods[key];\n    s.stream = stream;\n    return s;\n  };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n  constructor: TransformStream,\n  point: function(x, y) { this.stream.point(x, y); },\n  sphere: function() { this.stream.sphere(); },\n  lineStart: function() { this.stream.lineStart(); },\n  lineEnd: function() { this.stream.lineEnd(); },\n  polygonStart: function() { this.stream.polygonStart(); },\n  polygonEnd: function() { this.stream.polygonEnd(); }\n};\n", "import {default as geoStream} from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n  var clip = projection.clipExtent && projection.clipExtent();\n  projection.scale(150).translate([0, 0]);\n  if (clip != null) projection.clipExtent(null);\n  geoStream(object, projection.stream(boundsStream));\n  fitBounds(boundsStream.result());\n  if (clip != null) projection.clipExtent(clip);\n  return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n  return fit(projection, function(b) {\n    var w = extent[1][0] - extent[0][0],\n        h = extent[1][1] - extent[0][1],\n        k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n        x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n        y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nexport function fitSize(projection, size, object) {\n  return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n  return fit(projection, function(b) {\n    var w = +width,\n        k = w / (b[1][0] - b[0][0]),\n        x = (w - k * (b[1][0] + b[0][0])) / 2,\n        y = -k * b[0][1];\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n  return fit(projection, function(b) {\n    var h = +height,\n        k = h / (b[1][1] - b[0][1]),\n        x = -k * b[0][0],\n        y = (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n", "import {cartesian} from \"../cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n    cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n  return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n  return transformer({\n    point: function(x, y) {\n      x = project(x, y);\n      this.stream.point(x[0], x[1]);\n    }\n  });\n}\n\nfunction resample(project, delta2) {\n\n  function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n    var dx = x1 - x0,\n        dy = y1 - y0,\n        d2 = dx * dx + dy * dy;\n    if (d2 > 4 * delta2 && depth--) {\n      var a = a0 + a1,\n          b = b0 + b1,\n          c = c0 + c1,\n          m = sqrt(a * a + b * b + c * c),\n          phi2 = asin(c /= m),\n          lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n          p = project(lambda2, phi2),\n          x2 = p[0],\n          y2 = p[1],\n          dx2 = x2 - x0,\n          dy2 = y2 - y0,\n          dz = dy * dx2 - dx * dy2;\n      if (dz * dz / d2 > delta2 // perpendicular projected distance\n          || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n          || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n        resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n        stream.point(x2, y2);\n        resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n      }\n    }\n  }\n  return function(stream) {\n    var lambda00, x00, y00, a00, b00, c00, // first point\n        lambda0, x0, y0, a0, b0, c0; // previous point\n\n    var resampleStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n      polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n    };\n\n    function point(x, y) {\n      x = project(x, y);\n      stream.point(x[0], x[1]);\n    }\n\n    function lineStart() {\n      x0 = NaN;\n      resampleStream.point = linePoint;\n      stream.lineStart();\n    }\n\n    function linePoint(lambda, phi) {\n      var c = cartesian([lambda, phi]), p = project(lambda, phi);\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n      stream.point(x0, y0);\n    }\n\n    function lineEnd() {\n      resampleStream.point = point;\n      stream.lineEnd();\n    }\n\n    function ringStart() {\n      lineStart();\n      resampleStream.point = ringPoint;\n      resampleStream.lineEnd = ringEnd;\n    }\n\n    function ringPoint(lambda, phi) {\n      linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n      resampleStream.point = linePoint;\n    }\n\n    function ringEnd() {\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n      resampleStream.lineEnd = lineEnd;\n      lineEnd();\n    }\n\n    return resampleStream;\n  };\n}\n", "import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\n\nvar transformRadians = transformer({\n  point: function(x, y) {\n    this.stream.point(x * radians, y * radians);\n  }\n});\n\nfunction transformRotate(rotate) {\n  return transformer({\n    point: function(x, y) {\n      var r = rotate(x, y);\n      return this.stream.point(r[0], r[1]);\n    }\n  });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n  function transform(x, y) {\n    x *= sx; y *= sy;\n    return [dx + k * x, dy - k * y];\n  }\n  transform.invert = function(x, y) {\n    return [(x - dx) / k * sx, (dy - y) / k * sy];\n  };\n  return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n  if (!alpha) return scaleTranslate(k, dx, dy, sx, sy);\n  var cosAlpha = cos(alpha),\n      sinAlpha = sin(alpha),\n      a = cosAlpha * k,\n      b = sinAlpha * k,\n      ai = cosAlpha / k,\n      bi = sinAlpha / k,\n      ci = (sinAlpha * dy - cosAlpha * dx) / k,\n      fi = (sinAlpha * dx + cosAlpha * dy) / k;\n  function transform(x, y) {\n    x *= sx; y *= sy;\n    return [a * x - b * y + dx, dy - b * x - a * y];\n  }\n  transform.invert = function(x, y) {\n    return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n  };\n  return transform;\n}\n\nexport default function projection(project) {\n  return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n  var project,\n      k = 150, // scale\n      x = 480, y = 250, // translate\n      lambda = 0, phi = 0, // center\n      deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n      alpha = 0, // post-rotate angle\n      sx = 1, // reflectX\n      sy = 1, // reflectX\n      theta = null, preclip = clipAntimeridian, // pre-clip angle\n      x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n      delta2 = 0.5, // precision\n      projectResample,\n      projectTransform,\n      projectRotateTransform,\n      cache,\n      cacheStream;\n\n  function projection(point) {\n    return projectRotateTransform(point[0] * radians, point[1] * radians);\n  }\n\n  function invert(point) {\n    point = projectRotateTransform.invert(point[0], point[1]);\n    return point && [point[0] * degrees, point[1] * degrees];\n  }\n\n  projection.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n  };\n\n  projection.preclip = function(_) {\n    return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n  };\n\n  projection.postclip = function(_) {\n    return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n  };\n\n  projection.clipAngle = function(_) {\n    return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n  };\n\n  projection.clipExtent = function(_) {\n    return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  projection.scale = function(_) {\n    return arguments.length ? (k = +_, recenter()) : k;\n  };\n\n  projection.translate = function(_) {\n    return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n  };\n\n  projection.center = function(_) {\n    return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n  };\n\n  projection.rotate = function(_) {\n    return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n  };\n\n  projection.angle = function(_) {\n    return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n  };\n\n  projection.reflectX = function(_) {\n    return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n  };\n\n  projection.reflectY = function(_) {\n    return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n  };\n\n  projection.precision = function(_) {\n    return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n  };\n\n  projection.fitExtent = function(extent, object) {\n    return fitExtent(projection, extent, object);\n  };\n\n  projection.fitSize = function(size, object) {\n    return fitSize(projection, size, object);\n  };\n\n  projection.fitWidth = function(width, object) {\n    return fitWidth(projection, width, object);\n  };\n\n  projection.fitHeight = function(height, object) {\n    return fitHeight(projection, height, object);\n  };\n\n  function recenter() {\n    var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n        transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, alpha);\n    rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n    projectTransform = compose(project, transform);\n    projectRotateTransform = compose(rotate, projectTransform);\n    projectResample = resample(projectTransform, delta2);\n    return reset();\n  }\n\n  function reset() {\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  return function() {\n    project = projectAt.apply(this, arguments);\n    projection.invert = project.invert && invert;\n    return recenter();\n  };\n}\n", "import {degrees, pi, radians} from \"../math.js\";\nimport {projectionMutator} from \"./index.js\";\n\nexport function conicProjection(projectAt) {\n  var phi0 = 0,\n      phi1 = pi / 3,\n      m = projectionMutator(projectAt),\n      p = m(phi0, phi1);\n\n  p.parallels = function(_) {\n    return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n  };\n\n  return p;\n}\n", "import {asin, cos, sin} from \"../math.js\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n  var cosPhi0 = cos(phi0);\n\n  function forward(lambda, phi) {\n    return [lambda * cosPhi0, sin(phi) / cosPhi0];\n  }\n\n  forward.invert = function(x, y) {\n    return [x / cosPhi0, asin(y * cosPhi0)];\n  };\n\n  return forward;\n}\n", "import {abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea.js\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n  var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n  // Are the parallels symmetrical around the Equator?\n  if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n  var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n  function project(x, y) {\n    var r = sqrt(c - 2 * n * sin(y)) / n;\n    return [r * sin(x *= n), r0 - r * cos(x)];\n  }\n\n  project.invert = function(x, y) {\n    var r0y = r0 - y,\n        l = atan2(x, abs(r0y)) * sign(r0y);\n    if (r0y * n < 0)\n      l -= pi * sign(x) * sign(r0y);\n    return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n  };\n\n  return project;\n}\n\nexport default function() {\n  return conicProjection(conicEqualAreaRaw)\n      .scale(155.424)\n      .center([0, 33.6442]);\n}\n", "import conicEqualArea from \"./conicEqualArea.js\";\n\nexport default function() {\n  return conicEqualArea()\n      .parallels([29.5, 45.5])\n      .scale(1070)\n      .translate([480, 250])\n      .rotate([96, 0])\n      .center([-0.6, 38.7]);\n}\n", "import {epsilon} from \"../math.js\";\nimport albers from \"./albers.js\";\nimport conicEqualArea from \"./conicEqualArea.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n  var n = streams.length;\n  return {\n    point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n    sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n    lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n    lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n    polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n    polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n  };\n}\n\n// A composite projection for the United States, configured by default for\n// 960\u00D7500. The projection also works quite well at 960\u00D7600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nexport default function() {\n  var cache,\n      cacheStream,\n      lower48 = albers(), lower48Point,\n      alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n      hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n      point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n  function albersUsa(coordinates) {\n    var x = coordinates[0], y = coordinates[1];\n    return point = null,\n        (lower48Point.point(x, y), point)\n        || (alaskaPoint.point(x, y), point)\n        || (hawaiiPoint.point(x, y), point);\n  }\n\n  albersUsa.invert = function(coordinates) {\n    var k = lower48.scale(),\n        t = lower48.translate(),\n        x = (coordinates[0] - t[0]) / k,\n        y = (coordinates[1] - t[1]) / k;\n    return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n        : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n        : lower48).invert(coordinates);\n  };\n\n  albersUsa.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n  };\n\n  albersUsa.precision = function(_) {\n    if (!arguments.length) return lower48.precision();\n    lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n    return reset();\n  };\n\n  albersUsa.scale = function(_) {\n    if (!arguments.length) return lower48.scale();\n    lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n    return albersUsa.translate(lower48.translate());\n  };\n\n  albersUsa.translate = function(_) {\n    if (!arguments.length) return lower48.translate();\n    var k = lower48.scale(), x = +_[0], y = +_[1];\n\n    lower48Point = lower48\n        .translate(_)\n        .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n        .stream(pointStream);\n\n    alaskaPoint = alaska\n        .translate([x - 0.307 * k, y + 0.201 * k])\n        .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n        .stream(pointStream);\n\n    hawaiiPoint = hawaii\n        .translate([x - 0.205 * k, y + 0.212 * k])\n        .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n        .stream(pointStream);\n\n    return reset();\n  };\n\n  albersUsa.fitExtent = function(extent, object) {\n    return fitExtent(albersUsa, extent, object);\n  };\n\n  albersUsa.fitSize = function(size, object) {\n    return fitSize(albersUsa, size, object);\n  };\n\n  albersUsa.fitWidth = function(width, object) {\n    return fitWidth(albersUsa, width, object);\n  };\n\n  albersUsa.fitHeight = function(height, object) {\n    return fitHeight(albersUsa, height, object);\n  };\n\n  function reset() {\n    cache = cacheStream = null;\n    return albersUsa;\n  }\n\n  return albersUsa.scale(1070);\n}\n", "import {asin, atan2, cos, sin, sqrt} from \"../math.js\";\n\nexport function azimuthalRaw(scale) {\n  return function(x, y) {\n    var cx = cos(x),\n        cy = cos(y),\n        k = scale(cx * cy);\n        if (k === Infinity) return [2, 0];\n    return [\n      k * cy * sin(x),\n      k * sin(y)\n    ];\n  }\n}\n\nexport function azimuthalInvert(angle) {\n  return function(x, y) {\n    var z = sqrt(x * x + y * y),\n        c = angle(z),\n        sc = sin(c),\n        cc = cos(c);\n    return [\n      atan2(x * sc, z * cc),\n      asin(z && y * sc / z)\n    ];\n  }\n}\n", "import {asin, sqrt} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n  return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n  return 2 * asin(z / 2);\n});\n\nexport default function() {\n  return projection(azimuthalEqualAreaRaw)\n      .scale(124.75)\n      .clipAngle(180 - 1e-3);\n}\n", "import {acos, sin} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n  return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n  return z;\n});\n\nexport default function() {\n  return projection(azimuthalEquidistantRaw)\n      .scale(79.4188)\n      .clipAngle(180 - 1e-3);\n}\n", "import {atan, exp, halfPi, log, pi, tan, tau} from \"../math.js\";\nimport rotation from \"../rotation.js\";\nimport projection from \"./index.js\";\n\nexport function mercatorRaw(lambda, phi) {\n  return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n  return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n  return mercatorProjection(mercatorRaw)\n      .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n  var m = projection(project),\n      center = m.center,\n      scale = m.scale,\n      translate = m.translate,\n      clipExtent = m.clipExtent,\n      x0 = null, y0, x1, y1; // clip extent\n\n  m.scale = function(_) {\n    return arguments.length ? (scale(_), reclip()) : scale();\n  };\n\n  m.translate = function(_) {\n    return arguments.length ? (translate(_), reclip()) : translate();\n  };\n\n  m.center = function(_) {\n    return arguments.length ? (center(_), reclip()) : center();\n  };\n\n  m.clipExtent = function(_) {\n    return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  function reclip() {\n    var k = pi * scale(),\n        t = m(rotation(m.rotate()).invert([0, 0]));\n    return clipExtent(x0 == null\n        ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n        ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n        : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n  }\n\n  return reclip();\n}\n", "import {abs, atan, atan2, cos, epsilon, halfPi, log, pi, pow, sign, sin, sqrt, tan} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {mercatorRaw} from \"./mercator.js\";\n\nfunction tany(y) {\n  return tan((halfPi + y) / 2);\n}\n\nexport function conicConformalRaw(y0, y1) {\n  var cy0 = cos(y0),\n      n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\n      f = cy0 * pow(tany(y0), n) / n;\n\n  if (!n) return mercatorRaw;\n\n  function project(x, y) {\n    if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\n    else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\n    var r = f / pow(tany(y), n);\n    return [r * sin(n * x), f - r * cos(n * x)];\n  }\n\n  project.invert = function(x, y) {\n    var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy),\n      l = atan2(x, abs(fy)) * sign(fy);\n    if (fy * n < 0)\n      l -= pi * sign(x) * sign(fy);\n    return [l / n, 2 * atan(pow(f / r, 1 / n)) - halfPi];\n  };\n\n  return project;\n}\n\nexport default function() {\n  return conicProjection(conicConformalRaw)\n      .scale(109.5)\n      .parallels([30, 30]);\n}\n", "import projection from \"./index.js\";\n\nexport function equirectangularRaw(lambda, phi) {\n  return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n  return projection(equirectangularRaw)\n      .scale(152.63);\n}\n", "import {abs, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {equirectangularRaw} from \"./equirectangular.js\";\n\nexport function conicEquidistantRaw(y0, y1) {\n  var cy0 = cos(y0),\n      n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),\n      g = cy0 / n + y0;\n\n  if (abs(n) < epsilon) return equirectangularRaw;\n\n  function project(x, y) {\n    var gy = g - y, nx = n * x;\n    return [gy * sin(nx), g - gy * cos(nx)];\n  }\n\n  project.invert = function(x, y) {\n    var gy = g - y,\n        l = atan2(x, abs(gy)) * sign(gy);\n    if (gy * n < 0)\n      l -= pi * sign(x) * sign(gy);\n    return [l / n, g - sign(n) * sqrt(x * x + gy * gy)];\n  };\n\n  return project;\n}\n\nexport default function() {\n  return conicProjection(conicEquidistantRaw)\n      .scale(131.154)\n      .center([0, 13.9389]);\n}\n", "import projection from \"./index.js\";\nimport {abs, asin, cos, epsilon2, sin, sqrt} from \"../math.js\";\n\nvar A1 = 1.340264,\n    A2 = -0.081106,\n    A3 = 0.000893,\n    A4 = 0.003796,\n    M = sqrt(3) / 2,\n    iterations = 12;\n\nexport function equalEarthRaw(lambda, phi) {\n  var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n  return [\n    lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n    l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n  ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n  var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n  for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n    fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n    fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n    l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n    if (abs(delta) < epsilon2) break;\n  }\n  return [\n    M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n    asin(sin(l) / M)\n  ];\n};\n\nexport default function() {\n  return projection(equalEarthRaw)\n      .scale(177.158);\n}\n", "import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function gnomonicRaw(x, y) {\n  var cy = cos(y), k = cos(x) * cy;\n  return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nexport default function() {\n  return projection(gnomonicRaw)\n      .scale(144.049)\n      .clipAngle(60);\n}\n", "import {asin, cos, epsilon, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function orthographicRaw(x, y) {\n  return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n  return projection(orthographicRaw)\n      .scale(249.5)\n      .clipAngle(90 + epsilon);\n}\n", "import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function stereographicRaw(x, y) {\n  var cy = cos(y), k = 1 + cos(x) * cy;\n  return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n  return 2 * atan(z);\n});\n\nexport default function() {\n  return projection(stereographicRaw)\n      .scale(250)\n      .clipAngle(142);\n}\n", "import {atan, exp, halfPi, log, tan} from \"../math.js\";\nimport {mercatorProjection} from \"./mercator.js\";\n\nexport function transverseMercatorRaw(lambda, phi) {\n  return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n  return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\nexport default function() {\n  var m = mercatorProjection(transverseMercatorRaw),\n      center = m.center,\n      rotate = m.rotate;\n\n  m.center = function(_) {\n    return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n  };\n\n  m.rotate = function(_) {\n    return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n  };\n\n  return rotate([0, 0, 90])\n      .scale(159.155);\n}\n", "export function initRange(domain, range) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.range(domain); break;\n    default: this.range(range).domain(domain); break;\n  }\n  return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: {\n      if (typeof domain === \"function\") this.interpolator(domain);\n      else this.range(domain);\n      break;\n    }\n    default: {\n      this.domain(domain);\n      if (typeof interpolator === \"function\") this.interpolator(interpolator);\n      else this.range(interpolator);\n      break;\n    }\n  }\n  return this;\n}\n", "import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n  var index = new InternMap(),\n      domain = [],\n      range = [],\n      unknown = implicit;\n\n  function scale(d) {\n    let i = index.get(d);\n    if (i === undefined) {\n      if (unknown !== implicit) return unknown;\n      index.set(d, i = domain.push(d) - 1);\n    }\n    return range[i % range.length];\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [], index = new InternMap();\n    for (const value of _) {\n      if (index.has(value)) continue;\n      index.set(value, domain.push(value) - 1);\n    }\n    return scale;\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), scale) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return ordinal(domain, range).unknown(unknown);\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n", "import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n  var scale = ordinal().unknown(undefined),\n      domain = scale.domain,\n      ordinalRange = scale.range,\n      r0 = 0,\n      r1 = 1,\n      step,\n      bandwidth,\n      round = false,\n      paddingInner = 0,\n      paddingOuter = 0,\n      align = 0.5;\n\n  delete scale.unknown;\n\n  function rescale() {\n    var n = domain().length,\n        reverse = r1 < r0,\n        start = reverse ? r1 : r0,\n        stop = reverse ? r0 : r1;\n    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n    if (round) step = Math.floor(step);\n    start += (stop - start - step * (n - paddingInner)) * align;\n    bandwidth = step * (1 - paddingInner);\n    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n    var values = sequence(n).map(function(i) { return start + step * i; });\n    return ordinalRange(reverse ? values.reverse() : values);\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n  };\n\n  scale.rangeRound = function(_) {\n    return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n  };\n\n  scale.bandwidth = function() {\n    return bandwidth;\n  };\n\n  scale.step = function() {\n    return step;\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, rescale()) : round;\n  };\n\n  scale.padding = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n  };\n\n  scale.paddingInner = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n  };\n\n  scale.paddingOuter = function(_) {\n    return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n  };\n\n  scale.align = function(_) {\n    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n  };\n\n  scale.copy = function() {\n    return band(domain(), [r0, r1])\n        .round(round)\n        .paddingInner(paddingInner)\n        .paddingOuter(paddingOuter)\n        .align(align);\n  };\n\n  return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n  var copy = scale.copy;\n\n  scale.padding = scale.paddingOuter;\n  delete scale.paddingInner;\n  delete scale.paddingOuter;\n\n  scale.copy = function() {\n    return pointish(copy());\n  };\n\n  return scale;\n}\n\nexport function point() {\n  return pointish(band.apply(null, arguments).paddingInner(1));\n}\n", "export default function constants(x) {\n  return function() {\n    return x;\n  };\n}\n", "export default function number(x) {\n  return +x;\n}\n", "import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n  return x;\n}\n\nfunction normalize(a, b) {\n  return (b -= (a = +a))\n      ? function(x) { return (x - a) / b; }\n      : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n  var t;\n  if (a > b) t = a, a = b, b = t;\n  return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n  else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n  return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n  var j = Math.min(domain.length, range.length) - 1,\n      d = new Array(j),\n      r = new Array(j),\n      i = -1;\n\n  // Reverse descending domains.\n  if (domain[j] < domain[0]) {\n    domain = domain.slice().reverse();\n    range = range.slice().reverse();\n  }\n\n  while (++i < j) {\n    d[i] = normalize(domain[i], domain[i + 1]);\n    r[i] = interpolate(range[i], range[i + 1]);\n  }\n\n  return function(x) {\n    var i = bisect(domain, x, 1, j) - 1;\n    return r[i](d[i](x));\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .range(source.range())\n      .interpolate(source.interpolate())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport function transformer() {\n  var domain = unit,\n      range = unit,\n      interpolate = interpolateValue,\n      transform,\n      untransform,\n      unknown,\n      clamp = identity,\n      piecewise,\n      output,\n      input;\n\n  function rescale() {\n    var n = Math.min(domain.length, range.length);\n    if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n    piecewise = n > 2 ? polymap : bimap;\n    output = input = null;\n    return scale;\n  }\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n  }\n\n  scale.invert = function(y) {\n    return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = Array.from(_), interpolate = interpolateRound, rescale();\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n  };\n\n  scale.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, rescale()) : interpolate;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t, u) {\n    transform = t, untransform = u;\n    return rescale();\n  };\n}\n\nexport default function continuous() {\n  return transformer()(identity, identity);\n}\n", "import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n  var step = tickStep(start, stop, count),\n      precision;\n  specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n  switch (specifier.type) {\n    case \"s\": {\n      var value = Math.max(Math.abs(start), Math.abs(stop));\n      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n      return formatPrefix(specifier, value);\n    }\n    case \"\":\n    case \"e\":\n    case \"g\":\n    case \"p\":\n    case \"r\": {\n      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n      break;\n    }\n    case \"f\":\n    case \"%\": {\n      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n      break;\n    }\n  }\n  return format(specifier);\n}\n", "import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n  var domain = scale.domain;\n\n  scale.ticks = function(count) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    var d = domain();\n    return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n  };\n\n  scale.nice = function(count) {\n    if (count == null) count = 10;\n\n    var d = domain();\n    var i0 = 0;\n    var i1 = d.length - 1;\n    var start = d[i0];\n    var stop = d[i1];\n    var prestep;\n    var step;\n    var maxIter = 10;\n\n    if (stop < start) {\n      step = start, start = stop, stop = step;\n      step = i0, i0 = i1, i1 = step;\n    }\n    \n    while (maxIter-- > 0) {\n      step = tickIncrement(start, stop, count);\n      if (step === prestep) {\n        d[i0] = start\n        d[i1] = stop\n        return domain(d);\n      } else if (step > 0) {\n        start = Math.floor(start / step) * step;\n        stop = Math.ceil(stop / step) * step;\n      } else if (step < 0) {\n        start = Math.ceil(start * step) / step;\n        stop = Math.floor(stop * step) / step;\n      } else {\n        break;\n      }\n      prestep = step;\n    }\n\n    return scale;\n  };\n\n  return scale;\n}\n\nexport default function linear() {\n  var scale = continuous();\n\n  scale.copy = function() {\n    return copy(scale, linear());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n", "import {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nexport default function identity(domain) {\n  var unknown;\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : x;\n  }\n\n  scale.invert = scale;\n\n  scale.domain = scale.range = function(_) {\n    return arguments.length ? (domain = Array.from(_, number), scale) : domain.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return identity(domain).unknown(unknown);\n  };\n\n  domain = arguments.length ? Array.from(domain, number) : [0, 1];\n\n  return linearish(scale);\n}\n", "export default function nice(domain, interval) {\n  domain = domain.slice();\n\n  var i0 = 0,\n      i1 = domain.length - 1,\n      x0 = domain[i0],\n      x1 = domain[i1],\n      t;\n\n  if (x1 < x0) {\n    t = i0, i0 = i1, i1 = t;\n    t = x0, x0 = x1, x1 = t;\n  }\n\n  domain[i0] = interval.floor(x0);\n  domain[i1] = interval.ceil(x1);\n  return domain;\n}\n", "import {ticks} from \"d3-array\";\nimport {format, formatSpecifier} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformLog(x) {\n  return Math.log(x);\n}\n\nfunction transformExp(x) {\n  return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n  return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n  return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n  return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n  return base === 10 ? pow10\n      : base === Math.E ? Math.exp\n      : x => Math.pow(base, x);\n}\n\nfunction logp(base) {\n  return base === Math.E ? Math.log\n      : base === 10 && Math.log10\n      || base === 2 && Math.log2\n      || (base = Math.log(base), x => Math.log(x) / base);\n}\n\nfunction reflect(f) {\n  return (x, k) => -f(-x, k);\n}\n\nexport function loggish(transform) {\n  const scale = transform(transformLog, transformExp);\n  const domain = scale.domain;\n  let base = 10;\n  let logs;\n  let pows;\n\n  function rescale() {\n    logs = logp(base), pows = powp(base);\n    if (domain()[0] < 0) {\n      logs = reflect(logs), pows = reflect(pows);\n      transform(transformLogn, transformExpn);\n    } else {\n      transform(transformLog, transformExp);\n    }\n    return scale;\n  }\n\n  scale.base = function(_) {\n    return arguments.length ? (base = +_, rescale()) : base;\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.ticks = count => {\n    const d = domain();\n    let u = d[0];\n    let v = d[d.length - 1];\n    const r = v < u;\n\n    if (r) ([u, v] = [v, u]);\n\n    let i = logs(u);\n    let j = logs(v);\n    let k;\n    let t;\n    const n = count == null ? 10 : +count;\n    let z = [];\n\n    if (!(base % 1) && j - i < n) {\n      i = Math.floor(i), j = Math.ceil(j);\n      if (u > 0) for (; i <= j; ++i) {\n        for (k = 1; k < base; ++k) {\n          t = i < 0 ? k / pows(-i) : k * pows(i);\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      } else for (; i <= j; ++i) {\n        for (k = base - 1; k >= 1; --k) {\n          t = i > 0 ? k / pows(-i) : k * pows(i);\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      }\n      if (z.length * 2 < n) z = ticks(u, v, n);\n    } else {\n      z = ticks(i, j, Math.min(j - i, n)).map(pows);\n    }\n    return r ? z.reverse() : z;\n  };\n\n  scale.tickFormat = (count, specifier) => {\n    if (count == null) count = 10;\n    if (specifier == null) specifier = base === 10 ? \"s\" : \",\";\n    if (typeof specifier !== \"function\") {\n      if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;\n      specifier = format(specifier);\n    }\n    if (count === Infinity) return specifier;\n    const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n    return d => {\n      let i = d / pows(Math.round(logs(d)));\n      if (i * base < base - 0.5) i *= base;\n      return i <= k ? specifier(d) : \"\";\n    };\n  };\n\n  scale.nice = () => {\n    return domain(nice(domain(), {\n      floor: x => pows(Math.floor(logs(x))),\n      ceil: x => pows(Math.ceil(logs(x)))\n    }));\n  };\n\n  return scale;\n}\n\nexport default function log() {\n  const scale = loggish(transformer()).domain([1, 10]);\n  scale.copy = () => copy(scale, log()).base(scale.base());\n  initRange.apply(scale, arguments);\n  return scale;\n}\n", "import {linearish} from \"./linear.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformSymlog(c) {\n  return function(x) {\n    return Math.sign(x) * Math.log1p(Math.abs(x / c));\n  };\n}\n\nfunction transformSymexp(c) {\n  return function(x) {\n    return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n  };\n}\n\nexport function symlogish(transform) {\n  var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n  scale.constant = function(_) {\n    return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n  };\n\n  return linearish(scale);\n}\n\nexport default function symlog() {\n  var scale = symlogish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, symlog()).constant(scale.constant());\n  };\n\n  return initRange.apply(scale, arguments);\n}\n", "import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n  return function(x) {\n    return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n  };\n}\n\nfunction transformSqrt(x) {\n  return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n  return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n  var scale = transform(identity, identity),\n      exponent = 1;\n\n  function rescale() {\n    return exponent === 1 ? transform(identity, identity)\n        : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n        : transform(transformPow(exponent), transformPow(1 / exponent));\n  }\n\n  scale.exponent = function(_) {\n    return arguments.length ? (exponent = +_, rescale()) : exponent;\n  };\n\n  return linearish(scale);\n}\n\nexport default function pow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, pow()).exponent(scale.exponent());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n\nexport function sqrt() {\n  return pow.apply(null, arguments).exponent(0.5);\n}\n", "import {ascending, bisect, quantileSorted as threshold} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantile() {\n  var domain = [],\n      range = [],\n      thresholds = [],\n      unknown;\n\n  function rescale() {\n    var i = 0, n = Math.max(1, range.length);\n    thresholds = new Array(n - 1);\n    while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n    return scale;\n  }\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n  }\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return i < 0 ? [NaN, NaN] : [\n      i > 0 ? thresholds[i - 1] : domain[0],\n      i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n    ];\n  };\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [];\n    for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n    domain.sort(ascending);\n    return rescale();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.quantiles = function() {\n    return thresholds.slice();\n  };\n\n  scale.copy = function() {\n    return quantile()\n        .domain(domain)\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(scale, arguments);\n}\n", "import {bisect} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function threshold() {\n  var domain = [0.5],\n      range = [0, 1],\n      unknown,\n      n = 1;\n\n  function scale(x) {\n    return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n  };\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return [domain[i - 1], domain[i]];\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return threshold()\n        .domain(domain)\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(scale, arguments);\n}\n", "const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n  function interval(date) {\n    return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n  }\n\n  interval.floor = (date) => {\n    return floori(date = new Date(+date)), date;\n  };\n\n  interval.ceil = (date) => {\n    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n  };\n\n  interval.round = (date) => {\n    const d0 = interval(date), d1 = interval.ceil(date);\n    return date - d0 < d1 - date ? d0 : d1;\n  };\n\n  interval.offset = (date, step) => {\n    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n  };\n\n  interval.range = (start, stop, step) => {\n    const range = [];\n    start = interval.ceil(start);\n    step = step == null ? 1 : Math.floor(step);\n    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n    let previous;\n    do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n    while (previous < start && start < stop);\n    return range;\n  };\n\n  interval.filter = (test) => {\n    return timeInterval((date) => {\n      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n    }, (date, step) => {\n      if (date >= date) {\n        if (step < 0) while (++step <= 0) {\n          while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n        } else while (--step >= 0) {\n          while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n        }\n      }\n    });\n  };\n\n  if (count) {\n    interval.count = (start, end) => {\n      t0.setTime(+start), t1.setTime(+end);\n      floori(t0), floori(t1);\n      return Math.floor(count(t0, t1));\n    };\n\n    interval.every = (step) => {\n      step = Math.floor(step);\n      return !isFinite(step) || !(step > 0) ? null\n          : !(step > 1) ? interval\n          : interval.filter(field\n              ? (d) => field(d) % step === 0\n              : (d) => interval.count(0, d) % step === 0);\n    };\n  }\n\n  return interval;\n}\n", "import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n  // noop\n}, (date, step) => {\n  date.setTime(+date + step);\n}, (start, end) => {\n  return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n  k = Math.floor(k);\n  if (!isFinite(k) || !(k > 0)) return null;\n  if (!(k > 1)) return millisecond;\n  return timeInterval((date) => {\n    date.setTime(Math.floor(date / k) * k);\n  }, (date, step) => {\n    date.setTime(+date + step * k);\n  }, (start, end) => {\n    return (end - start) / k;\n  });\n};\n\nexport const milliseconds = millisecond.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n  date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n  return (end - start) / durationSecond;\n}, (date) => {\n  return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n  date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n  return (end - start) / durationMinute;\n}, (date) => {\n  return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n  date.setUTCSeconds(0, 0);\n}, (date, step) => {\n  date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n  return (end - start) / durationMinute;\n}, (date) => {\n  return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n  date.setTime(+date + step * durationHour);\n}, (start, end) => {\n  return (end - start) / durationHour;\n}, (date) => {\n  return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n  date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n  date.setTime(+date + step * durationHour);\n}, (start, end) => {\n  return (end - start) / durationHour;\n}, (date) => {\n  return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n  date => date.setHours(0, 0, 0, 0),\n  (date, step) => date.setDate(date.getDate() + step),\n  (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n  date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n  return (end - start) / durationDay;\n}, (date) => {\n  return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n  return (end - start) / durationDay;\n}, (date) => {\n  return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n  return timeInterval((date) => {\n    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n    date.setHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setDate(date.getDate() + step * 7);\n  }, (start, end) => {\n    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n  });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n  return timeInterval((date) => {\n    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n    date.setUTCHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setUTCDate(date.getUTCDate() + step * 7);\n  }, (start, end) => {\n    return (end - start) / durationWeek;\n  });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n", "import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n  date.setDate(1);\n  date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n  return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n  date.setUTCDate(1);\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n  return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n", "import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n  date.setMonth(0, 1);\n  date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n  return end.getFullYear() - start.getFullYear();\n}, (date) => {\n  return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n    date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n    date.setMonth(0, 1);\n    date.setHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setFullYear(date.getFullYear() + step * k);\n  });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n  date.setUTCMonth(0, 1);\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n  return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n  return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n    date.setUTCMonth(0, 1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setUTCFullYear(date.getUTCFullYear() + step * k);\n  });\n};\n\nexport const utcYears = utcYear.range;\n", "import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n  const tickIntervals = [\n    [second,  1,      durationSecond],\n    [second,  5,  5 * durationSecond],\n    [second, 15, 15 * durationSecond],\n    [second, 30, 30 * durationSecond],\n    [minute,  1,      durationMinute],\n    [minute,  5,  5 * durationMinute],\n    [minute, 15, 15 * durationMinute],\n    [minute, 30, 30 * durationMinute],\n    [  hour,  1,      durationHour  ],\n    [  hour,  3,  3 * durationHour  ],\n    [  hour,  6,  6 * durationHour  ],\n    [  hour, 12, 12 * durationHour  ],\n    [   day,  1,      durationDay   ],\n    [   day,  2,  2 * durationDay   ],\n    [  week,  1,      durationWeek  ],\n    [ month,  1,      durationMonth ],\n    [ month,  3,  3 * durationMonth ],\n    [  year,  1,      durationYear  ]\n  ];\n\n  function ticks(start, stop, count) {\n    const reverse = stop < start;\n    if (reverse) [start, stop] = [stop, start];\n    const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n    const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n    return reverse ? ticks.reverse() : ticks;\n  }\n\n  function tickInterval(start, stop, count) {\n    const target = Math.abs(stop - start) / count;\n    const i = bisector(([,, step]) => step).right(tickIntervals, target);\n    if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n    if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n    const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n    return t.every(step);\n  }\n\n  return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n", "import {\n  timeDay,\n  timeSunday,\n  timeMonday,\n  timeThursday,\n  timeYear,\n  utcDay,\n  utcSunday,\n  utcMonday,\n  utcThursday,\n  utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n    date.setFullYear(d.y);\n    return date;\n  }\n  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n    date.setUTCFullYear(d.y);\n    return date;\n  }\n  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n  return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n  var locale_dateTime = locale.dateTime,\n      locale_date = locale.date,\n      locale_time = locale.time,\n      locale_periods = locale.periods,\n      locale_weekdays = locale.days,\n      locale_shortWeekdays = locale.shortDays,\n      locale_months = locale.months,\n      locale_shortMonths = locale.shortMonths;\n\n  var periodRe = formatRe(locale_periods),\n      periodLookup = formatLookup(locale_periods),\n      weekdayRe = formatRe(locale_weekdays),\n      weekdayLookup = formatLookup(locale_weekdays),\n      shortWeekdayRe = formatRe(locale_shortWeekdays),\n      shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n      monthRe = formatRe(locale_months),\n      monthLookup = formatLookup(locale_months),\n      shortMonthRe = formatRe(locale_shortMonths),\n      shortMonthLookup = formatLookup(locale_shortMonths);\n\n  var formats = {\n    \"a\": formatShortWeekday,\n    \"A\": formatWeekday,\n    \"b\": formatShortMonth,\n    \"B\": formatMonth,\n    \"c\": null,\n    \"d\": formatDayOfMonth,\n    \"e\": formatDayOfMonth,\n    \"f\": formatMicroseconds,\n    \"g\": formatYearISO,\n    \"G\": formatFullYearISO,\n    \"H\": formatHour24,\n    \"I\": formatHour12,\n    \"j\": formatDayOfYear,\n    \"L\": formatMilliseconds,\n    \"m\": formatMonthNumber,\n    \"M\": formatMinutes,\n    \"p\": formatPeriod,\n    \"q\": formatQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatSeconds,\n    \"u\": formatWeekdayNumberMonday,\n    \"U\": formatWeekNumberSunday,\n    \"V\": formatWeekNumberISO,\n    \"w\": formatWeekdayNumberSunday,\n    \"W\": formatWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatYear,\n    \"Y\": formatFullYear,\n    \"Z\": formatZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var utcFormats = {\n    \"a\": formatUTCShortWeekday,\n    \"A\": formatUTCWeekday,\n    \"b\": formatUTCShortMonth,\n    \"B\": formatUTCMonth,\n    \"c\": null,\n    \"d\": formatUTCDayOfMonth,\n    \"e\": formatUTCDayOfMonth,\n    \"f\": formatUTCMicroseconds,\n    \"g\": formatUTCYearISO,\n    \"G\": formatUTCFullYearISO,\n    \"H\": formatUTCHour24,\n    \"I\": formatUTCHour12,\n    \"j\": formatUTCDayOfYear,\n    \"L\": formatUTCMilliseconds,\n    \"m\": formatUTCMonthNumber,\n    \"M\": formatUTCMinutes,\n    \"p\": formatUTCPeriod,\n    \"q\": formatUTCQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatUTCSeconds,\n    \"u\": formatUTCWeekdayNumberMonday,\n    \"U\": formatUTCWeekNumberSunday,\n    \"V\": formatUTCWeekNumberISO,\n    \"w\": formatUTCWeekdayNumberSunday,\n    \"W\": formatUTCWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatUTCYear,\n    \"Y\": formatUTCFullYear,\n    \"Z\": formatUTCZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var parses = {\n    \"a\": parseShortWeekday,\n    \"A\": parseWeekday,\n    \"b\": parseShortMonth,\n    \"B\": parseMonth,\n    \"c\": parseLocaleDateTime,\n    \"d\": parseDayOfMonth,\n    \"e\": parseDayOfMonth,\n    \"f\": parseMicroseconds,\n    \"g\": parseYear,\n    \"G\": parseFullYear,\n    \"H\": parseHour24,\n    \"I\": parseHour24,\n    \"j\": parseDayOfYear,\n    \"L\": parseMilliseconds,\n    \"m\": parseMonthNumber,\n    \"M\": parseMinutes,\n    \"p\": parsePeriod,\n    \"q\": parseQuarter,\n    \"Q\": parseUnixTimestamp,\n    \"s\": parseUnixTimestampSeconds,\n    \"S\": parseSeconds,\n    \"u\": parseWeekdayNumberMonday,\n    \"U\": parseWeekNumberSunday,\n    \"V\": parseWeekNumberISO,\n    \"w\": parseWeekdayNumberSunday,\n    \"W\": parseWeekNumberMonday,\n    \"x\": parseLocaleDate,\n    \"X\": parseLocaleTime,\n    \"y\": parseYear,\n    \"Y\": parseFullYear,\n    \"Z\": parseZone,\n    \"%\": parseLiteralPercent\n  };\n\n  // These recursive directive definitions must be deferred.\n  formats.x = newFormat(locale_date, formats);\n  formats.X = newFormat(locale_time, formats);\n  formats.c = newFormat(locale_dateTime, formats);\n  utcFormats.x = newFormat(locale_date, utcFormats);\n  utcFormats.X = newFormat(locale_time, utcFormats);\n  utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n  function newFormat(specifier, formats) {\n    return function(date) {\n      var string = [],\n          i = -1,\n          j = 0,\n          n = specifier.length,\n          c,\n          pad,\n          format;\n\n      if (!(date instanceof Date)) date = new Date(+date);\n\n      while (++i < n) {\n        if (specifier.charCodeAt(i) === 37) {\n          string.push(specifier.slice(j, i));\n          if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n          else pad = c === \"e\" ? \" \" : \"0\";\n          if (format = formats[c]) c = format(date, pad);\n          string.push(c);\n          j = i + 1;\n        }\n      }\n\n      string.push(specifier.slice(j, i));\n      return string.join(\"\");\n    };\n  }\n\n  function newParse(specifier, Z) {\n    return function(string) {\n      var d = newDate(1900, undefined, 1),\n          i = parseSpecifier(d, specifier, string += \"\", 0),\n          week, day;\n      if (i != string.length) return null;\n\n      // If a UNIX timestamp is specified, return it.\n      if (\"Q\" in d) return new Date(d.Q);\n      if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n      // If this is utcParse, never use the local timezone.\n      if (Z && !(\"Z\" in d)) d.Z = 0;\n\n      // The am-pm flag is 0 for AM, and 1 for PM.\n      if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n      // If the month was not specified, inherit from the quarter.\n      if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n      // Convert day-of-week and week-of-year to day-of-year.\n      if (\"V\" in d) {\n        if (d.V < 1 || d.V > 53) return null;\n        if (!(\"w\" in d)) d.w = 1;\n        if (\"Z\" in d) {\n          week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n          week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n          week = utcDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getUTCFullYear();\n          d.m = week.getUTCMonth();\n          d.d = week.getUTCDate() + (d.w + 6) % 7;\n        } else {\n          week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n          week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n          week = timeDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getFullYear();\n          d.m = week.getMonth();\n          d.d = week.getDate() + (d.w + 6) % 7;\n        }\n      } else if (\"W\" in d || \"U\" in d) {\n        if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n        day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n        d.m = 0;\n        d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n      }\n\n      // If a time zone is specified, all fields are interpreted as UTC and then\n      // offset according to the specified time zone.\n      if (\"Z\" in d) {\n        d.H += d.Z / 100 | 0;\n        d.M += d.Z % 100;\n        return utcDate(d);\n      }\n\n      // Otherwise, all fields are in local time.\n      return localDate(d);\n    };\n  }\n\n  function parseSpecifier(d, specifier, string, j) {\n    var i = 0,\n        n = specifier.length,\n        m = string.length,\n        c,\n        parse;\n\n    while (i < n) {\n      if (j >= m) return -1;\n      c = specifier.charCodeAt(i++);\n      if (c === 37) {\n        c = specifier.charAt(i++);\n        parse = parses[c in pads ? specifier.charAt(i++) : c];\n        if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n      } else if (c != string.charCodeAt(j++)) {\n        return -1;\n      }\n    }\n\n    return j;\n  }\n\n  function parsePeriod(d, string, i) {\n    var n = periodRe.exec(string.slice(i));\n    return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseShortWeekday(d, string, i) {\n    var n = shortWeekdayRe.exec(string.slice(i));\n    return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseWeekday(d, string, i) {\n    var n = weekdayRe.exec(string.slice(i));\n    return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseShortMonth(d, string, i) {\n    var n = shortMonthRe.exec(string.slice(i));\n    return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseMonth(d, string, i) {\n    var n = monthRe.exec(string.slice(i));\n    return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseLocaleDateTime(d, string, i) {\n    return parseSpecifier(d, locale_dateTime, string, i);\n  }\n\n  function parseLocaleDate(d, string, i) {\n    return parseSpecifier(d, locale_date, string, i);\n  }\n\n  function parseLocaleTime(d, string, i) {\n    return parseSpecifier(d, locale_time, string, i);\n  }\n\n  function formatShortWeekday(d) {\n    return locale_shortWeekdays[d.getDay()];\n  }\n\n  function formatWeekday(d) {\n    return locale_weekdays[d.getDay()];\n  }\n\n  function formatShortMonth(d) {\n    return locale_shortMonths[d.getMonth()];\n  }\n\n  function formatMonth(d) {\n    return locale_months[d.getMonth()];\n  }\n\n  function formatPeriod(d) {\n    return locale_periods[+(d.getHours() >= 12)];\n  }\n\n  function formatQuarter(d) {\n    return 1 + ~~(d.getMonth() / 3);\n  }\n\n  function formatUTCShortWeekday(d) {\n    return locale_shortWeekdays[d.getUTCDay()];\n  }\n\n  function formatUTCWeekday(d) {\n    return locale_weekdays[d.getUTCDay()];\n  }\n\n  function formatUTCShortMonth(d) {\n    return locale_shortMonths[d.getUTCMonth()];\n  }\n\n  function formatUTCMonth(d) {\n    return locale_months[d.getUTCMonth()];\n  }\n\n  function formatUTCPeriod(d) {\n    return locale_periods[+(d.getUTCHours() >= 12)];\n  }\n\n  function formatUTCQuarter(d) {\n    return 1 + ~~(d.getUTCMonth() / 3);\n  }\n\n  return {\n    format: function(specifier) {\n      var f = newFormat(specifier += \"\", formats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    parse: function(specifier) {\n      var p = newParse(specifier += \"\", false);\n      p.toString = function() { return specifier; };\n      return p;\n    },\n    utcFormat: function(specifier) {\n      var f = newFormat(specifier += \"\", utcFormats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    utcParse: function(specifier) {\n      var p = newParse(specifier += \"\", true);\n      p.toString = function() { return specifier; };\n      return p;\n    }\n  };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n    numberRe = /^\\s*\\d+/, // note: ignores next directive\n    percentRe = /^%/,\n    requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n  var sign = value < 0 ? \"-\" : \"\",\n      string = (sign ? -value : value) + \"\",\n      length = string.length;\n  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n  return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n  return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n  return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 4));\n  return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n  var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 6));\n  return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n  var n = percentRe.exec(string.slice(i, i + 1));\n  return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n  return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n  return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n  return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n  return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n  return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n  return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n  return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n  return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n  return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n  var day = d.getDay();\n  return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n  return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n  var day = d.getDay();\n  return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n  d = dISO(d);\n  return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n  return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n  return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n  d = dISO(d);\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n  var day = d.getDay();\n  d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n  var z = d.getTimezoneOffset();\n  return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n      + pad(z / 60 | 0, \"0\", 2)\n      + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n  return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n  return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n  return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n  return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n  return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n  return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n  return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n  return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n  return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n  var dow = d.getUTCDay();\n  return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n  return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n  var day = d.getUTCDay();\n  return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n  d = UTCdISO(d);\n  return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n  return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n  return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n  d = UTCdISO(d);\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n  var day = d.getUTCDay();\n  d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n  return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n  return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n  return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n  return Math.floor(+d / 1000);\n}\n", "import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n  dateTime: \"%x, %X\",\n  date: \"%-m/%-d/%Y\",\n  time: \"%-I:%M:%S %p\",\n  periods: [\"AM\", \"PM\"],\n  days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n  shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n  shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  timeFormat = locale.format;\n  timeParse = locale.parse;\n  utcFormat = locale.utcFormat;\n  utcParse = locale.utcParse;\n  return locale;\n}\n", "import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n  return new Date(t);\n}\n\nfunction number(t) {\n  return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n  var scale = continuous(),\n      invert = scale.invert,\n      domain = scale.domain;\n\n  var formatMillisecond = format(\".%L\"),\n      formatSecond = format(\":%S\"),\n      formatMinute = format(\"%I:%M\"),\n      formatHour = format(\"%I %p\"),\n      formatDay = format(\"%a %d\"),\n      formatWeek = format(\"%b %d\"),\n      formatMonth = format(\"%B\"),\n      formatYear = format(\"%Y\");\n\n  function tickFormat(date) {\n    return (second(date) < date ? formatMillisecond\n        : minute(date) < date ? formatSecond\n        : hour(date) < date ? formatMinute\n        : day(date) < date ? formatHour\n        : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n        : year(date) < date ? formatMonth\n        : formatYear)(date);\n  }\n\n  scale.invert = function(y) {\n    return new Date(invert(y));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n  };\n\n  scale.ticks = function(interval) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    return specifier == null ? tickFormat : format(specifier);\n  };\n\n  scale.nice = function(interval) {\n    var d = domain();\n    if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n    return interval ? domain(nice(d, interval)) : scale;\n  };\n\n  scale.copy = function() {\n    return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n  };\n\n  return scale;\n}\n\nexport default function time() {\n  return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n", "import {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcTicks, utcTickInterval} from \"d3-time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {calendar} from \"./time.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function utcTime() {\n  return initRange.apply(calendar(utcTicks, utcTickInterval, utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n", "import {interpolate, interpolateRound} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n  var x0 = 0,\n      x1 = 1,\n      t0,\n      t1,\n      k10,\n      transform,\n      interpolator = identity,\n      clamp = false,\n      unknown;\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = !!_, scale) : clamp;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  function range(interpolate) {\n    return function(_) {\n      var r0, r1;\n      return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n    };\n  }\n\n  scale.range = range(interpolate);\n\n  scale.rangeRound = range(interpolateRound);\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t) {\n    transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n    return scale;\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .interpolator(source.interpolator())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport default function sequential() {\n  var scale = linearish(transformer()(identity));\n\n  scale.copy = function() {\n    return copy(scale, sequential());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n  var scale = loggish(transformer()).domain([1, 10]);\n\n  scale.copy = function() {\n    return copy(scale, sequentialLog()).base(scale.base());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n  var scale = symlogish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, sequentialSymlog()).constant(scale.constant());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, sequentialPow()).exponent(scale.exponent());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n  return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n", "import {interpolate, interpolateRound, piecewise} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {copy} from \"./sequential.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n  var x0 = 0,\n      x1 = 0.5,\n      x2 = 1,\n      s = 1,\n      t0,\n      t1,\n      t2,\n      k10,\n      k21,\n      interpolator = identity,\n      transform,\n      clamp = false,\n      unknown;\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2];\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = !!_, scale) : clamp;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  function range(interpolate) {\n    return function(_) {\n      var r0, r1, r2;\n      return arguments.length ? ([r0, r1, r2] = _, interpolator = piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];\n    };\n  }\n\n  scale.range = range(interpolate);\n\n  scale.rangeRound = range(interpolateRound);\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t) {\n    transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1;\n    return scale;\n  };\n}\n\nexport default function diverging() {\n  var scale = linearish(transformer()(identity));\n\n  scale.copy = function() {\n    return copy(scale, diverging());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingLog() {\n  var scale = loggish(transformer()).domain([0.1, 1, 10]);\n\n  scale.copy = function() {\n    return copy(scale, divergingLog()).base(scale.base());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSymlog() {\n  var scale = symlogish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, divergingSymlog()).constant(scale.constant());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingPow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, divergingPow()).exponent(scale.exponent());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSqrt() {\n  return divergingPow.apply(null, arguments).exponent(0.5);\n}\n", "export default function(specifier) {\n  var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n  while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n  return colors;\n}\n", "import colors from \"../colors.js\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab\");\n", "import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default scheme => interpolateRgbBasis(scheme[scheme.length - 1]);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"d8b365f5f5f55ab4ac\",\n  \"a6611adfc27d80cdc1018571\",\n  \"a6611adfc27df5f5f580cdc1018571\",\n  \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n  \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n  \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n  \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n  \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n  \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"af8dc3f7f7f77fbf7b\",\n  \"7b3294c2a5cfa6dba0008837\",\n  \"7b3294c2a5cff7f7f7a6dba0008837\",\n  \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n  \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n  \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n  \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n  \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n  \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e9a3c9f7f7f7a1d76a\",\n  \"d01c8bf1b6dab8e1864dac26\",\n  \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n  \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n  \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n  \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n  \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n  \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n  \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"998ec3f7f7f7f1a340\",\n  \"5e3c99b2abd2fdb863e66101\",\n  \"5e3c99b2abd2f7f7f7fdb863e66101\",\n  \"542788998ec3d8daebfee0b6f1a340b35806\",\n  \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n  \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n  \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n  \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n  \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"ef8a62f7f7f767a9cf\",\n  \"ca0020f4a58292c5de0571b0\",\n  \"ca0020f4a582f7f7f792c5de0571b0\",\n  \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n  \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n  \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n  \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n  \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n  \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"ef8a62ffffff999999\",\n  \"ca0020f4a582bababa404040\",\n  \"ca0020f4a582ffffffbababa404040\",\n  \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n  \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n  \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n  \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n  \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n  \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fc8d59ffffbf91bfdb\",\n  \"d7191cfdae61abd9e92c7bb6\",\n  \"d7191cfdae61ffffbfabd9e92c7bb6\",\n  \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n  \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n  \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n  \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n  \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n  \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fc8d59ffffbf91cf60\",\n  \"d7191cfdae61a6d96a1a9641\",\n  \"d7191cfdae61ffffbfa6d96a1a9641\",\n  \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n  \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n  \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n  \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n  \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n  \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fc8d59ffffbf99d594\",\n  \"d7191cfdae61abdda42b83ba\",\n  \"d7191cfdae61ffffbfabdda42b83ba\",\n  \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n  \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n  \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n  \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n  \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n  \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e5f5f999d8c92ca25f\",\n  \"edf8fbb2e2e266c2a4238b45\",\n  \"edf8fbb2e2e266c2a42ca25f006d2c\",\n  \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n  \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n  \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n  \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e0ecf49ebcda8856a7\",\n  \"edf8fbb3cde38c96c688419d\",\n  \"edf8fbb3cde38c96c68856a7810f7c\",\n  \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n  \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n  \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n  \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e0f3dba8ddb543a2ca\",\n  \"f0f9e8bae4bc7bccc42b8cbe\",\n  \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n  \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n  \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n  \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n  \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fee8c8fdbb84e34a33\",\n  \"fef0d9fdcc8afc8d59d7301f\",\n  \"fef0d9fdcc8afc8d59e34a33b30000\",\n  \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n  \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n  \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n  \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"ece2f0a6bddb1c9099\",\n  \"f6eff7bdc9e167a9cf02818a\",\n  \"f6eff7bdc9e167a9cf1c9099016c59\",\n  \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n  \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n  \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n  \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"ece7f2a6bddb2b8cbe\",\n  \"f1eef6bdc9e174a9cf0570b0\",\n  \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n  \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n  \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n  \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n  \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e7e1efc994c7dd1c77\",\n  \"f1eef6d7b5d8df65b0ce1256\",\n  \"f1eef6d7b5d8df65b0dd1c77980043\",\n  \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n  \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n  \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n  \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fde0ddfa9fb5c51b8a\",\n  \"feebe2fbb4b9f768a1ae017e\",\n  \"feebe2fbb4b9f768a1c51b8a7a0177\",\n  \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n  \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n  \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n  \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"edf8b17fcdbb2c7fb8\",\n  \"ffffcca1dab441b6c4225ea8\",\n  \"ffffcca1dab441b6c42c7fb8253494\",\n  \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n  \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n  \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n  \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"f7fcb9addd8e31a354\",\n  \"ffffccc2e69978c679238443\",\n  \"ffffccc2e69978c67931a354006837\",\n  \"ffffccd9f0a3addd8e78c67931a354006837\",\n  \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n  \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n  \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fff7bcfec44fd95f0e\",\n  \"ffffd4fed98efe9929cc4c02\",\n  \"ffffd4fed98efe9929d95f0e993404\",\n  \"ffffd4fee391fec44ffe9929d95f0e993404\",\n  \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n  \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n  \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"ffeda0feb24cf03b20\",\n  \"ffffb2fecc5cfd8d3ce31a1c\",\n  \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n  \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n  \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n  \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n  \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"deebf79ecae13182bd\",\n  \"eff3ffbdd7e76baed62171b5\",\n  \"eff3ffbdd7e76baed63182bd08519c\",\n  \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n  \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n  \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n  \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e5f5e0a1d99b31a354\",\n  \"edf8e9bae4b374c476238b45\",\n  \"edf8e9bae4b374c47631a354006d2c\",\n  \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n  \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n  \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n  \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"f0f0f0bdbdbd636363\",\n  \"f7f7f7cccccc969696525252\",\n  \"f7f7f7cccccc969696636363252525\",\n  \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n  \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n  \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n  \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"efedf5bcbddc756bb1\",\n  \"f2f0f7cbc9e29e9ac86a51a3\",\n  \"f2f0f7cbc9e29e9ac8756bb154278f\",\n  \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n  \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n  \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n  \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fee0d2fc9272de2d26\",\n  \"fee5d9fcae91fb6a4acb181d\",\n  \"fee5d9fcae91fb6a4ade2d26a50f15\",\n  \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n  \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n  \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n  \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fee6cefdae6be6550d\",\n  \"feeddefdbe85fd8d3cd94701\",\n  \"feeddefdbe85fd8d3ce6550da63603\",\n  \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n  \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n  \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n  \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n", "export default function(t) {\n  t = Math.max(0, Math.min(1, t));\n  return \"rgb(\"\n      + Math.max(0, Math.min(255, Math.round(-4.54 - t * (35.34 - t * (2381.73 - t * (6402.7 - t * (7024.72 - t * 2710.57))))))) + \", \"\n      + Math.max(0, Math.min(255, Math.round(32.49 + t * (170.73 + t * (52.82 - t * (131.46 - t * (176.58 - t * 67.37))))))) + \", \"\n      + Math.max(0, Math.min(255, Math.round(81.24 + t * (442.36 - t * (2482.43 - t * (6167.24 - t * (6614.94 - t * 2475.67)))))))\n      + \")\";\n}\n", "import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n", "import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n  if (t < 0 || t > 1) t -= Math.floor(t);\n  var ts = Math.abs(t - 0.5);\n  c.h = 360 * t - 100;\n  c.s = 1.5 - 1.5 * ts;\n  c.l = 0.8 - 0.9 * ts;\n  return c + \"\";\n}\n", "import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n    pi_1_3 = Math.PI / 3,\n    pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n  var x;\n  t = (0.5 - t) * Math.PI;\n  c.r = 255 * (x = Math.sin(t)) * x;\n  c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n  c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n  return c + \"\";\n}\n", "export default function(t) {\n  t = Math.max(0, Math.min(1, t));\n  return \"rgb(\"\n      + Math.max(0, Math.min(255, Math.round(34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))) + \", \"\n      + Math.max(0, Math.min(255, Math.round(23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))) + \", \"\n      + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66)))))))\n      + \")\";\n}\n", "import colors from \"../colors.js\";\n\nfunction ramp(range) {\n  var n = range.length;\n  return function(t) {\n    return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n  };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n", "export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n  return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n", "import {min, sqrt} from \"../math.js\";\n\nconst sqrt3 = sqrt(3);\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size + min(size / 28, 0.75)) * 0.59436;\n    const t = r / 2;\n    const u = t * sqrt3;\n    context.moveTo(0, r);\n    context.lineTo(0, -r);\n    context.moveTo(-u, -t);\n    context.lineTo(u, t);\n    context.moveTo(-u, t);\n    context.lineTo(u, -t);\n  }\n};\n", "import {pi, sqrt, tau} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size / pi);\n    context.moveTo(r, 0);\n    context.arc(0, 0, r, 0, tau);\n  }\n};\n", "import {sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size / 5) / 2;\n    context.moveTo(-3 * r, -r);\n    context.lineTo(-r, -r);\n    context.lineTo(-r, -3 * r);\n    context.lineTo(r, -3 * r);\n    context.lineTo(r, -r);\n    context.lineTo(3 * r, -r);\n    context.lineTo(3 * r, r);\n    context.lineTo(r, r);\n    context.lineTo(r, 3 * r);\n    context.lineTo(-r, 3 * r);\n    context.lineTo(-r, r);\n    context.lineTo(-3 * r, r);\n    context.closePath();\n  }\n};\n", "import {sqrt} from \"../math.js\";\n\nconst tan30 = sqrt(1 / 3);\nconst tan30_2 = tan30 * 2;\n\nexport default {\n  draw(context, size) {\n    const y = sqrt(size / tan30_2);\n    const x = y * tan30;\n    context.moveTo(0, -y);\n    context.lineTo(x, 0);\n    context.lineTo(0, y);\n    context.lineTo(-x, 0);\n    context.closePath();\n  }\n};\n", "import {sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size) * 0.62625;\n    context.moveTo(0, -r);\n    context.lineTo(r, 0);\n    context.lineTo(0, r);\n    context.lineTo(-r, 0);\n    context.closePath();\n  }\n};\n", "import {min, sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size - min(size / 7, 2)) * 0.87559;\n    context.moveTo(-r, 0);\n    context.lineTo(r, 0);\n    context.moveTo(0, r);\n    context.lineTo(0, -r);\n  }\n};\n", "import {sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const w = sqrt(size);\n    const x = -w / 2;\n    context.rect(x, x, w, w);\n  }\n};\n", "import {sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size) * 0.4431;\n    context.moveTo(r, r);\n    context.lineTo(r, -r);\n    context.lineTo(-r, -r);\n    context.lineTo(-r, r);\n    context.closePath();\n  }\n};\n", "import {sin, cos, sqrt, pi, tau} from \"../math.js\";\n\nconst ka = 0.89081309152928522810;\nconst kr = sin(pi / 10) / sin(7 * pi / 10);\nconst kx = sin(tau / 10) * kr;\nconst ky = -cos(tau / 10) * kr;\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size * ka);\n    const x = kx * r;\n    const y = ky * r;\n    context.moveTo(0, -r);\n    context.lineTo(x, y);\n    for (let i = 1; i < 5; ++i) {\n      const a = tau * i / 5;\n      const c = cos(a);\n      const s = sin(a);\n      context.lineTo(s * r, -c * r);\n      context.lineTo(c * x - s * y, s * x + c * y);\n    }\n    context.closePath();\n  }\n};\n", "import {sqrt} from \"../math.js\";\n\nconst sqrt3 = sqrt(3);\n\nexport default {\n  draw(context, size) {\n    const y = -sqrt(size / (sqrt3 * 3));\n    context.moveTo(0, y * 2);\n    context.lineTo(-sqrt3 * y, -y);\n    context.lineTo(sqrt3 * y, -y);\n    context.closePath();\n  }\n};\n", "import {sqrt} from \"../math.js\";\n\nconst sqrt3 = sqrt(3);\n\nexport default {\n  draw(context, size) {\n    const s = sqrt(size) * 0.6824;\n    const t = s  / 2;\n    const u = (s * sqrt3) / 2; // cos(Math.PI / 6)\n    context.moveTo(0, -s);\n    context.lineTo(u, t);\n    context.lineTo(-u, t);\n    context.closePath();\n  }\n};\n", "import {sqrt} from \"../math.js\";\n\nconst c = -0.5;\nconst s = sqrt(3) / 2;\nconst k = 1 / sqrt(12);\nconst a = (k / 2 + 1) * 3;\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size / a);\n    const x0 = r / 2, y0 = r * k;\n    const x1 = x0, y1 = r * k + r;\n    const x2 = -x1, y2 = y1;\n    context.moveTo(x0, y0);\n    context.lineTo(x1, y1);\n    context.lineTo(x2, y2);\n    context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n    context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n    context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n    context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n    context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n    context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n    context.closePath();\n  }\n};\n", "import {min, sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size - min(size / 6, 1.7)) * 0.6189;\n    context.moveTo(-r, -r);\n    context.lineTo(r, r);\n    context.moveTo(-r, r);\n    context.lineTo(r, -r);\n  }\n};\n", "import constant from \"./constant.js\";\nimport {withPath} from \"./path.js\";\nimport asterisk from \"./symbol/asterisk.js\";\nimport circle from \"./symbol/circle.js\";\nimport cross from \"./symbol/cross.js\";\nimport diamond from \"./symbol/diamond.js\";\nimport diamond2 from \"./symbol/diamond2.js\";\nimport plus from \"./symbol/plus.js\";\nimport square from \"./symbol/square.js\";\nimport square2 from \"./symbol/square2.js\";\nimport star from \"./symbol/star.js\";\nimport triangle from \"./symbol/triangle.js\";\nimport triangle2 from \"./symbol/triangle2.js\";\nimport wye from \"./symbol/wye.js\";\nimport times from \"./symbol/times.js\";\n\n// These symbols are designed to be filled.\nexport const symbolsFill = [\n  circle,\n  cross,\n  diamond,\n  square,\n  star,\n  triangle,\n  wye\n];\n\n// These symbols are designed to be stroked (with a width of 1.5px and round caps).\nexport const symbolsStroke = [\n  circle,\n  plus,\n  times,\n  triangle2,\n  asterisk,\n  square2,\n  diamond2\n];\n\nexport default function Symbol(type, size) {\n  let context = null,\n      path = withPath(symbol);\n\n  type = typeof type === \"function\" ? type : constant(type || circle);\n  size = typeof size === \"function\" ? size : constant(size === undefined ? 64 : +size);\n\n  function symbol() {\n    let buffer;\n    if (!context) context = buffer = path();\n    type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  symbol.type = function(_) {\n    return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n  };\n\n  symbol.size = function(_) {\n    return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n  };\n\n  symbol.context = function(_) {\n    return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n  };\n\n  return symbol;\n}\n", "export function Transform(k, x, y) {\n  this.k = k;\n  this.x = x;\n  this.y = y;\n}\n\nTransform.prototype = {\n  constructor: Transform,\n  scale: function(k) {\n    return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n  },\n  translate: function(x, y) {\n    return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n  },\n  apply: function(point) {\n    return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n  },\n  applyX: function(x) {\n    return x * this.k + this.x;\n  },\n  applyY: function(y) {\n    return y * this.k + this.y;\n  },\n  invert: function(location) {\n    return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n  },\n  invertX: function(x) {\n    return (x - this.x) / this.k;\n  },\n  invertY: function(y) {\n    return (y - this.y) / this.k;\n  },\n  rescaleX: function(x) {\n    return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n  },\n  rescaleY: function(y) {\n    return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n  },\n  toString: function() {\n    return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n  }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n  while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n  return node.__zoom;\n}\n", "import {ascending, descending} from \"d3\";\n\nexport function defined(x) {\n  return x != null && !Number.isNaN(x);\n}\n\nexport function ascendingDefined(a, b) {\n  return +defined(b) - +defined(a) || ascending(a, b);\n}\n\nexport function descendingDefined(a, b) {\n  return +defined(b) - +defined(a) || descending(a, b);\n}\n\nexport function nonempty(x) {\n  return x != null && `${x}` !== \"\";\n}\n\nexport function finite(x) {\n  return isFinite(x) ? x : NaN;\n}\n\nexport function positive(x) {\n  return x > 0 && isFinite(x) ? x : NaN;\n}\n\nexport function negative(x) {\n  return x < 0 && isFinite(x) ? x : NaN;\n}\n", "export default function format(date, fallback) {\n  if (!(date instanceof Date)) date = new Date(+date);\n  if (isNaN(date)) return typeof fallback === \"function\" ? fallback(date) : fallback;\n  const hours = date.getUTCHours();\n  const minutes = date.getUTCMinutes();\n  const seconds = date.getUTCSeconds();\n  const milliseconds = date.getUTCMilliseconds();\n  return `${formatYear(date.getUTCFullYear(), 4)}-${pad(date.getUTCMonth() + 1, 2)}-${pad(date.getUTCDate(), 2)}${\n    hours || minutes || seconds || milliseconds ? `T${pad(hours, 2)}:${pad(minutes, 2)}${\n      seconds || milliseconds ? `:${pad(seconds, 2)}${\n        milliseconds ? `.${pad(milliseconds, 3)}` : ``\n      }` : ``\n    }Z` : ``\n  }`;\n}\n\nfunction formatYear(year) {\n  return year < 0 ? `-${pad(-year, 6)}`\n    : year > 9999 ? `+${pad(year, 6)}`\n    : pad(year, 4);\n}\n\nfunction pad(value, width) {\n  return `${value}`.padStart(width, \"0\");\n}\n", "const re = /^(?:[-+]\\d{2})?\\d{4}(?:-\\d{2}(?:-\\d{2})?)?(?:T\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{3})?)?(?:Z|[-+]\\d{2}:?\\d{2})?)?$/;\n\nexport default function parse(string, fallback) {\n  if (!re.test(string += \"\")) return typeof fallback === \"function\" ? fallback(string) : fallback;\n  return new Date(string);\n}\n", "import {bisector, extent, median, pairs, timeFormat, utcFormat} from \"d3\";\nimport {utcSecond, utcMinute, utcHour, unixDay, utcWeek, utcMonth, utcYear} from \"d3\";\nimport {utcMonday, utcTuesday, utcWednesday, utcThursday, utcFriday, utcSaturday, utcSunday} from \"d3\";\nimport {timeSecond, timeMinute, timeHour, timeDay, timeWeek, timeMonth, timeYear} from \"d3\";\nimport {timeMonday, timeTuesday, timeWednesday, timeThursday, timeFriday, timeSaturday, timeSunday} from \"d3\";\nimport {orderof} from \"./options.js\";\n\nconst durationSecond = 1000;\nconst durationMinute = durationSecond * 60;\nconst durationHour = durationMinute * 60;\nconst durationDay = durationHour * 24;\nconst durationWeek = durationDay * 7;\nconst durationMonth = durationDay * 30;\nconst durationYear = durationDay * 365;\n\n// See https://github.com/d3/d3-time/blob/9e8dc940f38f78d7588aad68a54a25b1f0c2d97b/src/ticks.js#L14-L33\nconst formats = [\n  [\"millisecond\", 0.5 * durationSecond],\n  [\"second\", durationSecond],\n  [\"second\", 30 * durationSecond],\n  [\"minute\", durationMinute],\n  [\"minute\", 30 * durationMinute],\n  [\"hour\", durationHour],\n  [\"hour\", 12 * durationHour],\n  [\"day\", durationDay],\n  [\"day\", 2 * durationDay],\n  [\"week\", durationWeek],\n  [\"month\", durationMonth],\n  [\"month\", 3 * durationMonth],\n  [\"year\", durationYear]\n];\n\nconst timeIntervals = new Map([\n  [\"second\", timeSecond],\n  [\"minute\", timeMinute],\n  [\"hour\", timeHour],\n  [\"day\", timeDay], // TODO local time equivalent of unixDay?\n  [\"week\", timeWeek],\n  [\"month\", timeMonth],\n  [\"year\", timeYear],\n  [\"monday\", timeMonday],\n  [\"tuesday\", timeTuesday],\n  [\"wednesday\", timeWednesday],\n  [\"thursday\", timeThursday],\n  [\"friday\", timeFriday],\n  [\"saturday\", timeSaturday],\n  [\"sunday\", timeSunday]\n]);\n\nconst utcIntervals = new Map([\n  [\"second\", utcSecond],\n  [\"minute\", utcMinute],\n  [\"hour\", utcHour],\n  [\"day\", unixDay],\n  [\"week\", utcWeek],\n  [\"month\", utcMonth],\n  [\"year\", utcYear],\n  [\"monday\", utcMonday],\n  [\"tuesday\", utcTuesday],\n  [\"wednesday\", utcWednesday],\n  [\"thursday\", utcThursday],\n  [\"friday\", utcFriday],\n  [\"saturday\", utcSaturday],\n  [\"sunday\", utcSunday]\n]);\n\nfunction parseInterval(input, intervals) {\n  let name = `${input}`.toLowerCase();\n  if (name.endsWith(\"s\")) name = name.slice(0, -1); // drop plural\n  let period = 1;\n  const match = /^(?:(\\d+)\\s+)/.exec(name);\n  if (match) {\n    name = name.slice(match[0].length);\n    period = +match[1];\n  }\n  switch (name) {\n    case \"quarter\":\n      name = \"month\";\n      period *= 3;\n      break;\n    case \"half\":\n      name = \"month\";\n      period *= 6;\n      break;\n  }\n  let interval = intervals.get(name);\n  if (!interval) throw new Error(`unknown interval: ${input}`);\n  if (!(period > 1)) return interval;\n  if (!interval.every) throw new Error(`non-periodic interval: ${name}`);\n  return interval.every(period);\n}\n\nexport function maybeTimeInterval(interval) {\n  return parseInterval(interval, timeIntervals);\n}\n\nexport function maybeUtcInterval(interval) {\n  return parseInterval(interval, utcIntervals);\n}\n\nexport function isUtcYear(i) {\n  if (!i) return false;\n  const date = i.floor(new Date(Date.UTC(2000, 11, 31)));\n  return utcYear(date) >= date; // coercing equality\n}\n\nexport function isTimeYear(i) {\n  if (!i) return false;\n  const date = i.floor(new Date(2000, 11, 31));\n  return timeYear(date) >= date; // coercing equality\n}\n\nexport function formatTimeTicks(scale, data, ticks, anchor) {\n  const format = scale.type === \"time\" ? timeFormat : utcFormat;\n  const template =\n    anchor === \"left\" || anchor === \"right\"\n      ? (f1, f2) => `\\n${f1}\\n${f2}` // extra newline to keep f1 centered\n      : anchor === \"top\"\n      ? (f1, f2) => `${f2}\\n${f1}`\n      : (f1, f2) => `${f1}\\n${f2}`;\n  switch (getTimeTicksInterval(scale, data, ticks)) {\n    case \"millisecond\":\n      return formatConditional(format(\".%L\"), format(\":%M:%S\"), template);\n    case \"second\":\n      return formatConditional(format(\":%S\"), format(\"%-I:%M\"), template);\n    case \"minute\":\n      return formatConditional(format(\"%-I:%M\"), format(\"%p\"), template);\n    case \"hour\":\n      return formatConditional(format(\"%-I %p\"), format(\"%b %-d\"), template);\n    case \"day\":\n      return formatConditional(format(\"%-d\"), format(\"%b\"), template);\n    case \"week\":\n      return formatConditional(format(\"%-d\"), format(\"%b\"), template);\n    case \"month\":\n      return formatConditional(format(\"%b\"), format(\"%Y\"), template);\n    case \"year\":\n      return format(\"%Y\");\n  }\n  throw new Error(\"unable to format time ticks\");\n}\n\n// Compute the median difference between adjacent ticks, ignoring repeated\n// ticks; this implies an effective time interval, assuming that ticks are\n// regularly spaced; choose the largest format less than this interval so that\n// the ticks show the field that is changing. If the ticks are not available,\n// fallback to an approximation based on the desired number of ticks.\nfunction getTimeTicksInterval(scale, data, ticks) {\n  const medianStep = median(pairs(data, (a, b) => Math.abs(b - a) || NaN));\n  if (medianStep > 0) return formats[bisector(([, step]) => step).right(formats, medianStep, 1, formats.length) - 1][0];\n  const [start, stop] = extent(scale.domain());\n  const count = typeof ticks === \"number\" ? ticks : 10;\n  const step = Math.abs(stop - start) / count;\n  return formats[bisector(([, step]) => Math.log(step)).center(formats, Math.log(step))][0];\n}\n\nfunction formatConditional(format1, format2, template) {\n  return (x, i, X) => {\n    const f1 = format1(x, i); // always shown\n    const f2 = format2(x, i); // only shown if different\n    const j = i - orderof(X); // detect reversed domains\n    return i !== j && X[j] !== undefined && f2 === format2(X[j], j) ? f1 : template(f1, f2);\n  };\n}\n", "import {color, descending, quantile, range as rangei} from \"d3\";\nimport {parse as isoParse} from \"isoformat\";\nimport {defined} from \"./defined.js\";\nimport {maybeTimeInterval, maybeUtcInterval} from \"./time.js\";\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray\nexport const TypedArray = Object.getPrototypeOf(Uint8Array);\nconst objectToString = Object.prototype.toString;\n\nexport function valueof(data, value, type) {\n  const valueType = typeof value;\n  return valueType === \"string\"\n    ? maybeTypedMap(data, field(value), type)\n    : valueType === \"function\"\n    ? maybeTypedMap(data, value, type)\n    : valueType === \"number\" || value instanceof Date || valueType === \"boolean\"\n    ? map(data, constant(value), type)\n    : typeof value?.transform === \"function\"\n    ? maybeTypedArrayify(value.transform(data), type)\n    : maybeTypedArrayify(value, type);\n}\n\nfunction maybeTypedMap(data, f, type) {\n  return map(data, type?.prototype instanceof TypedArray ? floater(f) : f, type);\n}\n\nfunction maybeTypedArrayify(data, type) {\n  return type === undefined\n    ? arrayify(data) // preserve undefined type\n    : data instanceof type\n    ? data\n    : type.prototype instanceof TypedArray && !(data instanceof TypedArray)\n    ? type.from(data, coerceNumber)\n    : type.from(data);\n}\n\nfunction floater(f) {\n  return (d, i) => coerceNumber(f(d, i));\n}\n\nexport const singleton = [null]; // for data-less decoration marks, e.g. frame\nexport const field = (name) => (d) => d[name];\nexport const indexOf = {transform: range};\nexport const identity = {transform: (d) => d};\nexport const zero = () => 0;\nexport const one = () => 1;\nexport const yes = () => true;\nexport const string = (x) => (x == null ? x : `${x}`);\nexport const number = (x) => (x == null ? x : +x);\nexport const boolean = (x) => (x == null ? x : !!x);\nexport const first = (x) => (x ? x[0] : undefined);\nexport const second = (x) => (x ? x[1] : undefined);\nexport const third = (x) => (x ? x[2] : undefined);\nexport const constant = (x) => () => x;\n\n// Converts a string like \u201Cp25\u201D into a function that takes an index I and an\n// accessor function f, returning the corresponding percentile value.\nexport function percentile(reduce) {\n  const p = +`${reduce}`.slice(1) / 100;\n  return (I, f) => quantile(I, p, f);\n}\n\n// If the values are specified as a typed array, no coercion is required.\nexport function coerceNumbers(values) {\n  return values instanceof TypedArray ? values : map(values, coerceNumber, Float64Array);\n}\n\n// Unlike Mark\u2019s number, here we want to convert null and undefined to NaN since\n// the result will be stored in a Float64Array and we don\u2019t want null to be\n// coerced to zero. We use Number instead of unary + to allow BigInt coercion.\nfunction coerceNumber(x) {\n  return x == null ? NaN : Number(x);\n}\n\nexport function coerceDates(values) {\n  return map(values, coerceDate);\n}\n\n// When coercing strings to dates, we only want to allow the ISO 8601 format\n// since the built-in string parsing of the Date constructor varies across\n// browsers. (In the future, this could be made more liberal if desired, though\n// it is still generally preferable to do date parsing yourself explicitly,\n// rather than rely on Plot.) Any non-string values are coerced to number first\n// and treated as milliseconds since UNIX epoch.\nexport function coerceDate(x) {\n  return x instanceof Date && !isNaN(x)\n    ? x\n    : typeof x === \"string\"\n    ? isoParse(x)\n    : x == null || isNaN((x = +x))\n    ? undefined\n    : new Date(x);\n}\n\n// Some channels may allow a string constant to be specified; to differentiate\n// string constants (e.g., \"red\") from named fields (e.g., \"date\"), this\n// function tests whether the given value is a CSS color string and returns a\n// tuple [channel, constant] where one of the two is undefined, and the other is\n// the given value. If you wish to reference a named field that is also a valid\n// CSS color, use an accessor (d => d.red) instead.\nexport function maybeColorChannel(value, defaultValue) {\n  if (value === undefined) value = defaultValue;\n  return value === null ? [undefined, \"none\"] : isColor(value) ? [undefined, value] : [value, undefined];\n}\n\n// Similar to maybeColorChannel, this tests whether the given value is a number\n// indicating a constant, and otherwise assumes that it\u2019s a channel value.\nexport function maybeNumberChannel(value, defaultValue) {\n  if (value === undefined) value = defaultValue;\n  return value === null || typeof value === \"number\" ? [undefined, value] : [value, undefined];\n}\n\n// Validates the specified optional string against the allowed list of keywords.\nexport function maybeKeyword(input, name, allowed) {\n  if (input != null) return keyword(input, name, allowed);\n}\n\n// Validates the specified required string against the allowed list of keywords.\nexport function keyword(input, name, allowed) {\n  const i = `${input}`.toLowerCase();\n  if (!allowed.includes(i)) throw new Error(`invalid ${name}: ${input}`);\n  return i;\n}\n\n// Promotes the specified data to an array as needed.\nexport function arrayify(data) {\n  return data == null || data instanceof Array || data instanceof TypedArray ? data : Array.from(data);\n}\n\n// An optimization of type.from(values, f): if the given values are already an\n// instanceof the desired array type, the faster values.map method is used.\nexport function map(values, f, type = Array) {\n  return values == null ? values : values instanceof type ? values.map(f) : type.from(values, f);\n}\n\n// An optimization of type.from(values): if the given values are already an\n// instanceof the desired array type, the faster values.slice method is used.\nexport function slice(values, type = Array) {\n  return values instanceof type ? values.slice() : type.from(values);\n}\n\n// Returns true if any of x, x1, or x2 is not (strictly) undefined.\nexport function hasX({x, x1, x2}) {\n  return x !== undefined || x1 !== undefined || x2 !== undefined;\n}\n\n// Returns true if any of y, y1, or y2 is not (strictly) undefined.\nexport function hasY({y, y1, y2}) {\n  return y !== undefined || y1 !== undefined || y2 !== undefined;\n}\n\n// Returns true if has x or y, or if interval is not (strictly) undefined.\nexport function hasXY(options) {\n  return hasX(options) || hasY(options) || options.interval !== undefined;\n}\n\n// Disambiguates an options object (e.g., {y: \"x2\"}) from a primitive value.\nexport function isObject(option) {\n  return option?.toString === objectToString;\n}\n\n// Disambiguates a scale options object (e.g., {color: {type: \"linear\"}}) from\n// some other option (e.g., {color: \"red\"}). When creating standalone legends,\n// this is used to test whether a scale is defined; this should be consistent\n// with inferScaleType when there are no channels associated with the scale, and\n// if this returns true, then normalizeScale must return non-null.\nexport function isScaleOptions(option) {\n  return isObject(option) && (option.type !== undefined || option.domain !== undefined);\n}\n\n// Disambiguates an options object (e.g., {y: \"x2\"}) from a channel value\n// definition expressed as a channel transform (e.g., {transform: \u2026}).\nexport function isOptions(option) {\n  return isObject(option) && typeof option.transform !== \"function\";\n}\n\n// Disambiguates a sort transform (e.g., {sort: \"date\"}) from a channel domain\n// sort definition (e.g., {sort: {y: \"x\"}}).\nexport function isDomainSort(sort) {\n  return isOptions(sort) && sort.value === undefined && sort.channel === undefined;\n}\n\n// For marks specified either as [0, x] or [x1, x2], such as areas and bars.\nexport function maybeZero(x, x1, x2, x3 = identity) {\n  if (x1 === undefined && x2 === undefined) {\n    // {x} or {}\n    (x1 = 0), (x2 = x === undefined ? x3 : x);\n  } else if (x1 === undefined) {\n    // {x, x2} or {x2}\n    x1 = x === undefined ? 0 : x;\n  } else if (x2 === undefined) {\n    // {x, x1} or {x1}\n    x2 = x === undefined ? 0 : x;\n  }\n  return [x1, x2];\n}\n\n// For marks that have x and y channels (e.g., cell, dot, line, text).\nexport function maybeTuple(x, y) {\n  return x === undefined && y === undefined ? [first, second] : [x, y];\n}\n\n// A helper for extracting the z channel, if it is variable. Used by transforms\n// that require series, such as moving average and normalize.\nexport function maybeZ({z, fill, stroke} = {}) {\n  if (z === undefined) [z] = maybeColorChannel(fill);\n  if (z === undefined) [z] = maybeColorChannel(stroke);\n  return z;\n}\n\n// Returns a Uint32Array with elements [0, 1, 2, \u2026 data.length - 1].\nexport function range(data) {\n  const n = data.length;\n  const r = new Uint32Array(n);\n  for (let i = 0; i < n; ++i) r[i] = i;\n  return r;\n}\n\n// Returns a filtered range of data given the test function.\nexport function where(data, test) {\n  return range(data).filter((i) => test(data[i], i, data));\n}\n\n// Returns an array [values[index[0]], values[index[1]], \u2026].\nexport function take(values, index) {\n  return map(index, (i) => values[i]);\n}\n\n// If f does not take exactly one argument, wraps it in a function that uses take.\nexport function taker(f) {\n  return f.length === 1 ? (index, values) => f(take(values, index)) : f;\n}\n\n// Uses subarray if available, and otherwise slice.\nexport function subarray(I, i, j) {\n  return I.subarray ? I.subarray(i, j) : I.slice(i, j);\n}\n\n// Based on InternMap (d3.group).\nexport function keyof(value) {\n  return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n\nexport function maybeInput(key, options) {\n  if (options[key] !== undefined) return options[key];\n  switch (key) {\n    case \"x1\":\n    case \"x2\":\n      key = \"x\";\n      break;\n    case \"y1\":\n    case \"y2\":\n      key = \"y\";\n      break;\n  }\n  return options[key];\n}\n\nexport function column(source) {\n  // Defines a column whose values are lazily populated by calling the returned\n  // setter. If the given source is labeled, the label is propagated to the\n  // returned column definition.\n  let value;\n  return [\n    {\n      transform: () => value,\n      label: labelof(source)\n    },\n    (v) => (value = v)\n  ];\n}\n\n// Like column, but allows the source to be null.\nexport function maybeColumn(source) {\n  return source == null ? [source] : column(source);\n}\n\nexport function labelof(value, defaultValue) {\n  return typeof value === \"string\" ? value : value && value.label !== undefined ? value.label : defaultValue;\n}\n\n// Assuming that both x1 and x2 and lazy columns (per above), this derives a new\n// a column that\u2019s the average of the two, and which inherits the column label\n// (if any). Both input columns are assumed to be quantitative. If either column\n// is temporal, the returned column is also temporal.\nexport function mid(x1, x2) {\n  return {\n    transform(data) {\n      const X1 = x1.transform(data);\n      const X2 = x2.transform(data);\n      return isTemporal(X1) || isTemporal(X2)\n        ? map(X1, (_, i) => new Date((+X1[i] + +X2[i]) / 2))\n        : map(X1, (_, i) => (+X1[i] + +X2[i]) / 2, Float64Array);\n    },\n    label: x1.label\n  };\n}\n\n// If the scale options declare an interval, applies it to the values V.\nexport function maybeApplyInterval(V, scale) {\n  const t = maybeIntervalTransform(scale?.interval, scale?.type);\n  return t ? map(V, t) : V;\n}\n\n// Returns the equivalent scale transform for the specified interval option.\nexport function maybeIntervalTransform(interval, type) {\n  const i = maybeInterval(interval, type);\n  return i && ((v) => (defined(v) ? i.floor(v) : v));\n}\n\n// If interval is not nullish, converts interval shorthand such as a number (for\n// multiples) or a time interval name (such as \u201Cday\u201D) to a {floor, offset,\n// range} object similar to a D3 time interval.\nexport function maybeInterval(interval, type) {\n  if (interval == null) return;\n  if (typeof interval === \"number\") {\n    if (0 < interval && interval < 1 && Number.isInteger(1 / interval)) interval = -1 / interval;\n    const n = Math.abs(interval);\n    return interval < 0\n      ? {\n          floor: (d) => Math.floor(d * n) / n,\n          offset: (d) => (d * n + 1) / n, // note: no optional step for simplicity\n          range: (lo, hi) => rangei(Math.ceil(lo * n), hi * n).map((x) => x / n)\n        }\n      : {\n          floor: (d) => Math.floor(d / n) * n,\n          offset: (d) => d + n, // note: no optional step for simplicity\n          range: (lo, hi) => rangei(Math.ceil(lo / n), hi / n).map((x) => x * n)\n        };\n  }\n  if (typeof interval === \"string\") return (type === \"time\" ? maybeTimeInterval : maybeUtcInterval)(interval);\n  if (typeof interval.floor !== \"function\") throw new Error(\"invalid interval; missing floor method\");\n  if (typeof interval.offset !== \"function\") throw new Error(\"invalid interval; missing offset method\");\n  return interval;\n}\n\n// Like maybeInterval, but requires a range method too.\nexport function maybeRangeInterval(interval, type) {\n  interval = maybeInterval(interval, type);\n  if (interval && typeof interval.range !== \"function\") throw new Error(\"invalid interval: missing range method\");\n  return interval;\n}\n\n// Like maybeRangeInterval, but requires a ceil method too.\nexport function maybeNiceInterval(interval, type) {\n  interval = maybeRangeInterval(interval, type);\n  if (interval && typeof interval.ceil !== \"function\") throw new Error(\"invalid interval: missing ceil method\");\n  return interval;\n}\n\n// This distinguishes between per-dimension options and a standalone value.\nexport function maybeValue(value) {\n  return value === undefined || isOptions(value) ? value : {value};\n}\n\n// Coerces the given channel values (if any) to numbers. This is useful when\n// values will be interpolated into other code, such as an SVG transform, and\n// where we don\u2019t wish to allow unexpected behavior for weird input.\nexport function numberChannel(source) {\n  return source == null\n    ? null\n    : {\n        transform: (data) => valueof(data, source, Float64Array),\n        label: labelof(source)\n      };\n}\n\nexport function isTuples(data) {\n  if (!isIterable(data)) return false;\n  for (const d of data) {\n    if (d == null) continue;\n    return typeof d === \"object\" && \"0\" in d && \"1\" in d;\n  }\n}\n\nexport function isIterable(value) {\n  return value && typeof value[Symbol.iterator] === \"function\";\n}\n\nexport function isTextual(values) {\n  for (const value of values) {\n    if (value == null) continue;\n    return typeof value !== \"object\" || value instanceof Date;\n  }\n}\n\nexport function isOrdinal(values) {\n  for (const value of values) {\n    if (value == null) continue;\n    const type = typeof value;\n    return type === \"string\" || type === \"boolean\";\n  }\n}\n\nexport function isTemporal(values) {\n  for (const value of values) {\n    if (value == null) continue;\n    return value instanceof Date;\n  }\n}\n\n// Are these strings that might represent dates? This is stricter than ISO 8601\n// because we want to ignore false positives on numbers; for example, the string\n// \"1192\" is more likely to represent a number than a date even though it is\n// valid ISO 8601 representing 1192-01-01.\nexport function isTemporalString(values) {\n  for (const value of values) {\n    if (value == null) continue;\n    return typeof value === \"string\" && isNaN(value) && isoParse(value);\n  }\n}\n\n// Are these strings that might represent numbers? This is stricter than\n// coercion because we want to ignore false positives on e.g. empty strings.\nexport function isNumericString(values) {\n  for (const value of values) {\n    if (value == null) continue;\n    if (typeof value !== \"string\") return false;\n    if (!value.trim()) continue;\n    return !isNaN(value);\n  }\n}\n\nexport function isNumeric(values) {\n  for (const value of values) {\n    if (value == null) continue;\n    return typeof value === \"number\";\n  }\n}\n\n// Returns true if every non-null value in the specified iterable of values\n// passes the specified predicate, and there is at least one non-null value;\n// returns false if at least one non-null value does not pass the specified\n// predicate; otherwise returns undefined (as if all values are null).\nexport function isEvery(values, is) {\n  let every;\n  for (const value of values) {\n    if (value == null) continue;\n    if (!is(value)) return false;\n    every = true;\n  }\n  return every;\n}\n\n// Mostly relies on d3-color, with a few extra color keywords. Currently this\n// strictly requires that the value be a string; we might want to apply string\n// coercion here, though note that d3-color instances would need to support\n// valueOf to work correctly with InternMap.\n// https://www.w3.org/TR/SVG11/painting.html#SpecifyingPaint\nexport function isColor(value) {\n  if (typeof value !== \"string\") return false;\n  value = value.toLowerCase().trim();\n  return (\n    value === \"none\" ||\n    value === \"currentcolor\" ||\n    (value.startsWith(\"url(\") && value.endsWith(\")\")) || // <funciri>, e.g. pattern or gradient\n    (value.startsWith(\"var(\") && value.endsWith(\")\")) || // CSS variable\n    color(value) !== null\n  );\n}\n\nexport function isOpacity(value) {\n  return typeof value === \"number\" && ((0 <= value && value <= 1) || isNaN(value));\n}\n\nexport function isNoneish(value) {\n  return value == null || isNone(value);\n}\n\nexport function isNone(value) {\n  return /^\\s*none\\s*$/i.test(value);\n}\n\nexport function isRound(value) {\n  return /^\\s*round\\s*$/i.test(value);\n}\n\nexport function maybeAnchor(value, name) {\n  return maybeKeyword(value, name, [\n    \"middle\",\n    \"top-left\",\n    \"top\",\n    \"top-right\",\n    \"right\",\n    \"bottom-right\",\n    \"bottom\",\n    \"bottom-left\",\n    \"left\"\n  ]);\n}\n\nexport function maybeFrameAnchor(value = \"middle\") {\n  return maybeAnchor(value, \"frameAnchor\");\n}\n\n// Like a sort comparator, returns a positive value if the given array of values\n// is in ascending order, a negative value if the values are in descending\n// order. Assumes monotonicity; only tests the first and last values.\nexport function orderof(values) {\n  if (values == null) return;\n  const first = values[0];\n  const last = values[values.length - 1];\n  return descending(first, last);\n}\n\n// Unlike {...defaults, ...options}, this ensures that any undefined (but\n// present) properties in options inherit the given default value.\nexport function inherit(options = {}, ...rest) {\n  let o = options;\n  for (const defaults of rest) {\n    for (const key in defaults) {\n      if (o[key] === undefined) {\n        const value = defaults[key];\n        if (o === options) o = {...o, [key]: value};\n        else o[key] = value;\n      }\n    }\n  }\n  return o;\n}\n\n// Given an iterable of named things (objects with a name property), returns a\n// corresponding object with properties associated with the given name.\nexport function named(things) {\n  console.warn(\"named iterables are deprecated; please use an object instead\");\n  const names = new Set();\n  return Object.fromEntries(\n    Array.from(things, (thing) => {\n      const {name} = thing;\n      if (name == null) throw new Error(\"missing name\");\n      const key = `${name}`;\n      if (key === \"__proto__\") throw new Error(`illegal name: ${key}`);\n      if (names.has(key)) throw new Error(`duplicate name: ${key}`);\n      names.add(key);\n      return [name, thing];\n    })\n  );\n}\n\nexport function maybeNamed(things) {\n  return isIterable(things) ? named(things) : things;\n}\n", "// Positional scales have associated axes, and for ordinal data, a point or band\n// scale is used instead of an ordinal scale.\nexport const position = Symbol(\"position\");\n\n// Color scales default to the turbo interpolator for quantitative data, and to\n// the Tableau10 scheme for ordinal data. Color scales may also have an\n// associated legend.\nexport const color = Symbol(\"color\");\n\n// Radius scales default to the sqrt type, have a default range of [0, 3], and a\n// default domain from 0 to the median first quartile of associated channels.\nexport const radius = Symbol(\"radius\");\n\n// Length scales default to the linear type, have a default range of [0, 12],\n// and a default domain from 0 to the median median of associated channels.\nexport const length = Symbol(\"length\");\n\n// Opacity scales have a default range of [0, 1], and a default domain from 0 to\n// the maximum value of associated channels.\nexport const opacity = Symbol(\"opacity\");\n\n// Symbol scales have a default range of categorical symbols.\nexport const symbol = Symbol(\"symbol\");\n\n// There isn\u2019t really a projection scale; this represents x and y for geometry.\nexport const projection = Symbol(\"projection\");\n\n// TODO Rather than hard-coding the list of known scale names, collect the names\n// and categories for each plot specification, so that custom marks can register\n// custom scales.\nexport const registry = new Map([\n  [\"x\", position],\n  [\"y\", position],\n  [\"fx\", position],\n  [\"fy\", position],\n  [\"r\", radius],\n  [\"color\", color],\n  [\"opacity\", opacity],\n  [\"symbol\", symbol],\n  [\"length\", length],\n  [\"projection\", projection]\n]);\n", "import {symbolAsterisk, symbolDiamond2, symbolPlus, symbolSquare2, symbolTriangle2, symbolTimes} from \"d3\";\nimport {symbolCircle, symbolCross, symbolDiamond, symbolSquare, symbolStar, symbolTriangle, symbolWye} from \"d3\";\n\nexport const sqrt3 = Math.sqrt(3);\nexport const sqrt4_3 = 2 / sqrt3;\n\nconst symbolHexagon = {\n  draw(context, size) {\n    const rx = Math.sqrt(size / Math.PI),\n      ry = rx * sqrt4_3,\n      hy = ry / 2;\n    context.moveTo(0, ry);\n    context.lineTo(rx, hy);\n    context.lineTo(rx, -hy);\n    context.lineTo(0, -ry);\n    context.lineTo(-rx, -hy);\n    context.lineTo(-rx, hy);\n    context.closePath();\n  }\n};\n\nconst symbols = new Map([\n  [\"asterisk\", symbolAsterisk],\n  [\"circle\", symbolCircle],\n  [\"cross\", symbolCross],\n  [\"diamond\", symbolDiamond],\n  [\"diamond2\", symbolDiamond2],\n  [\"hexagon\", symbolHexagon],\n  [\"plus\", symbolPlus],\n  [\"square\", symbolSquare],\n  [\"square2\", symbolSquare2],\n  [\"star\", symbolStar],\n  [\"times\", symbolTimes],\n  [\"triangle\", symbolTriangle],\n  [\"triangle2\", symbolTriangle2],\n  [\"wye\", symbolWye]\n]);\n\nfunction isSymbolObject(value) {\n  return value && typeof value.draw === \"function\";\n}\n\nexport function isSymbol(value) {\n  if (isSymbolObject(value)) return true;\n  if (typeof value !== \"string\") return false;\n  return symbols.has(value.toLowerCase());\n}\n\nexport function maybeSymbol(symbol) {\n  if (symbol == null || isSymbolObject(symbol)) return symbol;\n  const value = symbols.get(`${symbol}`.toLowerCase());\n  if (value) return value;\n  throw new Error(`invalid symbol: ${symbol}`);\n}\n\nexport function maybeSymbolChannel(symbol) {\n  if (symbol == null || isSymbolObject(symbol)) return [undefined, symbol];\n  if (typeof symbol === \"string\") {\n    const value = symbols.get(`${symbol}`.toLowerCase());\n    if (value) return [undefined, value];\n  }\n  return [symbol, undefined];\n}\n", "import {randomLcg} from \"d3\";\nimport {ascendingDefined, descendingDefined} from \"../defined.js\";\nimport {arrayify, isDomainSort, isOptions, maybeValue, valueof} from \"../options.js\";\n\nexport function basic({filter: f1, sort: s1, reverse: r1, transform: t1, initializer: i1, ...options} = {}, transform) {\n  // If both t1 and t2 are defined, returns a composite transform that first\n  // applies t1 and then applies t2.\n  if (t1 === undefined) {\n    // explicit transform overrides filter, sort, and reverse\n    if (f1 != null) t1 = filterTransform(f1);\n    if (s1 != null && !isDomainSort(s1)) t1 = composeTransform(t1, sortTransform(s1));\n    if (r1) t1 = composeTransform(t1, reverseTransform);\n  }\n  if (transform != null && i1 != null) throw new Error(\"transforms cannot be applied after initializers\");\n  return {\n    ...options,\n    ...((s1 === null || isDomainSort(s1)) && {sort: s1}),\n    transform: composeTransform(t1, transform)\n  };\n}\n\nexport function initializer({filter: f1, sort: s1, reverse: r1, initializer: i1, ...options} = {}, initializer) {\n  // If both i1 and i2 are defined, returns a composite initializer that first\n  // applies i1 and then applies i2.\n  if (i1 === undefined) {\n    // explicit initializer overrides filter, sort, and reverse\n    if (f1 != null) i1 = filterTransform(f1);\n    if (s1 != null && !isDomainSort(s1)) i1 = composeInitializer(i1, sortTransform(s1));\n    if (r1) i1 = composeInitializer(i1, reverseTransform);\n  }\n  return {\n    ...options,\n    ...((s1 === null || isDomainSort(s1)) && {sort: s1}),\n    initializer: composeInitializer(i1, initializer)\n  };\n}\n\nfunction composeTransform(t1, t2) {\n  if (t1 == null) return t2 === null ? undefined : t2;\n  if (t2 == null) return t1 === null ? undefined : t1;\n  return function (data, facets, plotOptions) {\n    ({data, facets} = t1.call(this, data, facets, plotOptions));\n    return t2.call(this, arrayify(data), facets, plotOptions);\n  };\n}\n\nfunction composeInitializer(i1, i2) {\n  if (i1 == null) return i2 === null ? undefined : i2;\n  if (i2 == null) return i1 === null ? undefined : i1;\n  return function (data, facets, channels, ...args) {\n    let c1, d1, f1, c2, d2, f2;\n    ({data: d1 = data, facets: f1 = facets, channels: c1} = i1.call(this, data, facets, channels, ...args));\n    ({data: d2 = d1, facets: f2 = f1, channels: c2} = i2.call(this, d1, f1, {...channels, ...c1}, ...args));\n    return {data: d2, facets: f2, channels: {...c1, ...c2}};\n  };\n}\n\nfunction apply(options, t) {\n  return (options.initializer != null ? initializer : basic)(options, t);\n}\n\nexport function filter(test, options) {\n  return apply(options, filterTransform(test));\n}\n\nfunction filterTransform(value) {\n  return (data, facets) => {\n    const V = valueof(data, value);\n    return {data, facets: facets.map((I) => I.filter((i) => V[i]))};\n  };\n}\n\nexport function reverse({sort, ...options} = {}) {\n  return {\n    ...apply(options, reverseTransform),\n    sort: isDomainSort(sort) ? sort : null\n  };\n}\n\nfunction reverseTransform(data, facets) {\n  return {data, facets: facets.map((I) => I.slice().reverse())};\n}\n\nexport function shuffle({seed, sort, ...options} = {}) {\n  return {\n    ...apply(options, sortValue(seed == null ? Math.random : randomLcg(seed))),\n    sort: isDomainSort(sort) ? sort : null\n  };\n}\n\nexport function sort(order, {sort, ...options} = {}) {\n  return {\n    ...(isOptions(order) && order.channel !== undefined ? initializer : apply)(options, sortTransform(order)),\n    sort: isDomainSort(sort) ? sort : null\n  };\n}\n\nfunction sortTransform(value) {\n  return (typeof value === \"function\" && value.length !== 1 ? sortData : sortValue)(value);\n}\n\nfunction sortData(compare) {\n  return (data, facets) => {\n    const compareData = (i, j) => compare(data[i], data[j]);\n    return {data, facets: facets.map((I) => I.slice().sort(compareData))};\n  };\n}\n\nfunction sortValue(value) {\n  let channel, order;\n  ({channel, value, order} = {...maybeValue(value)});\n  const negate = channel?.startsWith(\"-\");\n  if (negate) channel = channel.slice(1);\n  if (order === undefined) order = negate ? descendingDefined : ascendingDefined;\n  if (typeof order !== \"function\") {\n    switch (`${order}`.toLowerCase()) {\n      case \"ascending\":\n        order = ascendingDefined;\n        break;\n      case \"descending\":\n        order = descendingDefined;\n        break;\n      default:\n        throw new Error(`invalid order: ${order}`);\n    }\n  }\n  return (data, facets, channels) => {\n    let V;\n    if (channel === undefined) {\n      V = valueof(data, value);\n    } else {\n      if (channels === undefined) throw new Error(\"channel sort requires an initializer\");\n      V = channels[channel];\n      if (!V) return {}; // ignore missing channel\n      V = V.value;\n    }\n    const compareValue = (i, j) => order(V[i], V[j]);\n    return {data, facets: facets.map((I) => I.slice().sort(compareValue))};\n  };\n}\n", "import {\n  InternSet,\n  deviation,\n  group as grouper,\n  max,\n  maxIndex,\n  mean,\n  median,\n  min,\n  minIndex,\n  mode,\n  rollup,\n  sort,\n  sum,\n  variance\n} from \"d3\";\nimport {ascendingDefined} from \"../defined.js\";\nimport {\n  column,\n  first,\n  identity,\n  isObject,\n  isTemporal,\n  labelof,\n  maybeApplyInterval,\n  maybeColorChannel,\n  maybeColumn,\n  maybeInput,\n  maybeTuple,\n  percentile,\n  range,\n  second,\n  take,\n  valueof\n} from \"../options.js\";\nimport {basic} from \"./basic.js\";\n\n// Group on {z, fill, stroke}.\nexport function groupZ(outputs, options) {\n  return groupn(null, null, outputs, options);\n}\n\n// Group on {z, fill, stroke}, then on x.\nexport function groupX(outputs = {y: \"count\"}, options = {}) {\n  const {x = identity} = options;\n  if (x == null) throw new Error(\"missing channel: x\");\n  return groupn(x, null, outputs, options);\n}\n\n// Group on {z, fill, stroke}, then on y.\nexport function groupY(outputs = {x: \"count\"}, options = {}) {\n  const {y = identity} = options;\n  if (y == null) throw new Error(\"missing channel: y\");\n  return groupn(null, y, outputs, options);\n}\n\n// Group on {z, fill, stroke}, then on x and y.\nexport function group(outputs = {fill: \"count\"}, options = {}) {\n  let {x, y} = options;\n  [x, y] = maybeTuple(x, y);\n  if (x == null) throw new Error(\"missing channel: x\");\n  if (y == null) throw new Error(\"missing channel: y\");\n  return groupn(x, y, outputs, options);\n}\n\nfunction groupn(\n  x, // optionally group on x\n  y, // optionally group on y\n  {\n    data: reduceData = reduceIdentity,\n    filter,\n    sort,\n    reverse,\n    ...outputs // output channel definitions\n  } = {},\n  inputs = {} // input channels and options\n) {\n  // Compute the outputs.\n  outputs = maybeOutputs(outputs, inputs);\n  reduceData = maybeReduce(reduceData, identity);\n  sort = sort == null ? undefined : maybeOutput(\"sort\", sort, inputs);\n  filter = filter == null ? undefined : maybeEvaluator(\"filter\", filter, inputs);\n\n  // Produce x and y output channels as appropriate.\n  const [GX, setGX] = maybeColumn(x);\n  const [GY, setGY] = maybeColumn(y);\n\n  // Greedily materialize the z, fill, and stroke channels (if channels and not\n  // constants) so that we can reference them for subdividing groups without\n  // computing them more than once.\n  const {\n    z,\n    fill,\n    stroke,\n    x1,\n    x2, // consumed if x is an output\n    y1,\n    y2, // consumed if y is an output\n    ...options\n  } = inputs;\n  const [GZ, setGZ] = maybeColumn(z);\n  const [vfill] = maybeColorChannel(fill);\n  const [vstroke] = maybeColorChannel(stroke);\n  const [GF, setGF] = maybeColumn(vfill);\n  const [GS, setGS] = maybeColumn(vstroke);\n\n  return {\n    ...(\"z\" in inputs && {z: GZ || z}),\n    ...(\"fill\" in inputs && {fill: GF || fill}),\n    ...(\"stroke\" in inputs && {stroke: GS || stroke}),\n    ...basic(options, (data, facets, plotOptions) => {\n      const X = maybeApplyInterval(valueof(data, x), plotOptions?.x);\n      const Y = maybeApplyInterval(valueof(data, y), plotOptions?.y);\n      const Z = valueof(data, z);\n      const F = valueof(data, vfill);\n      const S = valueof(data, vstroke);\n      const G = maybeSubgroup(outputs, {z: Z, fill: F, stroke: S});\n      const groupFacets = [];\n      const groupData = [];\n      const GX = X && setGX([]);\n      const GY = Y && setGY([]);\n      const GZ = Z && setGZ([]);\n      const GF = F && setGF([]);\n      const GS = S && setGS([]);\n      let i = 0;\n      for (const o of outputs) o.initialize(data);\n      if (sort) sort.initialize(data);\n      if (filter) filter.initialize(data);\n      for (const facet of facets) {\n        const groupFacet = [];\n        for (const o of outputs) o.scope(\"facet\", facet);\n        if (sort) sort.scope(\"facet\", facet);\n        if (filter) filter.scope(\"facet\", facet);\n        for (const [f, I] of maybeGroup(facet, G)) {\n          for (const [y, gg] of maybeGroup(I, Y)) {\n            for (const [x, g] of maybeGroup(gg, X)) {\n              if (filter && !filter.reduce(g)) continue;\n              groupFacet.push(i++);\n              groupData.push(reduceData.reduceIndex(g, data));\n              if (X) GX.push(x);\n              if (Y) GY.push(y);\n              if (Z) GZ.push(G === Z ? f : Z[g[0]]);\n              if (F) GF.push(G === F ? f : F[g[0]]);\n              if (S) GS.push(G === S ? f : S[g[0]]);\n              for (const o of outputs) o.reduce(g);\n              if (sort) sort.reduce(g);\n            }\n          }\n        }\n        groupFacets.push(groupFacet);\n      }\n      maybeSort(groupFacets, sort, reverse);\n      return {data: groupData, facets: groupFacets};\n    }),\n    ...(!hasOutput(outputs, \"x\") && (GX ? {x: GX} : {x1, x2})),\n    ...(!hasOutput(outputs, \"y\") && (GY ? {y: GY} : {y1, y2})),\n    ...Object.fromEntries(outputs.map(({name, output}) => [name, output]))\n  };\n}\n\nexport function hasOutput(outputs, ...names) {\n  for (const {name} of outputs) {\n    if (names.includes(name)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport function maybeOutputs(outputs, inputs, asOutput = maybeOutput) {\n  const entries = Object.entries(outputs);\n  // Propagate standard mark channels by default.\n  if (inputs.title != null && outputs.title === undefined) entries.push([\"title\", reduceTitle]);\n  if (inputs.href != null && outputs.href === undefined) entries.push([\"href\", reduceFirst]);\n  return entries\n    .filter(([, reduce]) => reduce !== undefined)\n    .map(([name, reduce]) => (reduce === null ? nullOutput(name) : asOutput(name, reduce, inputs)));\n}\n\nexport function maybeOutput(name, reduce, inputs, asEvaluator = maybeEvaluator) {\n  let scale; // optional per-channel scale override\n  if (isObject(reduce) && \"reduce\" in reduce) (scale = reduce.scale), (reduce = reduce.reduce); // N.B. array.reduce\n  const evaluator = asEvaluator(name, reduce, inputs);\n  const [output, setOutput] = column(evaluator.label);\n  let O;\n  return {\n    name,\n    output: scale === undefined ? output : {value: output, scale},\n    initialize(data) {\n      evaluator.initialize(data);\n      O = setOutput([]);\n    },\n    scope(scope, I) {\n      evaluator.scope(scope, I);\n    },\n    reduce(I, extent) {\n      O.push(evaluator.reduce(I, extent));\n    }\n  };\n}\n\nfunction nullOutput(name) {\n  return {name, initialize() {}, scope() {}, reduce() {}};\n}\n\nexport function maybeEvaluator(name, reduce, inputs, asReduce = maybeReduce) {\n  const input = maybeInput(name, inputs);\n  const reducer = asReduce(reduce, input);\n  let V, context;\n  return {\n    label: labelof(reducer === reduceCount ? null : input, reducer.label),\n    initialize(data) {\n      V = input === undefined ? data : valueof(data, input);\n      if (reducer.scope === \"data\") {\n        context = reducer.reduceIndex(range(data), V);\n      }\n    },\n    scope(scope, I) {\n      if (reducer.scope === scope) {\n        context = reducer.reduceIndex(I, V);\n      }\n    },\n    reduce(I, extent) {\n      return reducer.scope == null ? reducer.reduceIndex(I, V, extent) : reducer.reduceIndex(I, V, context, extent);\n    }\n  };\n}\n\nexport function maybeGroup(I, X) {\n  return X\n    ? sort(\n        grouper(I, (i) => X[i]),\n        first\n      )\n    : [[, I]];\n}\n\nexport function maybeReduce(reduce, value, fallback = invalidReduce) {\n  if (reduce == null) return fallback(reduce);\n  if (typeof reduce.reduceIndex === \"function\") return reduce;\n  if (typeof reduce.reduce === \"function\" && isObject(reduce)) return reduceReduce(reduce); // N.B. array.reduce\n  if (typeof reduce === \"function\") return reduceFunction(reduce);\n  if (/^p\\d{2}$/i.test(reduce)) return reduceAccessor(percentile(reduce));\n  switch (`${reduce}`.toLowerCase()) {\n    case \"first\":\n      return reduceFirst;\n    case \"last\":\n      return reduceLast;\n    case \"identity\":\n      return reduceIdentity;\n    case \"count\":\n      return reduceCount;\n    case \"distinct\":\n      return reduceDistinct;\n    case \"sum\":\n      return value == null ? reduceCount : reduceSum;\n    case \"proportion\":\n      return reduceProportion(value, \"data\");\n    case \"proportion-facet\":\n      return reduceProportion(value, \"facet\");\n    case \"deviation\":\n      return reduceAccessor(deviation);\n    case \"min\":\n      return reduceAccessor(min);\n    case \"min-index\":\n      return reduceAccessor(minIndex);\n    case \"max\":\n      return reduceAccessor(max);\n    case \"max-index\":\n      return reduceAccessor(maxIndex);\n    case \"mean\":\n      return reduceMaybeTemporalAccessor(mean);\n    case \"median\":\n      return reduceMaybeTemporalAccessor(median);\n    case \"variance\":\n      return reduceAccessor(variance);\n    case \"mode\":\n      return reduceAccessor(mode);\n  }\n  return fallback(reduce);\n}\n\nfunction invalidReduce(reduce) {\n  throw new Error(`invalid reduce: ${reduce}`);\n}\n\nexport function maybeSubgroup(outputs, inputs) {\n  for (const name in inputs) {\n    const value = inputs[name];\n    if (value !== undefined && !outputs.some((o) => o.name === name)) {\n      return value;\n    }\n  }\n}\n\nexport function maybeSort(facets, sort, reverse) {\n  if (sort) {\n    const S = sort.output.transform();\n    const compare = (i, j) => ascendingDefined(S[i], S[j]);\n    facets.forEach((f) => f.sort(compare));\n  }\n  if (reverse) {\n    facets.forEach((f) => f.reverse());\n  }\n}\n\nfunction reduceReduce(reduce) {\n  console.warn(\"deprecated reduce interface; implement reduceIndex instead.\");\n  return {...reduce, reduceIndex: reduce.reduce.bind(reduce)};\n}\n\nfunction reduceFunction(f) {\n  return {\n    reduceIndex(I, X, extent) {\n      return f(take(X, I), extent);\n    }\n  };\n}\n\nfunction reduceAccessor(f) {\n  return {\n    reduceIndex(I, X) {\n      return f(I, (i) => X[i]);\n    }\n  };\n}\n\nfunction reduceMaybeTemporalAccessor(f) {\n  return {\n    reduceIndex(I, X) {\n      const x = f(I, (i) => X[i]);\n      return isTemporal(X) ? new Date(x) : x;\n    }\n  };\n}\n\nexport const reduceIdentity = {\n  reduceIndex(I, X) {\n    return take(X, I);\n  }\n};\n\nexport const reduceFirst = {\n  reduceIndex(I, X) {\n    return X[I[0]];\n  }\n};\n\nconst reduceTitle = {\n  reduceIndex(I, X) {\n    const n = 5;\n    const groups = sort(\n      rollup(\n        I,\n        (V) => V.length,\n        (i) => X[i]\n      ),\n      second\n    );\n    const top = groups.slice(-n).reverse();\n    if (top.length < groups.length) {\n      const bottom = groups.slice(0, 1 - n);\n      top[n - 1] = [`\u2026 ${bottom.length.toLocaleString(\"en-US\")} more`, sum(bottom, second)];\n    }\n    return top.map(([key, value]) => `${key} (${value.toLocaleString(\"en-US\")})`).join(\"\\n\");\n  }\n};\n\nconst reduceLast = {\n  reduceIndex(I, X) {\n    return X[I[I.length - 1]];\n  }\n};\n\nexport const reduceCount = {\n  label: \"Frequency\",\n  reduceIndex(I) {\n    return I.length;\n  }\n};\n\nconst reduceDistinct = {\n  label: \"Distinct\",\n  reduceIndex(I, X) {\n    const s = new InternSet();\n    for (const i of I) s.add(X[i]);\n    return s.size;\n  }\n};\n\nconst reduceSum = reduceAccessor(sum);\n\nfunction reduceProportion(value, scope) {\n  return value == null\n    ? {scope, label: \"Frequency\", reduceIndex: (I, V, basis = 1) => I.length / basis}\n    : {scope, reduceIndex: (I, V, basis = 1) => sum(I, (i) => V[i]) / basis};\n}\n", "import {InternSet, rollups} from \"d3\";\nimport {ascendingDefined, descendingDefined} from \"./defined.js\";\nimport {first, isColor, isEvery, isIterable, isOpacity, labelof, map, maybeValue, range, valueof} from \"./options.js\";\nimport {registry} from \"./scales/index.js\";\nimport {isSymbol, maybeSymbol} from \"./symbol.js\";\nimport {maybeReduce} from \"./transforms/group.js\";\n\nexport function createChannel(data, {scale, type, value, filter, hint}, name) {\n  if (hint === undefined && typeof value?.transform === \"function\") hint = value.hint;\n  return inferChannelScale(name, {\n    scale,\n    type,\n    value: valueof(data, value),\n    label: labelof(value),\n    filter,\n    hint\n  });\n}\n\nexport function createChannels(channels, data) {\n  return Object.fromEntries(\n    Object.entries(channels).map(([name, channel]) => [name, createChannel(data, channel, name)])\n  );\n}\n\n// TODO Use Float64Array for scales with numeric ranges, e.g. position?\nexport function valueObject(channels, scales) {\n  const values = Object.fromEntries(\n    Object.entries(channels).map(([name, {scale: scaleName, value}]) => {\n      const scale = scaleName == null ? null : scales[scaleName];\n      return [name, scale == null ? value : map(value, scale)];\n    })\n  );\n  values.channels = channels; // expose channel state for advanced usage\n  return values;\n}\n\n// If the channel uses the \"auto\" scale (or equivalently true), infer the scale\n// from the channel name and the provided values. For color and symbol channels,\n// no scale is applied if the values are literal; however for symbols, we must\n// promote symbol names (e.g., \"plus\") to symbol implementations (symbolPlus).\n// Note: mutates channel!\nexport function inferChannelScale(name, channel) {\n  const {scale, value} = channel;\n  if (scale === true || scale === \"auto\") {\n    switch (name) {\n      case \"fill\":\n      case \"stroke\":\n      case \"color\":\n        channel.scale = scale !== true && isEvery(value, isColor) ? null : \"color\";\n        break;\n      case \"fillOpacity\":\n      case \"strokeOpacity\":\n      case \"opacity\":\n        channel.scale = scale !== true && isEvery(value, isOpacity) ? null : \"opacity\";\n        break;\n      case \"symbol\":\n        if (scale !== true && isEvery(value, isSymbol)) {\n          channel.scale = null;\n          channel.value = map(value, maybeSymbol);\n        } else {\n          channel.scale = \"symbol\";\n        }\n        break;\n      default:\n        channel.scale = registry.has(name) ? name : null;\n        break;\n    }\n  } else if (scale === false) {\n    channel.scale = null;\n  } else if (scale != null && !registry.has(scale)) {\n    throw new Error(`unknown scale: ${scale}`);\n  }\n  return channel;\n}\n\n// Note: mutates channel.domain! This is set to a function so that it is lazily\n// computed; i.e., if the scale\u2019s domain is set explicitly, that takes priority\n// over the sort option, and we don\u2019t need to do additional work.\nexport function channelDomain(data, facets, channels, facetChannels, options) {\n  const {order: defaultOrder, reverse: defaultReverse, reduce: defaultReduce = true, limit: defaultLimit} = options;\n  for (const x in options) {\n    if (!registry.has(x)) continue; // ignore unknown scale keys (including generic options)\n    let {value: y, order = defaultOrder, reverse = defaultReverse, reduce = defaultReduce, limit = defaultLimit} = maybeValue(options[x]); // prettier-ignore\n    const negate = y?.startsWith(\"-\");\n    if (negate) y = y.slice(1);\n    order = order === undefined ? negate !== (y === \"width\" || y === \"height\") ? descendingGroup : ascendingGroup : maybeOrder(order); // prettier-ignore\n    if (reduce == null || reduce === false) continue; // disabled reducer\n    const X = x === \"fx\" || x === \"fy\" ? reindexFacetChannel(facets, facetChannels[x]) : findScaleChannel(channels, x);\n    if (!X) throw new Error(`missing channel for scale: ${x}`);\n    const XV = X.value;\n    const [lo = 0, hi = Infinity] = isIterable(limit) ? limit : limit < 0 ? [limit] : [0, limit];\n    if (y == null) {\n      X.domain = () => {\n        let domain = Array.from(new InternSet(XV)); // remove any duplicates\n        if (reverse) domain = domain.reverse();\n        if (lo !== 0 || hi !== Infinity) domain = domain.slice(lo, hi);\n        return domain;\n      };\n    } else {\n      const YV =\n        y === \"data\"\n          ? data\n          : y === \"height\"\n          ? difference(channels, \"y1\", \"y2\")\n          : y === \"width\"\n          ? difference(channels, \"x1\", \"x2\")\n          : values(channels, y, y === \"y\" ? \"y2\" : y === \"x\" ? \"x2\" : undefined);\n      const reducer = maybeReduce(reduce === true ? \"max\" : reduce, YV);\n      X.domain = () => {\n        let domain = rollups(\n          range(XV),\n          (I) => reducer.reduceIndex(I, YV),\n          (i) => XV[i]\n        );\n        if (order) domain.sort(order);\n        if (reverse) domain.reverse();\n        if (lo !== 0 || hi !== Infinity) domain = domain.slice(lo, hi);\n        return domain.map(first);\n      };\n    }\n  }\n}\n\nfunction findScaleChannel(channels, scale) {\n  for (const name in channels) {\n    const channel = channels[name];\n    if (channel.scale === scale) return channel;\n  }\n}\n\n// Facet channels are not affected by transforms; so, to compute the domain of a\n// facet scale, we must first re-index the facet channel according to the\n// transformed mark index. Note: mutates channel, but that should be safe here?\nfunction reindexFacetChannel(facets, channel) {\n  const originalFacets = facets.original;\n  if (originalFacets === facets) return channel; // not transformed\n  const V1 = channel.value;\n  const V2 = (channel.value = []); // mutates channel!\n  for (let i = 0; i < originalFacets.length; ++i) {\n    const vi = V1[originalFacets[i][0]];\n    for (const j of facets[i]) V2[j] = vi;\n  }\n  return channel;\n}\n\nfunction difference(channels, k1, k2) {\n  const X1 = values(channels, k1);\n  const X2 = values(channels, k2);\n  return map(X2, (x2, i) => Math.abs(x2 - X1[i]), Float64Array);\n}\n\nfunction values(channels, name, alias) {\n  let channel = channels[name];\n  if (!channel && alias !== undefined) channel = channels[alias];\n  if (channel) return channel.value;\n  throw new Error(`missing channel: ${name}`);\n}\n\nfunction maybeOrder(order) {\n  if (order == null || typeof order === \"function\") return order;\n  switch (`${order}`.toLowerCase()) {\n    case \"ascending\":\n      return ascendingGroup;\n    case \"descending\":\n      return descendingGroup;\n  }\n  throw new Error(`invalid order: ${order}`);\n}\n\nfunction ascendingGroup([ak, av], [bk, bv]) {\n  return ascendingDefined(av, bv) || ascendingDefined(ak, bk);\n}\n\nfunction descendingGroup([ak, av], [bk, bv]) {\n  return descendingDefined(av, bv) || ascendingDefined(ak, bk);\n}\n\nexport function getSource(channels, key) {\n  let channel = channels[key];\n  if (!channel) return;\n  while (channel.source) channel = channel.source;\n  return channel.source === null ? null : channel;\n}\n", "import {creator, select} from \"d3\";\n\nexport function createContext(options = {}) {\n  const {document = typeof window !== \"undefined\" ? window.document : undefined} = options;\n  return {document};\n}\n\nexport function create(name, {document}) {\n  return select(creator(name).call(document.documentElement));\n}\n", "let warnings = 0;\n\nexport function consumeWarnings() {\n  const w = warnings;\n  warnings = 0;\n  return w;\n}\n\nexport function warn(message) {\n  console.warn(message);\n  ++warnings;\n}\n", "import {\n  geoAlbers,\n  geoAlbersUsa,\n  geoAzimuthalEqualArea,\n  geoAzimuthalEquidistant,\n  geoClipRectangle,\n  geoConicConformal,\n  geoConicEqualArea,\n  geoConicEquidistant,\n  geoEqualEarth,\n  geoEquirectangular,\n  geoGnomonic,\n  geoMercator,\n  geoOrthographic,\n  geoPath,\n  geoStereographic,\n  geoStream,\n  geoTransform,\n  geoTransverseMercator\n} from \"d3\";\nimport {valueObject} from \"./channel.js\";\nimport {coerceNumbers, constant, isObject} from \"./options.js\";\nimport {warn} from \"./warnings.js\";\n\nconst pi = Math.PI;\nconst tau = 2 * pi;\nconst defaultAspectRatio = 0.618;\n\nexport function createProjection(\n  {\n    projection,\n    inset: globalInset = 0,\n    insetTop = globalInset,\n    insetRight = globalInset,\n    insetBottom = globalInset,\n    insetLeft = globalInset\n  } = {},\n  dimensions\n) {\n  if (projection == null) return;\n  if (typeof projection.stream === \"function\") return projection; // d3 projection\n  let options;\n  let domain;\n  let clip = \"frame\";\n\n  // If the projection was specified as an object with additional options,\n  // extract those. The order of precedence for insetTop (and other insets) is:\n  // projection.insetTop, projection.inset, (global) insetTop, (global) inset.\n  // Any other options on this object will be passed through to the initializer.\n  if (isObject(projection)) {\n    let inset;\n    ({\n      type: projection,\n      domain,\n      inset,\n      insetTop = inset !== undefined ? inset : insetTop,\n      insetRight = inset !== undefined ? inset : insetRight,\n      insetBottom = inset !== undefined ? inset : insetBottom,\n      insetLeft = inset !== undefined ? inset : insetLeft,\n      clip = clip,\n      ...options\n    } = projection);\n    if (projection == null) return;\n  }\n\n  // For named projections, retrieve the corresponding projection initializer.\n  if (typeof projection !== \"function\") ({type: projection} = namedProjection(projection));\n\n  // Compute the frame dimensions and invoke the projection initializer.\n  const {width, height, marginLeft, marginRight, marginTop, marginBottom} = dimensions;\n  const dx = width - marginLeft - marginRight - insetLeft - insetRight;\n  const dy = height - marginTop - marginBottom - insetTop - insetBottom;\n  projection = projection?.({width: dx, height: dy, clip, ...options});\n\n  // The projection initializer might decide to not use a projection.\n  if (projection == null) return;\n  clip = maybePostClip(clip, marginLeft, marginTop, width - marginRight, height - marginBottom);\n\n  // Translate the origin to the top-left corner, respecting margins and insets.\n  let tx = marginLeft + insetLeft;\n  let ty = marginTop + insetTop;\n  let transform;\n\n  // If a domain is specified, fit the projection to the frame.\n  if (domain != null) {\n    const [[x0, y0], [x1, y1]] = geoPath(projection).bounds(domain);\n    const k = Math.min(dx / (x1 - x0), dy / (y1 - y0));\n    if (k > 0) {\n      tx -= (k * (x0 + x1) - dx) / 2;\n      ty -= (k * (y0 + y1) - dy) / 2;\n      transform = geoTransform({\n        point(x, y) {\n          this.stream.point(x * k + tx, y * k + ty);\n        }\n      });\n    } else {\n      warn(`Warning: the projection could not be fit to the specified domain; using the default scale.`);\n    }\n  }\n\n  transform ??=\n    tx === 0 && ty === 0\n      ? identity()\n      : geoTransform({\n          point(x, y) {\n            this.stream.point(x + tx, y + ty);\n          }\n        });\n\n  return {stream: (s) => projection.stream(transform.stream(clip(s)))};\n}\n\nfunction namedProjection(projection) {\n  switch (`${projection}`.toLowerCase()) {\n    case \"albers-usa\":\n      return scaleProjection(geoAlbersUsa, 0.7463, 0.4673);\n    case \"albers\":\n      return conicProjection(geoAlbers, 0.7463, 0.4673);\n    case \"azimuthal-equal-area\":\n      return scaleProjection(geoAzimuthalEqualArea, 4, 4);\n    case \"azimuthal-equidistant\":\n      return scaleProjection(geoAzimuthalEquidistant, tau, tau);\n    case \"conic-conformal\":\n      return conicProjection(geoConicConformal, tau, tau);\n    case \"conic-equal-area\":\n      return conicProjection(geoConicEqualArea, 6.1702, 2.9781);\n    case \"conic-equidistant\":\n      return conicProjection(geoConicEquidistant, 7.312, 3.6282);\n    case \"equal-earth\":\n      return scaleProjection(geoEqualEarth, 5.4133, 2.6347);\n    case \"equirectangular\":\n      return scaleProjection(geoEquirectangular, tau, pi);\n    case \"gnomonic\":\n      return scaleProjection(geoGnomonic, 3.4641, 3.4641);\n    case \"identity\":\n      return {type: identity};\n    case \"reflect-y\":\n      return {type: reflectY};\n    case \"mercator\":\n      return scaleProjection(geoMercator, tau, tau);\n    case \"orthographic\":\n      return scaleProjection(geoOrthographic, 2, 2);\n    case \"stereographic\":\n      return scaleProjection(geoStereographic, 2, 2);\n    case \"transverse-mercator\":\n      return scaleProjection(geoTransverseMercator, tau, tau);\n    default:\n      throw new Error(`unknown projection type: ${projection}`);\n  }\n}\n\nfunction maybePostClip(clip, x1, y1, x2, y2) {\n  if (clip === false || clip == null || typeof clip === \"number\") return (s) => s;\n  if (clip === true) clip = \"frame\";\n  switch (`${clip}`.toLowerCase()) {\n    case \"frame\":\n      return geoClipRectangle(x1, y1, x2, y2);\n    default:\n      throw new Error(`unknown projection clip type: ${clip}`);\n  }\n}\n\nfunction scaleProjection(createProjection, kx, ky) {\n  return {\n    type: ({width, height, rotate, precision = 0.15, clip}) => {\n      const projection = createProjection();\n      if (precision != null) projection.precision?.(precision);\n      if (rotate != null) projection.rotate?.(rotate);\n      if (typeof clip === \"number\") projection.clipAngle?.(clip);\n      projection.scale(Math.min(width / kx, height / ky));\n      projection.translate([width / 2, height / 2]);\n      return projection;\n    },\n    aspectRatio: ky / kx\n  };\n}\n\nfunction conicProjection(createProjection, kx, ky) {\n  const {type, aspectRatio} = scaleProjection(createProjection, kx, ky);\n  return {\n    type: (options) => {\n      const {parallels, domain, width, height} = options;\n      const projection = type(options);\n      if (parallels != null) {\n        projection.parallels(parallels);\n        if (domain === undefined) {\n          projection.fitSize([width, height], {type: \"Sphere\"});\n        }\n      }\n      return projection;\n    },\n    aspectRatio\n  };\n}\n\nconst identity = constant({stream: (stream) => stream});\n\nconst reflectY = constant(\n  geoTransform({\n    point(x, y) {\n      this.stream.point(x, -y);\n    }\n  })\n);\n\n// Applies a point-wise projection to the given paired x and y channels.\n// Note: mutates values!\nexport function project(cx, cy, values, projection) {\n  const x = values[cx];\n  const y = values[cy];\n  const n = x.length;\n  const X = (values[cx] = new Float64Array(n).fill(NaN));\n  const Y = (values[cy] = new Float64Array(n).fill(NaN));\n  let i;\n  const stream = projection.stream({\n    point(x, y) {\n      X[i] = x;\n      Y[i] = y;\n    }\n  });\n  for (i = 0; i < n; ++i) {\n    stream.point(x[i], y[i]);\n  }\n}\n\n// Returns true if a projection was specified. This should match the logic of\n// createProjection above, and is called before we construct the projection.\n// (Though note that we ignore the edge case where the projection initializer\n// may return null.)\nexport function hasProjection({projection} = {}) {\n  if (projection == null) return false;\n  if (typeof projection.stream === \"function\") return true;\n  if (isObject(projection)) projection = projection.type;\n  return projection != null;\n}\n\n// When a named projection is specified, we can use its natural aspect ratio to\n// determine a good value for the projection\u2019s height based on the desired\n// width. When we don\u2019t have a way to know, the golden ratio is our best guess.\n// Due to a circular dependency (we need to know the height before we can\n// construct the projection), we have to test the raw projection option rather\n// than the materialized projection; therefore we must be extremely careful that\n// the logic of this function exactly matches createProjection above!\nexport function projectionAspectRatio(projection) {\n  if (typeof projection?.stream === \"function\") return defaultAspectRatio;\n  if (isObject(projection)) projection = projection.type;\n  if (projection == null) return;\n  if (typeof projection !== \"function\") {\n    const {aspectRatio} = namedProjection(projection);\n    if (aspectRatio) return aspectRatio;\n  }\n  return defaultAspectRatio;\n}\n\n// Extract the (possibly) scaled values for the x and y channels, and apply the\n// projection if any.\nexport function applyPosition(channels, scales, {projection}) {\n  const {x, y} = channels;\n  let position = {};\n  if (x) position.x = x;\n  if (y) position.y = y;\n  position = valueObject(position, scales);\n  if (projection && x?.scale === \"x\" && y?.scale === \"y\") project(\"x\", \"y\", position, projection);\n  if (x) position.x = coerceNumbers(position.x);\n  if (y) position.y = coerceNumbers(position.y);\n  return position;\n}\n\nexport function getGeometryChannels(channel) {\n  const X = [];\n  const Y = [];\n  const x = {scale: \"x\", value: X};\n  const y = {scale: \"y\", value: Y};\n  const sink = {\n    point(x, y) {\n      X.push(x);\n      Y.push(y);\n    },\n    lineStart() {},\n    lineEnd() {},\n    polygonStart() {},\n    polygonEnd() {},\n    sphere() {}\n  };\n  for (const object of channel.value) geoStream(object, sink);\n  return [x, y];\n}\n", "import {\n  interpolateBlues,\n  interpolateBrBG,\n  interpolateBuGn,\n  interpolateBuPu,\n  interpolateGnBu,\n  interpolateGreens,\n  interpolateGreys,\n  interpolateOranges,\n  interpolateOrRd,\n  interpolatePiYG,\n  interpolatePRGn,\n  interpolatePuBu,\n  interpolatePuBuGn,\n  interpolatePuOr,\n  interpolatePuRd,\n  interpolatePurples,\n  interpolateRdBu,\n  interpolateRdGy,\n  interpolateRdPu,\n  interpolateRdYlBu,\n  interpolateRdYlGn,\n  interpolateReds,\n  interpolateSpectral,\n  interpolateYlGn,\n  interpolateYlGnBu,\n  interpolateYlOrBr,\n  interpolateYlOrRd,\n  interpolateTurbo,\n  interpolateViridis,\n  interpolateMagma,\n  interpolateInferno,\n  interpolatePlasma,\n  interpolateCividis,\n  interpolateCubehelixDefault,\n  interpolateWarm,\n  interpolateCool,\n  interpolateRainbow,\n  interpolateSinebow,\n  quantize,\n  schemeAccent,\n  schemeBlues,\n  schemeBrBG,\n  schemeBuGn,\n  schemeBuPu,\n  schemeCategory10,\n  schemeDark2,\n  schemeGnBu,\n  schemeGreens,\n  schemeGreys,\n  schemeOranges,\n  schemeOrRd,\n  schemePaired,\n  schemePastel1,\n  schemePastel2,\n  schemePiYG,\n  schemePRGn,\n  schemePuBu,\n  schemePuBuGn,\n  schemePuOr,\n  schemePuRd,\n  schemePurples,\n  schemeRdBu,\n  schemeRdGy,\n  schemeRdPu,\n  schemeRdYlBu,\n  schemeRdYlGn,\n  schemeReds,\n  schemeSet1,\n  schemeSet2,\n  schemeSet3,\n  schemeSpectral,\n  schemeTableau10,\n  schemeYlGn,\n  schemeYlGnBu,\n  schemeYlOrBr,\n  schemeYlOrRd\n} from \"d3\";\n\nconst categoricalSchemes = new Map([\n  [\"accent\", schemeAccent],\n  [\"category10\", schemeCategory10],\n  [\"dark2\", schemeDark2],\n  [\"paired\", schemePaired],\n  [\"pastel1\", schemePastel1],\n  [\"pastel2\", schemePastel2],\n  [\"set1\", schemeSet1],\n  [\"set2\", schemeSet2],\n  [\"set3\", schemeSet3],\n  [\"tableau10\", schemeTableau10]\n]);\n\nexport function isCategoricalScheme(scheme) {\n  return scheme != null && categoricalSchemes.has(`${scheme}`.toLowerCase());\n}\n\nconst ordinalSchemes = new Map([\n  ...categoricalSchemes,\n\n  // diverging\n  [\"brbg\", scheme11(schemeBrBG, interpolateBrBG)],\n  [\"prgn\", scheme11(schemePRGn, interpolatePRGn)],\n  [\"piyg\", scheme11(schemePiYG, interpolatePiYG)],\n  [\"puor\", scheme11(schemePuOr, interpolatePuOr)],\n  [\"rdbu\", scheme11(schemeRdBu, interpolateRdBu)],\n  [\"rdgy\", scheme11(schemeRdGy, interpolateRdGy)],\n  [\"rdylbu\", scheme11(schemeRdYlBu, interpolateRdYlBu)],\n  [\"rdylgn\", scheme11(schemeRdYlGn, interpolateRdYlGn)],\n  [\"spectral\", scheme11(schemeSpectral, interpolateSpectral)],\n\n  // reversed diverging (for temperature data)\n  [\"burd\", scheme11r(schemeRdBu, interpolateRdBu)],\n  [\"buylrd\", scheme11r(schemeRdYlBu, interpolateRdYlBu)],\n\n  // sequential (single-hue)\n  [\"blues\", scheme9(schemeBlues, interpolateBlues)],\n  [\"greens\", scheme9(schemeGreens, interpolateGreens)],\n  [\"greys\", scheme9(schemeGreys, interpolateGreys)],\n  [\"oranges\", scheme9(schemeOranges, interpolateOranges)],\n  [\"purples\", scheme9(schemePurples, interpolatePurples)],\n  [\"reds\", scheme9(schemeReds, interpolateReds)],\n\n  // sequential (multi-hue)\n  [\"turbo\", schemei(interpolateTurbo)],\n  [\"viridis\", schemei(interpolateViridis)],\n  [\"magma\", schemei(interpolateMagma)],\n  [\"inferno\", schemei(interpolateInferno)],\n  [\"plasma\", schemei(interpolatePlasma)],\n  [\"cividis\", schemei(interpolateCividis)],\n  [\"cubehelix\", schemei(interpolateCubehelixDefault)],\n  [\"warm\", schemei(interpolateWarm)],\n  [\"cool\", schemei(interpolateCool)],\n  [\"bugn\", scheme9(schemeBuGn, interpolateBuGn)],\n  [\"bupu\", scheme9(schemeBuPu, interpolateBuPu)],\n  [\"gnbu\", scheme9(schemeGnBu, interpolateGnBu)],\n  [\"orrd\", scheme9(schemeOrRd, interpolateOrRd)],\n  [\"pubu\", scheme9(schemePuBu, interpolatePuBu)],\n  [\"pubugn\", scheme9(schemePuBuGn, interpolatePuBuGn)],\n  [\"purd\", scheme9(schemePuRd, interpolatePuRd)],\n  [\"rdpu\", scheme9(schemeRdPu, interpolateRdPu)],\n  [\"ylgn\", scheme9(schemeYlGn, interpolateYlGn)],\n  [\"ylgnbu\", scheme9(schemeYlGnBu, interpolateYlGnBu)],\n  [\"ylorbr\", scheme9(schemeYlOrBr, interpolateYlOrBr)],\n  [\"ylorrd\", scheme9(schemeYlOrRd, interpolateYlOrRd)],\n\n  // cyclical\n  [\"rainbow\", schemeicyclical(interpolateRainbow)],\n  [\"sinebow\", schemeicyclical(interpolateSinebow)]\n]);\n\nfunction scheme9(scheme, interpolate) {\n  return ({length: n}) => {\n    if (n === 1) return [scheme[3][1]]; // favor midpoint\n    if (n === 2) return [scheme[3][1], scheme[3][2]]; // favor darker\n    n = Math.max(3, Math.floor(n));\n    return n > 9 ? quantize(interpolate, n) : scheme[n];\n  };\n}\n\nfunction scheme11(scheme, interpolate) {\n  return ({length: n}) => {\n    if (n === 2) return [scheme[3][0], scheme[3][2]]; // favor diverging extrema\n    n = Math.max(3, Math.floor(n));\n    return n > 11 ? quantize(interpolate, n) : scheme[n];\n  };\n}\n\nfunction scheme11r(scheme, interpolate) {\n  return ({length: n}) => {\n    if (n === 2) return [scheme[3][2], scheme[3][0]]; // favor diverging extrema\n    n = Math.max(3, Math.floor(n));\n    return n > 11 ? quantize((t) => interpolate(1 - t), n) : scheme[n].slice().reverse();\n  };\n}\n\nfunction schemei(interpolate) {\n  return ({length: n}) => quantize(interpolate, Math.max(2, Math.floor(n)));\n}\n\nfunction schemeicyclical(interpolate) {\n  return ({length: n}) => quantize(interpolate, Math.floor(n) + 1).slice(0, -1);\n}\n\nexport function ordinalScheme(scheme) {\n  const s = `${scheme}`.toLowerCase();\n  if (!ordinalSchemes.has(s)) throw new Error(`unknown ordinal scheme: ${s}`);\n  return ordinalSchemes.get(s);\n}\n\nexport function ordinalRange(scheme, length) {\n  const s = ordinalScheme(scheme);\n  const r = typeof s === \"function\" ? s({length}) : s;\n  return r.length !== length ? r.slice(0, length) : r;\n}\n\n// If the specified domain contains only booleans (ignoring null and undefined),\n// returns a corresponding range where false is mapped to the low color and true\n// is mapped to the high color of the specified scheme.\nexport function maybeBooleanRange(domain, scheme = \"greys\") {\n  const range = new Set();\n  const [f, t] = ordinalRange(scheme, 2);\n  for (const value of domain) {\n    if (value == null) continue;\n    if (value === true) range.add(t);\n    else if (value === false) range.add(f);\n    else return;\n  }\n  return [...range];\n}\n\nconst quantitativeSchemes = new Map([\n  // diverging\n  [\"brbg\", interpolateBrBG],\n  [\"prgn\", interpolatePRGn],\n  [\"piyg\", interpolatePiYG],\n  [\"puor\", interpolatePuOr],\n  [\"rdbu\", interpolateRdBu],\n  [\"rdgy\", interpolateRdGy],\n  [\"rdylbu\", interpolateRdYlBu],\n  [\"rdylgn\", interpolateRdYlGn],\n  [\"spectral\", interpolateSpectral],\n\n  // reversed diverging (for temperature data)\n  [\"burd\", (t) => interpolateRdBu(1 - t)],\n  [\"buylrd\", (t) => interpolateRdYlBu(1 - t)],\n\n  // sequential (single-hue)\n  [\"blues\", interpolateBlues],\n  [\"greens\", interpolateGreens],\n  [\"greys\", interpolateGreys],\n  [\"purples\", interpolatePurples],\n  [\"reds\", interpolateReds],\n  [\"oranges\", interpolateOranges],\n\n  // sequential (multi-hue)\n  [\"turbo\", interpolateTurbo],\n  [\"viridis\", interpolateViridis],\n  [\"magma\", interpolateMagma],\n  [\"inferno\", interpolateInferno],\n  [\"plasma\", interpolatePlasma],\n  [\"cividis\", interpolateCividis],\n  [\"cubehelix\", interpolateCubehelixDefault],\n  [\"warm\", interpolateWarm],\n  [\"cool\", interpolateCool],\n  [\"bugn\", interpolateBuGn],\n  [\"bupu\", interpolateBuPu],\n  [\"gnbu\", interpolateGnBu],\n  [\"orrd\", interpolateOrRd],\n  [\"pubugn\", interpolatePuBuGn],\n  [\"pubu\", interpolatePuBu],\n  [\"purd\", interpolatePuRd],\n  [\"rdpu\", interpolateRdPu],\n  [\"ylgnbu\", interpolateYlGnBu],\n  [\"ylgn\", interpolateYlGn],\n  [\"ylorbr\", interpolateYlOrBr],\n  [\"ylorrd\", interpolateYlOrRd],\n\n  // cyclical\n  [\"rainbow\", interpolateRainbow],\n  [\"sinebow\", interpolateSinebow]\n]);\n\nexport function quantitativeScheme(scheme) {\n  const s = `${scheme}`.toLowerCase();\n  if (!quantitativeSchemes.has(s)) throw new Error(`unknown quantitative scheme: ${s}`);\n  return quantitativeSchemes.get(s);\n}\n\nconst divergingSchemes = new Set([\n  \"brbg\",\n  \"prgn\",\n  \"piyg\",\n  \"puor\",\n  \"rdbu\",\n  \"rdgy\",\n  \"rdylbu\",\n  \"rdylgn\",\n  \"spectral\",\n  \"burd\",\n  \"buylrd\"\n]);\n\nexport function isDivergingScheme(scheme) {\n  return scheme != null && divergingSchemes.has(`${scheme}`.toLowerCase());\n}\n", "import {\n  descending,\n  extent,\n  interpolateHcl,\n  interpolateHsl,\n  interpolateLab,\n  interpolateNumber,\n  interpolateRgb,\n  interpolateRound,\n  max,\n  median,\n  min,\n  piecewise,\n  quantile,\n  quantize,\n  reverse as reverseof,\n  scaleIdentity,\n  scaleLinear,\n  scaleLog,\n  scalePow,\n  scaleQuantile,\n  scaleSymlog,\n  scaleThreshold,\n  ticks\n} from \"d3\";\nimport {finite, negative, positive} from \"../defined.js\";\nimport {arrayify, constant, maybeNiceInterval, maybeRangeInterval, orderof, slice} from \"../options.js\";\nimport {color, length, opacity, radius, registry} from \"./index.js\";\nimport {ordinalRange, quantitativeScheme} from \"./schemes.js\";\n\nexport const flip = (i) => (t) => i(1 - t);\nconst unit = [0, 1];\n\nconst interpolators = new Map([\n  // numbers\n  [\"number\", interpolateNumber],\n\n  // color spaces\n  [\"rgb\", interpolateRgb],\n  [\"hsl\", interpolateHsl],\n  [\"hcl\", interpolateHcl],\n  [\"lab\", interpolateLab]\n]);\n\nexport function maybeInterpolator(interpolate) {\n  const i = `${interpolate}`.toLowerCase();\n  if (!interpolators.has(i)) throw new Error(`unknown interpolator: ${i}`);\n  return interpolators.get(i);\n}\n\nexport function createScaleQ(\n  key,\n  scale,\n  channels,\n  {\n    type,\n    nice,\n    clamp,\n    zero,\n    domain = inferAutoDomain(key, channels),\n    unknown,\n    round,\n    scheme,\n    interval,\n    range = registry.get(key) === radius\n      ? inferRadialRange(channels, domain)\n      : registry.get(key) === length\n      ? inferLengthRange(channels, domain)\n      : registry.get(key) === opacity\n      ? unit\n      : undefined,\n    interpolate = registry.get(key) === color\n      ? scheme == null && range !== undefined\n        ? interpolateRgb\n        : quantitativeScheme(scheme !== undefined ? scheme : type === \"cyclical\" ? \"rainbow\" : \"turbo\")\n      : round\n      ? interpolateRound\n      : interpolateNumber,\n    reverse\n  }\n) {\n  interval = maybeRangeInterval(interval, type);\n  if (type === \"cyclical\" || type === \"sequential\") type = \"linear\"; // shorthand for color schemes\n  if (typeof interpolate !== \"function\") interpolate = maybeInterpolator(interpolate); // named interpolator\n  reverse = !!reverse;\n\n  // If an explicit range is specified, and it has a different length than the\n  // domain, then redistribute the range using a piecewise interpolator.\n  if (range !== undefined) {\n    const n = (domain = arrayify(domain)).length;\n    const m = (range = arrayify(range)).length;\n    if (n !== m) {\n      if (interpolate.length === 1) throw new Error(\"invalid piecewise interpolator\"); // e.g., turbo\n      interpolate = piecewise(interpolate, range);\n      range = undefined;\n    }\n  }\n\n  // Disambiguate between a two-argument interpolator that is used in\n  // conjunction with the range, and a one-argument \u201Cfixed\u201D interpolator on the\n  // [0, 1] interval as with the RdBu color scheme.\n  if (interpolate.length === 1) {\n    if (reverse) {\n      interpolate = flip(interpolate);\n      reverse = false;\n    }\n    if (range === undefined) {\n      range = Float64Array.from(domain, (_, i) => i / (domain.length - 1));\n      if (range.length === 2) range = unit; // optimize common case of [0, 1]\n    }\n    scale.interpolate((range === unit ? constant : interpolatePiecewise)(interpolate));\n  } else {\n    scale.interpolate(interpolate);\n  }\n\n  // If a zero option is specified, we assume that the domain is numeric, and we\n  // want to ensure that the domain crosses zero. However, note that the domain\n  // may be reversed (descending) so we shouldn\u2019t assume that the first value is\n  // smaller than the last; and also it\u2019s possible that the domain has more than\n  // two values for a \u201Cpoly\u201D scale. And lastly be careful not to mutate input!\n  if (zero) {\n    const [min, max] = extent(domain);\n    if (min > 0 || max < 0) {\n      domain = slice(domain);\n      if (orderof(domain) !== Math.sign(min)) domain[domain.length - 1] = 0; // [2, 1] or [-2, -1]\n      else domain[0] = 0; // [1, 2] or [-1, -2]\n    }\n  }\n\n  if (reverse) domain = reverseof(domain);\n  scale.domain(domain).unknown(unknown);\n  if (nice) scale.nice(maybeNice(nice, type)), (domain = scale.domain());\n  if (range !== undefined) scale.range(range);\n  if (clamp) scale.clamp(clamp);\n  return {type, domain, range, scale, interpolate, interval};\n}\n\nfunction maybeNice(nice, type) {\n  return nice === true ? undefined : typeof nice === \"number\" ? nice : maybeNiceInterval(nice, type);\n}\n\nexport function createScaleLinear(key, channels, options) {\n  return createScaleQ(key, scaleLinear(), channels, options);\n}\n\nexport function createScaleSqrt(key, channels, options) {\n  return createScalePow(key, channels, {...options, exponent: 0.5});\n}\n\nexport function createScalePow(key, channels, {exponent = 1, ...options}) {\n  return createScaleQ(key, scalePow().exponent(exponent), channels, {...options, type: \"pow\"});\n}\n\nexport function createScaleLog(key, channels, {base = 10, domain = inferLogDomain(channels), ...options}) {\n  return createScaleQ(key, scaleLog().base(base), channels, {...options, domain});\n}\n\nexport function createScaleSymlog(key, channels, {constant = 1, ...options}) {\n  return createScaleQ(key, scaleSymlog().constant(constant), channels, options);\n}\n\nexport function createScaleQuantile(\n  key,\n  channels,\n  {\n    range,\n    quantiles = range === undefined ? 5 : (range = [...range]).length, // deprecated; use n instead\n    n = quantiles,\n    scheme = \"rdylbu\",\n    domain = inferQuantileDomain(channels),\n    unknown,\n    interpolate,\n    reverse\n  }\n) {\n  if (range === undefined) {\n    range =\n      interpolate !== undefined\n        ? quantize(interpolate, n)\n        : registry.get(key) === color\n        ? ordinalRange(scheme, n)\n        : undefined;\n  }\n  if (domain.length > 0) {\n    domain = scaleQuantile(domain, range === undefined ? {length: n} : range).quantiles();\n  }\n  return createScaleThreshold(key, channels, {domain, range, reverse, unknown});\n}\n\nexport function createScaleQuantize(\n  key,\n  channels,\n  {\n    range,\n    n = range === undefined ? 5 : (range = [...range]).length,\n    scheme = \"rdylbu\",\n    domain = inferAutoDomain(key, channels),\n    unknown,\n    interpolate,\n    reverse\n  }\n) {\n  const [min, max] = extent(domain);\n  let thresholds;\n  if (range === undefined) {\n    thresholds = ticks(min, max, n); // approximate number of nice, round thresholds\n    if (thresholds[0] <= min) thresholds.splice(0, 1); // drop exact lower bound\n    if (thresholds[thresholds.length - 1] >= max) thresholds.pop(); // drop exact upper bound\n    n = thresholds.length + 1;\n    range =\n      interpolate !== undefined\n        ? quantize(interpolate, n)\n        : registry.get(key) === color\n        ? ordinalRange(scheme, n)\n        : undefined;\n  } else {\n    thresholds = quantize(interpolateNumber(min, max), n + 1).slice(1, -1); // exactly n - 1 thresholds to match range\n    if (min instanceof Date) thresholds = thresholds.map((x) => new Date(x)); // preserve date types\n  }\n  if (orderof(arrayify(domain)) < 0) thresholds.reverse(); // preserve descending domain\n  return createScaleThreshold(key, channels, {domain: thresholds, range, reverse, unknown});\n}\n\nexport function createScaleThreshold(\n  key,\n  channels,\n  {\n    domain = [0], // explicit thresholds in ascending order\n    unknown,\n    scheme = \"rdylbu\",\n    interpolate,\n    range = interpolate !== undefined\n      ? quantize(interpolate, domain.length + 1)\n      : registry.get(key) === color\n      ? ordinalRange(scheme, domain.length + 1)\n      : undefined,\n    reverse\n  }\n) {\n  domain = arrayify(domain);\n  const sign = orderof(domain); // preserve descending domain\n  if (!isNaN(sign) && !isOrdered(domain, sign)) throw new Error(`the ${key} scale has a non-monotonic domain`);\n  if (reverse) range = reverseof(range); // domain ascending, so reverse range\n  return {\n    type: \"threshold\",\n    scale: scaleThreshold(sign < 0 ? reverseof(domain) : domain, range === undefined ? [] : range).unknown(unknown),\n    domain,\n    range\n  };\n}\n\nfunction isOrdered(domain, sign) {\n  for (let i = 1, n = domain.length, d = domain[0]; i < n; ++i) {\n    const s = descending(d, (d = domain[i]));\n    if (s !== 0 && s !== sign) return false;\n  }\n  return true;\n}\n\nexport function createScaleIdentity() {\n  return {type: \"identity\", scale: scaleIdentity()};\n}\n\nexport function inferDomain(channels, f = finite) {\n  return channels.length\n    ? [\n        min(channels, ({value}) => (value === undefined ? value : min(value, f))),\n        max(channels, ({value}) => (value === undefined ? value : max(value, f)))\n      ]\n    : [0, 1];\n}\n\nfunction inferAutoDomain(key, channels) {\n  const type = registry.get(key);\n  return (type === radius || type === opacity || type === length ? inferZeroDomain : inferDomain)(channels);\n}\n\nfunction inferZeroDomain(channels) {\n  return [0, channels.length ? max(channels, ({value}) => (value === undefined ? value : max(value, finite))) : 1];\n}\n\n// We don\u2019t want the upper bound of the radial domain to be zero, as this would\n// be degenerate, so we ignore nonpositive values. We also don\u2019t want the\n// maximum default radius to exceed 30px.\nfunction inferRadialRange(channels, domain) {\n  const hint = channels.find(({radius}) => radius !== undefined);\n  if (hint !== undefined) return [0, hint.radius]; // a natural maximum radius, e.g. hexbins\n  const h25 = quantile(channels, 0.5, ({value}) => (value === undefined ? NaN : quantile(value, 0.25, positive)));\n  const range = domain.map((d) => 3 * Math.sqrt(d / h25));\n  const k = 30 / max(range);\n  return k < 1 ? range.map((r) => r * k) : range;\n}\n\n// We want a length scale\u2019s domain to go from zero to a positive value, and to\n// treat negative lengths if any as inverted vectors of equivalent magnitude. We\n// also don\u2019t want the maximum default length to exceed 60px.\nfunction inferLengthRange(channels, domain) {\n  const h50 = median(channels, ({value}) => (value === undefined ? NaN : median(value, Math.abs)));\n  const range = domain.map((d) => (12 * d) / h50);\n  const k = 60 / max(range);\n  return k < 1 ? range.map((r) => r * k) : range;\n}\n\nfunction inferLogDomain(channels) {\n  for (const {value} of channels) {\n    if (value !== undefined) {\n      for (let v of value) {\n        if (v > 0) return inferDomain(channels, positive);\n        if (v < 0) return inferDomain(channels, negative);\n      }\n    }\n  }\n  return [1, 10];\n}\n\nfunction inferQuantileDomain(channels) {\n  const domain = [];\n  for (const {value} of channels) {\n    if (value === undefined) continue;\n    for (const v of value) domain.push(v);\n  }\n  return domain;\n}\n\nexport function interpolatePiecewise(interpolate) {\n  return (i, j) => (t) => interpolate(i + t * (j - i));\n}\n", "import {\n  descending,\n  interpolateNumber,\n  interpolateRgb,\n  piecewise,\n  scaleDiverging,\n  scaleDivergingLog,\n  scaleDivergingPow,\n  scaleDivergingSymlog\n} from \"d3\";\nimport {negative, positive} from \"../defined.js\";\nimport {arrayify} from \"../options.js\";\nimport {warn} from \"../warnings.js\";\nimport {color, registry} from \"./index.js\";\nimport {flip, inferDomain, interpolatePiecewise, maybeInterpolator} from \"./quantitative.js\";\nimport {quantitativeScheme} from \"./schemes.js\";\n\nfunction createScaleD(\n  key,\n  scale,\n  transform,\n  channels,\n  {\n    type,\n    nice,\n    clamp,\n    domain = inferDomain(channels),\n    unknown,\n    pivot = 0,\n    scheme,\n    range,\n    symmetric = true,\n    interpolate = registry.get(key) === color\n      ? scheme == null && range !== undefined\n        ? interpolateRgb\n        : quantitativeScheme(scheme !== undefined ? scheme : \"rdbu\")\n      : interpolateNumber,\n    reverse\n  }\n) {\n  pivot = +pivot;\n  domain = arrayify(domain);\n  let [min, max] = domain;\n  if (domain.length > 2) warn(`Warning: the diverging ${key} scale domain contains extra elements.`);\n\n  if (descending(min, max) < 0) ([min, max] = [max, min]), (reverse = !reverse);\n  min = Math.min(min, pivot);\n  max = Math.max(max, pivot);\n\n  // Sometimes interpolate is a named interpolator, such as \"lab\" for Lab color\n  // space. Other times interpolate is a function that takes two arguments and\n  // is used in conjunction with the range. And other times the interpolate\n  // function is a \u201Cfixed\u201D interpolator on the [0, 1] interval, as when a\n  // color scheme such as interpolateRdBu is used.\n  if (typeof interpolate !== \"function\") {\n    interpolate = maybeInterpolator(interpolate);\n  }\n\n  // If an explicit range is specified, promote it to a piecewise interpolator.\n  if (range !== undefined) {\n    interpolate =\n      interpolate.length === 1 ? interpolatePiecewise(interpolate)(...range) : piecewise(interpolate, range);\n  }\n\n  // Reverse before normalization.\n  if (reverse) interpolate = flip(interpolate);\n\n  // Normalize the interpolator for symmetric difference around the pivot.\n  if (symmetric) {\n    const mid = transform.apply(pivot);\n    const mindelta = mid - transform.apply(min);\n    const maxdelta = transform.apply(max) - mid;\n    if (mindelta < maxdelta) min = transform.invert(mid - maxdelta);\n    else if (mindelta > maxdelta) max = transform.invert(mid + mindelta);\n  }\n\n  scale.domain([min, pivot, max]).unknown(unknown).interpolator(interpolate);\n  if (clamp) scale.clamp(clamp);\n  if (nice) scale.nice(nice);\n  return {type, domain: [min, max], pivot, interpolate, scale};\n}\n\nexport function createScaleDiverging(key, channels, options) {\n  return createScaleD(key, scaleDiverging(), transformIdentity, channels, options);\n}\n\nexport function createScaleDivergingSqrt(key, channels, options) {\n  return createScaleDivergingPow(key, channels, {...options, exponent: 0.5});\n}\n\nexport function createScaleDivergingPow(key, channels, {exponent = 1, ...options}) {\n  return createScaleD(key, scaleDivergingPow().exponent((exponent = +exponent)), transformPow(exponent), channels, {\n    ...options,\n    type: \"diverging-pow\"\n  });\n}\n\nexport function createScaleDivergingLog(\n  key,\n  channels,\n  {base = 10, pivot = 1, domain = inferDomain(channels, pivot < 0 ? negative : positive), ...options}\n) {\n  return createScaleD(key, scaleDivergingLog().base((base = +base)), transformLog, channels, {\n    domain,\n    pivot,\n    ...options\n  });\n}\n\nexport function createScaleDivergingSymlog(key, channels, {constant = 1, ...options}) {\n  return createScaleD(\n    key,\n    scaleDivergingSymlog().constant((constant = +constant)),\n    transformSymlog(constant),\n    channels,\n    options\n  );\n}\n\nconst transformIdentity = {\n  apply(x) {\n    return x;\n  },\n  invert(x) {\n    return x;\n  }\n};\n\nconst transformLog = {\n  apply: Math.log,\n  invert: Math.exp\n};\n\nconst transformSqrt = {\n  apply(x) {\n    return Math.sign(x) * Math.sqrt(Math.abs(x));\n  },\n  invert(x) {\n    return Math.sign(x) * (x * x);\n  }\n};\n\nfunction transformPow(exponent) {\n  return exponent === 0.5\n    ? transformSqrt\n    : {\n        apply(x) {\n          return Math.sign(x) * Math.pow(Math.abs(x), exponent);\n        },\n        invert(x) {\n          return Math.sign(x) * Math.pow(Math.abs(x), 1 / exponent);\n        }\n      };\n}\n\nfunction transformSymlog(constant) {\n  return {\n    apply(x) {\n      return Math.sign(x) * Math.log1p(Math.abs(x / constant));\n    },\n    invert(x) {\n      return Math.sign(x) * Math.expm1(Math.abs(x)) * constant;\n    }\n  };\n}\n", "import {scaleTime, scaleUtc} from \"d3\";\nimport {createScaleQ} from \"./quantitative.js\";\n\nfunction createScaleT(key, scale, channels, options) {\n  return createScaleQ(key, scale, channels, options);\n}\n\nexport function createScaleTime(key, channels, options) {\n  return createScaleT(key, scaleTime(), channels, options);\n}\n\nexport function createScaleUtc(key, channels, options) {\n  return createScaleT(key, scaleUtc(), channels, options);\n}\n", "import {InternSet, extent, quantize, reverse as reverseof, sort, symbolsFill, symbolsStroke} from \"d3\";\nimport {scaleBand, scaleOrdinal, scalePoint, scaleImplicit} from \"d3\";\nimport {ascendingDefined} from \"../defined.js\";\nimport {isNoneish, map, maybeRangeInterval} from \"../options.js\";\nimport {maybeSymbol} from \"../symbol.js\";\nimport {registry, color, position, symbol} from \"./index.js\";\nimport {maybeBooleanRange, ordinalScheme, quantitativeScheme} from \"./schemes.js\";\n\n// This denotes an implicitly ordinal color scale: the scale type was not set,\n// but the associated values are strings or booleans. If the associated defined\n// values are entirely boolean, the range will default to greys. You can opt out\n// of this by setting the type explicitly.\nexport const ordinalImplicit = Symbol(\"ordinal\");\n\nfunction createScaleO(key, scale, channels, {type, interval, domain, range, reverse, hint}) {\n  interval = maybeRangeInterval(interval, type);\n  if (domain === undefined) domain = inferDomain(channels, interval, key);\n  if (type === \"categorical\" || type === ordinalImplicit) type = \"ordinal\"; // shorthand for color schemes\n  if (reverse) domain = reverseof(domain);\n  scale.domain(domain);\n  if (range !== undefined) {\n    // If the range is specified as a function, pass it the domain.\n    if (typeof range === \"function\") range = range(domain);\n    scale.range(range);\n  }\n  return {type, domain, range, scale, hint, interval};\n}\n\nexport function createScaleOrdinal(key, channels, {type, interval, domain, range, scheme, unknown, ...options}) {\n  interval = maybeRangeInterval(interval, type);\n  if (domain === undefined) domain = inferDomain(channels, interval, key);\n  let hint;\n  if (registry.get(key) === symbol) {\n    hint = inferSymbolHint(channels);\n    range = range === undefined ? inferSymbolRange(hint) : map(range, maybeSymbol);\n  } else if (registry.get(key) === color) {\n    if (range === undefined && (type === \"ordinal\" || type === ordinalImplicit)) {\n      range = maybeBooleanRange(domain, scheme);\n      if (range !== undefined) scheme = undefined; // Don\u2019t re-apply scheme.\n    }\n    if (scheme === undefined && range === undefined) {\n      scheme = type === \"ordinal\" ? \"turbo\" : \"tableau10\";\n    }\n    if (scheme !== undefined) {\n      if (range !== undefined) {\n        const interpolate = quantitativeScheme(scheme);\n        const t0 = range[0],\n          d = range[1] - range[0];\n        range = ({length: n}) => quantize((t) => interpolate(t0 + d * t), n);\n      } else {\n        range = ordinalScheme(scheme);\n      }\n    }\n  }\n  if (unknown === scaleImplicit) {\n    throw new Error(`implicit unknown on ${key} scale is not supported`);\n  }\n  return createScaleO(key, scaleOrdinal().unknown(unknown), channels, {...options, type, domain, range, hint});\n}\n\nexport function createScalePoint(key, channels, {align = 0.5, padding = 0.5, ...options}) {\n  return maybeRound(scalePoint().align(align).padding(padding), channels, options, key);\n}\n\nexport function createScaleBand(\n  key,\n  channels,\n  {\n    align = 0.5,\n    padding = 0.1,\n    paddingInner = padding,\n    paddingOuter = key === \"fx\" || key === \"fy\" ? 0 : padding,\n    ...options\n  }\n) {\n  return maybeRound(\n    scaleBand().align(align).paddingInner(paddingInner).paddingOuter(paddingOuter),\n    channels,\n    options,\n    key\n  );\n}\n\nfunction maybeRound(scale, channels, options, key) {\n  let {round} = options;\n  if (round !== undefined) scale.round((round = !!round));\n  scale = createScaleO(key, scale, channels, options);\n  scale.round = round; // preserve for autoScaleRound\n  return scale;\n}\n\nfunction inferDomain(channels, interval, key) {\n  const values = new InternSet();\n  for (const {value, domain} of channels) {\n    if (domain !== undefined) return domain(); // see channelDomain\n    if (value === undefined) continue;\n    for (const v of value) values.add(v);\n  }\n  if (interval !== undefined) {\n    const [min, max] = extent(values).map(interval.floor, interval);\n    return interval.range(min, interval.offset(max));\n  }\n  if (values.size > 10e3 && registry.get(key) === position) {\n    throw new Error(`implicit ordinal domain of ${key} scale has more than 10,000 values`);\n  }\n  return sort(values, ascendingDefined);\n}\n\n// If all channels provide a consistent hint, propagate it to the scale.\nfunction inferHint(channels, key) {\n  let value;\n  for (const {hint} of channels) {\n    const candidate = hint?.[key];\n    if (candidate === undefined) continue; // no hint here\n    if (value === undefined) value = candidate;\n    // first hint\n    else if (value !== candidate) return; // inconsistent hint\n  }\n  return value;\n}\n\nfunction inferSymbolHint(channels) {\n  return {\n    fill: inferHint(channels, \"fill\"),\n    stroke: inferHint(channels, \"stroke\")\n  };\n}\n\nfunction inferSymbolRange(hint) {\n  return isNoneish(hint.fill) ? symbolsStroke : symbolsFill;\n}\n", "import {\n  isOrdinal,\n  isTemporal,\n  isTemporalString,\n  isNumericString,\n  isScaleOptions,\n  map,\n  slice,\n  coerceNumbers,\n  coerceDates\n} from \"./options.js\";\nimport {registry, color, position, radius, opacity, symbol, length} from \"./scales/index.js\";\nimport {\n  createScaleLinear,\n  createScaleSqrt,\n  createScalePow,\n  createScaleLog,\n  createScaleSymlog,\n  createScaleQuantile,\n  createScaleQuantize,\n  createScaleThreshold,\n  createScaleIdentity\n} from \"./scales/quantitative.js\";\nimport {\n  createScaleDiverging,\n  createScaleDivergingSqrt,\n  createScaleDivergingPow,\n  createScaleDivergingLog,\n  createScaleDivergingSymlog\n} from \"./scales/diverging.js\";\nimport {isCategoricalScheme, isDivergingScheme} from \"./scales/schemes.js\";\nimport {createScaleTime, createScaleUtc} from \"./scales/temporal.js\";\nimport {createScaleOrdinal, createScalePoint, createScaleBand, ordinalImplicit} from \"./scales/ordinal.js\";\nimport {maybeSymbol} from \"./symbol.js\";\nimport {warn} from \"./warnings.js\";\n\nexport function createScales(\n  channelsByScale,\n  {\n    label: globalLabel,\n    inset: globalInset = 0,\n    insetTop: globalInsetTop = globalInset,\n    insetRight: globalInsetRight = globalInset,\n    insetBottom: globalInsetBottom = globalInset,\n    insetLeft: globalInsetLeft = globalInset,\n    round,\n    nice,\n    clamp,\n    zero,\n    align,\n    padding,\n    projection,\n    facet: {label: facetLabel = globalLabel} = {},\n    ...options\n  } = {}\n) {\n  const scales = {};\n  for (const [key, channels] of channelsByScale) {\n    const scaleOptions = options[key];\n    const scale = createScale(key, channels, {\n      round: registry.get(key) === position ? round : undefined, // only for position\n      nice,\n      clamp,\n      zero,\n      align,\n      padding,\n      projection,\n      ...scaleOptions\n    });\n    if (scale) {\n      // populate generic scale options (percent, transform, insets)\n      let {\n        label = key === \"fx\" || key === \"fy\" ? facetLabel : globalLabel,\n        percent,\n        transform,\n        inset,\n        insetTop = inset !== undefined ? inset : key === \"y\" ? globalInsetTop : 0, // not fy\n        insetRight = inset !== undefined ? inset : key === \"x\" ? globalInsetRight : 0, // not fx\n        insetBottom = inset !== undefined ? inset : key === \"y\" ? globalInsetBottom : 0, // not fy\n        insetLeft = inset !== undefined ? inset : key === \"x\" ? globalInsetLeft : 0 // not fx\n      } = scaleOptions || {};\n      if (transform == null) transform = undefined;\n      else if (typeof transform !== \"function\") throw new Error(\"invalid scale transform; not a function\");\n      scale.percent = !!percent;\n      scale.label = label === undefined ? inferScaleLabel(channels, scale) : label;\n      scale.transform = transform;\n      if (key === \"x\" || key === \"fx\") {\n        scale.insetLeft = +insetLeft;\n        scale.insetRight = +insetRight;\n      } else if (key === \"y\" || key === \"fy\") {\n        scale.insetTop = +insetTop;\n        scale.insetBottom = +insetBottom;\n      }\n      scales[key] = scale;\n    }\n  }\n  return scales;\n}\n\nexport function createScaleFunctions(scales) {\n  return Object.fromEntries(\n    Object.entries(scales)\n      .filter(([, {scale}]) => scale) // drop identity scales\n      .map(([name, {scale, type, interval, label}]) => {\n        scale.type = type; // for axis\n        if (interval != null) scale.interval = interval; // for axis\n        if (label != null) scale.label = label; // for axis\n        return [name, scale];\n      })\n  );\n}\n\n// Mutates scale.range!\nexport function autoScaleRange(scales, dimensions) {\n  const {x, y, fx, fy} = scales;\n  const superdimensions = fx || fy ? outerDimensions(dimensions) : dimensions;\n  if (fx) autoScaleRangeX(fx, superdimensions);\n  if (fy) autoScaleRangeY(fy, superdimensions);\n  const subdimensions = fx || fy ? innerDimensions(scales, dimensions) : dimensions;\n  if (x) autoScaleRangeX(x, subdimensions);\n  if (y) autoScaleRangeY(y, subdimensions);\n}\n\n// Channels can have labels; if all the channels for a given scale are\n// consistently labeled (i.e., have the same value if not undefined), and the\n// corresponding scale doesn\u2019t already have an explicit label, then the\n// channels\u2019 label is promoted to the scale. This inferred label should have an\n// orientation-appropriate arrow added when used as an axis, but we don\u2019t want\n// to add the arrow when the label is set explicitly as an option; so, the\n// inferred label is distinguished as an object with an \u201Cinferred\u201D property.\nfunction inferScaleLabel(channels = [], scale) {\n  let label;\n  for (const {label: l} of channels) {\n    if (l === undefined) continue;\n    if (label === undefined) label = l;\n    else if (label !== l) return;\n  }\n  if (label === undefined) return;\n  if (!isOrdinalScale(scale) && scale.percent) label = `${label} (%)`;\n  return {inferred: true, toString: () => label};\n}\n\n// Returns the dimensions of the outer frame; this is subdivided into facets\n// with the margins of each facet collapsing into the outer margins.\nexport function outerDimensions(dimensions) {\n  const {\n    marginTop,\n    marginRight,\n    marginBottom,\n    marginLeft,\n    width,\n    height,\n    facet: {\n      marginTop: facetMarginTop,\n      marginRight: facetMarginRight,\n      marginBottom: facetMarginBottom,\n      marginLeft: facetMarginLeft\n    }\n  } = dimensions;\n  return {\n    marginTop: Math.max(marginTop, facetMarginTop),\n    marginRight: Math.max(marginRight, facetMarginRight),\n    marginBottom: Math.max(marginBottom, facetMarginBottom),\n    marginLeft: Math.max(marginLeft, facetMarginLeft),\n    width,\n    height\n  };\n}\n\n// Returns the dimensions of each facet.\nexport function innerDimensions({fx, fy}, dimensions) {\n  const {marginTop, marginRight, marginBottom, marginLeft, width, height} = outerDimensions(dimensions);\n  return {\n    marginTop,\n    marginRight,\n    marginBottom,\n    marginLeft,\n    width: fx ? fx.scale.bandwidth() + marginLeft + marginRight : width,\n    height: fy ? fy.scale.bandwidth() + marginTop + marginBottom : height,\n    facet: {width, height}\n  };\n}\n\nfunction autoScaleRangeX(scale, dimensions) {\n  if (scale.range === undefined) {\n    const {insetLeft, insetRight} = scale;\n    const {width, marginLeft = 0, marginRight = 0} = dimensions;\n    const left = marginLeft + insetLeft;\n    const right = width - marginRight - insetRight;\n    scale.range = [left, Math.max(left, right)];\n    if (!isOrdinalScale(scale)) scale.range = piecewiseRange(scale);\n    scale.scale.range(scale.range);\n  }\n  autoScaleRound(scale);\n}\n\nfunction autoScaleRangeY(scale, dimensions) {\n  if (scale.range === undefined) {\n    const {insetTop, insetBottom} = scale;\n    const {height, marginTop = 0, marginBottom = 0} = dimensions;\n    const top = marginTop + insetTop;\n    const bottom = height - marginBottom - insetBottom;\n    scale.range = [Math.max(top, bottom), top];\n    if (!isOrdinalScale(scale)) scale.range = piecewiseRange(scale);\n    else scale.range.reverse();\n    scale.scale.range(scale.range);\n  }\n  autoScaleRound(scale);\n}\n\nfunction autoScaleRound(scale) {\n  if (scale.round === undefined && isBandScale(scale) && roundError(scale) <= 30) {\n    scale.scale.round(true);\n  }\n}\n\n// If we were to turn on rounding for this band or point scale, how much wasted\n// space would it introduce (on both ends of the range)? This must match\n// d3.scaleBand\u2019s rounding behavior:\n// https://github.com/d3/d3-scale/blob/83555bd759c7314420bd4240642beda5e258db9e/src/band.js#L20-L32\nfunction roundError({scale}) {\n  const n = scale.domain().length;\n  const [start, stop] = scale.range();\n  const paddingInner = scale.paddingInner ? scale.paddingInner() : 1;\n  const paddingOuter = scale.paddingOuter ? scale.paddingOuter() : scale.padding();\n  const m = n - paddingInner;\n  const step = Math.abs(stop - start) / Math.max(1, m + paddingOuter * 2);\n  return (step - Math.floor(step)) * m;\n}\n\nfunction piecewiseRange(scale) {\n  const length = scale.scale.domain().length + isThresholdScale(scale);\n  if (!(length > 2)) return scale.range;\n  const [start, end] = scale.range;\n  return Array.from({length}, (_, i) => start + (i / (length - 1)) * (end - start));\n}\n\nexport function normalizeScale(key, scale, hint) {\n  return createScale(key, hint === undefined ? undefined : [{hint}], {...scale});\n}\n\nfunction createScale(key, channels = [], options = {}) {\n  const type = inferScaleType(key, channels, options);\n\n  // Warn for common misuses of implicit ordinal scales. We disable this test if\n  // you specify a scale interval or if you set the domain or range explicitly,\n  // since setting the domain or range (typically with a cardinality of more than\n  // two) is another indication that you intended for the scale to be ordinal; we\n  // also disable it for facet scales since these are always band scales.\n  if (\n    options.type === undefined &&\n    options.domain === undefined &&\n    options.range === undefined &&\n    options.interval == null &&\n    key !== \"fx\" &&\n    key !== \"fy\" &&\n    isOrdinalScale({type})\n  ) {\n    const values = channels.map(({value}) => value).filter((value) => value !== undefined);\n    if (values.some(isTemporal))\n      warn(\n        `Warning: some data associated with the ${key} scale are dates. Dates are typically associated with a \"utc\" or \"time\" scale rather than a \"${formatScaleType(\n          type\n        )}\" scale. If you are using a bar mark, you probably want a rect mark with the interval option instead; if you are using a group transform, you probably want a bin transform instead. If you want to treat this data as ordinal, you can specify the interval of the ${key} scale (e.g., d3.utcDay), or you can suppress this warning by setting the type of the ${key} scale to \"${formatScaleType(\n          type\n        )}\".`\n      );\n    else if (values.some(isTemporalString))\n      warn(\n        `Warning: some data associated with the ${key} scale are strings that appear to be dates (e.g., YYYY-MM-DD). If these strings represent dates, you should parse them to Date objects. Dates are typically associated with a \"utc\" or \"time\" scale rather than a \"${formatScaleType(\n          type\n        )}\" scale. If you are using a bar mark, you probably want a rect mark with the interval option instead; if you are using a group transform, you probably want a bin transform instead. If you want to treat this data as ordinal, you can suppress this warning by setting the type of the ${key} scale to \"${formatScaleType(\n          type\n        )}\".`\n      );\n    else if (values.some(isNumericString))\n      warn(\n        `Warning: some data associated with the ${key} scale are strings that appear to be numbers. If these strings represent numbers, you should parse or coerce them to numbers. Numbers are typically associated with a \"linear\" scale rather than a \"${formatScaleType(\n          type\n        )}\" scale. If you want to treat this data as ordinal, you can specify the interval of the ${key} scale (e.g., 1 for integers), or you can suppress this warning by setting the type of the ${key} scale to \"${formatScaleType(\n          type\n        )}\".`\n      );\n  }\n\n  options.type = type; // Mutates input!\n\n  // Once the scale type is known, coerce the associated channel values and any\n  // explicitly-specified domain to the expected type.\n  switch (type) {\n    case \"diverging\":\n    case \"diverging-sqrt\":\n    case \"diverging-pow\":\n    case \"diverging-log\":\n    case \"diverging-symlog\":\n    case \"cyclical\":\n    case \"sequential\":\n    case \"linear\":\n    case \"sqrt\":\n    case \"threshold\":\n    case \"quantile\":\n    case \"pow\":\n    case \"log\":\n    case \"symlog\":\n      options = coerceType(channels, options, coerceNumbers);\n      break;\n    case \"identity\":\n      switch (registry.get(key)) {\n        case position:\n          options = coerceType(channels, options, coerceNumbers);\n          break;\n        case symbol:\n          options = coerceType(channels, options, coerceSymbols);\n          break;\n      }\n      break;\n    case \"utc\":\n    case \"time\":\n      options = coerceType(channels, options, coerceDates);\n      break;\n  }\n\n  switch (type) {\n    case \"diverging\":\n      return createScaleDiverging(key, channels, options);\n    case \"diverging-sqrt\":\n      return createScaleDivergingSqrt(key, channels, options);\n    case \"diverging-pow\":\n      return createScaleDivergingPow(key, channels, options);\n    case \"diverging-log\":\n      return createScaleDivergingLog(key, channels, options);\n    case \"diverging-symlog\":\n      return createScaleDivergingSymlog(key, channels, options);\n    case \"categorical\":\n    case \"ordinal\":\n    case ordinalImplicit:\n      return createScaleOrdinal(key, channels, options);\n    case \"cyclical\":\n    case \"sequential\":\n    case \"linear\":\n      return createScaleLinear(key, channels, options);\n    case \"sqrt\":\n      return createScaleSqrt(key, channels, options);\n    case \"threshold\":\n      return createScaleThreshold(key, channels, options);\n    case \"quantile\":\n      return createScaleQuantile(key, channels, options);\n    case \"quantize\":\n      return createScaleQuantize(key, channels, options);\n    case \"pow\":\n      return createScalePow(key, channels, options);\n    case \"log\":\n      return createScaleLog(key, channels, options);\n    case \"symlog\":\n      return createScaleSymlog(key, channels, options);\n    case \"utc\":\n      return createScaleUtc(key, channels, options);\n    case \"time\":\n      return createScaleTime(key, channels, options);\n    case \"point\":\n      return createScalePoint(key, channels, options);\n    case \"band\":\n      return createScaleBand(key, channels, options);\n    case \"identity\":\n      return registry.get(key) === position ? createScaleIdentity() : {type: \"identity\"};\n    case undefined:\n      return;\n    default:\n      throw new Error(`unknown scale type: ${type}`);\n  }\n}\n\nfunction formatScaleType(type) {\n  return typeof type === \"symbol\" ? type.description : type;\n}\n\n// A special type symbol when the x and y scales are replaced with a projection.\nconst typeProjection = {toString: () => \"projection\"};\n\nfunction inferScaleType(key, channels, {type, domain, range, scheme, pivot, projection}) {\n  // The facet scales are always band scales; this cannot be changed.\n  if (key === \"fx\" || key === \"fy\") return \"band\";\n\n  // If a projection is specified, the x- and y-scales are disabled; these\n  // channels will be projected rather than scaled. (But still check that none\n  // of the associated channels are incompatible with a projection.)\n  if ((key === \"x\" || key === \"y\") && projection != null) type = typeProjection;\n\n  // If a channel dictates a scale type, make sure that it is consistent with\n  // the user-specified scale type (if any) and all other channels. For example,\n  // barY requires x to be a band scale and disallows any other scale type.\n  for (const {type: t} of channels) {\n    if (t === undefined) continue;\n    else if (type === undefined) type = t;\n    else if (type !== t) throw new Error(`scale incompatible with channel: ${type} !== ${t}`);\n  }\n\n  // If the scale, a channel, or user specified a (consistent) type, return it.\n  if (type === typeProjection) return;\n  if (type !== undefined) return type;\n\n  // If there\u2019s no data (and no type) associated with this scale, don\u2019t create a scale.\n  if (domain === undefined && !channels.some(({value}) => value !== undefined)) return;\n\n  // Some scales have default types.\n  const kind = registry.get(key);\n  if (kind === radius) return \"sqrt\";\n  if (kind === opacity || kind === length) return \"linear\";\n  if (kind === symbol) return \"ordinal\";\n\n  // If the domain or range has more than two values, assume it\u2019s ordinal. You\n  // can still use a \u201Cpiecewise\u201D (or \u201Cpolylinear\u201D) scale, but you must set the\n  // type explicitly.\n  if ((domain || range || []).length > 2) return asOrdinalType(kind);\n\n  // Otherwise, infer the scale type from the data! Prefer the domain, if\n  // present, over channels. (The domain and channels should be consistently\n  // typed, and the domain is more explicit and typically much smaller.) We only\n  // check the first defined value for expedience and simplicity; we expect\n  // that the types are consistent.\n  if (domain !== undefined) {\n    if (isOrdinal(domain)) return asOrdinalType(kind);\n    if (isTemporal(domain)) return \"utc\";\n  } else {\n    const values = channels.map(({value}) => value).filter((value) => value !== undefined);\n    if (values.some(isOrdinal)) return asOrdinalType(kind);\n    if (values.some(isTemporal)) return \"utc\";\n  }\n\n  // For color scales, take a hint from the color scheme and pivot option.\n  if (kind === color) {\n    if (pivot != null || isDivergingScheme(scheme)) return \"diverging\";\n    if (isCategoricalScheme(scheme)) return \"categorical\";\n  }\n\n  return \"linear\";\n}\n\n// Positional scales default to a point scale instead of an ordinal scale.\nfunction asOrdinalType(kind) {\n  switch (kind) {\n    case position:\n      return \"point\";\n    case color:\n      return ordinalImplicit;\n    default:\n      return \"ordinal\";\n  }\n}\n\nexport function isTemporalScale({type}) {\n  return type === \"time\" || type === \"utc\";\n}\n\nexport function isOrdinalScale({type}) {\n  return type === \"ordinal\" || type === \"point\" || type === \"band\" || type === ordinalImplicit;\n}\n\nexport function isThresholdScale({type}) {\n  return type === \"threshold\";\n}\n\nfunction isBandScale({type}) {\n  return type === \"point\" || type === \"band\";\n}\n\nexport function isDivergingScale({type}) {\n  return /^diverging($|-)/.test(type);\n}\n\n// Certain marks have special behavior if a scale is collapsed, i.e. if the\n// domain is degenerate and represents only a single value such as [3, 3]; for\n// example, a rect will span the full extent of the chart along a collapsed\n// dimension (whereas a dot will simply be drawn in the center).\nexport function isCollapsed(scale) {\n  if (scale === undefined) return true; // treat missing scale as collapsed\n  const domain = scale.domain();\n  const value = scale(domain[0]);\n  for (let i = 1, n = domain.length; i < n; ++i) {\n    if (scale(domain[i]) - value) {\n      return false;\n    }\n  }\n  return true;\n}\n\n// Mutates channel.value!\nfunction coerceType(channels, {domain, ...options}, coerceValues) {\n  for (const c of channels) {\n    if (c.value !== undefined) {\n      c.value = coerceValues(c.value);\n    }\n  }\n  return {\n    domain: domain === undefined ? domain : coerceValues(domain),\n    ...options\n  };\n}\n\nfunction coerceSymbols(values) {\n  return map(values, maybeSymbol);\n}\n\nexport function scale(options = {}) {\n  let scale;\n  for (const key in options) {\n    if (!registry.has(key)) continue; // ignore unknown properties\n    if (!isScaleOptions(options[key])) continue; // e.g., ignore {color: \"red\"}\n    if (scale !== undefined) throw new Error(\"ambiguous scale definition; multiple scales found\");\n    scale = exposeScale(normalizeScale(key, options[key]));\n  }\n  if (scale === undefined) throw new Error(\"invalid scale definition; no scale found\");\n  return scale;\n}\n\nexport function exposeScales(scaleDescriptors) {\n  return (key) => {\n    if (!registry.has((key = `${key}`))) throw new Error(`unknown scale: ${key}`);\n    return key in scaleDescriptors ? exposeScale(scaleDescriptors[key]) : undefined;\n  };\n}\n\n// Note: axis- and legend-related properties (such as label, ticks and\n// tickFormat) are not included here as they do not affect the scale\u2019s behavior.\nfunction exposeScale({scale, type, domain, range, interpolate, interval, transform, percent, pivot}) {\n  if (type === \"identity\") return {type: \"identity\", apply: (d) => d, invert: (d) => d};\n  const unknown = scale.unknown ? scale.unknown() : undefined;\n  return {\n    type,\n    domain: slice(domain), // defensive copy\n    ...(range !== undefined && {range: slice(range)}), // defensive copy\n    ...(transform !== undefined && {transform}),\n    ...(percent && {percent}), // only exposed if truthy\n    ...(unknown !== undefined && {unknown}),\n    ...(interval !== undefined && {interval}),\n\n    // quantitative\n    ...(interpolate !== undefined && {interpolate}),\n    ...(scale.clamp && {clamp: scale.clamp()}),\n\n    // diverging (always asymmetric; we never want to apply the symmetric transform twice)\n    ...(pivot !== undefined && {pivot, symmetric: false}),\n\n    // log, diverging-log\n    ...(scale.base && {base: scale.base()}),\n\n    // pow, diverging-pow\n    ...(scale.exponent && {exponent: scale.exponent()}),\n\n    // symlog, diverging-symlog\n    ...(scale.constant && {constant: scale.constant()}),\n\n    // band, point\n    ...(scale.align && {align: scale.align(), round: scale.round()}),\n    ...(scale.padding &&\n      (scale.paddingInner\n        ? {paddingInner: scale.paddingInner(), paddingOuter: scale.paddingOuter()}\n        : {padding: scale.padding()})),\n    ...(scale.bandwidth && {bandwidth: scale.bandwidth(), step: scale.step()}),\n\n    // utilities\n    apply: (t) => scale(t),\n    ...(scale.invert && {invert: (t) => scale.invert(t)})\n  };\n}\n", "export function memoize1(compute) {\n  let cacheValue, cacheKeys;\n  return (...keys) => {\n    if (cacheKeys?.length !== keys.length || cacheKeys.some((k, i) => k !== keys[i])) {\n      cacheKeys = keys;\n      cacheValue = compute(...keys);\n    }\n    return cacheValue;\n  };\n}\n", "import {format as isoFormat} from \"isoformat\";\nimport {string} from \"./options.js\";\nimport {memoize1} from \"./memoize.js\";\n\nconst numberFormat = memoize1((locale) => {\n  return new Intl.NumberFormat(locale);\n});\n\nconst monthFormat = memoize1((locale, month) => {\n  return new Intl.DateTimeFormat(locale, {timeZone: \"UTC\", ...(month && {month})});\n});\n\nconst weekdayFormat = memoize1((locale, weekday) => {\n  return new Intl.DateTimeFormat(locale, {timeZone: \"UTC\", ...(weekday && {weekday})});\n});\n\nexport function formatNumber(locale = \"en-US\") {\n  const format = numberFormat(locale);\n  return (i) => (i != null && !isNaN(i) ? format.format(i) : undefined);\n}\n\nexport function formatMonth(locale = \"en-US\", format = \"short\") {\n  const fmt = monthFormat(locale, format);\n  return (i) => (i != null && !isNaN((i = +new Date(Date.UTC(2000, +i)))) ? fmt.format(i) : undefined);\n}\n\nexport function formatWeekday(locale = \"en-US\", format = \"short\") {\n  const fmt = weekdayFormat(locale, format);\n  return (i) => (i != null && !isNaN((i = +new Date(Date.UTC(2001, 0, +i)))) ? fmt.format(i) : undefined);\n}\n\nexport function formatIsoDate(date) {\n  return isoFormat(date, \"Invalid Date\");\n}\n\nexport function formatAuto(locale = \"en-US\") {\n  const number = formatNumber(locale);\n  return (v) => (v instanceof Date ? formatIsoDate : typeof v === \"number\" ? number : string)(v);\n}\n\n// TODO When Plot supports a top-level locale option, this should be removed\n// because it lacks context to know which locale to use; formatAuto should be\n// used instead whenever possible.\nexport const formatDefault = formatAuto();\n", "import {geoPath, group, namespaces} from \"d3\";\nimport {create} from \"./context.js\";\nimport {defined, nonempty} from \"./defined.js\";\nimport {formatDefault} from \"./format.js\";\nimport {\n  string,\n  number,\n  maybeColorChannel,\n  maybeNumberChannel,\n  maybeKeyword,\n  isNoneish,\n  isNone,\n  isRound,\n  keyof\n} from \"./options.js\";\nimport {warn} from \"./warnings.js\";\n\nexport const offset = (typeof window !== \"undefined\" ? window.devicePixelRatio > 1 : typeof it === \"undefined\") ? 0 : 0.5; // prettier-ignore\n\nlet nextClipId = 0;\n\nfunction getClipId() {\n  return `plot-clip-${++nextClipId}`;\n}\n\nexport function styles(\n  mark,\n  {\n    title,\n    href,\n    ariaLabel: variaLabel,\n    ariaDescription,\n    ariaHidden,\n    target,\n    fill,\n    fillOpacity,\n    stroke,\n    strokeWidth,\n    strokeOpacity,\n    strokeLinejoin,\n    strokeLinecap,\n    strokeMiterlimit,\n    strokeDasharray,\n    strokeDashoffset,\n    opacity,\n    mixBlendMode,\n    imageFilter,\n    paintOrder,\n    pointerEvents,\n    shapeRendering,\n    channels\n  },\n  {\n    ariaLabel: cariaLabel,\n    fill: defaultFill = \"currentColor\",\n    fillOpacity: defaultFillOpacity,\n    stroke: defaultStroke = \"none\",\n    strokeOpacity: defaultStrokeOpacity,\n    strokeWidth: defaultStrokeWidth,\n    strokeLinecap: defaultStrokeLinecap,\n    strokeLinejoin: defaultStrokeLinejoin,\n    strokeMiterlimit: defaultStrokeMiterlimit,\n    paintOrder: defaultPaintOrder\n  }\n) {\n  // Some marks don\u2019t support fill (e.g., tick and rule).\n  if (defaultFill === null) {\n    fill = null;\n    fillOpacity = null;\n  }\n\n  // Some marks don\u2019t support stroke (e.g., image).\n  if (defaultStroke === null) {\n    stroke = null;\n    strokeOpacity = null;\n  }\n\n  // Some marks default to fill with no stroke, while others default to stroke\n  // with no fill. For example, bar and area default to fill, while dot and line\n  // default to stroke. For marks that fill by default, the default fill only\n  // applies if the stroke is (constant) none; if you set a stroke, then the\n  // default fill becomes none. Similarly for marks that stroke by stroke, the\n  // default stroke only applies if the fill is (constant) none.\n  if (isNoneish(defaultFill)) {\n    if (!isNoneish(defaultStroke) && (!isNoneish(fill) || channels?.fill)) defaultStroke = \"none\";\n  } else {\n    if (isNoneish(defaultStroke) && (!isNoneish(stroke) || channels?.stroke)) defaultFill = \"none\";\n  }\n\n  const [vfill, cfill] = maybeColorChannel(fill, defaultFill);\n  const [vfillOpacity, cfillOpacity] = maybeNumberChannel(fillOpacity, defaultFillOpacity);\n  const [vstroke, cstroke] = maybeColorChannel(stroke, defaultStroke);\n  const [vstrokeOpacity, cstrokeOpacity] = maybeNumberChannel(strokeOpacity, defaultStrokeOpacity);\n  const [vopacity, copacity] = maybeNumberChannel(opacity);\n\n  // For styles that have no effect if there is no stroke, only apply the\n  // defaults if the stroke is not the constant none. (If stroke is a channel,\n  // then cstroke will be undefined, but there\u2019s still a stroke; hence we don\u2019t\n  // use isNoneish here.)\n  if (!isNone(cstroke)) {\n    if (strokeWidth === undefined) strokeWidth = defaultStrokeWidth;\n    if (strokeLinecap === undefined) strokeLinecap = defaultStrokeLinecap;\n    if (strokeLinejoin === undefined) strokeLinejoin = defaultStrokeLinejoin;\n\n    // The default stroke miterlimit need not be applied if the current stroke\n    // is the constant round; this only has effect on miter joins.\n    if (strokeMiterlimit === undefined && !isRound(strokeLinejoin)) strokeMiterlimit = defaultStrokeMiterlimit;\n\n    // The paint order only takes effect if there is both a fill and a stroke\n    // (at least if we ignore markers, which no built-in marks currently use).\n    if (!isNone(cfill) && paintOrder === undefined) paintOrder = defaultPaintOrder;\n  }\n\n  const [vstrokeWidth, cstrokeWidth] = maybeNumberChannel(strokeWidth);\n\n  // Some marks don\u2019t support fill (e.g., tick and rule).\n  if (defaultFill !== null) {\n    mark.fill = impliedString(cfill, \"currentColor\");\n    mark.fillOpacity = impliedNumber(cfillOpacity, 1);\n  }\n\n  // Some marks don\u2019t support stroke (e.g., image).\n  if (defaultStroke !== null) {\n    mark.stroke = impliedString(cstroke, \"none\");\n    mark.strokeWidth = impliedNumber(cstrokeWidth, 1);\n    mark.strokeOpacity = impliedNumber(cstrokeOpacity, 1);\n    mark.strokeLinejoin = impliedString(strokeLinejoin, \"miter\");\n    mark.strokeLinecap = impliedString(strokeLinecap, \"butt\");\n    mark.strokeMiterlimit = impliedNumber(strokeMiterlimit, 4);\n    mark.strokeDasharray = impliedString(strokeDasharray, \"none\");\n    mark.strokeDashoffset = impliedString(strokeDashoffset, \"0\");\n  }\n\n  mark.target = string(target);\n  mark.ariaLabel = string(cariaLabel);\n  mark.ariaDescription = string(ariaDescription);\n  mark.ariaHidden = string(ariaHidden);\n  mark.opacity = impliedNumber(copacity, 1);\n  mark.mixBlendMode = impliedString(mixBlendMode, \"normal\");\n  mark.imageFilter = impliedString(imageFilter, \"none\");\n  mark.paintOrder = impliedString(paintOrder, \"normal\");\n  mark.pointerEvents = impliedString(pointerEvents, \"auto\");\n  mark.shapeRendering = impliedString(shapeRendering, \"auto\");\n\n  return {\n    title: {value: title, optional: true, filter: null},\n    href: {value: href, optional: true, filter: null},\n    ariaLabel: {value: variaLabel, optional: true, filter: null},\n    fill: {value: vfill, scale: \"auto\", optional: true},\n    fillOpacity: {value: vfillOpacity, scale: \"auto\", optional: true},\n    stroke: {value: vstroke, scale: \"auto\", optional: true},\n    strokeOpacity: {value: vstrokeOpacity, scale: \"auto\", optional: true},\n    strokeWidth: {value: vstrokeWidth, optional: true},\n    opacity: {value: vopacity, scale: \"auto\", optional: true}\n  };\n}\n\n// Applies the specified titles via selection.call.\nexport function applyTitle(selection, L) {\n  if (L)\n    selection\n      .filter((i) => nonempty(L[i]))\n      .append(\"title\")\n      .call(applyText, L);\n}\n\n// Like applyTitle, but for grouped data (lines, areas).\nexport function applyTitleGroup(selection, L) {\n  if (L)\n    selection\n      .filter(([i]) => nonempty(L[i]))\n      .append(\"title\")\n      .call(applyTextGroup, L);\n}\n\nexport function applyText(selection, T) {\n  if (T) selection.text((i) => formatDefault(T[i]));\n}\n\nexport function applyTextGroup(selection, T) {\n  if (T) selection.text(([i]) => formatDefault(T[i]));\n}\n\nexport function applyChannelStyles(\n  selection,\n  {target, tip},\n  {\n    ariaLabel: AL,\n    title: T,\n    fill: F,\n    fillOpacity: FO,\n    stroke: S,\n    strokeOpacity: SO,\n    strokeWidth: SW,\n    opacity: O,\n    href: H\n  }\n) {\n  if (AL) applyAttr(selection, \"aria-label\", (i) => AL[i]);\n  if (F) applyAttr(selection, \"fill\", (i) => F[i]);\n  if (FO) applyAttr(selection, \"fill-opacity\", (i) => FO[i]);\n  if (S) applyAttr(selection, \"stroke\", (i) => S[i]);\n  if (SO) applyAttr(selection, \"stroke-opacity\", (i) => SO[i]);\n  if (SW) applyAttr(selection, \"stroke-width\", (i) => SW[i]);\n  if (O) applyAttr(selection, \"opacity\", (i) => O[i]);\n  if (H) applyHref(selection, (i) => H[i], target);\n  if (!tip) applyTitle(selection, T);\n}\n\nexport function applyGroupedChannelStyles(\n  selection,\n  {target, tip},\n  {\n    ariaLabel: AL,\n    title: T,\n    fill: F,\n    fillOpacity: FO,\n    stroke: S,\n    strokeOpacity: SO,\n    strokeWidth: SW,\n    opacity: O,\n    href: H\n  }\n) {\n  if (AL) applyAttr(selection, \"aria-label\", ([i]) => AL[i]);\n  if (F) applyAttr(selection, \"fill\", ([i]) => F[i]);\n  if (FO) applyAttr(selection, \"fill-opacity\", ([i]) => FO[i]);\n  if (S) applyAttr(selection, \"stroke\", ([i]) => S[i]);\n  if (SO) applyAttr(selection, \"stroke-opacity\", ([i]) => SO[i]);\n  if (SW) applyAttr(selection, \"stroke-width\", ([i]) => SW[i]);\n  if (O) applyAttr(selection, \"opacity\", ([i]) => O[i]);\n  if (H) applyHref(selection, ([i]) => H[i], target);\n  if (!tip) applyTitleGroup(selection, T);\n}\n\nfunction groupAesthetics(\n  {\n    ariaLabel: AL,\n    title: T,\n    fill: F,\n    fillOpacity: FO,\n    stroke: S,\n    strokeOpacity: SO,\n    strokeWidth: SW,\n    opacity: O,\n    href: H\n  },\n  {tip}\n) {\n  return [AL, tip ? undefined : T, F, FO, S, SO, SW, O, H].filter((c) => c !== undefined);\n}\n\nexport function groupZ(I, Z, z) {\n  const G = group(I, (i) => Z[i]);\n  if (z === undefined && G.size > (1 + I.length) >> 1) {\n    warn(\n      `Warning: the implicit z channel has high cardinality. This may occur when the fill or stroke channel is associated with quantitative data rather than ordinal or categorical data. You can suppress this warning by setting the z option explicitly; if this data represents a single series, set z to null.`\n    );\n  }\n  return G.values();\n}\n\nexport function* groupIndex(I, position, mark, channels) {\n  const {z} = mark;\n  const {z: Z} = channels; // group channel\n  const A = groupAesthetics(channels, mark); // aesthetic channels\n  const C = [...position, ...A]; // all channels\n\n  // Group the current index by Z (if any).\n  for (const G of Z ? groupZ(I, Z, z) : [I]) {\n    let Ag; // the A-values (aesthetics) of the current group, if any\n    let Gg; // the current group index (a subset of G, and I), if any\n    out: for (const i of G) {\n      // If any channel has an undefined value for this index, skip it.\n      for (const c of C) {\n        if (!defined(c[i])) {\n          if (Gg) Gg.push(-1);\n          continue out;\n        }\n      }\n\n      // Otherwise, if this is a new group, record the aesthetics for this\n      // group. Yield the current group and start a new one.\n      if (Ag === undefined) {\n        if (Gg) yield Gg;\n        (Ag = A.map((c) => keyof(c[i]))), (Gg = [i]);\n        continue;\n      }\n\n      // Otherwise, add the current index to the current group. Then, if any of\n      // the aesthetics don\u2019t match the current group, yield the current group\n      // and start a new group of the current index.\n      Gg.push(i);\n      for (let j = 0; j < A.length; ++j) {\n        const k = keyof(A[j][i]);\n        if (k !== Ag[j]) {\n          yield Gg;\n          (Ag = A.map((c) => keyof(c[i]))), (Gg = [i]);\n          continue out;\n        }\n      }\n    }\n\n    // Yield the current group, if any.\n    if (Gg) yield Gg;\n  }\n}\n\n// TODO Accept other types of clips (paths, urls, x, y, other marks\u2026)?\n// https://github.com/observablehq/plot/issues/181\nexport function maybeClip(clip) {\n  if (clip === true) clip = \"frame\";\n  else if (clip === false) clip = null;\n  return maybeKeyword(clip, \"clip\", [\"frame\", \"sphere\"]);\n}\n\n// Note: may mutate selection.node!\nfunction applyClip(selection, mark, dimensions, context) {\n  let clipUrl;\n  switch (mark.clip) {\n    case \"frame\": {\n      const {width, height, marginLeft, marginRight, marginTop, marginBottom} = dimensions;\n      const id = getClipId();\n      clipUrl = `url(#${id})`;\n      selection = create(\"svg:g\", context)\n        .call((g) =>\n          g\n            .append(\"svg:clipPath\")\n            .attr(\"id\", id)\n            .append(\"rect\")\n            .attr(\"x\", marginLeft)\n            .attr(\"y\", marginTop)\n            .attr(\"width\", width - marginRight - marginLeft)\n            .attr(\"height\", height - marginTop - marginBottom)\n        )\n        .each(function () {\n          this.appendChild(selection.node());\n          selection.node = () => this; // Note: mutation!\n        });\n      break;\n    }\n    case \"sphere\": {\n      const {projection} = context;\n      if (!projection) throw new Error(`the \"sphere\" clip option requires a projection`);\n      const id = getClipId();\n      clipUrl = `url(#${id})`;\n      selection\n        .append(\"clipPath\")\n        .attr(\"id\", id)\n        .append(\"path\")\n        .attr(\"d\", geoPath(projection)({type: \"Sphere\"}));\n      break;\n    }\n  }\n  // Here we\u2019re careful to apply the ARIA attributes to the outer G element when\n  // clipping is applied, and to apply the ARIA attributes before any other\n  // attributes (for readability).\n  applyAttr(selection, \"aria-label\", mark.ariaLabel);\n  applyAttr(selection, \"aria-description\", mark.ariaDescription);\n  applyAttr(selection, \"aria-hidden\", mark.ariaHidden);\n  applyAttr(selection, \"clip-path\", clipUrl);\n}\n\n// Note: may mutate selection.node!\nexport function applyIndirectStyles(selection, mark, dimensions, context) {\n  applyClip(selection, mark, dimensions, context);\n  applyAttr(selection, \"fill\", mark.fill);\n  applyAttr(selection, \"fill-opacity\", mark.fillOpacity);\n  applyAttr(selection, \"stroke\", mark.stroke);\n  applyAttr(selection, \"stroke-width\", mark.strokeWidth);\n  applyAttr(selection, \"stroke-opacity\", mark.strokeOpacity);\n  applyAttr(selection, \"stroke-linejoin\", mark.strokeLinejoin);\n  applyAttr(selection, \"stroke-linecap\", mark.strokeLinecap);\n  applyAttr(selection, \"stroke-miterlimit\", mark.strokeMiterlimit);\n  applyAttr(selection, \"stroke-dasharray\", mark.strokeDasharray);\n  applyAttr(selection, \"stroke-dashoffset\", mark.strokeDashoffset);\n  applyAttr(selection, \"shape-rendering\", mark.shapeRendering);\n  applyAttr(selection, \"filter\", mark.imageFilter);\n  applyAttr(selection, \"paint-order\", mark.paintOrder);\n  const {pointerEvents = context.pointerSticky === false ? \"none\" : undefined} = mark;\n  applyAttr(selection, \"pointer-events\", pointerEvents);\n}\n\nexport function applyDirectStyles(selection, mark) {\n  applyStyle(selection, \"mix-blend-mode\", mark.mixBlendMode);\n  applyAttr(selection, \"opacity\", mark.opacity);\n}\n\nfunction applyHref(selection, href, target) {\n  selection.each(function (i) {\n    const h = href(i);\n    if (h != null) {\n      const a = this.ownerDocument.createElementNS(namespaces.svg, \"a\");\n      a.setAttribute(\"fill\", \"inherit\");\n      a.setAttributeNS(namespaces.xlink, \"href\", h);\n      if (target != null) a.setAttribute(\"target\", target);\n      this.parentNode.insertBefore(a, this).appendChild(this);\n    }\n  });\n}\n\nexport function applyAttr(selection, name, value) {\n  if (value != null) selection.attr(name, value);\n}\n\nexport function applyStyle(selection, name, value) {\n  if (value != null) selection.style(name, value);\n}\n\nexport function applyTransform(selection, mark, {x, y}, tx = offset, ty = offset) {\n  tx += mark.dx;\n  ty += mark.dy;\n  if (x?.bandwidth) tx += x.bandwidth() / 2;\n  if (y?.bandwidth) ty += y.bandwidth() / 2;\n  if (tx || ty) selection.attr(\"transform\", `translate(${tx},${ty})`);\n}\n\nexport function impliedString(value, impliedValue) {\n  if ((value = string(value)) !== impliedValue) return value;\n}\n\nexport function impliedNumber(value, impliedValue) {\n  if ((value = number(value)) !== impliedValue) return value;\n}\n\n// https://www.w3.org/TR/CSS21/grammar.html\nconst validClassName =\n  /^-?([_a-z]|[\\240-\\377]|\\\\[0-9a-f]{1,6}(\\r\\n|[ \\t\\r\\n\\f])?|\\\\[^\\r\\n\\f0-9a-f])([_a-z0-9-]|[\\240-\\377]|\\\\[0-9a-f]{1,6}(\\r\\n|[ \\t\\r\\n\\f])?|\\\\[^\\r\\n\\f0-9a-f])*$/i;\n\nexport function maybeClassName(name) {\n  // The default should be changed whenever the default styles are changed, so\n  // as to avoid conflict when multiple versions of Plot are on the page.\n  if (name === undefined) return \"plot-d6a7b5\";\n  name = `${name}`;\n  if (!validClassName.test(name)) throw new Error(`invalid class name: ${name}`);\n  return name;\n}\n\nexport function applyInlineStyles(selection, style) {\n  if (typeof style === \"string\") {\n    selection.property(\"style\", style);\n  } else if (style != null) {\n    for (const element of selection) {\n      Object.assign(element.style, style);\n    }\n  }\n}\n\nexport function applyFrameAnchor({frameAnchor}, {width, height, marginTop, marginRight, marginBottom, marginLeft}) {\n  return [\n    /left$/.test(frameAnchor)\n      ? marginLeft\n      : /right$/.test(frameAnchor)\n      ? width - marginRight\n      : (marginLeft + width - marginRight) / 2,\n    /^top/.test(frameAnchor)\n      ? marginTop\n      : /^bottom/.test(frameAnchor)\n      ? height - marginBottom\n      : (marginTop + height - marginBottom) / 2\n  ];\n}\n", "import {extent} from \"d3\";\nimport {projectionAspectRatio} from \"./projection.js\";\nimport {isOrdinalScale} from \"./scales.js\";\nimport {offset} from \"./style.js\";\n\nexport function createDimensions(scales, marks, options = {}) {\n  // Compute the default margins: the maximum of the marks\u2019 margins. While not\n  // always used, they may be needed to compute the default height of the plot.\n  let marginTopDefault = 0.5 - offset,\n    marginRightDefault = 0.5 + offset,\n    marginBottomDefault = 0.5 + offset,\n    marginLeftDefault = 0.5 - offset;\n\n  for (const {marginTop, marginRight, marginBottom, marginLeft} of marks) {\n    if (marginTop > marginTopDefault) marginTopDefault = marginTop;\n    if (marginRight > marginRightDefault) marginRightDefault = marginRight;\n    if (marginBottom > marginBottomDefault) marginBottomDefault = marginBottom;\n    if (marginLeft > marginLeftDefault) marginLeftDefault = marginLeft;\n  }\n\n  // Compute the actual margins. The order of precedence is: the side-specific\n  // margin options, then the global margin option, then the defaults.\n  let {\n    margin,\n    marginTop = margin !== undefined ? margin : marginTopDefault,\n    marginRight = margin !== undefined ? margin : marginRightDefault,\n    marginBottom = margin !== undefined ? margin : marginBottomDefault,\n    marginLeft = margin !== undefined ? margin : marginLeftDefault\n  } = options;\n\n  // Coerce the margin options to numbers.\n  marginTop = +marginTop;\n  marginRight = +marginRight;\n  marginBottom = +marginBottom;\n  marginLeft = +marginLeft;\n\n  // Compute the outer dimensions of the plot. If the top and bottom margins are\n  // specified explicitly, adjust the automatic height accordingly.\n  let {\n    width = 640,\n    height = autoHeight(scales, options, {\n      width,\n      marginTopDefault,\n      marginRightDefault,\n      marginBottomDefault,\n      marginLeftDefault\n    }) + Math.max(0, marginTop - marginTopDefault + marginBottom - marginBottomDefault)\n  } = options;\n\n  // Coerce the width and height.\n  width = +width;\n  height = +height;\n\n  const dimensions = {\n    width,\n    height,\n    marginTop,\n    marginRight,\n    marginBottom,\n    marginLeft\n  };\n\n  // Compute the facet margins.\n  if (scales.fx || scales.fy) {\n    let {\n      margin: facetMargin,\n      marginTop: facetMarginTop = facetMargin !== undefined ? facetMargin : marginTop,\n      marginRight: facetMarginRight = facetMargin !== undefined ? facetMargin : marginRight,\n      marginBottom: facetMarginBottom = facetMargin !== undefined ? facetMargin : marginBottom,\n      marginLeft: facetMarginLeft = facetMargin !== undefined ? facetMargin : marginLeft\n    } = options.facet ?? {};\n\n    // Coerce the facet margin options to numbers.\n    facetMarginTop = +facetMarginTop;\n    facetMarginRight = +facetMarginRight;\n    facetMarginBottom = +facetMarginBottom;\n    facetMarginLeft = +facetMarginLeft;\n\n    dimensions.facet = {\n      marginTop: facetMarginTop,\n      marginRight: facetMarginRight,\n      marginBottom: facetMarginBottom,\n      marginLeft: facetMarginLeft\n    };\n  }\n\n  return dimensions;\n}\n\nfunction autoHeight(\n  {x, y, fy, fx},\n  {projection, aspectRatio},\n  {width, marginTopDefault, marginRightDefault, marginBottomDefault, marginLeftDefault}\n) {\n  const nfy = fy ? fy.scale.domain().length : 1;\n\n  // If a projection is specified, use its natural aspect ratio (if known).\n  const ar = projectionAspectRatio(projection);\n  if (ar) {\n    const nfx = fx ? fx.scale.domain().length : 1;\n    const far = ((1.1 * nfy - 0.1) / (1.1 * nfx - 0.1)) * ar; // 0.1 is default facet padding\n    const lar = Math.max(0.1, Math.min(10, far)); // clamp the aspect ratio to a \u201Creasonable\u201D value\n    return Math.round((width - marginLeftDefault - marginRightDefault) * lar + marginTopDefault + marginBottomDefault);\n  }\n\n  const ny = y ? (isOrdinalScale(y) ? y.scale.domain().length : Math.max(7, 17 / nfy)) : 1;\n\n  // If a desired aspect ratio is given, compute a default height to match.\n  if (aspectRatio != null) {\n    aspectRatio = +aspectRatio;\n    if (!(isFinite(aspectRatio) && aspectRatio > 0)) throw new Error(`invalid aspectRatio: ${aspectRatio}`);\n    const ratio = aspectRatioLength(\"y\", y) / (aspectRatioLength(\"x\", x) * aspectRatio);\n    const fxb = fx ? fx.scale.bandwidth() : 1;\n    const fyb = fy ? fy.scale.bandwidth() : 1;\n    const w = fxb * (width - marginLeftDefault - marginRightDefault) - x.insetLeft - x.insetRight;\n    return (ratio * w + y.insetTop + y.insetBottom) / fyb + marginTopDefault + marginBottomDefault;\n  }\n\n  return !!(y || fy) * Math.max(1, Math.min(60, ny * nfy)) * 20 + !!fx * 30 + 60;\n}\n\nfunction aspectRatioLength(k, scale) {\n  if (!scale) throw new Error(`aspectRatio requires ${k} scale`);\n  const {type, domain} = scale;\n  let transform;\n  switch (type) {\n    case \"linear\":\n    case \"utc\":\n    case \"time\":\n      transform = Number;\n      break;\n    case \"pow\": {\n      const exponent = scale.scale.exponent();\n      transform = (x) => Math.pow(x, exponent);\n      break;\n    }\n    case \"log\":\n      transform = Math.log;\n      break;\n    case \"point\":\n    case \"band\":\n      return domain.length;\n    default:\n      throw new Error(`unsupported ${k} scale for aspectRatio: ${type}`);\n  }\n  const [min, max] = extent(domain);\n  return Math.abs(transform(max) - transform(min));\n}\n", "import {InternMap, cross, rollup, sum} from \"d3\";\nimport {keyof, map, range} from \"./options.js\";\nimport {createScales} from \"./scales.js\";\n\n// Returns an array of {x?, y?, i} objects representing the facet domain.\nexport function createFacets(channelsByScale, options) {\n  const {fx, fy} = createScales(channelsByScale, options);\n  const fxDomain = fx?.scale.domain();\n  const fyDomain = fy?.scale.domain();\n  return fxDomain && fyDomain\n    ? cross(fxDomain, fyDomain).map(([x, y], i) => ({x, y, i}))\n    : fxDomain\n    ? fxDomain.map((x, i) => ({x, i}))\n    : fyDomain\n    ? fyDomain.map((y, i) => ({y, i}))\n    : undefined;\n}\n\nexport function recreateFacets(facets, {x: X, y: Y}) {\n  X &&= facetIndex(X);\n  Y &&= facetIndex(Y);\n  return facets\n    .filter(\n      X && Y // remove any facets no longer present in the domain\n        ? (f) => X.has(f.x) && Y.has(f.y)\n        : X\n        ? (f) => X.has(f.x)\n        : (f) => Y.has(f.y)\n    )\n    .sort(\n      X && Y // reorder facets to match the new scale domains\n        ? (a, b) => X.get(a.x) - X.get(b.x) || Y.get(a.y) - Y.get(b.y)\n        : X\n        ? (a, b) => X.get(a.x) - X.get(b.x)\n        : (a, b) => Y.get(a.y) - Y.get(b.y)\n    );\n}\n\n// Returns a (possibly nested) Map of [[key1, index1], [key2, index2], \u2026]\n// representing the data indexes associated with each facet.\nexport function facetGroups(data, {fx, fy}) {\n  const I = range(data);\n  const FX = fx?.value;\n  const FY = fy?.value;\n  return fx && fy\n    ? rollup(\n        I,\n        (G) => ((G.fx = FX[G[0]]), (G.fy = FY[G[0]]), G),\n        (i) => FX[i],\n        (i) => FY[i]\n      )\n    : fx\n    ? rollup(\n        I,\n        (G) => ((G.fx = FX[G[0]]), G),\n        (i) => FX[i]\n      )\n    : rollup(\n        I,\n        (G) => ((G.fy = FY[G[0]]), G),\n        (i) => FY[i]\n      );\n}\n\nexport function facetTranslator(fx, fy, {marginTop, marginLeft}) {\n  return fx && fy\n    ? ({x, y}) => `translate(${fx(x) - marginLeft},${fy(y) - marginTop})`\n    : fx\n    ? ({x}) => `translate(${fx(x) - marginLeft},0)`\n    : ({y}) => `translate(0,${fy(y) - marginTop})`;\n}\n\n// Returns an index that for each facet lists all the elements present in other\n// facets in the original index. TODO Memoize to avoid repeated work?\nexport function facetExclude(index) {\n  const ex = [];\n  const e = new Uint32Array(sum(index, (d) => d.length));\n  for (const i of index) {\n    let n = 0;\n    for (const j of index) {\n      if (i === j) continue;\n      e.set(j, n);\n      n += j.length;\n    }\n    ex.push(e.slice(0, n));\n  }\n  return ex;\n}\n\nconst facetAnchors = new Map([\n  [\"top\", facetAnchorTop],\n  [\"right\", facetAnchorRight],\n  [\"bottom\", facetAnchorBottom],\n  [\"left\", facetAnchorLeft],\n  [\"top-left\", and(facetAnchorTop, facetAnchorLeft)],\n  [\"top-right\", and(facetAnchorTop, facetAnchorRight)],\n  [\"bottom-left\", and(facetAnchorBottom, facetAnchorLeft)],\n  [\"bottom-right\", and(facetAnchorBottom, facetAnchorRight)],\n  [\"top-empty\", facetAnchorTopEmpty],\n  [\"right-empty\", facetAnchorRightEmpty],\n  [\"bottom-empty\", facetAnchorBottomEmpty],\n  [\"left-empty\", facetAnchorLeftEmpty],\n  [\"empty\", facetAnchorEmpty]\n]);\n\nexport function maybeFacetAnchor(facetAnchor) {\n  if (facetAnchor == null) return null;\n  const anchor = facetAnchors.get(`${facetAnchor}`.toLowerCase());\n  if (anchor) return anchor;\n  throw new Error(`invalid facet anchor: ${facetAnchor}`);\n}\n\nconst indexCache = new WeakMap();\n\nfunction facetIndex(V) {\n  let I = indexCache.get(V);\n  if (!I) indexCache.set(V, (I = new InternMap(map(V, (v, i) => [v, i]))));\n  return I;\n}\n\n// Like V.indexOf(v), but with the same semantics as InternMap.\nfunction facetIndexOf(V, v) {\n  return facetIndex(V).get(v);\n}\n\n// Like facets.find, but with the same semantics as InternMap.\nfunction facetFind(facets, x, y) {\n  x = keyof(x);\n  y = keyof(y);\n  return facets.find((f) => Object.is(keyof(f.x), x) && Object.is(keyof(f.y), y));\n}\n\nfunction facetEmpty(facets, x, y) {\n  return facetFind(facets, x, y)?.empty;\n}\n\nfunction facetAnchorTop(facets, {y: Y}, {y}) {\n  return Y ? facetIndexOf(Y, y) === 0 : true;\n}\n\nfunction facetAnchorBottom(facets, {y: Y}, {y}) {\n  return Y ? facetIndexOf(Y, y) === Y.length - 1 : true;\n}\n\nfunction facetAnchorLeft(facets, {x: X}, {x}) {\n  return X ? facetIndexOf(X, x) === 0 : true;\n}\n\nfunction facetAnchorRight(facets, {x: X}, {x}) {\n  return X ? facetIndexOf(X, x) === X.length - 1 : true;\n}\n\nfunction facetAnchorTopEmpty(facets, {y: Y}, {x, y, empty}) {\n  if (empty) return false;\n  if (!Y) return;\n  const i = facetIndexOf(Y, y);\n  if (i > 0) return facetEmpty(facets, x, Y[i - 1]);\n}\n\nfunction facetAnchorBottomEmpty(facets, {y: Y}, {x, y, empty}) {\n  if (empty) return false;\n  if (!Y) return;\n  const i = facetIndexOf(Y, y);\n  if (i < Y.length - 1) return facetEmpty(facets, x, Y[i + 1]);\n}\n\nfunction facetAnchorLeftEmpty(facets, {x: X}, {x, y, empty}) {\n  if (empty) return false;\n  if (!X) return;\n  const i = facetIndexOf(X, x);\n  if (i > 0) return facetEmpty(facets, X[i - 1], y);\n}\n\nfunction facetAnchorRightEmpty(facets, {x: X}, {x, y, empty}) {\n  if (empty) return false;\n  if (!X) return;\n  const i = facetIndexOf(X, x);\n  if (i < X.length - 1) return facetEmpty(facets, X[i + 1], y);\n}\n\nfunction facetAnchorEmpty(facets, channels, {empty}) {\n  return empty;\n}\n\nfunction and(a, b) {\n  return function () {\n    return a.apply(null, arguments) && b.apply(null, arguments);\n  };\n}\n\n// Facet filter, by mark; for now only the \"eq\" filter is provided.\nexport function facetFilter(facets, {channels: {fx, fy}, groups}) {\n  return fx && fy\n    ? facets.map(({x, y}) => groups.get(x)?.get(y) ?? [])\n    : fx\n    ? facets.map(({x}) => groups.get(x) ?? [])\n    : facets.map(({y}) => groups.get(y) ?? []);\n}\n", "import {channelDomain, createChannels, valueObject} from \"./channel.js\";\nimport {defined} from \"./defined.js\";\nimport {maybeFacetAnchor} from \"./facet.js\";\nimport {maybeKeyword, maybeNamed, maybeValue} from \"./options.js\";\nimport {arrayify, isDomainSort, isOptions, keyword, range, singleton} from \"./options.js\";\nimport {project} from \"./projection.js\";\nimport {maybeClip, styles} from \"./style.js\";\nimport {basic, initializer} from \"./transforms/basic.js\";\n\nexport class Mark {\n  constructor(data, channels = {}, options = {}, defaults) {\n    const {\n      facet = \"auto\",\n      facetAnchor,\n      fx,\n      fy,\n      sort,\n      dx = 0,\n      dy = 0,\n      margin = 0,\n      marginTop = margin,\n      marginRight = margin,\n      marginBottom = margin,\n      marginLeft = margin,\n      clip,\n      channels: extraChannels,\n      tip,\n      render\n    } = options;\n    this.data = data;\n    this.sort = isDomainSort(sort) ? sort : null;\n    this.initializer = initializer(options).initializer;\n    this.transform = this.initializer ? options.transform : basic(options).transform;\n    if (facet === null || facet === false) {\n      this.facet = null;\n    } else {\n      this.facet = keyword(facet === true ? \"include\" : facet, \"facet\", [\"auto\", \"include\", \"exclude\", \"super\"]);\n      this.fx = data === singleton && typeof fx === \"string\" ? [fx] : fx;\n      this.fy = data === singleton && typeof fy === \"string\" ? [fy] : fy;\n    }\n    this.facetAnchor = maybeFacetAnchor(facetAnchor);\n    channels = maybeNamed(channels);\n    if (extraChannels !== undefined) channels = {...maybeChannels(extraChannels), ...channels};\n    if (defaults !== undefined) channels = {...styles(this, options, defaults), ...channels};\n    this.channels = Object.fromEntries(\n      Object.entries(channels)\n        .map(([name, channel]) => {\n          if (isOptions(channel.value)) {\n            // apply scale overrides\n            const {value, scale = channel.scale} = channel.value;\n            channel = {...channel, scale, value};\n          }\n          if (data === singleton && typeof channel.value === \"string\") {\n            // convert field names to singleton values for decoration marks (e.g., frame)\n            const {value} = channel;\n            channel = {...channel, value: [value]};\n          }\n          return [name, channel];\n        })\n        .filter(([name, {value, optional}]) => {\n          if (value != null) return true;\n          if (optional) return false;\n          throw new Error(`missing channel value: ${name}`);\n        })\n    );\n    this.dx = +dx;\n    this.dy = +dy;\n    this.marginTop = +marginTop;\n    this.marginRight = +marginRight;\n    this.marginBottom = +marginBottom;\n    this.marginLeft = +marginLeft;\n    this.clip = maybeClip(clip);\n    this.tip = maybeTip(tip);\n    // Super-faceting currently disallow position channels; in the future, we\n    // could allow position to be specified in fx and fy in addition to (or\n    // instead of) x and y.\n    if (this.facet === \"super\") {\n      if (fx || fy) throw new Error(`super-faceting cannot use fx or fy`);\n      for (const name in this.channels) {\n        const {scale} = channels[name];\n        if (scale !== \"x\" && scale !== \"y\") continue;\n        throw new Error(`super-faceting cannot use x or y`);\n      }\n    }\n    if (render != null) {\n      this.render = composeRender(render, this.render);\n    }\n  }\n  initialize(facets, facetChannels, plotOptions) {\n    let data = arrayify(this.data);\n    if (facets === undefined && data != null) facets = [range(data)];\n    const originalFacets = facets;\n    if (this.transform != null) ({facets, data} = this.transform(data, facets, plotOptions)), (data = arrayify(data));\n    if (facets !== undefined) facets.original = originalFacets; // needed to read facetChannels\n    const channels = createChannels(this.channels, data);\n    if (this.sort != null) channelDomain(data, facets, channels, facetChannels, this.sort); // mutates facetChannels!\n    return {data, facets, channels};\n  }\n  filter(index, channels, values) {\n    for (const name in channels) {\n      const {filter = defined} = channels[name];\n      if (filter !== null) {\n        const value = values[name];\n        index = index.filter((i) => filter(value[i]));\n      }\n    }\n    return index;\n  }\n  // If there is a projection, and there are paired x and y channels associated\n  // with the x and y scale respectively (and not already in screen coordinates\n  // as with an initializer), then apply the projection, replacing the x and y\n  // values. Note that the x and y scales themselves don\u2019t exist if there is a\n  // projection, but whether the channels are associated with scales still\n  // determines whether the projection should apply; think of the projection as\n  // a combination xy-scale.\n  project(channels, values, context) {\n    for (const cx in channels) {\n      if (channels[cx].scale === \"x\" && /^x|x$/.test(cx)) {\n        const cy = cx.replace(/^x|x$/, \"y\");\n        if (cy in channels && channels[cy].scale === \"y\") {\n          project(cx, cy, values, context.projection);\n        }\n      }\n    }\n  }\n  scale(channels, scales, context) {\n    const values = valueObject(channels, scales);\n    if (context.projection) this.project(channels, values, context);\n    return values;\n  }\n}\n\nexport function marks(...marks) {\n  marks.plot = Mark.prototype.plot; // Note: depends on side-effect in plot!\n  return marks;\n}\n\nexport function composeRender(r1, r2) {\n  if (r1 == null) return r2 === null ? undefined : r2;\n  if (r2 == null) return r1 === null ? undefined : r1;\n  if (typeof r1 !== \"function\") throw new TypeError(`invalid render transform: ${r1}`);\n  if (typeof r2 !== \"function\") throw new TypeError(`invalid render transform: ${r2}`);\n  return function (i, s, v, d, c, next) {\n    return r1.call(this, i, s, v, d, c, (i, s, v, d, c) => {\n      return r2.call(this, i, s, v, d, c, next); // preserve this\n    });\n  };\n}\n\nfunction maybeChannels(channels) {\n  return Object.fromEntries(\n    Object.entries(maybeNamed(channels)).map(([name, channel]) => {\n      channel = maybeValue(channel);\n      if (channel.filter === undefined && channel.scale == null) channel = {...channel, filter: null};\n      return [name, channel];\n    })\n  );\n}\n\nfunction maybeTip(tip) {\n  return tip === true ? \"xy\" : tip === false ? null : maybeKeyword(tip, \"tip\", [\"x\", \"y\", \"xy\"]);\n}\n\nexport function withTip(options, tip) {\n  return options?.tip === true ? {...options, tip} : options;\n}\n", "import {pointer as pointof} from \"d3\";\nimport {composeRender} from \"../mark.js\";\nimport {applyFrameAnchor} from \"../style.js\";\n\nconst states = new WeakMap();\n\nfunction pointerK(kx, ky, {x, y, px, py, maxRadius = 40, channels, render, ...options} = {}) {\n  maxRadius = +maxRadius;\n  // When px or py is used, register an extra channel that the pointer\n  // interaction can use to control which point is focused; this allows pointing\n  // to function independently of where the downstream mark (e.g., a tip) is\n  // displayed. Also default x or y to null to disable maybeTuple etc.\n  if (px != null) (x ??= null), (channels = {...channels, px: {value: px, scale: \"x\"}});\n  if (py != null) (y ??= null), (channels = {...channels, py: {value: py, scale: \"y\"}});\n  return {\n    x,\n    y,\n    channels,\n    ...options,\n    // Unlike other composed transforms, the render transform must be the\n    // outermost render function because it will re-render dynamically in\n    // response to pointer events.\n    render: composeRender(function (index, scales, values, dimensions, context, next) {\n      context = {...context, pointerSticky: false};\n      const svg = context.ownerSVGElement;\n      const {data} = context.getMarkState(this);\n\n      // Isolate state per-pointer, per-plot; if the pointer is reused by\n      // multiple marks, they will share the same state (e.g., sticky modality).\n      let state = states.get(svg);\n      if (!state) states.set(svg, (state = {sticky: false, roots: [], renders: []}));\n\n      // This serves as a unique identifier of the rendered mark per-plot; it is\n      // used to record the currently-rendered elements (state.roots) so that we\n      // can tell when a rendered element is clicked on.\n      let renderIndex = state.renders.push(render) - 1;\n\n      // For faceting, we want to compute the local coordinates of each point,\n      // which means subtracting out the facet translation, if any. (It\u2019s\n      // tempting to do this using the local coordinates in SVG, but that\u2019s\n      // complicated by mark-specific transforms such as dx and dy.) Also, since\n      // band scales return the upper bound of the band, we have to offset by\n      // half the bandwidth.\n      const {x, y, fx, fy} = scales;\n      let tx = fx ? fx(index.fx) - dimensions.marginLeft : 0;\n      let ty = fy ? fy(index.fy) - dimensions.marginTop : 0;\n      if (x?.bandwidth) tx += x.bandwidth() / 2;\n      if (y?.bandwidth) ty += y.bandwidth() / 2;\n\n      // For faceting, we also need to record the closest point per facet per\n      // mark (!), since each facet has its own pointer event listeners; we only\n      // want the closest point across facets to be visible.\n      const faceted = index.fi != null;\n      let facetState;\n      if (faceted) {\n        let facetStates = state.facetStates;\n        if (!facetStates) state.facetStates = facetStates = new Map();\n        facetState = facetStates.get(this);\n        if (!facetState) facetStates.set(this, (facetState = new Map()));\n      }\n\n      // The order of precedence for the pointer position is: px & py; the\n      // middle of x1 & y1 and x2 & y2; or x1 & y1 (e.g., area); or lastly x &\n      // y. If a dimension is unspecified, the frame anchor is used.\n      const [cx, cy] = applyFrameAnchor(this, dimensions);\n      const {px: PX, py: PY} = values;\n      const px = PX ? (i) => PX[i] : anchorX(values, cx);\n      const py = PY ? (i) => PY[i] : anchorY(values, cy);\n\n      let i; // currently focused index\n      let g; // currently rendered mark\n      let s; // currently rendered stickiness\n      let f; // current animation frame\n\n      // When faceting, if more than one pointer would be visible, only show\n      // this one if it is the closest. We defer rendering using an animation\n      // frame to allow all pointer events to be received before deciding which\n      // mark to render; although when hiding, we render immediately.\n      function update(ii, ri) {\n        if (faceted) {\n          if (f) f = cancelAnimationFrame(f);\n          if (ii == null) facetState.delete(index.fi);\n          else {\n            facetState.set(index.fi, ri);\n            f = requestAnimationFrame(() => {\n              f = null;\n              for (const r of facetState.values()) {\n                if (r < ri) {\n                  ii = null;\n                  break;\n                }\n              }\n              render(ii);\n            });\n            return;\n          }\n        }\n        render(ii);\n      }\n\n      function render(ii) {\n        if (i === ii && s === state.sticky) return; // the tooltip hasn\u2019t moved\n        i = ii;\n        s = context.pointerSticky = state.sticky;\n        const I = i == null ? [] : [i];\n        if (faceted) (I.fx = index.fx), (I.fy = index.fy), (I.fi = index.fi);\n        const r = next(I, scales, values, dimensions, context);\n        if (g) {\n          // When faceting, preserve swapped mark and facet transforms; also\n          // remove ARIA attributes since these are promoted to the parent. This\n          // is perhaps brittle in that it depends on how Plot renders facets,\n          // but it produces a cleaner and more accessible SVG structure.\n          if (faceted) {\n            const p = g.parentNode;\n            const ft = g.getAttribute(\"transform\");\n            const mt = r.getAttribute(\"transform\");\n            ft ? r.setAttribute(\"transform\", ft) : r.removeAttribute(\"transform\");\n            mt ? p.setAttribute(\"transform\", mt) : p.removeAttribute(\"transform\");\n            r.removeAttribute(\"aria-label\");\n            r.removeAttribute(\"aria-description\");\n            r.removeAttribute(\"aria-hidden\");\n          }\n          g.replaceWith(r);\n        }\n        state.roots[renderIndex] = g = r;\n        context.dispatchValue(i == null ? null : data[i]);\n        return r;\n      }\n\n      function pointermove(event) {\n        if (state.sticky || (event.pointerType === \"mouse\" && event.buttons === 1)) return; // dragging\n        let [xp, yp] = pointof(event);\n        (xp -= tx), (yp -= ty); // correct for facets and band scales\n        let ii = null;\n        let ri = maxRadius * maxRadius;\n        for (const j of index) {\n          const dx = kx * (px(j) - xp);\n          const dy = ky * (py(j) - yp);\n          const rj = dx * dx + dy * dy;\n          if (rj <= ri) (ii = j), (ri = rj);\n        }\n        update(ii, ri);\n      }\n\n      function pointerdown(event) {\n        if (event.pointerType !== \"mouse\") return;\n        if (i == null) return; // not pointing\n        if (state.sticky && state.roots.some((r) => r?.contains(event.target))) return; // stay sticky\n        if (state.sticky) (state.sticky = false), state.renders.forEach((r) => r(null)); // clear all pointers\n        else (state.sticky = true), render(i);\n        event.stopImmediatePropagation(); // suppress other pointers\n      }\n\n      function pointerleave(event) {\n        if (event.pointerType !== \"mouse\") return;\n        if (!state.sticky) update(null);\n      }\n\n      // We listen to the svg element; listening to the window instead would let\n      // us receive pointer events from farther away, but would also make it\n      // hard to know when to remove the listeners. (Using a mutation observer\n      // to watch the entire document is likely too expensive.)\n      svg.addEventListener(\"pointerenter\", pointermove);\n      svg.addEventListener(\"pointermove\", pointermove);\n      svg.addEventListener(\"pointerdown\", pointerdown);\n      svg.addEventListener(\"pointerleave\", pointerleave);\n\n      return render(null);\n    }, render)\n  };\n}\n\nexport function pointer(options) {\n  return pointerK(1, 1, options);\n}\n\nexport function pointerX(options) {\n  return pointerK(1, 0.01, options);\n}\n\nexport function pointerY(options) {\n  return pointerK(0.01, 1, options);\n}\n\nexport function anchorX({x1: X1, x2: X2, x: X = X1}, cx) {\n  return X1 && X2 ? (i) => (X1[i] + X2[i]) / 2 : X ? (i) => X[i] : () => cx;\n}\n\nexport function anchorY({y1: Y1, y2: Y2, y: Y = Y1}, cy) {\n  return Y1 && Y2 ? (i) => (Y1[i] + Y2[i]) / 2 : Y ? (i) => Y[i] : () => cy;\n}\n", "import {isOrdinalScale} from \"./scales.js\";\n\nexport function inferFontVariant(scale) {\n  return isOrdinalScale(scale) && scale.interval === undefined ? undefined : \"tabular-nums\";\n}\n", "import {quantize, interpolateNumber, piecewise, format, scaleBand, scaleLinear, axisBottom} from \"d3\";\nimport {inferFontVariant} from \"../axes.js\";\nimport {createContext, create} from \"../context.js\";\nimport {map, maybeNumberChannel} from \"../options.js\";\nimport {interpolatePiecewise} from \"../scales/quantitative.js\";\nimport {applyInlineStyles, impliedString, maybeClassName} from \"../style.js\";\n\nexport function legendRamp(color, options) {\n  let {\n    label = color.label,\n    tickSize = 6,\n    width = 240,\n    height = 44 + tickSize,\n    marginTop = 18,\n    marginRight = 0,\n    marginBottom = 16 + tickSize,\n    marginLeft = 0,\n    style,\n    ticks = (width - marginLeft - marginRight) / 64,\n    tickFormat,\n    fontVariant = inferFontVariant(color),\n    round = true,\n    opacity,\n    className\n  } = options;\n  const context = createContext(options);\n  className = maybeClassName(className);\n  opacity = maybeNumberChannel(opacity)[1];\n  if (tickFormat === null) tickFormat = () => null;\n\n  const svg = create(\"svg\", context)\n    .attr(\"class\", `${className}-ramp`)\n    .attr(\"font-family\", \"system-ui, sans-serif\")\n    .attr(\"font-size\", 10)\n    .attr(\"width\", width)\n    .attr(\"height\", height)\n    .attr(\"viewBox\", `0 0 ${width} ${height}`)\n    .call((svg) =>\n      // Warning: if you edit this, change defaultClassName.\n      svg.append(\"style\").text(\n        `.${className}-ramp {\n  display: block;\n  background: white;\n  height: auto;\n  height: intrinsic;\n  max-width: 100%;\n  overflow: visible;\n}\n.${className}-ramp text {\n  white-space: pre;\n}`\n      )\n    )\n    .call(applyInlineStyles, style);\n\n  let tickAdjust = (g) => g.selectAll(\".tick line\").attr(\"y1\", marginTop + marginBottom - height);\n\n  let x;\n\n  // Some D3 scales use scale.interpolate, some scale.interpolator, and some\n  // scale.round; this normalizes the API so it works with all scale types.\n  const applyRange = round ? (x, range) => x.rangeRound(range) : (x, range) => x.range(range);\n\n  const {type, domain, range, interpolate, scale, pivot} = color;\n\n  // Continuous\n  if (interpolate) {\n    // Often interpolate is a \u201Cfixed\u201D interpolator on the [0, 1] interval, as\n    // with a built-in color scheme, but sometimes it is a function that takes\n    // two arguments and is used in conjunction with the range.\n    const interpolator =\n      range === undefined\n        ? interpolate\n        : piecewise(interpolate.length === 1 ? interpolatePiecewise(interpolate) : interpolate, range);\n\n    // Construct a D3 scale of the same type, but with a range that evenly\n    // divides the horizontal extent of the legend. (In the common case, the\n    // domain.length is two, and so the range is simply the extent.) For a\n    // diverging scale, we need an extra point in the range for the pivot such\n    // that the pivot is always drawn in the middle.\n    x = applyRange(\n      scale.copy(),\n      quantize(\n        interpolateNumber(marginLeft, width - marginRight),\n        Math.min(domain.length + (pivot !== undefined), range === undefined ? Infinity : range.length)\n      )\n    );\n\n    // Construct a 256\u00D71 canvas, filling each pixel using the interpolator.\n    const n = 256;\n    const canvas = context.document.createElement(\"canvas\");\n    canvas.width = n;\n    canvas.height = 1;\n    const context2 = canvas.getContext(\"2d\");\n    for (let i = 0, j = n - 1; i < n; ++i) {\n      context2.fillStyle = interpolator(i / j);\n      context2.fillRect(i, 0, 1, 1);\n    }\n\n    svg\n      .append(\"image\")\n      .attr(\"opacity\", opacity)\n      .attr(\"x\", marginLeft)\n      .attr(\"y\", marginTop)\n      .attr(\"width\", width - marginLeft - marginRight)\n      .attr(\"height\", height - marginTop - marginBottom)\n      .attr(\"preserveAspectRatio\", \"none\")\n      .attr(\"xlink:href\", canvas.toDataURL());\n  }\n\n  // Threshold\n  else if (type === \"threshold\") {\n    const thresholds = domain;\n\n    const thresholdFormat =\n      tickFormat === undefined ? (d) => d : typeof tickFormat === \"string\" ? format(tickFormat) : tickFormat;\n\n    // Construct a linear scale with evenly-spaced ticks for each of the\n    // thresholds; the domain extends one beyond the threshold extent.\n    x = applyRange(scaleLinear().domain([-1, range.length - 1]), [marginLeft, width - marginRight]);\n\n    svg\n      .append(\"g\")\n      .attr(\"fill-opacity\", opacity)\n      .selectAll()\n      .data(range)\n      .enter()\n      .append(\"rect\")\n      .attr(\"x\", (d, i) => x(i - 1))\n      .attr(\"y\", marginTop)\n      .attr(\"width\", (d, i) => x(i) - x(i - 1))\n      .attr(\"height\", height - marginTop - marginBottom)\n      .attr(\"fill\", (d) => d);\n\n    ticks = map(thresholds, (_, i) => i);\n    tickFormat = (i) => thresholdFormat(thresholds[i], i);\n  }\n\n  // Ordinal (hopefully!)\n  else {\n    x = applyRange(scaleBand().domain(domain), [marginLeft, width - marginRight]);\n\n    svg\n      .append(\"g\")\n      .attr(\"fill-opacity\", opacity)\n      .selectAll()\n      .data(domain)\n      .enter()\n      .append(\"rect\")\n      .attr(\"x\", x)\n      .attr(\"y\", marginTop)\n      .attr(\"width\", Math.max(0, x.bandwidth() - 1))\n      .attr(\"height\", height - marginTop - marginBottom)\n      .attr(\"fill\", scale);\n\n    tickAdjust = () => {};\n  }\n\n  svg\n    .append(\"g\")\n    .attr(\"transform\", `translate(0,${height - marginBottom})`)\n    .call(\n      axisBottom(x)\n        .ticks(Array.isArray(ticks) ? null : ticks, typeof tickFormat === \"string\" ? tickFormat : undefined)\n        .tickFormat(typeof tickFormat === \"function\" ? tickFormat : undefined)\n        .tickSize(tickSize)\n        .tickValues(Array.isArray(ticks) ? ticks : null)\n    )\n    .attr(\"font-size\", null)\n    .attr(\"font-family\", null)\n    .attr(\"font-variant\", impliedString(fontVariant, \"normal\"))\n    .call(tickAdjust)\n    .call((g) => g.select(\".domain\").remove());\n\n  if (label !== undefined) {\n    svg\n      .append(\"text\")\n      .attr(\"x\", marginLeft)\n      .attr(\"y\", marginTop - 6)\n      .attr(\"fill\", \"currentColor\") // TODO move to stylesheet?\n      .attr(\"font-weight\", \"bold\")\n      .text(label);\n  }\n\n  return svg.node();\n}\n", "export const radians = Math.PI / 180;\n", "import {create} from \"./context.js\";\n\nexport function markers(mark, {marker, markerStart = marker, markerMid = marker, markerEnd = marker} = {}) {\n  mark.markerStart = maybeMarker(markerStart);\n  mark.markerMid = maybeMarker(markerMid);\n  mark.markerEnd = maybeMarker(markerEnd);\n}\n\nfunction maybeMarker(marker) {\n  if (marker == null || marker === false) return null;\n  if (marker === true) return markerCircleFill;\n  if (typeof marker === \"function\") return marker;\n  switch (`${marker}`.toLowerCase()) {\n    case \"none\":\n      return null;\n    case \"arrow\":\n      return markerArrow(\"auto\");\n    case \"arrow-reverse\":\n      return markerArrow(\"auto-start-reverse\");\n    case \"dot\":\n      return markerDot;\n    case \"circle\":\n    case \"circle-fill\":\n      return markerCircleFill;\n    case \"circle-stroke\":\n      return markerCircleStroke;\n  }\n  throw new Error(`invalid marker: ${marker}`);\n}\n\nfunction markerArrow(orient) {\n  return (color, context) =>\n    create(\"svg:marker\", context)\n      .attr(\"viewBox\", \"-5 -5 10 10\")\n      .attr(\"markerWidth\", 6.67)\n      .attr(\"markerHeight\", 6.67)\n      .attr(\"orient\", orient)\n      .attr(\"fill\", \"none\")\n      .attr(\"stroke\", color)\n      .attr(\"stroke-width\", 1.5)\n      .attr(\"stroke-linecap\", \"round\")\n      .attr(\"stroke-linejoin\", \"round\")\n      .call((marker) => marker.append(\"path\").attr(\"d\", \"M-1.5,-3l3,3l-3,3\"))\n      .node();\n}\n\nfunction markerDot(color, context) {\n  return create(\"svg:marker\", context)\n    .attr(\"viewBox\", \"-5 -5 10 10\")\n    .attr(\"markerWidth\", 6.67)\n    .attr(\"markerHeight\", 6.67)\n    .attr(\"fill\", color)\n    .attr(\"stroke\", \"none\")\n    .call((marker) => marker.append(\"circle\").attr(\"r\", 2.5))\n    .node();\n}\n\nfunction markerCircleFill(color, context) {\n  return create(\"svg:marker\", context)\n    .attr(\"viewBox\", \"-5 -5 10 10\")\n    .attr(\"markerWidth\", 6.67)\n    .attr(\"markerHeight\", 6.67)\n    .attr(\"fill\", color)\n    .attr(\"stroke\", \"white\")\n    .attr(\"stroke-width\", 1.5)\n    .call((marker) => marker.append(\"circle\").attr(\"r\", 3))\n    .node();\n}\n\nfunction markerCircleStroke(color, context) {\n  return create(\"svg:marker\", context)\n    .attr(\"viewBox\", \"-5 -5 10 10\")\n    .attr(\"markerWidth\", 6.67)\n    .attr(\"markerHeight\", 6.67)\n    .attr(\"fill\", \"white\")\n    .attr(\"stroke\", color)\n    .attr(\"stroke-width\", 1.5)\n    .call((marker) => marker.append(\"circle\").attr(\"r\", 3))\n    .node();\n}\n\nlet nextMarkerId = 0;\n\nexport function applyMarkers(path, mark, {stroke: S}, context) {\n  return applyMarkersColor(path, mark, S && ((i) => S[i]), context);\n}\n\nexport function applyGroupedMarkers(path, mark, {stroke: S}, context) {\n  return applyMarkersColor(path, mark, S && (([i]) => S[i]), context);\n}\n\nfunction applyMarkersColor(path, {markerStart, markerMid, markerEnd, stroke}, strokeof = () => stroke, context) {\n  const iriByMarkerColor = new Map();\n\n  function applyMarker(marker) {\n    return function (i) {\n      const color = strokeof(i);\n      let iriByColor = iriByMarkerColor.get(marker);\n      if (!iriByColor) iriByMarkerColor.set(marker, (iriByColor = new Map()));\n      let iri = iriByColor.get(color);\n      if (!iri) {\n        const node = this.parentNode.insertBefore(marker(color, context), this);\n        const id = `plot-marker-${++nextMarkerId}`;\n        node.setAttribute(\"id\", id);\n        iriByColor.set(color, (iri = `url(#${id})`));\n      }\n      return iri;\n    };\n  }\n\n  if (markerStart) path.attr(\"marker-start\", applyMarker(markerStart));\n  if (markerMid) path.attr(\"marker-mid\", applyMarker(markerMid));\n  if (markerEnd) path.attr(\"marker-end\", applyMarker(markerEnd));\n}\n", "import {offset} from \"../style.js\";\n\nexport function maybeInsetX({inset, insetLeft, insetRight, ...options} = {}) {\n  [insetLeft, insetRight] = maybeInset(inset, insetLeft, insetRight);\n  return {inset, insetLeft, insetRight, ...options};\n}\n\nexport function maybeInsetY({inset, insetTop, insetBottom, ...options} = {}) {\n  [insetTop, insetBottom] = maybeInset(inset, insetTop, insetBottom);\n  return {inset, insetTop, insetBottom, ...options};\n}\n\nfunction maybeInset(inset, inset1, inset2) {\n  return inset === undefined && inset1 === undefined && inset2 === undefined\n    ? offset\n      ? [1, 0]\n      : [0.5, 0.5]\n    : [inset1, inset2];\n}\n", "import {isTemporal, labelof, map, maybeInterval, maybeValue, valueof} from \"../options.js\";\nimport {maybeInsetX, maybeInsetY} from \"./inset.js\";\n\n// The interval may be specified either as x: {value, interval} or as {x,\n// interval}. The former can be used to specify separate intervals for x and y,\n// for example with Plot.rect.\nfunction maybeIntervalValue(value, {interval}) {\n  value = {...maybeValue(value)};\n  value.interval = maybeInterval(value.interval === undefined ? interval : value.interval);\n  return value;\n}\n\nfunction maybeIntervalK(k, maybeInsetK, options, trivial) {\n  const {[k]: v, [`${k}1`]: v1, [`${k}2`]: v2} = options;\n  const {value, interval} = maybeIntervalValue(v, options);\n  if (value == null || (interval == null && !trivial)) return options;\n  const label = labelof(v);\n  if (interval == null) {\n    let V;\n    const kv = {transform: (data) => V || (V = valueof(data, value)), label};\n    return {\n      ...options,\n      [k]: undefined,\n      [`${k}1`]: v1 === undefined ? kv : v1,\n      [`${k}2`]: v2 === undefined ? kv : v2\n    };\n  }\n  let D1, V1;\n  function transform(data) {\n    if (V1 !== undefined && data === D1) return V1; // memoize\n    return (V1 = map(valueof((D1 = data), value), (v) => interval.floor(v)));\n  }\n  return maybeInsetK({\n    ...options,\n    [k]: undefined,\n    [`${k}1`]: v1 === undefined ? {transform, label} : v1,\n    [`${k}2`]: v2 === undefined ? {transform: (data) => transform(data).map((v) => interval.offset(v)), label} : v2\n  });\n}\n\nfunction maybeIntervalMidK(k, maybeInsetK, options) {\n  const {[k]: v} = options;\n  const {value, interval} = maybeIntervalValue(v, options);\n  if (value == null || interval == null) return options;\n  return maybeInsetK({\n    ...options,\n    [k]: {\n      label: labelof(v),\n      transform: (data) => {\n        const V1 = map(valueof(data, value), (v) => interval.floor(v));\n        const V2 = V1.map((v) => interval.offset(v));\n        return V1.map(\n          isTemporal(V1)\n            ? (v1, v2) =>\n                v1 == null || isNaN((v1 = +v1)) || ((v2 = V2[v2]), v2 == null) || isNaN((v2 = +v2))\n                  ? undefined\n                  : new Date((v1 + v2) / 2)\n            : (v1, v2) => (v1 == null || ((v2 = V2[v2]), v2 == null) ? NaN : (+v1 + +v2) / 2)\n        );\n      }\n    }\n  });\n}\n\nexport function maybeTrivialIntervalX(options = {}) {\n  return maybeIntervalK(\"x\", maybeInsetX, options, true);\n}\n\nexport function maybeTrivialIntervalY(options = {}) {\n  return maybeIntervalK(\"y\", maybeInsetY, options, true);\n}\n\nexport function maybeIntervalX(options = {}) {\n  return maybeIntervalK(\"x\", maybeInsetX, options);\n}\n\nexport function maybeIntervalY(options = {}) {\n  return maybeIntervalK(\"y\", maybeInsetY, options);\n}\n\nexport function maybeIntervalMidX(options = {}) {\n  return maybeIntervalMidK(\"x\", maybeInsetX, options);\n}\n\nexport function maybeIntervalMidY(options = {}) {\n  return maybeIntervalMidK(\"y\", maybeInsetY, options);\n}\n", "import {create} from \"../context.js\";\nimport {Mark, withTip} from \"../mark.js\";\nimport {applyMarkers, markers} from \"../marker.js\";\nimport {identity, number} from \"../options.js\";\nimport {isCollapsed} from \"../scales.js\";\nimport {applyChannelStyles, applyDirectStyles, applyIndirectStyles, applyTransform, offset} from \"../style.js\";\nimport {maybeIntervalX, maybeIntervalY} from \"../transforms/interval.js\";\n\nconst defaults = {\n  ariaLabel: \"rule\",\n  fill: null,\n  stroke: \"currentColor\"\n};\n\nexport class RuleX extends Mark {\n  constructor(data, options = {}) {\n    const {x, y1, y2, inset = 0, insetTop = inset, insetBottom = inset} = options;\n    super(\n      data,\n      {\n        x: {value: x, scale: \"x\", optional: true},\n        y1: {value: y1, scale: \"y\", optional: true},\n        y2: {value: y2, scale: \"y\", optional: true}\n      },\n      withTip(options, \"x\"),\n      defaults\n    );\n    this.insetTop = number(insetTop);\n    this.insetBottom = number(insetBottom);\n    markers(this, options);\n  }\n  render(index, scales, channels, dimensions, context) {\n    const {x, y} = scales;\n    const {x: X, y1: Y1, y2: Y2} = channels;\n    const {width, height, marginTop, marginRight, marginLeft, marginBottom} = dimensions;\n    const {insetTop, insetBottom} = this;\n    return create(\"svg:g\", context)\n      .call(applyIndirectStyles, this, dimensions, context)\n      .call(applyTransform, this, {x: X && x}, offset, 0)\n      .call((g) =>\n        g\n          .selectAll()\n          .data(index)\n          .enter()\n          .append(\"line\")\n          .call(applyDirectStyles, this)\n          .attr(\"x1\", X ? (i) => X[i] : (marginLeft + width - marginRight) / 2)\n          .attr(\"x2\", X ? (i) => X[i] : (marginLeft + width - marginRight) / 2)\n          .attr(\"y1\", Y1 && !isCollapsed(y) ? (i) => Y1[i] + insetTop : marginTop + insetTop)\n          .attr(\n            \"y2\",\n            Y2 && !isCollapsed(y)\n              ? y.bandwidth\n                ? (i) => Y2[i] + y.bandwidth() - insetBottom\n                : (i) => Y2[i] - insetBottom\n              : height - marginBottom - insetBottom\n          )\n          .call(applyChannelStyles, this, channels)\n          .call(applyMarkers, this, channels, context)\n      )\n      .node();\n  }\n}\n\nexport class RuleY extends Mark {\n  constructor(data, options = {}) {\n    const {x1, x2, y, inset = 0, insetRight = inset, insetLeft = inset} = options;\n    super(\n      data,\n      {\n        y: {value: y, scale: \"y\", optional: true},\n        x1: {value: x1, scale: \"x\", optional: true},\n        x2: {value: x2, scale: \"x\", optional: true}\n      },\n      withTip(options, \"y\"),\n      defaults\n    );\n    this.insetRight = number(insetRight);\n    this.insetLeft = number(insetLeft);\n    markers(this, options);\n  }\n  render(index, scales, channels, dimensions, context) {\n    const {x, y} = scales;\n    const {y: Y, x1: X1, x2: X2} = channels;\n    const {width, height, marginTop, marginRight, marginLeft, marginBottom} = dimensions;\n    const {insetLeft, insetRight} = this;\n    return create(\"svg:g\", context)\n      .call(applyIndirectStyles, this, dimensions, context)\n      .call(applyTransform, this, {y: Y && y}, 0, offset)\n      .call((g) =>\n        g\n          .selectAll()\n          .data(index)\n          .enter()\n          .append(\"line\")\n          .call(applyDirectStyles, this)\n          .attr(\"x1\", X1 && !isCollapsed(x) ? (i) => X1[i] + insetLeft : marginLeft + insetLeft)\n          .attr(\n            \"x2\",\n            X2 && !isCollapsed(x)\n              ? x.bandwidth\n                ? (i) => X2[i] + x.bandwidth() - insetRight\n                : (i) => X2[i] - insetRight\n              : width - marginRight - insetRight\n          )\n          .attr(\"y1\", Y ? (i) => Y[i] : (marginTop + height - marginBottom) / 2)\n          .attr(\"y2\", Y ? (i) => Y[i] : (marginTop + height - marginBottom) / 2)\n          .call(applyChannelStyles, this, channels)\n          .call(applyMarkers, this, channels, context)\n      )\n      .node();\n  }\n}\n\nexport function ruleX(data, options) {\n  let {x = identity, y, y1, y2, ...rest} = maybeIntervalY(options);\n  [y1, y2] = maybeOptionalZero(y, y1, y2);\n  return new RuleX(data, {...rest, x, y1, y2});\n}\n\nexport function ruleY(data, options) {\n  let {y = identity, x, x1, x2, ...rest} = maybeIntervalX(options);\n  [x1, x2] = maybeOptionalZero(x, x1, x2);\n  return new RuleY(data, {...rest, y, x1, x2});\n}\n\n// For marks specified either as [0, x] or [x1, x2], or nothing.\nfunction maybeOptionalZero(x, x1, x2) {\n  if (x == null) {\n    if (x1 === undefined) {\n      if (x2 !== undefined) return [0, x2];\n    } else {\n      if (x2 === undefined) return [0, x1];\n    }\n  } else if (x1 === undefined) {\n    return x2 === undefined ? [0, x] : [x, x2];\n  } else if (x2 === undefined) {\n    return [x, x1];\n  }\n  return [x1, x2];\n}\n", "export function template(strings, ...parts) {\n  let n = parts.length;\n\n  // If any of the interpolated parameters are strings rather than functions,\n  // bake them into the template to optimize performance during render.\n  for (let j = 0, copy = true; j < n; ++j) {\n    if (typeof parts[j] !== \"function\") {\n      if (copy) {\n        strings = strings.slice(); // copy before mutate\n        copy = false;\n      }\n      strings.splice(j, 2, strings[j] + parts[j] + strings[j + 1]);\n      parts.splice(j, 1);\n      --j, --n;\n    }\n  }\n\n  return (i) => {\n    let s = strings[0];\n    for (let j = 0; j < n; ++j) {\n      s += parts[j](i) + strings[j + 1];\n    }\n    return s;\n  };\n}\n", "import {namespaces} from \"d3\";\nimport {create} from \"../context.js\";\nimport {nonempty} from \"../defined.js\";\nimport {formatDefault} from \"../format.js\";\nimport {Mark} from \"../mark.js\";\nimport {\n  indexOf,\n  identity,\n  string,\n  maybeNumberChannel,\n  maybeTuple,\n  numberChannel,\n  isNumeric,\n  isTemporal,\n  keyword,\n  maybeFrameAnchor,\n  isTextual,\n  isIterable\n} from \"../options.js\";\nimport {\n  applyChannelStyles,\n  applyDirectStyles,\n  applyIndirectStyles,\n  applyAttr,\n  applyTransform,\n  impliedString,\n  applyFrameAnchor\n} from \"../style.js\";\nimport {template} from \"../template.js\";\nimport {maybeIntervalMidX, maybeIntervalMidY} from \"../transforms/interval.js\";\n\nconst defaults = {\n  ariaLabel: \"text\",\n  strokeLinejoin: \"round\",\n  strokeWidth: 3,\n  paintOrder: \"stroke\"\n};\n\nconst softHyphen = \"\\u00ad\";\n\nexport class Text extends Mark {\n  constructor(data, options = {}) {\n    const {\n      x,\n      y,\n      text = isIterable(data) && isTextual(data) ? identity : indexOf,\n      frameAnchor,\n      textAnchor = /right$/i.test(frameAnchor) ? \"end\" : /left$/i.test(frameAnchor) ? \"start\" : \"middle\",\n      lineAnchor = /^top/i.test(frameAnchor) ? \"top\" : /^bottom/i.test(frameAnchor) ? \"bottom\" : \"middle\",\n      lineHeight = 1,\n      lineWidth = Infinity,\n      textOverflow,\n      monospace,\n      fontFamily = monospace ? \"ui-monospace, monospace\" : undefined,\n      fontSize,\n      fontStyle,\n      fontVariant,\n      fontWeight,\n      rotate\n    } = options;\n    const [vrotate, crotate] = maybeNumberChannel(rotate, 0);\n    const [vfontSize, cfontSize] = maybeFontSizeChannel(fontSize);\n    super(\n      data,\n      {\n        x: {value: x, scale: \"x\", optional: true},\n        y: {value: y, scale: \"y\", optional: true},\n        fontSize: {value: vfontSize, optional: true},\n        rotate: {value: numberChannel(vrotate), optional: true},\n        text: {value: text, filter: nonempty, optional: true}\n      },\n      options,\n      defaults\n    );\n    this.rotate = crotate;\n    this.textAnchor = impliedString(textAnchor, \"middle\");\n    this.lineAnchor = keyword(lineAnchor, \"lineAnchor\", [\"top\", \"middle\", \"bottom\"]);\n    this.lineHeight = +lineHeight;\n    this.lineWidth = +lineWidth;\n    this.textOverflow = maybeTextOverflow(textOverflow);\n    this.monospace = !!monospace;\n    this.fontFamily = string(fontFamily);\n    this.fontSize = cfontSize;\n    this.fontStyle = string(fontStyle);\n    this.fontVariant = string(fontVariant);\n    this.fontWeight = string(fontWeight);\n    this.frameAnchor = maybeFrameAnchor(frameAnchor);\n    if (!(this.lineWidth >= 0)) throw new Error(`invalid lineWidth: ${lineWidth}`);\n    this.splitLines = splitter(this);\n    this.clipLine = clipper(this);\n  }\n  render(index, scales, channels, dimensions, context) {\n    const {x, y} = scales;\n    const {x: X, y: Y, rotate: R, text: T, title: TL, fontSize: FS} = channels;\n    const {rotate} = this;\n    const [cx, cy] = applyFrameAnchor(this, dimensions);\n    return create(\"svg:g\", context)\n      .call(applyIndirectStyles, this, dimensions, context)\n      .call(applyIndirectTextStyles, this, T, dimensions)\n      .call(applyTransform, this, {x: X && x, y: Y && y})\n      .call((g) =>\n        g\n          .selectAll()\n          .data(index)\n          .enter()\n          .append(\"text\")\n          .call(applyDirectStyles, this)\n          .call(applyMultilineText, this, T, TL)\n          .attr(\n            \"transform\",\n            template`translate(${X ? (i) => X[i] : cx},${Y ? (i) => Y[i] : cy})${\n              R ? (i) => ` rotate(${R[i]})` : rotate ? ` rotate(${rotate})` : ``\n            }`\n          )\n          .call(applyAttr, \"font-size\", FS && ((i) => FS[i]))\n          .call(applyChannelStyles, this, channels)\n      )\n      .node();\n  }\n}\n\nexport function maybeTextOverflow(textOverflow) {\n  return textOverflow == null\n    ? null\n    : keyword(textOverflow, \"textOverflow\", [\n        \"clip\", // shorthand for clip-end\n        \"ellipsis\", // \u2026 ellipsis-end\n        \"clip-start\",\n        \"clip-end\",\n        \"ellipsis-start\",\n        \"ellipsis-middle\",\n        \"ellipsis-end\"\n      ]).replace(/^(clip|ellipsis)$/, \"$1-end\");\n}\n\nfunction applyMultilineText(selection, mark, T, TL) {\n  if (!T) return;\n  const {lineAnchor, lineHeight, textOverflow, splitLines, clipLine} = mark;\n  selection.each(function (i) {\n    const lines = splitLines(formatDefault(T[i]) ?? \"\").map(clipLine);\n    const n = lines.length;\n    const y = lineAnchor === \"top\" ? 0.71 : lineAnchor === \"bottom\" ? 1 - n : (164 - n * 100) / 200;\n    if (n > 1) {\n      let m = 0;\n      for (let i = 0; i < n; ++i) {\n        ++m;\n        if (!lines[i]) continue;\n        const tspan = this.ownerDocument.createElementNS(namespaces.svg, \"tspan\");\n        tspan.setAttribute(\"x\", 0);\n        if (i === m - 1) tspan.setAttribute(\"y\", `${(y + i) * lineHeight}em`);\n        else tspan.setAttribute(\"dy\", `${m * lineHeight}em`);\n        tspan.textContent = lines[i];\n        this.appendChild(tspan);\n        m = 0;\n      }\n    } else {\n      if (y) this.setAttribute(\"y\", `${y * lineHeight}em`);\n      this.textContent = lines[0];\n    }\n    if (textOverflow && !TL && lines[0] !== T[i]) {\n      const title = this.ownerDocument.createElementNS(namespaces.svg, \"title\");\n      title.textContent = T[i];\n      this.appendChild(title);\n    }\n  });\n}\n\nexport function text(data, {x, y, ...options} = {}) {\n  if (options.frameAnchor === undefined) [x, y] = maybeTuple(x, y);\n  return new Text(data, {...options, x, y});\n}\n\nexport function textX(data, {x = identity, ...options} = {}) {\n  return new Text(data, maybeIntervalMidY({...options, x}));\n}\n\nexport function textY(data, {y = identity, ...options} = {}) {\n  return new Text(data, maybeIntervalMidX({...options, y}));\n}\n\nexport function applyIndirectTextStyles(selection, mark, T) {\n  applyAttr(selection, \"text-anchor\", mark.textAnchor);\n  applyAttr(selection, \"font-family\", mark.fontFamily);\n  applyAttr(selection, \"font-size\", mark.fontSize);\n  applyAttr(selection, \"font-style\", mark.fontStyle);\n  applyAttr(selection, \"font-variant\", mark.fontVariant === undefined ? inferFontVariant(T) : mark.fontVariant);\n  applyAttr(selection, \"font-weight\", mark.fontWeight);\n}\n\nfunction inferFontVariant(T) {\n  return T && (isNumeric(T) || isTemporal(T)) ? \"tabular-nums\" : undefined;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/font-size\nconst fontSizes = new Set([\n  // global keywords\n  \"inherit\",\n  \"initial\",\n  \"revert\",\n  \"unset\",\n  // absolute keywords\n  \"xx-small\",\n  \"x-small\",\n  \"small\",\n  \"medium\",\n  \"large\",\n  \"x-large\",\n  \"xx-large\",\n  \"xxx-large\",\n  // relative keywords\n  \"larger\",\n  \"smaller\"\n]);\n\n// The font size may be expressed as a constant in the following forms:\n// - number in pixels\n// - string keyword: see above\n// - string <length>: e.g., \"12px\"\n// - string <percentage>: e.g., \"80%\"\n// Anything else is assumed to be a channel definition.\nfunction maybeFontSizeChannel(fontSize) {\n  if (fontSize == null || typeof fontSize === \"number\") return [undefined, fontSize];\n  if (typeof fontSize !== \"string\") return [fontSize, undefined];\n  fontSize = fontSize.trim().toLowerCase();\n  return fontSizes.has(fontSize) || /^[+-]?\\d*\\.?\\d+(e[+-]?\\d+)?(\\w*|%)$/.test(fontSize)\n    ? [undefined, fontSize]\n    : [fontSize, undefined];\n}\n\n// This is a greedy algorithm for line wrapping. It would be better to use the\n// Knuth\u2013Plass line breaking algorithm (but that would be much more complex).\n// https://en.wikipedia.org/wiki/Line_wrap_and_word_wrap\nfunction lineWrap(input, maxWidth, widthof) {\n  const lines = [];\n  let lineStart,\n    lineEnd = 0;\n  for (const [wordStart, wordEnd, required] of lineBreaks(input)) {\n    // Record the start of a line. This isn\u2019t the same as the previous line\u2019s\n    // end because we often skip spaces between lines.\n    if (lineStart === undefined) lineStart = wordStart;\n\n    // If the current line is not empty, and if adding the current word would\n    // make the line longer than the allowed width, then break the line at the\n    // previous word end.\n    if (lineEnd > lineStart && widthof(input, lineStart, wordEnd) > maxWidth) {\n      lines.push(input.slice(lineStart, lineEnd) + (input[lineEnd - 1] === softHyphen ? \"-\" : \"\"));\n      lineStart = wordStart;\n    }\n\n    // If this is a required break (a newline), emit the line and reset.\n    if (required) {\n      lines.push(input.slice(lineStart, wordEnd));\n      lineStart = undefined;\n      continue;\n    }\n\n    // Extend the current line to include the new word.\n    lineEnd = wordEnd;\n  }\n  return lines;\n}\n\n// This is a rudimentary (and U.S.-centric) algorithm for finding opportunities\n// to break lines between words. A better and far more comprehensive approach\n// would be to use the official Unicode Line Breaking Algorithm.\n// https://unicode.org/reports/tr14/\nfunction* lineBreaks(input) {\n  let i = 0,\n    j = 0;\n  const n = input.length;\n  while (j < n) {\n    let k = 1;\n    switch (input[j]) {\n      case softHyphen:\n      case \"-\": // hyphen\n        ++j;\n        yield [i, j, false];\n        i = j;\n        break;\n      case \" \":\n        yield [i, j, false];\n        while (input[++j] === \" \"); // skip multiple spaces\n        i = j;\n        break;\n      case \"\\r\":\n        if (input[j + 1] === \"\\n\") ++k; // falls through\n      case \"\\n\":\n        yield [i, j, true];\n        j += k;\n        i = j;\n        break;\n      default:\n        ++j;\n        break;\n    }\n  }\n  yield [i, j, true];\n}\n\n// Computed as round(measureText(text).width * 10) at 10px system-ui. For\n// characters that are not represented in this map, we\u2019d ideally want to use a\n// weighted average of what we expect to see. But since we don\u2019t really know\n// what that is, using \u201Ce\u201D seems reasonable.\nconst defaultWidthMap = {\n  a: 56,\n  b: 63,\n  c: 57,\n  d: 63,\n  e: 58,\n  f: 37,\n  g: 62,\n  h: 60,\n  i: 26,\n  j: 26,\n  k: 55,\n  l: 26,\n  m: 88,\n  n: 60,\n  o: 60,\n  p: 62,\n  q: 62,\n  r: 39,\n  s: 54,\n  t: 38,\n  u: 60,\n  v: 55,\n  w: 79,\n  x: 54,\n  y: 55,\n  z: 55,\n  A: 69,\n  B: 67,\n  C: 73,\n  D: 74,\n  E: 61,\n  F: 58,\n  G: 76,\n  H: 75,\n  I: 28,\n  J: 55,\n  K: 67,\n  L: 58,\n  M: 89,\n  N: 75,\n  O: 78,\n  P: 65,\n  Q: 78,\n  R: 67,\n  S: 65,\n  T: 65,\n  U: 75,\n  V: 69,\n  W: 98,\n  X: 69,\n  Y: 67,\n  Z: 67,\n  0: 64,\n  1: 48,\n  2: 62,\n  3: 64,\n  4: 66,\n  5: 63,\n  6: 65,\n  7: 58,\n  8: 65,\n  9: 65,\n  \" \": 29,\n  \"!\": 32,\n  '\"': 49,\n  \"'\": 31,\n  \"(\": 39,\n  \")\": 39,\n  \",\": 31,\n  \"-\": 48,\n  \".\": 31,\n  \"/\": 32,\n  \":\": 31,\n  \";\": 31,\n  \"?\": 52,\n  \"\u2018\": 31,\n  \"\u2019\": 31,\n  \"\u201C\": 47,\n  \"\u201D\": 47,\n  \"\u2026\": 82\n};\n\n// This is a rudimentary (and U.S.-centric) algorithm for measuring the width of\n// a string based on a technique of Gregor Aisch; it assumes that individual\n// characters are laid out independently and does not implement the Unicode\n// grapheme cluster breaking algorithm. It does understand code points, though,\n// and so treats things like emoji as having the width of a lowercase e (and\n// should be equivalent to using for-of to iterate over code points, while also\n// being fast). TODO Optimize this by noting that we often re-measure characters\n// that were previously measured?\n// http://www.unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries\n// https://exploringjs.com/impatient-js/ch_strings.html#atoms-of-text\nexport function defaultWidth(text, start = 0, end = text.length) {\n  let sum = 0;\n  for (let i = start; i < end; i = readCharacter(text, i)) {\n    sum += defaultWidthMap[text[i]] ?? (isPictographic(text, i) ? 120 : defaultWidthMap.e);\n  }\n  return sum;\n}\n\n// Even for monospaced text, we can\u2019t assume that the number of UTF-16 code\n// points (i.e., the length of a string) corresponds to the number of visible\n// characters; we still have to count graphemes. And note that pictographic\n// characters such as emojis are typically not monospaced!\nexport function monospaceWidth(text, start = 0, end = text.length) {\n  let sum = 0;\n  for (let i = start; i < end; i = readCharacter(text, i)) {\n    sum += isPictographic(text, i) ? 200 : 100;\n  }\n  return sum;\n}\n\nexport function splitter({monospace, lineWidth, textOverflow}) {\n  if (textOverflow != null || lineWidth == Infinity) return (text) => text.split(/\\r\\n?|\\n/g);\n  const widthof = monospace ? monospaceWidth : defaultWidth;\n  const maxWidth = lineWidth * 100;\n  return (text) => lineWrap(text, maxWidth, widthof);\n}\n\nexport function clipper({monospace, lineWidth, textOverflow}) {\n  if (textOverflow == null || lineWidth == Infinity) return (text) => text;\n  const widthof = monospace ? monospaceWidth : defaultWidth;\n  const maxWidth = lineWidth * 100;\n  switch (textOverflow) {\n    case \"clip-start\":\n      return (text) => clipStart(text, maxWidth, widthof, \"\");\n    case \"clip-end\":\n      return (text) => clipEnd(text, maxWidth, widthof, \"\");\n    case \"ellipsis-start\":\n      return (text) => clipStart(text, maxWidth, widthof, ellipsis);\n    case \"ellipsis-middle\":\n      return (text) => clipMiddle(text, maxWidth, widthof, ellipsis);\n    case \"ellipsis-end\":\n      return (text) => clipEnd(text, maxWidth, widthof, ellipsis);\n  }\n}\n\nexport const ellipsis = \"\u2026\";\n\n// Cuts the given text to the given width, using the specified widthof function;\n// the returned [index, error] guarantees text.slice(0, index) fits within the\n// specified width with the given error. If the text fits naturally within the\n// given width, returns [-1, 0]. If the text needs cutting, the given inset\n// specifies how much space (in the same units as width and widthof) to reserve\n// for a possible ellipsis character.\nexport function cut(text, width, widthof, inset) {\n  const I = []; // indexes of read character boundaries\n  let w = 0; // current line width\n  for (let i = 0, j = 0, n = text.length; i < n; i = j) {\n    j = readCharacter(text, i); // read the next character\n    const l = widthof(text, i, j); // current character width\n    if (w + l > width) {\n      w += inset;\n      while (w > width && i > 0) (j = i), (i = I.pop()), (w -= widthof(text, i, j)); // remove excess\n      return [i, width - w];\n    }\n    w += l;\n    I.push(i);\n  }\n  return [-1, 0];\n}\n\nexport function clipEnd(text, width, widthof, ellipsis) {\n  text = text.trim(); // ignore leading and trailing whitespace\n  const e = widthof(ellipsis);\n  const [i] = cut(text, width, widthof, e);\n  return i < 0 ? text : text.slice(0, i).trimEnd() + ellipsis;\n}\n\nexport function clipMiddle(text, width, widthof, ellipsis) {\n  text = text.trim(); // ignore leading and trailing whitespace\n  const w = widthof(text);\n  if (w <= width) return text;\n  const e = widthof(ellipsis) / 2;\n  const [i, ei] = cut(text, width / 2, widthof, e);\n  const [j] = cut(text, w - width / 2 - ei + e, widthof, -e); // TODO read spaces?\n  return j < 0 ? ellipsis : text.slice(0, i).trimEnd() + ellipsis + text.slice(readCharacter(text, j)).trimStart();\n}\n\nexport function clipStart(text, width, widthof, ellipsis) {\n  text = text.trim(); // ignore leading and trailing whitespace\n  const w = widthof(text);\n  if (w <= width) return text;\n  const e = widthof(ellipsis);\n  const [j] = cut(text, w - width + e, widthof, -e); // TODO read spaces?\n  return j < 0 ? ellipsis : ellipsis + text.slice(readCharacter(text, j)).trimStart();\n}\n\nconst reCombiner = /[\\p{Combining_Mark}\\p{Emoji_Modifier}]+/uy;\nconst rePictographic = /\\p{Extended_Pictographic}/uy;\n\n// Reads a single \u201Ccharacter\u201D element from the given text starting at the given\n// index, returning the index after the read character. Ideally, this implements\n// the Unicode text segmentation algorithm and understands grapheme cluster\n// boundaries, etc., but in practice this is only smart enough to detect UTF-16\n// surrogate pairs, combining marks, and zero-width joiner (zwj) sequences such\n// as emoji skin color modifiers. https://unicode.org/reports/tr29/\nexport function readCharacter(text, i) {\n  i += isSurrogatePair(text, i) ? 2 : 1;\n  if (isCombiner(text, i)) i = reCombiner.lastIndex;\n  if (isZeroWidthJoiner(text, i)) return readCharacter(text, i + 1);\n  return i;\n}\n\n// We avoid more expensive regex tests involving Unicode property classes by\n// first checking for the common case of 7-bit ASCII characters.\nfunction isAscii(text, i) {\n  return text.charCodeAt(i) < 0x80;\n}\n\nfunction isSurrogatePair(text, i) {\n  const hi = text.charCodeAt(i);\n  if (hi >= 0xd800 && hi < 0xdc00) {\n    const lo = text.charCodeAt(i + 1);\n    return lo >= 0xdc00 && lo < 0xe000;\n  }\n  return false;\n}\n\nfunction isZeroWidthJoiner(text, i) {\n  return text.charCodeAt(i) === 0x200d;\n}\n\nfunction isCombiner(text, i) {\n  return isAscii(text, i) ? false : ((reCombiner.lastIndex = i), reCombiner.test(text));\n}\n\nfunction isPictographic(text, i) {\n  return isAscii(text, i) ? false : ((rePictographic.lastIndex = i), rePictographic.test(text));\n}\n", "import {pathRound as path} from \"d3\";\nimport {create} from \"../context.js\";\nimport {Mark} from \"../mark.js\";\nimport {maybeFrameAnchor, maybeNumberChannel, maybeTuple, keyword, identity} from \"../options.js\";\nimport {\n  applyChannelStyles,\n  applyDirectStyles,\n  applyFrameAnchor,\n  applyIndirectStyles,\n  applyTransform\n} from \"../style.js\";\nimport {template} from \"../template.js\";\n\nconst defaults = {\n  ariaLabel: \"vector\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  strokeWidth: 1.5,\n  strokeLinejoin: \"round\",\n  strokeLinecap: \"round\"\n};\n\nconst defaultRadius = 3.5;\n\n// The size of the arrowhead is proportional to its length, but we still allow\n// the relative size of the head to be controlled via the mark\u2019s width option;\n// doubling the default radius will produce an arrowhead that is twice as big.\n// That said, we\u2019ll probably want a arrow with a fixed head size, too.\nconst wingRatio = defaultRadius * 5;\n\nconst shapeArrow = {\n  draw(context, l, r) {\n    const wing = (l * r) / wingRatio;\n    context.moveTo(0, 0);\n    context.lineTo(0, -l);\n    context.moveTo(-wing, wing - l);\n    context.lineTo(0, -l);\n    context.lineTo(wing, wing - l);\n  }\n};\n\nconst shapeSpike = {\n  draw(context, l, r) {\n    context.moveTo(-r, 0);\n    context.lineTo(0, -l);\n    context.lineTo(r, 0);\n  }\n};\n\nconst shapes = new Map([\n  [\"arrow\", shapeArrow],\n  [\"spike\", shapeSpike]\n]);\n\nfunction isShapeObject(value) {\n  return value && typeof value.draw === \"function\";\n}\n\nfunction maybeShape(shape) {\n  if (isShapeObject(shape)) return shape;\n  const value = shapes.get(`${shape}`.toLowerCase());\n  if (value) return value;\n  throw new Error(`invalid shape: ${shape}`);\n}\n\nexport class Vector extends Mark {\n  constructor(data, options = {}) {\n    const {x, y, r = defaultRadius, length, rotate, shape = shapeArrow, anchor = \"middle\", frameAnchor} = options;\n    const [vl, cl] = maybeNumberChannel(length, 12);\n    const [vr, cr] = maybeNumberChannel(rotate, 0);\n    super(\n      data,\n      {\n        x: {value: x, scale: \"x\", optional: true},\n        y: {value: y, scale: \"y\", optional: true},\n        length: {value: vl, scale: \"length\", optional: true},\n        rotate: {value: vr, optional: true}\n      },\n      options,\n      defaults\n    );\n    this.r = +r;\n    this.length = cl;\n    this.rotate = cr;\n    this.shape = maybeShape(shape);\n    this.anchor = keyword(anchor, \"anchor\", [\"start\", \"middle\", \"end\"]);\n    this.frameAnchor = maybeFrameAnchor(frameAnchor);\n  }\n  render(index, scales, channels, dimensions, context) {\n    const {x, y} = scales;\n    const {x: X, y: Y, length: L, rotate: A} = channels;\n    const {length, rotate, anchor, shape, r} = this;\n    const [cx, cy] = applyFrameAnchor(this, dimensions);\n    return create(\"svg:g\", context)\n      .call(applyIndirectStyles, this, dimensions, context)\n      .call(applyTransform, this, {x: X && x, y: Y && y})\n      .call((g) =>\n        g\n          .selectAll()\n          .data(index)\n          .enter()\n          .append(\"path\")\n          .call(applyDirectStyles, this)\n          .attr(\n            \"transform\",\n            template`translate(${X ? (i) => X[i] : cx},${Y ? (i) => Y[i] : cy})${\n              A ? (i) => ` rotate(${A[i]})` : rotate ? ` rotate(${rotate})` : ``\n            }${\n              anchor === \"start\"\n                ? ``\n                : anchor === \"end\"\n                ? L\n                  ? (i) => ` translate(0,${L[i]})`\n                  : ` translate(0,${length})`\n                : L\n                ? (i) => ` translate(0,${L[i] / 2})`\n                : ` translate(0,${length / 2})`\n            }`\n          )\n          .attr(\n            \"d\",\n            L\n              ? (i) => {\n                  const p = path();\n                  shape.draw(p, L[i], r);\n                  return p;\n                }\n              : (() => {\n                  const p = path();\n                  shape.draw(p, length, r);\n                  return p;\n                })()\n          )\n          .call(applyChannelStyles, this, channels)\n      )\n      .node();\n  }\n}\n\nexport function vector(data, options = {}) {\n  let {x, y, ...rest} = options;\n  if (options.frameAnchor === undefined) [x, y] = maybeTuple(x, y);\n  return new Vector(data, {...rest, x, y});\n}\n\nexport function vectorX(data, options = {}) {\n  const {x = identity, ...rest} = options;\n  return new Vector(data, {...rest, x});\n}\n\nexport function vectorY(data, options = {}) {\n  const {y = identity, ...rest} = options;\n  return new Vector(data, {...rest, y});\n}\n\nexport function spike(data, options = {}) {\n  const {\n    shape = shapeSpike,\n    stroke = defaults.stroke,\n    strokeWidth = 1,\n    fill = stroke,\n    fillOpacity = 0.3,\n    anchor = \"start\",\n    ...rest\n  } = options;\n  return vector(data, {...rest, shape, stroke, strokeWidth, fill, fillOpacity, anchor});\n}\n", "import {extent, format, timeFormat, utcFormat} from \"d3\";\nimport {formatDefault} from \"../format.js\";\nimport {marks} from \"../mark.js\";\nimport {radians} from \"../math.js\";\nimport {arrayify, constant, identity, keyword, number, range, valueof} from \"../options.js\";\nimport {isIterable, isNoneish, isTemporal, orderof} from \"../options.js\";\nimport {maybeColorChannel, maybeNumberChannel, maybeRangeInterval} from \"../options.js\";\nimport {isTemporalScale} from \"../scales.js\";\nimport {offset} from \"../style.js\";\nimport {formatTimeTicks, isTimeYear, isUtcYear} from \"../time.js\";\nimport {initializer} from \"../transforms/basic.js\";\nimport {ruleX, ruleY} from \"./rule.js\";\nimport {text, textX, textY} from \"./text.js\";\nimport {vectorX, vectorY} from \"./vector.js\";\n\nfunction maybeData(data, options) {\n  if (arguments.length < 2 && !isIterable(data)) (options = data), (data = null);\n  if (options === undefined) options = {};\n  return [data, options];\n}\n\nfunction maybeAnchor({anchor} = {}, anchors) {\n  return anchor === undefined ? anchors[0] : keyword(anchor, \"anchor\", anchors);\n}\n\nfunction anchorY(options) {\n  return maybeAnchor(options, [\"left\", \"right\"]);\n}\n\nfunction anchorFy(options) {\n  return maybeAnchor(options, [\"right\", \"left\"]);\n}\n\nfunction anchorX(options) {\n  return maybeAnchor(options, [\"bottom\", \"top\"]);\n}\n\nfunction anchorFx(options) {\n  return maybeAnchor(options, [\"top\", \"bottom\"]);\n}\n\nexport function axisY() {\n  const [data, options] = maybeData(...arguments);\n  return axisKy(\"y\", anchorY(options), data, options);\n}\n\nexport function axisFy() {\n  const [data, options] = maybeData(...arguments);\n  return axisKy(\"fy\", anchorFy(options), data, options);\n}\n\nexport function axisX() {\n  const [data, options] = maybeData(...arguments);\n  return axisKx(\"x\", anchorX(options), data, options);\n}\n\nexport function axisFx() {\n  const [data, options] = maybeData(...arguments);\n  return axisKx(\"fx\", anchorFx(options), data, options);\n}\n\nfunction axisKy(\n  k,\n  anchor,\n  data,\n  {\n    color = \"currentColor\",\n    opacity = 1,\n    stroke = color,\n    strokeOpacity = opacity,\n    strokeWidth = 1,\n    fill = color,\n    fillOpacity = opacity,\n    textAnchor,\n    textStroke,\n    textStrokeOpacity,\n    textStrokeWidth,\n    tickSize = k === \"y\" ? 6 : 0,\n    tickPadding,\n    tickRotate,\n    x,\n    margin,\n    marginTop = margin === undefined ? 20 : margin,\n    marginRight = margin === undefined ? (anchor === \"right\" ? 40 : 0) : margin,\n    marginBottom = margin === undefined ? 20 : margin,\n    marginLeft = margin === undefined ? (anchor === \"left\" ? 40 : 0) : margin,\n    label,\n    labelAnchor,\n    labelArrow,\n    labelOffset,\n    ...options\n  }\n) {\n  tickSize = number(tickSize);\n  tickPadding = number(tickPadding);\n  tickRotate = number(tickRotate);\n  if (labelAnchor !== undefined) labelAnchor = keyword(labelAnchor, \"labelAnchor\", [\"center\", \"top\", \"bottom\"]);\n  labelArrow = maybeLabelArrow(labelArrow);\n  return marks(\n    tickSize && !isNoneish(stroke)\n      ? axisTickKy(k, anchor, data, {\n          stroke,\n          strokeOpacity,\n          strokeWidth,\n          tickSize,\n          tickPadding,\n          tickRotate,\n          x,\n          ...options\n        })\n      : null,\n    !isNoneish(fill)\n      ? axisTextKy(k, anchor, data, {\n          fill,\n          fillOpacity,\n          stroke: textStroke,\n          strokeOpacity: textStrokeOpacity,\n          strokeWidth: textStrokeWidth,\n          textAnchor,\n          tickSize,\n          tickPadding,\n          tickRotate,\n          x,\n          marginTop,\n          marginRight,\n          marginBottom,\n          marginLeft,\n          ...options\n        })\n      : null,\n    !isNoneish(fill) && label !== null\n      ? text(\n          [],\n          labelOptions({fill, fillOpacity, ...options}, function (data, facets, channels, scales, dimensions) {\n            const scale = scales[k];\n            const {marginTop, marginRight, marginBottom, marginLeft} = (k === \"y\" && dimensions.inset) || dimensions;\n            const cla = labelAnchor ?? (scale.bandwidth ? \"center\" : \"top\");\n            const clo = labelOffset ?? (anchor === \"right\" ? marginRight : marginLeft) - 3;\n            if (cla === \"center\") {\n              this.textAnchor = undefined; // middle\n              this.lineAnchor = anchor === \"right\" ? \"bottom\" : \"top\";\n              this.frameAnchor = anchor;\n              this.rotate = -90;\n            } else {\n              this.textAnchor = anchor === \"right\" ? \"end\" : \"start\";\n              this.lineAnchor = cla;\n              this.frameAnchor = `${cla}-${anchor}`;\n              this.rotate = 0;\n            }\n            this.dy = cla === \"top\" ? 3 - marginTop : cla === \"bottom\" ? marginBottom - 3 : 0;\n            this.dx = anchor === \"right\" ? clo : -clo;\n            this.ariaLabel = `${k}-axis label`;\n            return {\n              facets: [[0]],\n              channels: {text: {value: [formatAxisLabel(k, scale, {anchor, label, labelAnchor: cla, labelArrow})]}}\n            };\n          })\n        )\n      : null\n  );\n}\n\nfunction axisKx(\n  k,\n  anchor,\n  data,\n  {\n    color = \"currentColor\",\n    opacity = 1,\n    stroke = color,\n    strokeOpacity = opacity,\n    strokeWidth = 1,\n    fill = color,\n    fillOpacity = opacity,\n    textAnchor,\n    textStroke,\n    textStrokeOpacity,\n    textStrokeWidth,\n    tickSize = k === \"x\" ? 6 : 0,\n    tickPadding,\n    tickRotate,\n    y,\n    margin,\n    marginTop = margin === undefined ? (anchor === \"top\" ? 30 : 0) : margin,\n    marginRight = margin === undefined ? 20 : margin,\n    marginBottom = margin === undefined ? (anchor === \"bottom\" ? 30 : 0) : margin,\n    marginLeft = margin === undefined ? 20 : margin,\n    label,\n    labelAnchor,\n    labelArrow,\n    labelOffset,\n    ...options\n  }\n) {\n  tickSize = number(tickSize);\n  tickPadding = number(tickPadding);\n  tickRotate = number(tickRotate);\n  if (labelAnchor !== undefined) labelAnchor = keyword(labelAnchor, \"labelAnchor\", [\"center\", \"left\", \"right\"]);\n  labelArrow = maybeLabelArrow(labelArrow);\n  return marks(\n    tickSize && !isNoneish(stroke)\n      ? axisTickKx(k, anchor, data, {\n          stroke,\n          strokeOpacity,\n          strokeWidth,\n          tickSize,\n          tickPadding,\n          tickRotate,\n          y,\n          ...options\n        })\n      : null,\n    !isNoneish(fill)\n      ? axisTextKx(k, anchor, data, {\n          fill,\n          fillOpacity,\n          stroke: textStroke,\n          strokeOpacity: textStrokeOpacity,\n          strokeWidth: textStrokeWidth,\n          textAnchor,\n          tickSize,\n          tickPadding,\n          tickRotate,\n          y,\n          marginTop,\n          marginRight,\n          marginBottom,\n          marginLeft,\n          ...options\n        })\n      : null,\n    !isNoneish(fill) && label !== null\n      ? text(\n          [],\n          labelOptions({fill, fillOpacity, ...options}, function (data, facets, channels, scales, dimensions) {\n            const scale = scales[k];\n            const {marginTop, marginRight, marginBottom, marginLeft} = (k === \"x\" && dimensions.inset) || dimensions;\n            const cla = labelAnchor ?? (scale.bandwidth ? \"center\" : \"right\");\n            const clo = labelOffset ?? (anchor === \"top\" ? marginTop : marginBottom) - 3;\n            if (cla === \"center\") {\n              this.frameAnchor = anchor;\n              this.textAnchor = undefined; // middle\n            } else {\n              this.frameAnchor = `${anchor}-${cla}`;\n              this.textAnchor = cla === \"right\" ? \"end\" : \"start\";\n            }\n            this.lineAnchor = anchor;\n            this.dy = anchor === \"top\" ? -clo : clo;\n            this.dx = cla === \"right\" ? marginRight - 3 : cla === \"left\" ? 3 - marginLeft : 0;\n            this.ariaLabel = `${k}-axis label`;\n            return {\n              facets: [[0]],\n              channels: {text: {value: [formatAxisLabel(k, scale, {anchor, label, labelAnchor: cla, labelArrow})]}}\n            };\n          })\n        )\n      : null\n  );\n}\n\nfunction axisTickKy(\n  k,\n  anchor,\n  data,\n  {\n    strokeWidth = 1,\n    strokeLinecap = null,\n    strokeLinejoin = null,\n    facetAnchor = anchor + (k === \"y\" ? \"-empty\" : \"\"),\n    frameAnchor = anchor,\n    tickSize,\n    inset = 0,\n    insetLeft = inset,\n    insetRight = inset,\n    dx = 0,\n    y = k === \"y\" ? undefined : null,\n    ...options\n  }\n) {\n  return axisMark(vectorY, k, `${k}-axis tick`, data, {\n    strokeWidth,\n    strokeLinecap,\n    strokeLinejoin,\n    facetAnchor,\n    frameAnchor,\n    y,\n    ...options,\n    dx: anchor === \"left\" ? +dx - offset + +insetLeft : +dx + offset - insetRight,\n    anchor: \"start\",\n    length: tickSize,\n    shape: anchor === \"left\" ? shapeTickLeft : shapeTickRight\n  });\n}\n\nfunction axisTickKx(\n  k,\n  anchor,\n  data,\n  {\n    strokeWidth = 1,\n    strokeLinecap = null,\n    strokeLinejoin = null,\n    facetAnchor = anchor + (k === \"x\" ? \"-empty\" : \"\"),\n    frameAnchor = anchor,\n    tickSize,\n    inset = 0,\n    insetTop = inset,\n    insetBottom = inset,\n    dy = 0,\n    x = k === \"x\" ? undefined : null,\n    ...options\n  }\n) {\n  return axisMark(vectorX, k, `${k}-axis tick`, data, {\n    strokeWidth,\n    strokeLinejoin,\n    strokeLinecap,\n    facetAnchor,\n    frameAnchor,\n    x,\n    ...options,\n    dy: anchor === \"bottom\" ? +dy - offset - insetBottom : +dy + offset + +insetTop,\n    anchor: \"start\",\n    length: tickSize,\n    shape: anchor === \"bottom\" ? shapeTickBottom : shapeTickTop\n  });\n}\n\nfunction axisTextKy(\n  k,\n  anchor,\n  data,\n  {\n    facetAnchor = anchor + (k === \"y\" ? \"-empty\" : \"\"),\n    frameAnchor = anchor,\n    tickSize,\n    tickRotate = 0,\n    tickPadding = Math.max(3, 9 - tickSize) + (Math.abs(tickRotate) > 60 ? 4 * Math.cos(tickRotate * radians) : 0),\n    tickFormat,\n    text = typeof tickFormat === \"function\" ? tickFormat : undefined,\n    textAnchor = Math.abs(tickRotate) > 60 ? \"middle\" : anchor === \"left\" ? \"end\" : \"start\",\n    lineAnchor = tickRotate > 60 ? \"top\" : tickRotate < -60 ? \"bottom\" : \"middle\",\n    fontVariant,\n    inset = 0,\n    insetLeft = inset,\n    insetRight = inset,\n    dx = 0,\n    y = k === \"y\" ? undefined : null,\n    ...options\n  }\n) {\n  return axisMark(\n    textY,\n    k,\n    `${k}-axis tick label`,\n    data,\n    {\n      facetAnchor,\n      frameAnchor,\n      text: text === undefined ? null : text,\n      textAnchor,\n      lineAnchor,\n      fontVariant,\n      rotate: tickRotate,\n      y,\n      ...options,\n      dx: anchor === \"left\" ? +dx - tickSize - tickPadding + +insetLeft : +dx + +tickSize + +tickPadding - insetRight\n    },\n    function (scale, data, ticks, channels) {\n      if (fontVariant === undefined) this.fontVariant = inferFontVariant(scale);\n      if (text === undefined) channels.text = inferTextChannel(scale, data, ticks, tickFormat, anchor);\n    }\n  );\n}\n\nfunction axisTextKx(\n  k,\n  anchor,\n  data,\n  {\n    facetAnchor = anchor + (k === \"x\" ? \"-empty\" : \"\"),\n    frameAnchor = anchor,\n    tickSize,\n    tickRotate = 0,\n    tickPadding = Math.max(3, 9 - tickSize) + (Math.abs(tickRotate) >= 10 ? 4 * Math.cos(tickRotate * radians) : 0),\n    tickFormat,\n    text = typeof tickFormat === \"function\" ? tickFormat : undefined,\n    textAnchor = Math.abs(tickRotate) >= 10 ? ((tickRotate < 0) ^ (anchor === \"bottom\") ? \"start\" : \"end\") : \"middle\",\n    lineAnchor = Math.abs(tickRotate) >= 10 ? \"middle\" : anchor === \"bottom\" ? \"top\" : \"bottom\",\n    fontVariant,\n    inset = 0,\n    insetTop = inset,\n    insetBottom = inset,\n    dy = 0,\n    x = k === \"x\" ? undefined : null,\n    ...options\n  }\n) {\n  return axisMark(\n    textX,\n    k,\n    `${k}-axis tick label`,\n    data,\n    {\n      facetAnchor,\n      frameAnchor,\n      text: text === undefined ? null : text,\n      textAnchor,\n      lineAnchor,\n      fontVariant,\n      rotate: tickRotate,\n      x,\n      ...options,\n      dy: anchor === \"bottom\" ? +dy + +tickSize + +tickPadding - insetBottom : +dy - tickSize - tickPadding + +insetTop\n    },\n    function (scale, data, ticks, channels) {\n      if (fontVariant === undefined) this.fontVariant = inferFontVariant(scale);\n      if (text === undefined) channels.text = inferTextChannel(scale, data, ticks, tickFormat, anchor);\n    }\n  );\n}\n\nexport function gridY() {\n  const [data, options] = maybeData(...arguments);\n  return gridKy(\"y\", anchorY(options), data, options);\n}\n\nexport function gridFy() {\n  const [data, options] = maybeData(...arguments);\n  return gridKy(\"fy\", anchorFy(options), data, options);\n}\n\nexport function gridX() {\n  const [data, options] = maybeData(...arguments);\n  return gridKx(\"x\", anchorX(options), data, options);\n}\n\nexport function gridFx() {\n  const [data, options] = maybeData(...arguments);\n  return gridKx(\"fx\", anchorFx(options), data, options);\n}\n\nfunction gridKy(\n  k,\n  anchor,\n  data,\n  {\n    y = k === \"y\" ? undefined : null,\n    x = null,\n    x1 = anchor === \"left\" ? x : null,\n    x2 = anchor === \"right\" ? x : null,\n    ...options\n  }\n) {\n  return axisMark(ruleY, k, `${k}-grid`, data, {y, x1, x2, ...gridDefaults(options)});\n}\n\nfunction gridKx(\n  k,\n  anchor,\n  data,\n  {\n    x = k === \"x\" ? undefined : null,\n    y = null,\n    y1 = anchor === \"top\" ? y : null,\n    y2 = anchor === \"bottom\" ? y : null,\n    ...options\n  }\n) {\n  return axisMark(ruleX, k, `${k}-grid`, data, {x, y1, y2, ...gridDefaults(options)});\n}\n\nfunction gridDefaults({\n  color = \"currentColor\",\n  opacity = 0.1,\n  stroke = color,\n  strokeOpacity = opacity,\n  strokeWidth = 1,\n  ...options\n}) {\n  return {stroke, strokeOpacity, strokeWidth, ...options};\n}\n\nfunction labelOptions(\n  {fill, fillOpacity, fontFamily, fontSize, fontStyle, fontWeight, monospace, pointerEvents, shapeRendering},\n  initializer\n) {\n  // Only propagate these options if constant.\n  [, fill] = maybeColorChannel(fill);\n  [, fillOpacity] = maybeNumberChannel(fillOpacity);\n  return {\n    facet: \"super\",\n    x: null,\n    y: null,\n    fill,\n    fillOpacity,\n    fontFamily,\n    fontSize,\n    fontStyle,\n    fontWeight,\n    monospace,\n    pointerEvents,\n    shapeRendering,\n    initializer\n  };\n}\n\nfunction axisMark(mark, k, ariaLabel, data, options, initialize) {\n  let channels;\n\n  function axisInitializer(data, facets, _channels, scales, dimensions, context) {\n    const initializeFacets = data == null && (k === \"fx\" || k === \"fy\");\n    const {[k]: scale} = scales;\n    if (!scale) throw new Error(`missing scale: ${k}`);\n    let {ticks, tickSpacing, interval} = options;\n    if (isTemporalScale(scale) && typeof ticks === \"string\") (interval = ticks), (ticks = undefined);\n    if (data == null) {\n      if (isIterable(ticks)) {\n        data = arrayify(ticks);\n      } else if (scale.ticks) {\n        if (ticks !== undefined) {\n          data = scale.ticks(ticks);\n        } else {\n          interval = maybeRangeInterval(interval === undefined ? scale.interval : interval, scale.type);\n          if (interval !== undefined) {\n            // For time scales, we could pass the interval directly to\n            // scale.ticks because it\u2019s supported by d3.utcTicks; but\n            // quantitative scales and d3.ticks do not support numeric\n            // intervals for scale.ticks, so we compute them here.\n            const [min, max] = extent(scale.domain());\n            data = interval.range(min, interval.offset(interval.floor(max))); // inclusive max\n          } else {\n            const [min, max] = extent(scale.range());\n            ticks = (max - min) / (tickSpacing === undefined ? (k === \"x\" ? 80 : 35) : tickSpacing);\n            data = scale.ticks(ticks);\n          }\n        }\n      } else {\n        data = scale.domain();\n      }\n      if (k === \"y\" || k === \"x\") {\n        facets = [range(data)];\n      } else {\n        channels[k] = {scale: k, value: identity};\n      }\n    }\n    initialize?.call(this, scale, data, ticks, channels);\n    const initializedChannels = Object.fromEntries(\n      Object.entries(channels).map(([name, channel]) => {\n        return [name, {...channel, value: valueof(data, channel.value)}];\n      })\n    );\n    if (initializeFacets) facets = context.filterFacets(data, initializedChannels);\n    return {data, facets, channels: initializedChannels};\n  }\n\n  // Apply any basic initializers after the axis initializer computes the ticks.\n  const basicInitializer = initializer(options).initializer;\n  const m = mark(data, initializer({...options, initializer: axisInitializer}, basicInitializer));\n  if (data == null) {\n    channels = m.channels;\n    m.channels = {};\n  } else {\n    channels = {};\n  }\n  m.ariaLabel = ariaLabel;\n  return m;\n}\n\nfunction inferTextChannel(scale, data, ticks, tickFormat, anchor) {\n  return {value: inferTickFormat(scale, data, ticks, tickFormat, anchor)};\n}\n\n// D3\u2019s ordinal scales simply use toString by default, but if the ordinal scale\n// domain (or ticks) are numbers or dates (say because we\u2019re applying a time\n// interval to the ordinal scale), we want Plot\u2019s default formatter.\nexport function inferTickFormat(scale, data, ticks, tickFormat, anchor) {\n  return tickFormat === undefined && isTemporalScale(scale)\n    ? formatTimeTicks(scale, data, ticks, anchor)\n    : scale.tickFormat\n    ? scale.tickFormat(isIterable(ticks) ? null : ticks, tickFormat)\n    : tickFormat === undefined\n    ? isUtcYear(scale.interval)\n      ? utcFormat(\"%Y\")\n      : isTimeYear(scale.interval)\n      ? timeFormat(\"%Y\")\n      : formatDefault\n    : typeof tickFormat === \"string\"\n    ? (isTemporal(scale.domain()) ? utcFormat : format)(tickFormat)\n    : constant(tickFormat);\n}\n\nconst shapeTickBottom = {\n  draw(context, l) {\n    context.moveTo(0, 0);\n    context.lineTo(0, l);\n  }\n};\n\nconst shapeTickTop = {\n  draw(context, l) {\n    context.moveTo(0, 0);\n    context.lineTo(0, -l);\n  }\n};\n\nconst shapeTickLeft = {\n  draw(context, l) {\n    context.moveTo(0, 0);\n    context.lineTo(-l, 0);\n  }\n};\n\nconst shapeTickRight = {\n  draw(context, l) {\n    context.moveTo(0, 0);\n    context.lineTo(l, 0);\n  }\n};\n\n// TODO Unify this with the other inferFontVariant; here we only have a scale\n// function rather than a scale descriptor.\nfunction inferFontVariant(scale) {\n  return scale.bandwidth && !scale.interval ? undefined : \"tabular-nums\";\n}\n\n// Determines whether the scale points in the \u201Cpositive\u201D (right or down) or\n// \u201Cnegative\u201D (left or up) direction; if the scale order cannot be determined,\n// returns NaN; used to assign an appropriate label arrow.\nfunction inferScaleOrder(scale) {\n  return Math.sign(orderof(scale.domain())) * Math.sign(orderof(scale.range()));\n}\n\n// Takes the scale label, and if this is not an ordinal scale and the label was\n// inferred from an associated channel, adds an orientation-appropriate arrow.\nfunction formatAxisLabel(k, scale, {anchor, label = scale.label, labelAnchor, labelArrow} = {}) {\n  if (label == null || (label.inferred && isTemporalish(scale) && /^(date|time|year)$/i.test(label))) return;\n  label = String(label); // coerce to a string after checking if inferred\n  if (labelArrow === \"auto\") labelArrow = (!scale.bandwidth || scale.interval) && !/[\u2191\u2193\u2192\u2190]/.test(label);\n  if (!labelArrow) return label;\n  if (labelArrow === true) {\n    const order = inferScaleOrder(scale);\n    if (order)\n      labelArrow =\n        /x$/.test(k) || labelAnchor === \"center\"\n          ? /x$/.test(k) === order < 0\n            ? \"left\"\n            : \"right\"\n          : order < 0\n          ? \"up\"\n          : \"down\";\n  }\n  switch (labelArrow) {\n    case \"left\":\n      return `\u2190 ${label}`;\n    case \"right\":\n      return `${label} \u2192`;\n    case \"up\":\n      return anchor === \"right\" ? `${label} \u2191` : `\u2191 ${label}`;\n    case \"down\":\n      return anchor === \"right\" ? `${label} \u2193` : `\u2193 ${label}`;\n  }\n  return label;\n}\n\nfunction maybeLabelArrow(labelArrow = \"auto\") {\n  return isNoneish(labelArrow)\n    ? false\n    : typeof labelArrow === \"boolean\"\n    ? labelArrow\n    : keyword(labelArrow, \"labelArrow\", [\"auto\", \"up\", \"right\", \"down\", \"left\"]);\n}\n\nfunction isTemporalish(scale) {\n  return isTemporalScale(scale) || scale.interval != null;\n}\n", "import {pathRound as path} from \"d3\";\nimport {inferFontVariant} from \"../axes.js\";\nimport {create, createContext} from \"../context.js\";\nimport {isNoneish, maybeColorChannel, maybeNumberChannel} from \"../options.js\";\nimport {isOrdinalScale, isThresholdScale} from \"../scales.js\";\nimport {applyInlineStyles, impliedString, maybeClassName} from \"../style.js\";\nimport {inferTickFormat} from \"../marks/axis.js\";\n\nfunction maybeScale(scale, key) {\n  if (key == null) return key;\n  const s = scale(key);\n  if (!s) throw new Error(`scale not found: ${key}`);\n  return s;\n}\n\nexport function legendSwatches(color, {opacity, ...options} = {}) {\n  if (!isOrdinalScale(color) && !isThresholdScale(color))\n    throw new Error(`swatches legend requires ordinal or threshold color scale (not ${color.type})`);\n  return legendItems(color, options, (selection, scale, width, height) =>\n    selection\n      .append(\"svg\")\n      .attr(\"width\", width)\n      .attr(\"height\", height)\n      .attr(\"fill\", scale.scale)\n      .attr(\"fill-opacity\", maybeNumberChannel(opacity)[1])\n      .append(\"rect\")\n      .attr(\"width\", \"100%\")\n      .attr(\"height\", \"100%\")\n  );\n}\n\nexport function legendSymbols(\n  symbol,\n  {\n    fill = symbol.hint?.fill !== undefined ? symbol.hint.fill : \"none\",\n    fillOpacity = 1,\n    stroke = symbol.hint?.stroke !== undefined ? symbol.hint.stroke : isNoneish(fill) ? \"currentColor\" : \"none\",\n    strokeOpacity = 1,\n    strokeWidth = 1.5,\n    r = 4.5,\n    ...options\n  } = {},\n  scale\n) {\n  const [vf, cf] = maybeColorChannel(fill);\n  const [vs, cs] = maybeColorChannel(stroke);\n  const sf = maybeScale(scale, vf);\n  const ss = maybeScale(scale, vs);\n  const size = r * r * Math.PI;\n  fillOpacity = maybeNumberChannel(fillOpacity)[1];\n  strokeOpacity = maybeNumberChannel(strokeOpacity)[1];\n  strokeWidth = maybeNumberChannel(strokeWidth)[1];\n  return legendItems(symbol, options, (selection, scale, width, height) =>\n    selection\n      .append(\"svg\")\n      .attr(\"viewBox\", \"-8 -8 16 16\")\n      .attr(\"width\", width)\n      .attr(\"height\", height)\n      .attr(\"fill\", vf === \"color\" ? (d) => sf.scale(d) : cf)\n      .attr(\"fill-opacity\", fillOpacity)\n      .attr(\"stroke\", vs === \"color\" ? (d) => ss.scale(d) : cs)\n      .attr(\"stroke-opacity\", strokeOpacity)\n      .attr(\"stroke-width\", strokeWidth)\n      .append(\"path\")\n      .attr(\"d\", (d) => {\n        const p = path();\n        symbol.scale(d).draw(p, size);\n        return p;\n      })\n  );\n}\n\nfunction legendItems(scale, options = {}, swatch) {\n  let {\n    columns,\n    tickFormat,\n    fontVariant = inferFontVariant(scale),\n    // TODO label,\n    swatchSize = 15,\n    swatchWidth = swatchSize,\n    swatchHeight = swatchSize,\n    marginLeft = 0,\n    className,\n    style,\n    width\n  } = options;\n  const context = createContext(options);\n  className = maybeClassName(className);\n  if (typeof tickFormat !== \"function\") tickFormat = inferTickFormat(scale.scale, scale.domain, undefined, tickFormat);\n\n  const swatches = create(\"div\", context).attr(\n    \"class\",\n    `${className}-swatches ${className}-swatches-${columns != null ? \"columns\" : \"wrap\"}`\n  );\n\n  let extraStyle;\n\n  if (columns != null) {\n    extraStyle = `.${className}-swatches-columns .${className}-swatch {\n  display: flex;\n  align-items: center;\n  break-inside: avoid;\n  padding-bottom: 1px;\n}\n.${className}-swatches-columns .${className}-swatch::before {\n  flex-shrink: 0;\n}\n.${className}-swatches-columns .${className}-swatch-label {\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}`;\n\n    swatches\n      .style(\"columns\", columns)\n      .selectAll()\n      .data(scale.domain)\n      .enter()\n      .append(\"div\")\n      .attr(\"class\", `${className}-swatch`)\n      .call(swatch, scale, swatchWidth, swatchHeight)\n      .call((item) =>\n        item.append(\"div\").attr(\"class\", `${className}-swatch-label`).attr(\"title\", tickFormat).text(tickFormat)\n      );\n  } else {\n    extraStyle = `.${className}-swatches-wrap {\n  display: flex;\n  align-items: center;\n  min-height: 33px;\n  flex-wrap: wrap;\n}\n.${className}-swatches-wrap .${className}-swatch {\n  display: inline-flex;\n  align-items: center;\n  margin-right: 1em;\n}`;\n\n    swatches\n      .selectAll()\n      .data(scale.domain)\n      .enter()\n      .append(\"span\")\n      .attr(\"class\", `${className}-swatch`)\n      .call(swatch, scale, swatchWidth, swatchHeight)\n      .append(function () {\n        return this.ownerDocument.createTextNode(tickFormat.apply(this, arguments));\n      });\n  }\n\n  return swatches\n    .call((div) =>\n      div.insert(\"style\", \"*\").text(\n        `.${className}-swatches {\n  font-family: system-ui, sans-serif;\n  font-size: 10px;\n  margin-bottom: 0.5em;\n}\n.${className}-swatch > svg {\n  margin-right: 0.5em;\n  overflow: visible;\n}\n${extraStyle}`\n      )\n    )\n    .style(\"margin-left\", marginLeft ? `${+marginLeft}px` : null)\n    .style(\"width\", width === undefined ? null : `${+width}px`)\n    .style(\"font-variant\", impliedString(fontVariant, \"normal\"))\n    .call(applyInlineStyles, style)\n    .node();\n}\n", "import {rgb} from \"d3\";\nimport {createContext} from \"./context.js\";\nimport {legendRamp} from \"./legends/ramp.js\";\nimport {legendSwatches, legendSymbols} from \"./legends/swatches.js\";\nimport {inherit, isScaleOptions} from \"./options.js\";\nimport {normalizeScale} from \"./scales.js\";\n\nconst legendRegistry = new Map([\n  [\"symbol\", legendSymbols],\n  [\"color\", legendColor],\n  [\"opacity\", legendOpacity]\n]);\n\nexport function legend(options = {}) {\n  for (const [key, value] of legendRegistry) {\n    const scale = options[key];\n    if (isScaleOptions(scale)) {\n      // e.g., ignore {color: \"red\"}\n      const context = createContext(options);\n      let hint;\n      // For symbol legends, pass a hint to the symbol scale.\n      if (key === \"symbol\") {\n        const {fill, stroke = fill === undefined && isScaleOptions(options.color) ? \"color\" : undefined} = options;\n        hint = {fill, stroke};\n      }\n      return value(normalizeScale(key, scale, hint), legendOptions(context, scale, options), (key) =>\n        isScaleOptions(options[key]) ? normalizeScale(key, options[key]) : null\n      );\n    }\n  }\n  throw new Error(\"unknown legend type; no scale found\");\n}\n\nexport function exposeLegends(scales, context, defaults = {}) {\n  return (key, options) => {\n    if (!legendRegistry.has(key)) throw new Error(`unknown legend type: ${key}`);\n    if (!(key in scales)) return;\n    return legendRegistry.get(key)(scales[key], legendOptions(context, defaults[key], options), (key) => scales[key]);\n  };\n}\n\nfunction legendOptions({className, ...context}, {label, ticks, tickFormat} = {}, options) {\n  return inherit(options, {className, ...context}, {label, ticks, tickFormat});\n}\n\nfunction legendColor(color, {legend = true, ...options}) {\n  if (legend === true) legend = color.type === \"ordinal\" ? \"swatches\" : \"ramp\";\n  if (color.domain === undefined) return;\n  switch (`${legend}`.toLowerCase()) {\n    case \"swatches\":\n      return legendSwatches(color, options);\n    case \"ramp\":\n      return legendRamp(color, options);\n    default:\n      throw new Error(`unknown legend type: ${legend}`);\n  }\n}\n\nfunction legendOpacity({type, interpolate, ...scale}, {legend = true, color = rgb(0, 0, 0), ...options}) {\n  if (!interpolate) throw new Error(`${type} opacity scales are not supported`);\n  if (legend === true) legend = \"ramp\";\n  if (`${legend}`.toLowerCase() !== \"ramp\") throw new Error(`${legend} opacity legends are not supported`);\n  return legendColor({type, ...scale, interpolate: interpolateOpacity(color)}, {legend, ...options});\n}\n\nfunction interpolateOpacity(color) {\n  const {r, g, b} = rgb(color) || rgb(0, 0, 0); // treat invalid color as black\n  return (t) => `rgba(${r},${g},${b},${t})`;\n}\n\nexport function createLegends(scales, context, options) {\n  const legends = [];\n  for (const [key, value] of legendRegistry) {\n    const o = options[key];\n    if (o?.legend && key in scales) {\n      const legend = value(scales[key], legendOptions(context, scales[key], o), (key) => scales[key]);\n      if (legend != null) legends.push(legend);\n    }\n  }\n  return legends;\n}\n", "import {create} from \"../context.js\";\nimport {Mark} from \"../mark.js\";\nimport {maybeKeyword, number, singleton} from \"../options.js\";\nimport {applyChannelStyles, applyDirectStyles, applyIndirectStyles, applyTransform} from \"../style.js\";\n\nconst defaults = {\n  ariaLabel: \"frame\",\n  fill: \"none\",\n  stroke: \"currentColor\"\n};\n\nconst lineDefaults = {\n  ariaLabel: \"frame\",\n  fill: null,\n  stroke: \"currentColor\",\n  strokeLinecap: \"square\"\n};\n\nexport class Frame extends Mark {\n  constructor(options = {}) {\n    const {\n      anchor = null,\n      inset = 0,\n      insetTop = inset,\n      insetRight = inset,\n      insetBottom = inset,\n      insetLeft = inset,\n      rx,\n      ry\n    } = options;\n    super(singleton, undefined, options, anchor == null ? defaults : lineDefaults);\n    this.anchor = maybeKeyword(anchor, \"anchor\", [\"top\", \"right\", \"bottom\", \"left\"]);\n    this.insetTop = number(insetTop);\n    this.insetRight = number(insetRight);\n    this.insetBottom = number(insetBottom);\n    this.insetLeft = number(insetLeft);\n    this.rx = number(rx);\n    this.ry = number(ry);\n  }\n  render(index, scales, channels, dimensions, context) {\n    const {marginTop, marginRight, marginBottom, marginLeft, width, height} = dimensions;\n    const {anchor, insetTop, insetRight, insetBottom, insetLeft, rx, ry} = this;\n    const x1 = marginLeft + insetLeft;\n    const x2 = width - marginRight - insetRight;\n    const y1 = marginTop + insetTop;\n    const y2 = height - marginBottom - insetBottom;\n    return create(anchor ? \"svg:line\" : \"svg:rect\", context)\n      .datum(0)\n      .call(applyIndirectStyles, this, dimensions, context)\n      .call(applyDirectStyles, this)\n      .call(applyChannelStyles, this, channels)\n      .call(applyTransform, this, {})\n      .call(\n        anchor === \"left\"\n          ? (line) => line.attr(\"x1\", x1).attr(\"x2\", x1).attr(\"y1\", y1).attr(\"y2\", y2)\n          : anchor === \"right\"\n          ? (line) => line.attr(\"x1\", x2).attr(\"x2\", x2).attr(\"y1\", y1).attr(\"y2\", y2)\n          : anchor === \"top\"\n          ? (line) => line.attr(\"x1\", x1).attr(\"x2\", x2).attr(\"y1\", y1).attr(\"y2\", y1)\n          : anchor === \"bottom\"\n          ? (line) => line.attr(\"x1\", x1).attr(\"x2\", x2).attr(\"y1\", y2).attr(\"y2\", y2)\n          : (rect) =>\n              rect\n                .attr(\"x\", x1)\n                .attr(\"y\", y1)\n                .attr(\"width\", x2 - x1)\n                .attr(\"height\", y2 - y1)\n                .attr(\"rx\", rx)\n                .attr(\"ry\", ry)\n      )\n      .node();\n  }\n}\n\nexport function frame(options) {\n  return new Frame(options);\n}\n", "import {select} from \"d3\";\nimport {getSource} from \"../channel.js\";\nimport {create} from \"../context.js\";\nimport {defined} from \"../defined.js\";\nimport {formatDefault} from \"../format.js\";\nimport {anchorX, anchorY} from \"../interactions/pointer.js\";\nimport {Mark} from \"../mark.js\";\nimport {maybeAnchor, maybeFrameAnchor, maybeTuple, number, string} from \"../options.js\";\nimport {applyDirectStyles, applyFrameAnchor, applyIndirectStyles, applyTransform, impliedString} from \"../style.js\";\nimport {identity, isIterable, isTextual} from \"../options.js\";\nimport {inferTickFormat} from \"./axis.js\";\nimport {applyIndirectTextStyles, defaultWidth, ellipsis, monospaceWidth} from \"./text.js\";\nimport {cut, clipper, splitter, maybeTextOverflow} from \"./text.js\";\n\nconst defaults = {\n  ariaLabel: \"tip\",\n  fill: \"white\",\n  stroke: \"currentColor\"\n};\n\n// These channels are not displayed in the tip; TODO allow customization.\nconst ignoreChannels = new Set([\"geometry\", \"href\", \"src\", \"ariaLabel\"]);\n\nexport class Tip extends Mark {\n  constructor(data, options = {}) {\n    if (options.tip) options = {...options, tip: false};\n    if (options.title === undefined && isIterable(data) && isTextual(data)) options = {...options, title: identity};\n    const {\n      x,\n      y,\n      x1,\n      x2,\n      y1,\n      y2,\n      anchor,\n      monospace,\n      fontFamily = monospace ? \"ui-monospace, monospace\" : undefined,\n      fontSize,\n      fontStyle,\n      fontVariant,\n      fontWeight,\n      lineHeight = 1,\n      lineWidth = 20,\n      frameAnchor,\n      textAnchor = \"start\",\n      textOverflow,\n      textPadding = 8,\n      title,\n      pointerSize = 12,\n      pathFilter = \"drop-shadow(0 3px 4px rgba(0,0,0,0.2))\"\n    } = options;\n    super(\n      data,\n      {\n        x: {value: x1 != null && x2 != null ? null : x, scale: \"x\", optional: true}, // ignore midpoint\n        y: {value: y1 != null && y2 != null ? null : y, scale: \"y\", optional: true}, // ignore midpoint\n        x1: {value: x1, scale: \"x\", optional: x2 == null},\n        y1: {value: y1, scale: \"y\", optional: y2 == null},\n        x2: {value: x2, scale: \"x\", optional: x1 == null},\n        y2: {value: y2, scale: \"y\", optional: y1 == null},\n        title: {value: title, optional: true} // filter: defined\n      },\n      options,\n      defaults\n    );\n    this.anchor = maybeAnchor(anchor, \"anchor\");\n    this.previousAnchor = this.anchor ?? \"top-left\";\n    this.frameAnchor = maybeFrameAnchor(frameAnchor);\n    this.textAnchor = impliedString(textAnchor, \"middle\");\n    this.textPadding = +textPadding;\n    this.pointerSize = +pointerSize;\n    this.pathFilter = string(pathFilter);\n    this.lineHeight = +lineHeight;\n    this.lineWidth = +lineWidth;\n    this.textOverflow = maybeTextOverflow(textOverflow);\n    this.monospace = !!monospace;\n    this.fontFamily = string(fontFamily);\n    this.fontSize = number(fontSize);\n    this.fontStyle = string(fontStyle);\n    this.fontVariant = string(fontVariant);\n    this.fontWeight = string(fontWeight);\n    for (const key in defaults) if (key in this.channels) this[key] = defaults[key]; // apply default even if channel\n    this.splitLines = splitter(this);\n    this.clipLine = clipper(this);\n  }\n  render(index, scales, values, dimensions, context) {\n    const mark = this;\n    const {x, y, fx, fy} = scales;\n    const {ownerSVGElement: svg, document} = context;\n    const {anchor, monospace, lineHeight, lineWidth} = this;\n    const {textPadding: r, pointerSize: m, pathFilter} = this;\n    const {marginTop, marginLeft} = dimensions;\n    const sources = getSources(values);\n\n    // The anchor position is the middle of x1 & y1 and x2 & y2, if available,\n    // or x & y; the former is considered more specific because it\u2019s how we\n    // disable the implicit stack and interval transforms. If any dimension is\n    // unspecified, we fallback to the frame anchor. We also need to know the\n    // facet offsets to detect when the tip would draw outside the plot, and\n    // thus we need to change the orientation.\n    const {x1: X1, y1: Y1, x2: X2, y2: Y2, x: X = X1 ?? X2, y: Y = Y1 ?? Y2} = values;\n    const ox = fx ? fx(index.fx) - marginLeft : 0;\n    const oy = fy ? fy(index.fy) - marginTop : 0;\n\n    // The order of precedence for the anchor position is: the middle of x1 & y1\n    // and x2 & y2; or x1 & y1 (e.g., area); or lastly x & y. If a dimension is\n    // unspecified, the frame anchor is used.\n    const [cx, cy] = applyFrameAnchor(this, dimensions);\n    const px = anchorX(values, cx);\n    const py = anchorY(values, cy);\n\n    // Resolve the text metric implementation. We may need an ellipsis for text\n    // truncation, so we optimistically compute the ellipsis width.\n    const widthof = monospace ? monospaceWidth : defaultWidth;\n    const ee = widthof(ellipsis);\n\n    // We borrow the scale\u2019s tick format for facet channels; this is safe for\n    // ordinal scales (but not continuous scales where the display value may\n    // need higher precision), and generally better than the default format.\n    const formatFx = fx && inferTickFormat(fx);\n    const formatFy = fy && inferTickFormat(fy);\n\n    function* format(sources, i) {\n      if (\"title\" in sources) {\n        const text = sources.title.value[i];\n        for (const line of mark.splitLines(formatDefault(text))) {\n          yield {name: \"\", value: mark.clipLine(line)};\n        }\n        return;\n      }\n      for (const key in sources) {\n        if (key === \"x1\" && \"x2\" in sources) continue;\n        if (key === \"y1\" && \"y2\" in sources) continue;\n        const channel = sources[key];\n        const value = channel.value[i];\n        if (!defined(value) && channel.scale == null) continue;\n        if (key === \"x2\" && \"x1\" in sources) {\n          yield {name: formatLabel(scales, channel, \"x\"), value: formatPair(sources.x1, channel, i)};\n        } else if (key === \"y2\" && \"y1\" in sources) {\n          yield {name: formatLabel(scales, channel, \"y\"), value: formatPair(sources.y1, channel, i)};\n        } else {\n          const scale = channel.scale;\n          const line = {name: formatLabel(scales, channel, key), value: formatDefault(value)};\n          if (scale === \"color\" || scale === \"opacity\") line[scale] = values[key][i];\n          yield line;\n        }\n      }\n      if (index.fi != null && fx) yield {name: String(fx.label ?? \"fx\"), value: formatFx(index.fx)};\n      if (index.fi != null && fy) yield {name: String(fy.label ?? \"fy\"), value: formatFy(index.fy)};\n    }\n\n    // We don\u2019t call applyChannelStyles because we only use the channels to\n    // derive the content of the tip, not its aesthetics.\n    const g = create(\"svg:g\", context)\n      .call(applyIndirectStyles, this, dimensions, context)\n      .call(applyIndirectTextStyles, this)\n      .call(applyTransform, this, {x: X && x, y: Y && y})\n      .call((g) =>\n        g\n          .selectAll()\n          .data(index)\n          .enter()\n          .append(\"g\")\n          .attr(\"transform\", (i) => `translate(${Math.round(px(i))},${Math.round(py(i))})`) // crisp edges\n          .call(applyDirectStyles, this)\n          .call((g) => g.append(\"path\").attr(\"filter\", pathFilter))\n          .call((g) =>\n            g.append(\"text\").each(function (i) {\n              const that = select(this);\n              // prevent style inheritance (from path)\n              this.setAttribute(\"fill\", \"currentColor\");\n              this.setAttribute(\"fill-opacity\", 1);\n              this.setAttribute(\"stroke\", \"none\");\n              // iteratively render each channel value\n              const names = new Set();\n              for (const line of format(sources, i)) {\n                const name = line.name;\n                if (name && names.has(name)) continue;\n                else names.add(name);\n                renderLine(that, line);\n              }\n            })\n          )\n      );\n\n    // Renders a single line (a name-value pair) to the tip, truncating the text\n    // as needed, and adding a title if the text is truncated. Note that this is\n    // just the initial layout of the text; in postrender we will compute the\n    // exact text metrics and translate the text as needed once we know the\n    // tip\u2019s orientation (anchor).\n    function renderLine(selection, {name, value, color, opacity}) {\n      const swatch = color != null || opacity != null;\n      let title;\n      let w = lineWidth * 100;\n      const [j] = cut(name, w, widthof, ee);\n      if (j >= 0) {\n        // name is truncated\n        name = name.slice(0, j).trimEnd() + ellipsis;\n        title = value.trim();\n        value = \"\";\n      } else {\n        if (name || (!value && !swatch)) value = \" \" + value;\n        const [k] = cut(value, w - widthof(name), widthof, ee);\n        if (k >= 0) {\n          // value is truncated\n          value = value.slice(0, k).trimEnd() + ellipsis;\n          title = value.trim();\n        }\n      }\n      const line = selection.append(\"tspan\").attr(\"x\", 0).attr(\"dy\", `${lineHeight}em`).text(\"\\u200b\"); // zwsp for double-click\n      if (name) line.append(\"tspan\").attr(\"font-weight\", \"bold\").text(name);\n      if (value) line.append(() => document.createTextNode(value));\n      if (swatch) line.append(\"tspan\").text(\" \u25A0\").attr(\"fill\", color).attr(\"fill-opacity\", opacity).style(\"user-select\", \"none\"); // prettier-ignore\n      if (title) line.append(\"title\").text(title);\n    }\n\n    // Only after the plot is attached to the page can we compute the exact text\n    // metrics needed to determine the tip size and orientation (anchor).\n    function postrender() {\n      const {width, height} = dimensions.facet ?? dimensions;\n      g.selectChildren().each(function (i) {\n        let {x: tx, width: w, height: h} = this.getBBox();\n        (w = Math.round(w)), (h = Math.round(h)); // crisp edges\n        let a = anchor; // use the specified anchor, if any\n        if (a === undefined) {\n          a = mark.previousAnchor; // favor the previous anchor, if it fits\n          const x = px(i) + ox;\n          const y = py(i) + oy;\n          const fitLeft = x + w + r * 2 < width;\n          const fitRight = x - w - r * 2 > 0;\n          const fitTop = y + h + m + r * 2 + 7 < height;\n          const fitBottom = y - h - m - r * 2 > 0;\n          const ax = (/-left$/.test(a) ? fitLeft || !fitRight : fitLeft && !fitRight) ? \"left\" : \"right\";\n          const ay = (/^top-/.test(a) ? fitTop || !fitBottom : fitTop && !fitBottom) ? \"top\" : \"bottom\";\n          a = mark.previousAnchor = `${ay}-${ax}`;\n        }\n        const path = this.firstChild; // note: assumes exactly two children!\n        const text = this.lastChild; // note: assumes exactly two children!\n        path.setAttribute(\"d\", getPath(a, m, r, w, h));\n        if (tx) for (const t of text.childNodes) t.setAttribute(\"x\", -tx);\n        text.setAttribute(\"y\", `${+getLineOffset(a, text.childNodes.length, lineHeight).toFixed(6)}em`);\n        text.setAttribute(\"transform\", `translate(${getTextTranslate(a, m, r, w, h)})`);\n      });\n    }\n\n    // Wait until the plot is inserted into the page so that we can use getBBox\n    // to compute the exact text dimensions. If the SVG is already connected, as\n    // when the pointer interaction triggers the re-render, use a faster\n    // microtask instead of an animation frame; if this SSR (e.g., JSDOM), skip\n    // this step. Perhaps this could be done synchronously; getting the\n    // dimensions of the SVG is easy, and although accurate text metrics are\n    // hard, we could use approximate heuristics.\n    if (svg.isConnected) Promise.resolve().then(postrender);\n    else if (typeof requestAnimationFrame !== \"undefined\") requestAnimationFrame(postrender);\n\n    return g.node();\n  }\n}\n\nexport function tip(data, {x, y, ...options} = {}) {\n  if (options.frameAnchor === undefined) [x, y] = maybeTuple(x, y);\n  return new Tip(data, {...options, x, y});\n}\n\nfunction getLineOffset(anchor, length, lineHeight) {\n  return /^top(?:-|$)/.test(anchor)\n    ? 0.94 - lineHeight\n    : /^bottom(?:-|$)/\n    ? -0.29 - length * lineHeight\n    : (length / 2) * lineHeight;\n}\n\nfunction getTextTranslate(anchor, m, r, width, height) {\n  switch (anchor) {\n    case \"middle\":\n      return [-width / 2, height / 2];\n    case \"top-left\":\n      return [r, m + r];\n    case \"top\":\n      return [-width / 2, m / 2 + r];\n    case \"top-right\":\n      return [-width - r, m + r];\n    case \"right\":\n      return [-m / 2 - width - r, height / 2];\n    case \"bottom-left\":\n      return [r, -m - r];\n    case \"bottom\":\n      return [-width / 2, -m / 2 - r];\n    case \"bottom-right\":\n      return [-width - r, -m - r];\n    case \"left\":\n      return [r + m / 2, height / 2];\n  }\n}\n\nfunction getPath(anchor, m, r, width, height) {\n  const w = width + r * 2;\n  const h = height + r * 2;\n  switch (anchor) {\n    case \"middle\":\n      return `M${-w / 2},${-h / 2}h${w}v${h}h${-w}z`;\n    case \"top-left\":\n      return `M0,0l${m},${m}h${w - m}v${h}h${-w}z`;\n    case \"top\":\n      return `M0,0l${m / 2},${m / 2}h${(w - m) / 2}v${h}h${-w}v${-h}h${(w - m) / 2}z`;\n    case \"top-right\":\n      return `M0,0l${-m},${m}h${m - w}v${h}h${w}z`;\n    case \"right\":\n      return `M0,0l${-m / 2},${-m / 2}v${m / 2 - h / 2}h${-w}v${h}h${w}v${m / 2 - h / 2}z`;\n    case \"bottom-left\":\n      return `M0,0l${m},${-m}h${w - m}v${-h}h${-w}z`;\n    case \"bottom\":\n      return `M0,0l${m / 2},${-m / 2}h${(w - m) / 2}v${-h}h${-w}v${h}h${(w - m) / 2}z`;\n    case \"bottom-right\":\n      return `M0,0l${-m},${-m}h${m - w}v${-h}h${w}z`;\n    case \"left\":\n      return `M0,0l${m / 2},${-m / 2}v${m / 2 - h / 2}h${w}v${h}h${-w}v${m / 2 - h / 2}z`;\n  }\n}\n\nfunction getSources({channels}) {\n  const sources = {};\n  for (const key in channels) {\n    if (ignoreChannels.has(key)) continue;\n    const source = getSource(channels, key);\n    if (source) sources[key] = source;\n  }\n  return sources;\n}\n\nfunction formatPair(c1, c2, i) {\n  return c2.hint?.length // e.g., stackY\u2019s y1 and y2\n    ? `${formatDefault(c2.value[i] - c1.value[i])}`\n    : `${formatDefault(c1.value[i])}\u2013${formatDefault(c2.value[i])}`;\n}\n\nfunction formatLabel(scales, c, defaultLabel) {\n  return String(scales[c.scale]?.label ?? c?.label ?? defaultLabel);\n}\n", "import {creator, select} from \"d3\";\nimport {createChannel, inferChannelScale} from \"./channel.js\";\nimport {createContext} from \"./context.js\";\nimport {createDimensions} from \"./dimensions.js\";\nimport {createFacets, recreateFacets, facetExclude, facetGroups, facetTranslator, facetFilter} from \"./facet.js\";\nimport {pointer, pointerX, pointerY} from \"./interactions/pointer.js\";\nimport {createLegends, exposeLegends} from \"./legends.js\";\nimport {Mark} from \"./mark.js\";\nimport {axisFx, axisFy, axisX, axisY, gridFx, gridFy, gridX, gridY} from \"./marks/axis.js\";\nimport {frame} from \"./marks/frame.js\";\nimport {tip} from \"./marks/tip.js\";\nimport {isColor, isIterable, isNone, isScaleOptions} from \"./options.js\";\nimport {arrayify, map, yes, maybeIntervalTransform, subarray} from \"./options.js\";\nimport {createProjection, getGeometryChannels, hasProjection} from \"./projection.js\";\nimport {createScales, createScaleFunctions, autoScaleRange, exposeScales} from \"./scales.js\";\nimport {innerDimensions, outerDimensions} from \"./scales.js\";\nimport {position, registry as scaleRegistry} from \"./scales/index.js\";\nimport {applyInlineStyles, maybeClassName} from \"./style.js\";\nimport {initializer} from \"./transforms/basic.js\";\nimport {consumeWarnings, warn} from \"./warnings.js\";\n\nexport function plot(options = {}) {\n  const {facet, style, caption, ariaLabel, ariaDescription} = options;\n\n  // className for inline styles\n  const className = maybeClassName(options.className);\n\n  // Flatten any nested marks.\n  const marks = options.marks === undefined ? [] : flatMarks(options.marks);\n\n  // Add implicit tips.\n  marks.push(...inferTips(marks));\n\n  // Compute the top-level facet state. This has roughly the same structure as\n  // mark-specific facet state, except there isn\u2019t a facetsIndex, and there\u2019s a\n  // data and dataLength so we can warn the user if a different data of the same\n  // length is used in a mark.\n  const topFacetState = maybeTopFacet(facet, options);\n\n  // Construct a map from (faceted) Mark instance to facet state, including:\n  // channels - an {fx?, fy?} object to add to the fx and fy scale\n  // groups - a possibly-nested map from facet values to indexes in the data array\n  // facetsIndex - a sparse nested array of indices corresponding to the valid facets\n  const facetStateByMark = new Map();\n  for (const mark of marks) {\n    const facetState = maybeMarkFacet(mark, topFacetState, options);\n    if (facetState) facetStateByMark.set(mark, facetState);\n  }\n\n  // Compute a Map from scale name to an array of associated channels.\n  const channelsByScale = new Map();\n  if (topFacetState) addScaleChannels(channelsByScale, [topFacetState], options);\n  addScaleChannels(channelsByScale, facetStateByMark, options);\n\n  // Add implicit axis marks. Because this happens after faceting (because it\n  // depends on whether faceting is present), we must initialize the facet state\n  // of any implicit axes, too.\n  const axes = flatMarks(inferAxes(marks, channelsByScale, options));\n  for (const mark of axes) {\n    const facetState = maybeMarkFacet(mark, topFacetState, options);\n    if (facetState) facetStateByMark.set(mark, facetState);\n  }\n  marks.unshift(...axes);\n\n  // All the possible facets are given by the domains of the fx or fy scales, or\n  // the cross-product of these domains if we facet by both x and y. We sort\n  // them in order to apply the facet filters afterwards.\n  let facets = createFacets(channelsByScale, options);\n\n  if (facets !== undefined) {\n    const topFacetsIndex = topFacetState ? facetFilter(facets, topFacetState) : undefined;\n\n    // Compute a facet index for each mark, parallel to the facets array. For\n    // mark-level facets, compute an index for that mark\u2019s data and options.\n    // Otherwise, use the top-level facet index.\n    for (const mark of marks) {\n      if (mark.facet === null || mark.facet === \"super\") continue;\n      const facetState = facetStateByMark.get(mark);\n      if (facetState === undefined) continue;\n      facetState.facetsIndex = mark.fx != null || mark.fy != null ? facetFilter(facets, facetState) : topFacetsIndex;\n    }\n\n    // The cross product of the domains of fx and fy can include fx-fy\n    // combinations for which no mark has an instance associated with that\n    // combination, and therefore we don\u2019t want to render this facet (not even\n    // the frame). The same can occur if you specify the domain of fx and fy\n    // explicitly, but there is no mark instance associated with some values in\n    // the domain. Expunge empty facets, and clear the corresponding elements\n    // from the nested index in each mark.\n    const nonEmpty = new Set();\n    for (const {facetsIndex} of facetStateByMark.values()) {\n      facetsIndex?.forEach((index, i) => {\n        if (index?.length > 0) {\n          nonEmpty.add(i);\n        }\n      });\n    }\n\n    // If all the facets are empty (as when none of the marks are actually\n    // faceted), none of them are empty.\n    facets.forEach(\n      0 < nonEmpty.size && nonEmpty.size < facets.length\n        ? (f, i) => (f.empty = !nonEmpty.has(i))\n        : (f) => (f.empty = false)\n    );\n\n    // For any mark using the \u201Cexclude\u201D facet mode, invert the index.\n    for (const mark of marks) {\n      if (mark.facet === \"exclude\") {\n        const facetState = facetStateByMark.get(mark);\n        if (facetState !== undefined) facetState.facetsIndex = facetExclude(facetState.facetsIndex);\n      }\n    }\n  }\n\n  // If a scale is explicitly declared in options, initialize its associated\n  // channels to the empty array; this will guarantee that a corresponding scale\n  // will be created later (even if there are no other channels). Ignore facet\n  // scale declarations, which are handled above.\n  for (const key of scaleRegistry.keys()) {\n    if (isScaleOptions(options[key]) && key !== \"fx\" && key !== \"fy\") {\n      channelsByScale.set(key, []);\n    }\n  }\n\n  // A Map from Mark instance to its render state, including:\n  // index - the data index e.g. [0, 1, 2, 3, \u2026]\n  // channels - an array of materialized channels e.g. [[\"x\", {value}], \u2026]\n  // faceted - a boolean indicating whether this mark is faceted\n  // values - an object of scaled values e.g. {x: [40, 32, \u2026], \u2026}\n  const stateByMark = new Map();\n\n  // Initialize the marks\u2019 state.\n  for (const mark of marks) {\n    if (stateByMark.has(mark)) throw new Error(\"duplicate mark; each mark must be unique\");\n    const {facetsIndex, channels: facetChannels} = facetStateByMark.get(mark) ?? {};\n    const {data, facets, channels} = mark.initialize(facetsIndex, facetChannels, options);\n    applyScaleTransforms(channels, options);\n    stateByMark.set(mark, {data, facets, channels});\n  }\n\n  // Initalize the scales and dimensions.\n  const scaleDescriptors = createScales(addScaleChannels(channelsByScale, stateByMark, options), options);\n  const scales = createScaleFunctions(scaleDescriptors);\n  const dimensions = createDimensions(scaleDescriptors, marks, options);\n\n  autoScaleRange(scaleDescriptors, dimensions);\n\n  const {fx, fy} = scales;\n  const subdimensions = fx || fy ? innerDimensions(scaleDescriptors, dimensions) : dimensions;\n  const superdimensions = fx || fy ? actualDimensions(scales, dimensions) : dimensions;\n\n  // Initialize the context.\n  const context = createContext(options);\n  const document = context.document;\n  const svg = creator(\"svg\").call(document.documentElement);\n  let figure = svg; // replaced with the figure element, if any\n  context.ownerSVGElement = svg;\n  context.className = className;\n  context.projection = createProjection(options, subdimensions);\n\n  // Allows e.g. the axis mark to determine faceting lazily.\n  context.filterFacets = (data, channels) => {\n    return facetFilter(facets, {channels, groups: facetGroups(data, channels)});\n  };\n\n  // Allows e.g. the tip mark to reference channels and data on other marks.\n  context.getMarkState = (mark) => {\n    const state = stateByMark.get(mark);\n    const facetState = facetStateByMark.get(mark);\n    return {...state, channels: {...state.channels, ...facetState?.channels}};\n  };\n\n  // Allows e.g. the pointer transform to support viewof.\n  context.dispatchValue = (value) => {\n    if (figure.value === value) return;\n    figure.value = value;\n    figure.dispatchEvent(new Event(\"input\", {bubbles: true}));\n  };\n\n  // Reinitialize; for deriving channels dependent on other channels.\n  const newByScale = new Set();\n  for (const [mark, state] of stateByMark) {\n    if (mark.initializer != null) {\n      const dimensions = mark.facet === \"super\" ? superdimensions : subdimensions;\n      const update = mark.initializer(state.data, state.facets, state.channels, scales, dimensions, context);\n      if (update.data !== undefined) {\n        state.data = update.data;\n      }\n      if (update.facets !== undefined) {\n        state.facets = update.facets;\n      }\n      if (update.channels !== undefined) {\n        const {fx, fy, ...channels} = update.channels; // separate facet channels\n        inferChannelScales(channels);\n        Object.assign(state.channels, channels);\n        for (const channel of Object.values(channels)) {\n          const {scale} = channel;\n          // Initializers aren\u2019t allowed to redefine position scales as this\n          // would introduce a circular dependency; so simply scale these\n          // channels as-is rather than creating new scales, and assume that\n          // they already have the scale\u2019s transform applied, if any (e.g., when\n          // generating ticks for the axis mark).\n          if (scale != null && scaleRegistry.get(scale) !== position) {\n            applyScaleTransform(channel, options);\n            newByScale.add(scale);\n          }\n        }\n        // If the initializer returns new mark-level facet channels, we must\n        // record that the mark is now faceted. Note: we aren\u2019t actually\n        // populating the facet state, but subsequently we won\u2019t need it.\n        if (fx != null || fy != null) facetStateByMark.set(mark, true);\n      }\n    }\n  }\n\n  // Reconstruct scales if new scaled channels were created during\n  // reinitialization. Preserve existing scale labels, if any.\n  if (newByScale.size) {\n    const newChannelsByScale = new Map();\n    addScaleChannels(newChannelsByScale, stateByMark, options, (key) => newByScale.has(key));\n    addScaleChannels(channelsByScale, stateByMark, options, (key) => newByScale.has(key));\n    const newScaleDescriptors = inheritScaleLabels(createScales(newChannelsByScale, options), scaleDescriptors);\n    const newScales = createScaleFunctions(newScaleDescriptors);\n    Object.assign(scaleDescriptors, newScaleDescriptors);\n    Object.assign(scales, newScales);\n  }\n\n  // Sort and filter the facets to match the fx and fy domains; this is needed\n  // because the facets were constructed prior to the fx and fy scales.\n  let facetDomains, facetTranslate;\n  if (facets !== undefined) {\n    facetDomains = {x: fx?.domain(), y: fy?.domain()};\n    facets = recreateFacets(facets, facetDomains);\n    facetTranslate = facetTranslator(fx, fy, dimensions);\n  }\n\n  // Compute value objects, applying scales and projection as needed.\n  for (const [mark, state] of stateByMark) {\n    state.values = mark.scale(state.channels, scales, context);\n  }\n\n  const {width, height} = dimensions;\n\n  select(svg)\n    .attr(\"class\", className)\n    .attr(\"fill\", \"currentColor\")\n    .attr(\"font-family\", \"system-ui, sans-serif\")\n    .attr(\"font-size\", 10)\n    .attr(\"text-anchor\", \"middle\")\n    .attr(\"width\", width)\n    .attr(\"height\", height)\n    .attr(\"viewBox\", `0 0 ${width} ${height}`)\n    .attr(\"aria-label\", ariaLabel)\n    .attr(\"aria-description\", ariaDescription)\n    .call((svg) =>\n      // Warning: if you edit this, change defaultClassName.\n      svg.append(\"style\").text(\n        `.${className} {\n  display: block;\n  background: white;\n  height: auto;\n  height: intrinsic;\n  max-width: 100%;\n}\n.${className} text,\n.${className} tspan {\n  white-space: pre;\n}`\n      )\n    )\n    .call(applyInlineStyles, style);\n\n  // Render marks.\n  for (const mark of marks) {\n    const {channels, values, facets: indexes} = stateByMark.get(mark);\n\n    // Render a non-faceted mark.\n    if (facets === undefined || mark.facet === \"super\") {\n      let index = null;\n      if (indexes) {\n        index = indexes[0];\n        index = mark.filter(index, channels, values);\n        if (index.length === 0) continue;\n      }\n      const node = mark.render(index, scales, values, superdimensions, context);\n      if (node == null) continue;\n      svg.appendChild(node);\n    }\n\n    // Render a faceted mark.\n    else {\n      let g;\n      for (const f of facets) {\n        if (!(mark.facetAnchor?.(facets, facetDomains, f) ?? !f.empty)) continue;\n        let index = null;\n        if (indexes) {\n          const faceted = facetStateByMark.has(mark);\n          index = indexes[faceted ? f.i : 0];\n          index = mark.filter(index, channels, values);\n          if (index.length === 0) continue;\n          if (!faceted && index === indexes[0]) index = subarray(index); // copy before assigning fx, fy, fi\n          (index.fx = f.x), (index.fy = f.y), (index.fi = f.i);\n        }\n        const node = mark.render(index, scales, values, subdimensions, context);\n        if (node == null) continue;\n        // Lazily construct the shared group (to drop empty marks).\n        (g ??= select(svg).append(\"g\")).append(() => node).datum(f);\n        // Promote ARIA attributes and mark transform to avoid repetition on\n        // each facet; this assumes that these attributes are consistent across\n        // facets, but that should be the case!\n        for (const name of [\"aria-label\", \"aria-description\", \"aria-hidden\", \"transform\"]) {\n          if (node.hasAttribute(name)) {\n            g.attr(name, node.getAttribute(name));\n            node.removeAttribute(name);\n          }\n        }\n      }\n      g?.selectChildren().attr(\"transform\", facetTranslate);\n    }\n  }\n\n  // Wrap the plot in a figure with a caption, if desired.\n  const legends = createLegends(scaleDescriptors, context, options);\n  if (caption != null || legends.length > 0) {\n    figure = document.createElement(\"figure\");\n    figure.style.maxWidth = \"initial\";\n    for (const legend of legends) figure.appendChild(legend);\n    figure.appendChild(svg);\n    if (caption != null) {\n      const figcaption = document.createElement(\"figcaption\");\n      figcaption.appendChild(caption?.ownerDocument ? caption : document.createTextNode(caption));\n      figure.appendChild(figcaption);\n    }\n  }\n\n  figure.scale = exposeScales(scaleDescriptors);\n  figure.legend = exposeLegends(scaleDescriptors, context, options);\n\n  const w = consumeWarnings();\n  if (w > 0) {\n    select(svg)\n      .append(\"text\")\n      .attr(\"x\", width)\n      .attr(\"y\", 20)\n      .attr(\"dy\", \"-1em\")\n      .attr(\"text-anchor\", \"end\")\n      .attr(\"font-family\", \"initial\") // fix emoji rendering in Chrome\n      .text(\"\\u26a0\\ufe0f\") // emoji variation selector\n      .append(\"title\")\n      .text(`${w.toLocaleString(\"en-US\")} warning${w === 1 ? \"\" : \"s\"}. Please check the console.`);\n  }\n\n  return figure;\n}\n\nfunction plotThis({marks = [], ...options} = {}) {\n  return plot({...options, marks: [...marks, this]});\n}\n\n// Note: This side-effect avoids a circular dependency.\nMark.prototype.plot = plotThis;\n\nfunction flatMarks(marks) {\n  return marks\n    .flat(Infinity)\n    .filter((mark) => mark != null)\n    .map(markify);\n}\n\nfunction markify(mark) {\n  return typeof mark.render === \"function\" ? mark : new Render(mark);\n}\n\nclass Render extends Mark {\n  constructor(render) {\n    if (typeof render !== \"function\") throw new TypeError(\"invalid mark; missing render function\");\n    super();\n    this.render = render;\n  }\n  render() {}\n}\n\n// Note: mutates channel.value to apply the scale transform, if any.\nfunction applyScaleTransforms(channels, options) {\n  for (const name in channels) applyScaleTransform(channels[name], options);\n  return channels;\n}\n\n// Note: mutates channel.value to apply the scale transform, if any. Also sets\n// channel.transform to false to prevent duplicate transform application.\nfunction applyScaleTransform(channel, options) {\n  const {scale, transform: t = true} = channel;\n  if (scale == null || !t) return;\n  const {\n    type,\n    percent,\n    interval,\n    transform = percent ? (x) => x * 100 : maybeIntervalTransform(interval, type)\n  } = options[scale] ?? {};\n  if (transform == null) return;\n  channel.value = map(channel.value, transform);\n  channel.transform = false;\n}\n\n// An initializer may generate channels without knowing how the downstream mark\n// will use them. Marks are typically responsible associated scales with\n// channels, but here we assume common behavior across marks.\nfunction inferChannelScales(channels) {\n  for (const name in channels) {\n    inferChannelScale(name, channels[name]);\n  }\n}\n\nfunction addScaleChannels(channelsByScale, stateByMark, options, filter = yes) {\n  for (const {channels} of stateByMark.values()) {\n    for (const name in channels) {\n      const channel = channels[name];\n      const {scale} = channel;\n      if (scale != null && filter(scale)) {\n        // Geo marks affect the default x and y domains if there is no\n        // projection. Skip this (as an optimization) when a projection is\n        // specified, or when the domains for x and y are specified.\n        if (scale === \"projection\") {\n          if (!hasProjection(options)) {\n            const gx = options.x?.domain === undefined;\n            const gy = options.y?.domain === undefined;\n            if (gx || gy) {\n              const [x, y] = getGeometryChannels(channel);\n              if (gx) addScaleChannel(channelsByScale, \"x\", x);\n              if (gy) addScaleChannel(channelsByScale, \"y\", y);\n            }\n          }\n        } else {\n          addScaleChannel(channelsByScale, scale, channel);\n        }\n      }\n    }\n  }\n  return channelsByScale;\n}\n\nfunction addScaleChannel(channelsByScale, scale, channel) {\n  const scaleChannels = channelsByScale.get(scale);\n  if (scaleChannels !== undefined) scaleChannels.push(channel);\n  else channelsByScale.set(scale, [channel]);\n}\n\n// Returns the facet groups, and possibly fx and fy channels, associated with\n// the top-level facet option {data, x, y}.\nfunction maybeTopFacet(facet, options) {\n  if (facet == null) return;\n  const {x, y} = facet;\n  if (x == null && y == null) return;\n  const data = arrayify(facet.data);\n  if (data == null) throw new Error(\"missing facet data\");\n  const channels = {};\n  if (x != null) channels.fx = createChannel(data, {value: x, scale: \"fx\"});\n  if (y != null) channels.fy = createChannel(data, {value: y, scale: \"fy\"});\n  applyScaleTransforms(channels, options);\n  const groups = facetGroups(data, channels);\n  return {channels, groups, data: facet.data};\n}\n\n// Returns the facet groups, and possibly fx and fy channels, associated with a\n// mark, either through top-level faceting or mark-level facet options {fx, fy}.\nfunction maybeMarkFacet(mark, topFacetState, options) {\n  if (mark.facet === null || mark.facet === \"super\") return;\n\n  // This mark defines a mark-level facet. TODO There\u2019s some code duplication\n  // here with maybeTopFacet that we could reduce.\n  const {fx, fy} = mark;\n  if (fx != null || fy != null) {\n    const data = arrayify(mark.data ?? fx ?? fy);\n    if (data === undefined) throw new Error(`missing facet data in ${mark.ariaLabel}`);\n    if (data === null) return; // ignore channel definitions if no data is provided TODO this right?\n    const channels = {};\n    if (fx != null) channels.fx = createChannel(data, {value: fx, scale: \"fx\"});\n    if (fy != null) channels.fy = createChannel(data, {value: fy, scale: \"fy\"});\n    applyScaleTransforms(channels, options);\n    return {channels, groups: facetGroups(data, channels)};\n  }\n\n  // This mark links to a top-level facet, if present.\n  if (topFacetState === undefined) return;\n\n  // TODO Can we link the top-level facet channels here?\n  const {channels, groups, data} = topFacetState;\n  if (mark.facet !== \"auto\" || mark.data === data) return {channels, groups};\n\n  // Warn for the common pitfall of wanting to facet mapped data with the\n  // top-level facet option.\n  if (\n    data.length > 0 &&\n    (groups.size > 1 || (groups.size === 1 && channels.fx && channels.fy && [...groups][0][1].size > 1)) &&\n    arrayify(mark.data)?.length === data.length\n  ) {\n    warn(\n      `Warning: the ${mark.ariaLabel} mark appears to use faceted data, but isn\u2019t faceted. The mark data has the same length as the facet data and the mark facet option is \"auto\", but the mark data and facet data are distinct. If this mark should be faceted, set the mark facet option to true; otherwise, suppress this warning by setting the mark facet option to false.`\n    );\n  }\n}\n\nfunction derive(mark, options = {}) {\n  return initializer({...options, x: null, y: null}, (data, facets, channels, scales, dimensions, context) => {\n    return context.getMarkState(mark);\n  });\n}\n\nfunction inferTips(marks) {\n  const tips = [];\n  for (const mark of marks) {\n    const t = mark.tip;\n    if (t) {\n      const p = t === \"x\" ? pointerX : t === \"y\" ? pointerY : pointer;\n      const options = p(derive(mark)); // TODO tip options?\n      options.title = null; // prevent implicit title for primitive data\n      tips.push(tip(mark.data, options));\n    }\n  }\n  return tips;\n}\n\nfunction inferAxes(marks, channelsByScale, options) {\n  let {\n    projection,\n    x = {},\n    y = {},\n    fx = {},\n    fy = {},\n    axis,\n    grid,\n    facet = {},\n    facet: {axis: facetAxis = axis, grid: facetGrid} = facet,\n    x: {axis: xAxis = axis, grid: xGrid = xAxis === null ? null : grid} = x,\n    y: {axis: yAxis = axis, grid: yGrid = yAxis === null ? null : grid} = y,\n    fx: {axis: fxAxis = facetAxis, grid: fxGrid = fxAxis === null ? null : facetGrid} = fx,\n    fy: {axis: fyAxis = facetAxis, grid: fyGrid = fyAxis === null ? null : facetGrid} = fy\n  } = options;\n\n  // Disable axes if the corresponding scale is not present.\n  if (projection || (!isScaleOptions(x) && !hasPositionChannel(\"x\", marks))) xAxis = xGrid = null;\n  if (projection || (!isScaleOptions(y) && !hasPositionChannel(\"y\", marks))) yAxis = yGrid = null;\n  if (!channelsByScale.has(\"fx\")) fxAxis = fxGrid = null;\n  if (!channelsByScale.has(\"fy\")) fyAxis = fyGrid = null;\n\n  // Resolve the default implicit axes by checking for explicit ones.\n  if (xAxis === undefined) xAxis = !hasAxis(marks, \"x\");\n  if (yAxis === undefined) yAxis = !hasAxis(marks, \"y\");\n  if (fxAxis === undefined) fxAxis = !hasAxis(marks, \"fx\");\n  if (fyAxis === undefined) fyAxis = !hasAxis(marks, \"fy\");\n\n  // Resolve the default orientation of axes.\n  if (xAxis === true) xAxis = \"bottom\";\n  if (yAxis === true) yAxis = \"left\";\n  if (fxAxis === true) fxAxis = xAxis === \"top\" || xAxis === null ? \"bottom\" : \"top\";\n  if (fyAxis === true) fyAxis = yAxis === \"right\" || yAxis === null ? \"left\" : \"right\";\n\n  const axes = [];\n  maybeGrid(axes, fyGrid, gridFy, fy);\n  maybeAxis(axes, fyAxis, axisFy, \"right\", \"left\", facet, fy);\n  maybeGrid(axes, fxGrid, gridFx, fx);\n  maybeAxis(axes, fxAxis, axisFx, \"top\", \"bottom\", facet, fx);\n  maybeGrid(axes, yGrid, gridY, y);\n  maybeAxis(axes, yAxis, axisY, \"left\", \"right\", options, y);\n  maybeGrid(axes, xGrid, gridX, x);\n  maybeAxis(axes, xAxis, axisX, \"bottom\", \"top\", options, x);\n  return axes;\n}\n\nfunction maybeAxis(axes, axis, axisType, primary, secondary, defaults, options) {\n  if (!axis) return;\n  const both = isBoth(axis);\n  options = axisOptions(both ? primary : axis, defaults, options);\n  const {line} = options;\n  if ((axisType === axisY || axisType === axisX) && line && !isNone(line)) axes.push(frame(lineOptions(options)));\n  axes.push(axisType(options));\n  if (both) axes.push(axisType({...options, anchor: secondary, label: null}));\n}\n\nfunction maybeGrid(axes, grid, gridType, options) {\n  if (!grid || isNone(grid)) return;\n  axes.push(gridType(gridOptions(grid, options)));\n}\n\nfunction isBoth(value) {\n  return /^\\s*both\\s*$/i.test(value);\n}\n\nfunction axisOptions(\n  anchor,\n  defaults,\n  {\n    line = defaults.line,\n    ticks,\n    tickSize,\n    tickSpacing,\n    tickPadding,\n    tickFormat,\n    tickRotate,\n    fontVariant,\n    ariaLabel,\n    ariaDescription,\n    label = defaults.label,\n    labelAnchor,\n    labelArrow = defaults.labelArrow,\n    labelOffset\n  }\n) {\n  return {\n    anchor,\n    line,\n    ticks,\n    tickSize,\n    tickSpacing,\n    tickPadding,\n    tickFormat,\n    tickRotate,\n    fontVariant,\n    ariaLabel,\n    ariaDescription,\n    label,\n    labelAnchor,\n    labelArrow,\n    labelOffset\n  };\n}\n\nfunction lineOptions(options) {\n  const {anchor, line} = options;\n  return {anchor, facetAnchor: anchor + \"-empty\", stroke: line === true ? undefined : line};\n}\n\nfunction gridOptions(\n  grid,\n  {\n    stroke = isColor(grid) ? grid : undefined,\n    ticks = isGridTicks(grid) ? grid : undefined,\n    tickSpacing,\n    ariaLabel,\n    ariaDescription\n  }\n) {\n  return {\n    stroke,\n    ticks,\n    tickSpacing,\n    ariaLabel,\n    ariaDescription\n  };\n}\n\nfunction isGridTicks(grid) {\n  switch (typeof grid) {\n    case \"number\":\n      return true;\n    case \"string\":\n      return !isColor(grid);\n  }\n  return isIterable(grid) || typeof grid?.range === \"function\";\n}\n\n// Is there an explicit axis already present? TODO We probably want a more\n// explicit test than looking for the ARIA label, but it does afford some\n// flexibility in axis implementation which is nice.\nfunction hasAxis(marks, k) {\n  const prefix = `${k}-axis `;\n  return marks.some((m) => m.ariaLabel?.startsWith(prefix));\n}\n\nfunction hasPositionChannel(k, marks) {\n  for (const mark of marks) {\n    for (const key in mark.channels) {\n      const {scale} = mark.channels[key];\n      if (scale === k || scale === \"projection\") {\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\nfunction inheritScaleLabels(newScales, scales) {\n  for (const key in newScales) {\n    const newScale = newScales[key];\n    const scale = scales[key];\n    if (newScale.label === undefined && scale) {\n      newScale.label = scale.label;\n    }\n  }\n  return newScales;\n}\n\n// This differs from the other outerDimensions in that it accounts for rounding\n// and outer padding in the fact scales; we want the frame to align exactly with\n// the actual range, not the desired range.\nfunction actualDimensions({fx, fy}, dimensions) {\n  const {marginTop, marginRight, marginBottom, marginLeft, width, height} = outerDimensions(dimensions);\n  const fxr = fx && outerRange(fx);\n  const fyr = fy && outerRange(fy);\n  return {\n    marginTop: fy ? fyr[0] : marginTop,\n    marginRight: fx ? width - fxr[1] : marginRight,\n    marginBottom: fy ? height - fyr[1] : marginBottom,\n    marginLeft: fx ? fxr[0] : marginLeft,\n    // Some marks, namely the x- and y-axis labels, want to know what the\n    // desired (rather than actual) margins are for positioning.\n    inset: {\n      marginTop: dimensions.marginTop,\n      marginRight: dimensions.marginRight,\n      marginBottom: dimensions.marginBottom,\n      marginLeft: dimensions.marginLeft\n    },\n    width,\n    height\n  };\n}\n\nfunction outerRange(scale) {\n  const domain = scale.domain();\n  let x1 = scale(domain[0]);\n  let x2 = scale(domain[domain.length - 1]);\n  if (x2 < x1) [x1, x2] = [x2, x1];\n  return [x1, x2 + scale.bandwidth()];\n}\n", "import {\n  bisect,\n  extent,\n  thresholdFreedmanDiaconis,\n  thresholdScott,\n  thresholdSturges,\n  tickIncrement,\n  ticks,\n  utcTickInterval\n} from \"d3\";\nimport {withTip} from \"../mark.js\";\nimport {\n  coerceDate,\n  coerceNumbers,\n  identity,\n  isIterable,\n  isTemporal,\n  labelof,\n  map,\n  maybeApplyInterval,\n  maybeColorChannel,\n  maybeColumn,\n  maybeRangeInterval,\n  maybeTuple,\n  maybeValue,\n  mid,\n  valueof\n} from \"../options.js\";\nimport {maybeUtcInterval} from \"../time.js\";\nimport {basic} from \"./basic.js\";\nimport {\n  hasOutput,\n  maybeEvaluator,\n  maybeGroup,\n  maybeOutput,\n  maybeOutputs,\n  maybeReduce,\n  maybeSort,\n  maybeSubgroup,\n  reduceCount,\n  reduceFirst,\n  reduceIdentity\n} from \"./group.js\";\nimport {maybeInsetX, maybeInsetY} from \"./inset.js\";\n\n// Group on {z, fill, stroke}, then optionally on y, then bin x.\nexport function binX(outputs = {y: \"count\"}, options = {}) {\n  [outputs, options] = mergeOptions(outputs, options);\n  const {x, y} = options;\n  return binn(maybeBinValue(x, options, identity), null, null, y, outputs, maybeInsetX(options));\n}\n\n// Group on {z, fill, stroke}, then optionally on x, then bin y.\nexport function binY(outputs = {x: \"count\"}, options = {}) {\n  [outputs, options] = mergeOptions(outputs, options);\n  const {x, y} = options;\n  return binn(null, maybeBinValue(y, options, identity), x, null, outputs, maybeInsetY(options));\n}\n\n// Group on {z, fill, stroke}, then bin on x and y.\nexport function bin(outputs = {fill: \"count\"}, options = {}) {\n  [outputs, options] = mergeOptions(outputs, options);\n  const {x, y} = maybeBinValueTuple(options);\n  return binn(x, y, null, null, outputs, maybeInsetX(maybeInsetY(options)));\n}\n\nfunction maybeDenseInterval(bin, k, options = {}) {\n  return options?.interval == null\n    ? options\n    : bin({[k]: options?.reduce === undefined ? reduceFirst : options.reduce, filter: null}, options);\n}\n\nexport function maybeDenseIntervalX(options = {}) {\n  return maybeDenseInterval(binX, \"y\", withTip(options, \"x\"));\n}\n\nexport function maybeDenseIntervalY(options = {}) {\n  return maybeDenseInterval(binY, \"x\", withTip(options, \"y\"));\n}\n\nfunction binn(\n  bx, // optionally bin on x (exclusive with gx)\n  by, // optionally bin on y (exclusive with gy)\n  gx, // optionally group on x (exclusive with bx and gy)\n  gy, // optionally group on y (exclusive with by and gx)\n  {\n    data: reduceData = reduceIdentity, // TODO avoid materializing when unused?\n    filter = reduceCount, // return only non-empty bins by default\n    sort,\n    reverse,\n    ...outputs // output channel definitions\n  } = {},\n  inputs = {} // input channels and options\n) {\n  bx = maybeBin(bx);\n  by = maybeBin(by);\n\n  // Compute the outputs.\n  outputs = maybeBinOutputs(outputs, inputs);\n  reduceData = maybeBinReduce(reduceData, identity);\n  sort = sort == null ? undefined : maybeBinOutput(\"sort\", sort, inputs);\n  filter = filter == null ? undefined : maybeBinEvaluator(\"filter\", filter, inputs);\n\n  // Don\u2019t group on a channel if an output requires it as an input!\n  if (gx != null && hasOutput(outputs, \"x\", \"x1\", \"x2\")) gx = null;\n  if (gy != null && hasOutput(outputs, \"y\", \"y1\", \"y2\")) gy = null;\n\n  // Produce x1, x2, y1, and y2 output channels as appropriate (when binning).\n  const [BX1, setBX1] = maybeColumn(bx);\n  const [BX2, setBX2] = maybeColumn(bx);\n  const [BY1, setBY1] = maybeColumn(by);\n  const [BY2, setBY2] = maybeColumn(by);\n\n  // Produce x or y output channels as appropriate (when grouping).\n  const [k, gk] = gx != null ? [gx, \"x\"] : gy != null ? [gy, \"y\"] : [];\n  const [GK, setGK] = maybeColumn(k);\n\n  // Greedily materialize the z, fill, and stroke channels (if channels and not\n  // constants) so that we can reference them for subdividing groups without\n  // computing them more than once. We also want to consume options that should\n  // only apply to this transform rather than passing them through to the next.\n  const {\n    x,\n    y,\n    z,\n    fill,\n    stroke,\n    x1,\n    x2, // consumed if x is an output\n    y1,\n    y2, // consumed if y is an output\n    domain,\n    cumulative,\n    thresholds,\n    interval,\n    ...options\n  } = inputs;\n  const [GZ, setGZ] = maybeColumn(z);\n  const [vfill] = maybeColorChannel(fill);\n  const [vstroke] = maybeColorChannel(stroke);\n  const [GF, setGF] = maybeColumn(vfill);\n  const [GS, setGS] = maybeColumn(vstroke);\n\n  return {\n    ...(\"z\" in inputs && {z: GZ || z}),\n    ...(\"fill\" in inputs && {fill: GF || fill}),\n    ...(\"stroke\" in inputs && {stroke: GS || stroke}),\n    ...basic(options, (data, facets, plotOptions) => {\n      const K = maybeApplyInterval(valueof(data, k), plotOptions?.[gk]);\n      const Z = valueof(data, z);\n      const F = valueof(data, vfill);\n      const S = valueof(data, vstroke);\n      const G = maybeSubgroup(outputs, {z: Z, fill: F, stroke: S});\n      const groupFacets = [];\n      const groupData = [];\n      const GK = K && setGK([]);\n      const GZ = Z && setGZ([]);\n      const GF = F && setGF([]);\n      const GS = S && setGS([]);\n      const BX1 = bx && setBX1([]);\n      const BX2 = bx && setBX2([]);\n      const BY1 = by && setBY1([]);\n      const BY2 = by && setBY2([]);\n      const bin = bing(bx?.(data), by?.(data));\n      let i = 0;\n      for (const o of outputs) o.initialize(data);\n      if (sort) sort.initialize(data);\n      if (filter) filter.initialize(data);\n      for (const facet of facets) {\n        const groupFacet = [];\n        for (const o of outputs) o.scope(\"facet\", facet);\n        if (sort) sort.scope(\"facet\", facet);\n        if (filter) filter.scope(\"facet\", facet);\n        for (const [f, I] of maybeGroup(facet, G)) {\n          for (const [k, g] of maybeGroup(I, K)) {\n            for (const [b, extent] of bin(g)) {\n              if (filter && !filter.reduce(b, extent)) continue;\n              groupFacet.push(i++);\n              groupData.push(reduceData.reduceIndex(b, data, extent));\n              if (K) GK.push(k);\n              if (Z) GZ.push(G === Z ? f : Z[b[0]]);\n              if (F) GF.push(G === F ? f : F[b[0]]);\n              if (S) GS.push(G === S ? f : S[b[0]]);\n              if (BX1) BX1.push(extent.x1), BX2.push(extent.x2);\n              if (BY1) BY1.push(extent.y1), BY2.push(extent.y2);\n              for (const o of outputs) o.reduce(b, extent);\n              if (sort) sort.reduce(b);\n            }\n          }\n        }\n        groupFacets.push(groupFacet);\n      }\n      maybeSort(groupFacets, sort, reverse);\n      return {data: groupData, facets: groupFacets};\n    }),\n    ...(!hasOutput(outputs, \"x\") && (BX1 ? {x1: BX1, x2: BX2, x: mid(BX1, BX2)} : {x, x1, x2})),\n    ...(!hasOutput(outputs, \"y\") && (BY1 ? {y1: BY1, y2: BY2, y: mid(BY1, BY2)} : {y, y1, y2})),\n    ...(GK && {[gk]: GK}),\n    ...Object.fromEntries(outputs.map(({name, output}) => [name, output]))\n  };\n}\n\n// Allow bin options to be specified as part of outputs; merge them into options.\nfunction mergeOptions({cumulative, domain, thresholds, interval, ...outputs}, options) {\n  return [outputs, {cumulative, domain, thresholds, interval, ...options}];\n}\n\nfunction maybeBinValue(value, {cumulative, domain, thresholds, interval}, defaultValue) {\n  value = {...maybeValue(value)};\n  if (value.domain === undefined) value.domain = domain;\n  if (value.cumulative === undefined) value.cumulative = cumulative;\n  if (value.thresholds === undefined) value.thresholds = thresholds;\n  if (value.interval === undefined) value.interval = interval;\n  if (value.value === undefined) value.value = defaultValue;\n  value.thresholds = maybeThresholds(value.thresholds, value.interval);\n  return value;\n}\n\nfunction maybeBinValueTuple(options) {\n  let {x, y} = options;\n  x = maybeBinValue(x, options);\n  y = maybeBinValue(y, options);\n  [x.value, y.value] = maybeTuple(x.value, y.value);\n  return {x, y};\n}\n\nfunction maybeBin(options) {\n  if (options == null) return;\n  const {value, cumulative, domain = extent, thresholds} = options;\n  const bin = (data) => {\n    let V = valueof(data, value);\n    let T; // bin thresholds\n    if (isTemporal(V) || isTimeThresholds(thresholds)) {\n      V = map(V, coerceDate, Float64Array); // like coerceDates, but faster\n      let [min, max] = typeof domain === \"function\" ? domain(V) : domain;\n      let t = typeof thresholds === \"function\" && !isInterval(thresholds) ? thresholds(V, min, max) : thresholds;\n      if (typeof t === \"number\") t = utcTickInterval(min, max, t);\n      if (isInterval(t)) {\n        if (domain === extent) {\n          min = t.floor(min);\n          max = t.offset(t.floor(max));\n        }\n        t = t.range(min, t.offset(max));\n      }\n      T = t;\n    } else {\n      V = coerceNumbers(V);\n      let [min, max] = typeof domain === \"function\" ? domain(V) : domain;\n      let t = typeof thresholds === \"function\" && !isInterval(thresholds) ? thresholds(V, min, max) : thresholds;\n      if (typeof t === \"number\") {\n        // This differs from d3.ticks with regard to exclusive bounds: we want a\n        // first threshold less than or equal to the minimum, and a last\n        // threshold (strictly) greater than the maximum.\n        if (domain === extent) {\n          let step = tickIncrement(min, max, t);\n          if (isFinite(step)) {\n            if (step > 0) {\n              let r0 = Math.round(min / step);\n              let r1 = Math.round(max / step);\n              if (!(r0 * step <= min)) --r0;\n              if (!(r1 * step > max)) ++r1;\n              let n = r1 - r0 + 1;\n              t = new Float64Array(n);\n              for (let i = 0; i < n; ++i) t[i] = (r0 + i) * step;\n            } else if (step < 0) {\n              step = -step;\n              let r0 = Math.round(min * step);\n              let r1 = Math.round(max * step);\n              if (!(r0 / step <= min)) --r0;\n              if (!(r1 / step > max)) ++r1;\n              let n = r1 - r0 + 1;\n              t = new Float64Array(n);\n              for (let i = 0; i < n; ++i) t[i] = (r0 + i) / step;\n            } else {\n              t = [min];\n            }\n          } else {\n            t = [min];\n          }\n        } else {\n          t = ticks(min, max, t);\n        }\n      } else if (isInterval(t)) {\n        if (domain === extent) {\n          min = t.floor(min);\n          max = t.offset(t.floor(max));\n        }\n        t = t.range(min, t.offset(max));\n      }\n      T = t;\n    }\n    const E = [];\n    if (T.length === 1) E.push([T[0], T[0]]); // collapsed domain\n    else for (let i = 1; i < T.length; ++i) E.push([T[i - 1], T[i]]);\n    E.bin = (cumulative < 0 ? bin1cn : cumulative > 0 ? bin1cp : bin1)(E, T, V);\n    return E;\n  };\n  bin.label = labelof(value);\n  return bin;\n}\n\nexport function maybeThresholds(thresholds, interval, defaultThresholds = thresholdAuto) {\n  if (thresholds === undefined) {\n    return interval === undefined ? defaultThresholds : maybeRangeInterval(interval);\n  }\n  if (typeof thresholds === \"string\") {\n    switch (thresholds.toLowerCase()) {\n      case \"freedman-diaconis\":\n        return thresholdFreedmanDiaconis;\n      case \"scott\":\n        return thresholdScott;\n      case \"sturges\":\n        return thresholdSturges;\n      case \"auto\":\n        return thresholdAuto;\n    }\n    return maybeUtcInterval(thresholds);\n  }\n  return thresholds; // pass array, count, or function to bin.thresholds\n}\n\nfunction maybeBinOutputs(outputs, inputs) {\n  return maybeOutputs(outputs, inputs, maybeBinOutput);\n}\n\nfunction maybeBinOutput(name, reduce, inputs) {\n  return maybeOutput(name, reduce, inputs, maybeBinEvaluator);\n}\n\nfunction maybeBinEvaluator(name, reduce, inputs) {\n  return maybeEvaluator(name, reduce, inputs, maybeBinReduce);\n}\n\nfunction maybeBinReduce(reduce, value) {\n  return maybeReduce(reduce, value, maybeBinReduceFallback);\n}\n\nfunction maybeBinReduceFallback(reduce) {\n  switch (`${reduce}`.toLowerCase()) {\n    case \"x\":\n      return reduceX;\n    case \"x1\":\n      return reduceX1;\n    case \"x2\":\n      return reduceX2;\n    case \"y\":\n      return reduceY;\n    case \"y1\":\n      return reduceY1;\n    case \"y2\":\n      return reduceY2;\n  }\n  throw new Error(`invalid bin reduce: ${reduce}`);\n}\n\nfunction thresholdAuto(values, min, max) {\n  return Math.min(200, thresholdScott(values, min, max));\n}\n\nfunction isTimeThresholds(t) {\n  return isTimeInterval(t) || (isIterable(t) && isTemporal(t));\n}\n\nfunction isTimeInterval(t) {\n  return isInterval(t) && typeof t === \"function\" && t() instanceof Date;\n}\n\nfunction isInterval(t) {\n  return typeof t?.range === \"function\";\n}\n\nfunction bing(EX, EY) {\n  return EX && EY\n    ? function* (I) {\n        const X = EX.bin(I); // first bin on x\n        for (const [ix, [x1, x2]] of EX.entries()) {\n          const Y = EY.bin(X[ix]); // then bin on y\n          for (const [iy, [y1, y2]] of EY.entries()) {\n            yield [Y[iy], {x1, y1, x2, y2}];\n          }\n        }\n      }\n    : EX\n    ? function* (I) {\n        const X = EX.bin(I);\n        for (const [i, [x1, x2]] of EX.entries()) {\n          yield [X[i], {x1, x2}];\n        }\n      }\n    : function* (I) {\n        const Y = EY.bin(I);\n        for (const [i, [y1, y2]] of EY.entries()) {\n          yield [Y[i], {y1, y2}];\n        }\n      };\n}\n\n// non-cumulative distribution\nfunction bin1(E, T, V) {\n  T = coerceNumbers(T); // for faster bisection\n  return (I) => {\n    const B = E.map(() => []);\n    for (const i of I) B[bisect(T, V[i]) - 1]?.push(i); // TODO quantization?\n    return B;\n  };\n}\n\n// cumulative distribution\nfunction bin1cp(E, T, V) {\n  const bin = bin1(E, T, V);\n  return (I) => {\n    const B = bin(I);\n    for (let i = 1, n = B.length; i < n; ++i) {\n      const C = B[i - 1];\n      const b = B[i];\n      for (const j of C) b.push(j);\n    }\n    return B;\n  };\n}\n\n// complementary cumulative distribution\nfunction bin1cn(E, T, V) {\n  const bin = bin1(E, T, V);\n  return (I) => {\n    const B = bin(I);\n    for (let i = B.length - 2; i >= 0; --i) {\n      const C = B[i + 1];\n      const b = B[i];\n      for (const j of C) b.push(j);\n    }\n    return B;\n  };\n}\n\nfunction mid1(x1, x2) {\n  const m = (+x1 + +x2) / 2;\n  return x1 instanceof Date ? new Date(m) : m;\n}\n\nconst reduceX = {\n  reduceIndex(I, X, {x1, x2}) {\n    return mid1(x1, x2);\n  }\n};\n\nconst reduceY = {\n  reduceIndex(I, X, {y1, y2}) {\n    return mid1(y1, y2);\n  }\n};\n\nconst reduceX1 = {\n  reduceIndex(I, X, {x1}) {\n    return x1;\n  }\n};\n\nconst reduceX2 = {\n  reduceIndex(I, X, {x2}) {\n    return x2;\n  }\n};\n\nconst reduceY1 = {\n  reduceIndex(I, X, {y1}) {\n    return y1;\n  }\n};\n\nconst reduceY2 = {\n  reduceIndex(I, X, {y2}) {\n    return y2;\n  }\n};\n", "import {hasX, hasY, identity} from \"../options.js\";\n\nexport function maybeIdentityX(options = {}) {\n  return hasX(options) ? options : {...options, x: identity};\n}\n\nexport function maybeIdentityY(options = {}) {\n  return hasY(options) ? options : {...options, y: identity};\n}\n", "import {InternMap, cumsum, greatest, group, groupSort, max, min, rollup, sum} from \"d3\";\nimport {ascendingDefined, descendingDefined} from \"../defined.js\";\nimport {withTip} from \"../mark.js\";\nimport {maybeApplyInterval, maybeColumn, maybeZ, maybeZero} from \"../options.js\";\nimport {column, field, mid, one, range, valueof} from \"../options.js\";\nimport {basic} from \"./basic.js\";\n\nexport function stackX(stackOptions = {}, options = {}) {\n  if (arguments.length === 1) [stackOptions, options] = mergeOptions(stackOptions);\n  const {y1, y = y1, x, ...rest} = options; // note: consumes x!\n  const [transform, Y, x1, x2] = stack(y, x, \"y\", \"x\", stackOptions, rest);\n  return {...transform, y1, y: Y, x1, x2, x: mid(x1, x2)};\n}\n\nexport function stackX1(stackOptions = {}, options = {}) {\n  if (arguments.length === 1) [stackOptions, options] = mergeOptions(stackOptions);\n  const {y1, y = y1, x} = options;\n  const [transform, Y, X] = stack(y, x, \"y\", \"x\", stackOptions, options);\n  return {...transform, y1, y: Y, x: X};\n}\n\nexport function stackX2(stackOptions = {}, options = {}) {\n  if (arguments.length === 1) [stackOptions, options] = mergeOptions(stackOptions);\n  const {y1, y = y1, x} = options;\n  const [transform, Y, , X] = stack(y, x, \"y\", \"x\", stackOptions, options);\n  return {...transform, y1, y: Y, x: X};\n}\n\nexport function stackY(stackOptions = {}, options = {}) {\n  if (arguments.length === 1) [stackOptions, options] = mergeOptions(stackOptions);\n  const {x1, x = x1, y, ...rest} = options; // note: consumes y!\n  const [transform, X, y1, y2] = stack(x, y, \"x\", \"y\", stackOptions, rest);\n  return {...transform, x1, x: X, y1, y2, y: mid(y1, y2)};\n}\n\nexport function stackY1(stackOptions = {}, options = {}) {\n  if (arguments.length === 1) [stackOptions, options] = mergeOptions(stackOptions);\n  const {x1, x = x1, y} = options;\n  const [transform, X, Y] = stack(x, y, \"x\", \"y\", stackOptions, options);\n  return {...transform, x1, x: X, y: Y};\n}\n\nexport function stackY2(stackOptions = {}, options = {}) {\n  if (arguments.length === 1) [stackOptions, options] = mergeOptions(stackOptions);\n  const {x1, x = x1, y} = options;\n  const [transform, X, , Y] = stack(x, y, \"x\", \"y\", stackOptions, options);\n  return {...transform, x1, x: X, y: Y};\n}\n\nexport function maybeStackX({x, x1, x2, ...options} = {}) {\n  options = withTip(options, \"y\");\n  if (x1 === undefined && x2 === undefined) return stackX({x, ...options});\n  [x1, x2] = maybeZero(x, x1, x2);\n  return {...options, x1, x2};\n}\n\nexport function maybeStackY({y, y1, y2, ...options} = {}) {\n  options = withTip(options, \"x\");\n  if (y1 === undefined && y2 === undefined) return stackY({y, ...options});\n  [y1, y2] = maybeZero(y, y1, y2);\n  return {...options, y1, y2};\n}\n\n// The reverse option is ambiguous: it is both a stack option and a basic\n// transform. If only one options object is specified, we interpret it as a\n// stack option, and therefore must remove it from the propagated options.\nfunction mergeOptions(options) {\n  const {offset, order, reverse, ...rest} = options;\n  return [{offset, order, reverse}, rest];\n}\n\n// This is a hint to the tooltip mark that the y1 and y2 channels (for stackY,\n// or conversely x1 and x2 for stackX) represent a stacked length, and that the\n// tooltip should therefore show y2-y1 instead of an extent.\nconst lengthy = {length: true};\n\nfunction stack(x, y = one, kx, ky, {offset, order, reverse}, options) {\n  const z = maybeZ(options);\n  const [X, setX] = maybeColumn(x);\n  const [Y1, setY1] = column(y);\n  const [Y2, setY2] = column(y);\n  Y1.hint = Y2.hint = lengthy;\n  offset = maybeOffset(offset);\n  order = maybeOrder(order, offset, ky);\n  return [\n    basic(options, (data, facets, plotOptions) => {\n      const X = x == null ? undefined : setX(maybeApplyInterval(valueof(data, x), plotOptions?.[kx]));\n      const Y = valueof(data, y, Float64Array);\n      const Z = valueof(data, z);\n      const compare = order && order(data, X, Y, Z);\n      const n = data.length;\n      const Y1 = setY1(new Float64Array(n));\n      const Y2 = setY2(new Float64Array(n));\n      const facetstacks = [];\n      for (const facet of facets) {\n        const stacks = X ? Array.from(group(facet, (i) => X[i]).values()) : [facet];\n        if (compare) for (const stack of stacks) stack.sort(compare);\n        for (const stack of stacks) {\n          let yn = 0;\n          let yp = 0;\n          if (reverse) stack.reverse();\n          for (const i of stack) {\n            const y = Y[i];\n            if (y < 0) yn = Y2[i] = (Y1[i] = yn) + y;\n            else if (y > 0) yp = Y2[i] = (Y1[i] = yp) + y;\n            else Y2[i] = Y1[i] = yp; // NaN or zero\n          }\n        }\n        facetstacks.push(stacks);\n      }\n      if (offset) offset(facetstacks, Y1, Y2, Z);\n      return {data, facets};\n    }),\n    X,\n    Y1,\n    Y2\n  ];\n}\n\nfunction maybeOffset(offset) {\n  if (offset == null) return;\n  if (typeof offset === \"function\") return offset;\n  switch (`${offset}`.toLowerCase()) {\n    case \"expand\":\n    case \"normalize\":\n      return offsetExpand;\n    case \"center\":\n    case \"silhouette\":\n      return offsetCenter;\n    case \"wiggle\":\n      return offsetWiggle;\n  }\n  throw new Error(`unknown offset: ${offset}`);\n}\n\n// Given a single stack, returns the minimum and maximum values from the given\n// Y2 column. Note that this relies on Y2 always being the outer column for\n// diverging values.\nfunction extent(stack, Y2) {\n  let min = 0,\n    max = 0;\n  for (const i of stack) {\n    const y = Y2[i];\n    if (y < min) min = y;\n    if (y > max) max = y;\n  }\n  return [min, max];\n}\n\nfunction offsetExpand(facetstacks, Y1, Y2) {\n  for (const stacks of facetstacks) {\n    for (const stack of stacks) {\n      const [yn, yp] = extent(stack, Y2);\n      for (const i of stack) {\n        const m = 1 / (yp - yn || 1);\n        Y1[i] = m * (Y1[i] - yn);\n        Y2[i] = m * (Y2[i] - yn);\n      }\n    }\n  }\n}\n\nfunction offsetCenter(facetstacks, Y1, Y2) {\n  for (const stacks of facetstacks) {\n    for (const stack of stacks) {\n      const [yn, yp] = extent(stack, Y2);\n      for (const i of stack) {\n        const m = (yp + yn) / 2;\n        Y1[i] -= m;\n        Y2[i] -= m;\n      }\n    }\n    offsetZero(stacks, Y1, Y2);\n  }\n  offsetCenterFacets(facetstacks, Y1, Y2);\n}\n\nfunction offsetWiggle(facetstacks, Y1, Y2, Z) {\n  for (const stacks of facetstacks) {\n    const prev = new InternMap();\n    let y = 0;\n    for (const stack of stacks) {\n      let j = -1;\n      const Fi = stack.map((i) => Math.abs(Y2[i] - Y1[i]));\n      const Df = stack.map((i) => {\n        j = Z ? Z[i] : ++j;\n        const value = Y2[i] - Y1[i];\n        const diff = prev.has(j) ? value - prev.get(j) : 0;\n        prev.set(j, value);\n        return diff;\n      });\n      const Cf1 = [0, ...cumsum(Df)];\n      for (const i of stack) {\n        Y1[i] += y;\n        Y2[i] += y;\n      }\n      const s1 = sum(Fi);\n      if (s1) y -= sum(Fi, (d, i) => (Df[i] / 2 + Cf1[i]) * d) / s1;\n    }\n    offsetZero(stacks, Y1, Y2);\n  }\n  offsetCenterFacets(facetstacks, Y1, Y2);\n}\n\nfunction offsetZero(stacks, Y1, Y2) {\n  const m = min(stacks, (stack) => min(stack, (i) => Y1[i]));\n  for (const stack of stacks) {\n    for (const i of stack) {\n      Y1[i] -= m;\n      Y2[i] -= m;\n    }\n  }\n}\n\nfunction offsetCenterFacets(facetstacks, Y1, Y2) {\n  const n = facetstacks.length;\n  if (n === 1) return;\n  const facets = facetstacks.map((stacks) => stacks.flat());\n  const m = facets.map((I) => (min(I, (i) => Y1[i]) + max(I, (i) => Y2[i])) / 2);\n  const m0 = min(m);\n  for (let j = 0; j < n; j++) {\n    const p = m0 - m[j];\n    for (const i of facets[j]) {\n      Y1[i] += p;\n      Y2[i] += p;\n    }\n  }\n}\n\nfunction maybeOrder(order, offset, ky) {\n  if (order === undefined && offset === offsetWiggle) return orderInsideOut(ascendingDefined);\n  if (order == null) return;\n  if (typeof order === \"string\") {\n    const negate = order.startsWith(\"-\");\n    const compare = negate ? descendingDefined : ascendingDefined;\n    switch ((negate ? order.slice(1) : order).toLowerCase()) {\n      case \"value\":\n      case ky:\n        return orderY(compare);\n      case \"z\":\n        return orderZ(compare);\n      case \"sum\":\n        return orderSum(compare);\n      case \"appearance\":\n        return orderAppearance(compare);\n      case \"inside-out\":\n        return orderInsideOut(compare);\n    }\n    return orderAccessor(field(order));\n  }\n  if (typeof order === \"function\") return (order.length === 1 ? orderAccessor : orderComparator)(order);\n  if (Array.isArray(order)) return orderGiven(order);\n  throw new Error(`invalid order: ${order}`);\n}\n\n// by value\nfunction orderY(compare) {\n  return (data, X, Y) => (i, j) => compare(Y[i], Y[j]);\n}\n\n// by location\nfunction orderZ(compare) {\n  return (data, X, Y, Z) => (i, j) => compare(Z[i], Z[j]);\n}\n\n// by sum of value (a.k.a. \u201Cascending\u201D)\nfunction orderSum(compare) {\n  return orderZDomain(compare, (data, X, Y, Z) =>\n    groupSort(\n      range(data),\n      (I) => sum(I, (i) => Y[i]),\n      (i) => Z[i]\n    )\n  );\n}\n\n// by x = argmax of value\nfunction orderAppearance(compare) {\n  return orderZDomain(compare, (data, X, Y, Z) =>\n    groupSort(\n      range(data),\n      (I) => X[greatest(I, (i) => Y[i])],\n      (i) => Z[i]\n    )\n  );\n}\n\n// by x = argmax of value, but rearranged inside-out by alternating series\n// according to the sign of a running divergence of sums\nfunction orderInsideOut(compare) {\n  return orderZDomain(compare, (data, X, Y, Z) => {\n    const I = range(data);\n    const K = groupSort(\n      I,\n      (I) => X[greatest(I, (i) => Y[i])],\n      (i) => Z[i]\n    );\n    const sums = rollup(\n      I,\n      (I) => sum(I, (i) => Y[i]),\n      (i) => Z[i]\n    );\n    const Kp = [],\n      Kn = [];\n    let s = 0;\n    for (const k of K) {\n      if (s < 0) {\n        s += sums.get(k);\n        Kp.push(k);\n      } else {\n        s -= sums.get(k);\n        Kn.push(k);\n      }\n    }\n    return Kn.reverse().concat(Kp);\n  });\n}\n\nfunction orderAccessor(f) {\n  return (data) => {\n    const O = valueof(data, f);\n    return (i, j) => ascendingDefined(O[i], O[j]);\n  };\n}\n\nfunction orderComparator(f) {\n  return (data) => (i, j) => f(data[i], data[j]);\n}\n\nfunction orderGiven(domain) {\n  return orderZDomain(ascendingDefined, () => domain);\n}\n\n// Given an ordering (domain) of distinct values in z that can be derived from\n// the data, returns a comparator that can be used to sort stacks. Note that\n// this is a series order: it will be consistent across stacks.\nfunction orderZDomain(compare, domain) {\n  return (data, X, Y, Z) => {\n    if (!Z) throw new Error(\"missing channel: z\");\n    const map = new InternMap(domain(data, X, Y, Z).map((d, i) => [d, i]));\n    return (i, j) => compare(map.get(Z[i]), map.get(Z[j]));\n  };\n}\n", "import {create} from \"../context.js\";\nimport {Mark} from \"../mark.js\";\nimport {hasXY, identity, indexOf, number} from \"../options.js\";\nimport {isCollapsed} from \"../scales.js\";\nimport {applyAttr, applyChannelStyles, applyDirectStyles, applyIndirectStyles, applyTransform} from \"../style.js\";\nimport {impliedString} from \"../style.js\";\nimport {maybeIdentityX, maybeIdentityY} from \"../transforms/identity.js\";\nimport {maybeIntervalX, maybeIntervalY} from \"../transforms/interval.js\";\nimport {maybeStackX, maybeStackY} from \"../transforms/stack.js\";\n\nexport class AbstractBar extends Mark {\n  constructor(data, channels, options = {}, defaults) {\n    super(data, channels, options, defaults);\n    const {inset = 0, insetTop = inset, insetRight = inset, insetBottom = inset, insetLeft = inset, rx, ry} = options;\n    this.insetTop = number(insetTop);\n    this.insetRight = number(insetRight);\n    this.insetBottom = number(insetBottom);\n    this.insetLeft = number(insetLeft);\n    this.rx = impliedString(rx, \"auto\"); // number or percentage\n    this.ry = impliedString(ry, \"auto\");\n  }\n  render(index, scales, channels, dimensions, context) {\n    const {rx, ry} = this;\n    return create(\"svg:g\", context)\n      .call(applyIndirectStyles, this, dimensions, context)\n      .call(this._transform, this, scales)\n      .call((g) =>\n        g\n          .selectAll()\n          .data(index)\n          .enter()\n          .append(\"rect\")\n          .call(applyDirectStyles, this)\n          .attr(\"x\", this._x(scales, channels, dimensions))\n          .attr(\"width\", this._width(scales, channels, dimensions))\n          .attr(\"y\", this._y(scales, channels, dimensions))\n          .attr(\"height\", this._height(scales, channels, dimensions))\n          .call(applyAttr, \"rx\", rx)\n          .call(applyAttr, \"ry\", ry)\n          .call(applyChannelStyles, this, channels)\n      )\n      .node();\n  }\n  _x(scales, {x: X}, {marginLeft}) {\n    const {insetLeft} = this;\n    return X ? (i) => X[i] + insetLeft : marginLeft + insetLeft;\n  }\n  _y(scales, {y: Y}, {marginTop}) {\n    const {insetTop} = this;\n    return Y ? (i) => Y[i] + insetTop : marginTop + insetTop;\n  }\n  _width({x}, {x: X}, {marginRight, marginLeft, width}) {\n    const {insetLeft, insetRight} = this;\n    const bandwidth = X && x ? x.bandwidth() : width - marginRight - marginLeft;\n    return Math.max(0, bandwidth - insetLeft - insetRight);\n  }\n  _height({y}, {y: Y}, {marginTop, marginBottom, height}) {\n    const {insetTop, insetBottom} = this;\n    const bandwidth = Y && y ? y.bandwidth() : height - marginTop - marginBottom;\n    return Math.max(0, bandwidth - insetTop - insetBottom);\n  }\n}\n\nconst defaults = {\n  ariaLabel: \"bar\"\n};\n\nexport class BarX extends AbstractBar {\n  constructor(data, options = {}) {\n    const {x1, x2, y} = options;\n    super(\n      data,\n      {\n        x1: {value: x1, scale: \"x\"},\n        x2: {value: x2, scale: \"x\"},\n        y: {value: y, scale: \"y\", type: \"band\", optional: true}\n      },\n      options,\n      defaults\n    );\n  }\n  _transform(selection, mark, {x}) {\n    selection.call(applyTransform, mark, {x}, 0, 0);\n  }\n  _x({x}, {x1: X1, x2: X2}, {marginLeft}) {\n    const {insetLeft} = this;\n    return isCollapsed(x) ? marginLeft + insetLeft : (i) => Math.min(X1[i], X2[i]) + insetLeft;\n  }\n  _width({x}, {x1: X1, x2: X2}, {marginRight, marginLeft, width}) {\n    const {insetLeft, insetRight} = this;\n    return isCollapsed(x)\n      ? width - marginRight - marginLeft - insetLeft - insetRight\n      : (i) => Math.max(0, Math.abs(X2[i] - X1[i]) - insetLeft - insetRight);\n  }\n}\n\nexport class BarY extends AbstractBar {\n  constructor(data, options = {}) {\n    const {x, y1, y2} = options;\n    super(\n      data,\n      {\n        y1: {value: y1, scale: \"y\"},\n        y2: {value: y2, scale: \"y\"},\n        x: {value: x, scale: \"x\", type: \"band\", optional: true}\n      },\n      options,\n      defaults\n    );\n  }\n  _transform(selection, mark, {y}) {\n    selection.call(applyTransform, mark, {y}, 0, 0);\n  }\n  _y({y}, {y1: Y1, y2: Y2}, {marginTop}) {\n    const {insetTop} = this;\n    return isCollapsed(y) ? marginTop + insetTop : (i) => Math.min(Y1[i], Y2[i]) + insetTop;\n  }\n  _height({y}, {y1: Y1, y2: Y2}, {marginTop, marginBottom, height}) {\n    const {insetTop, insetBottom} = this;\n    return isCollapsed(y)\n      ? height - marginTop - marginBottom - insetTop - insetBottom\n      : (i) => Math.max(0, Math.abs(Y2[i] - Y1[i]) - insetTop - insetBottom);\n  }\n}\n\nexport function barX(data, options = {}) {\n  if (!hasXY(options)) options = {...options, y: indexOf, x2: identity};\n  return new BarX(data, maybeStackX(maybeIntervalX(maybeIdentityX(options))));\n}\n\nexport function barY(data, options = {}) {\n  if (!hasXY(options)) options = {...options, x: indexOf, y2: identity};\n  return new BarY(data, maybeStackY(maybeIntervalY(maybeIdentityY(options))));\n}\n", "/**\n * @license\n * Copyright 2023 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\ninterface Page {\n  Charts: ChartData;\n}\n\ninterface ChartData {\n  Programs: Program[];\n}\n\ninterface Program {\n  ID: string;\n  Name: string;\n  Charts: Chart[];\n}\n\ninterface Chart {\n  ID: string;\n  Name: string;\n  Type: string;\n  Data: Datum[] | null;\n}\n\ninterface Datum {\n  Key: string;\n  Value: number;\n}\n\ndeclare const Page: Page;\n\nimport * as d3 from \"d3\";\nimport * as Plot from \"@observablehq/plot\";\n\nfor (const program of Page.Charts.Programs) {\n  for (const counter of program.Charts) {\n    switch (counter.Type) {\n      case \"partition\":\n        document\n          .querySelector(`[data-chart-id=\"${counter.ID}\"]`)\n          ?.append(partition(counter));\n\n        break;\n      case \"histogram\":\n        document\n          .querySelector(`[data-chart-id=\"${counter.ID}\"]`)\n          ?.append(histogram(counter));\n\n        break;\n      default:\n        console.error(\"unknown chart type\");\n        break;\n    }\n  }\n}\n\nfunction partition({ Data, Name }: Chart) {\n  Data ??= [];\n  return Plot.plot({\n    color: {\n      type: \"ordinal\",\n      scheme: \"Spectral\",\n    },\n    nice: true,\n    x: {\n      label: Name,\n      labelOffset: Number.MAX_SAFE_INTEGER,\n      tickRotate: 45,\n      domain: Data.map((d) => d.Key),\n    },\n    y: {\n      label: \"Frequency\",\n      domain: [0, 1],\n    },\n    width: 1024,\n    style: \"overflow:visible;background:transparent;margin-bottom:3rem;\",\n    marks: [\n      Plot.barY(Data, {\n        tip: true,\n        fill: (d) => (isNaN(Number(d.Key)) ? d.Key : Number(d.Key)),\n        x: (d) => d.Key,\n        y: (d) => d.Value,\n      }),\n      Plot.frame(),\n    ],\n  });\n}\n\nfunction histogram({ Data }: Chart) {\n  Data ??= [];\n  const n = 3; // number of facet columns\n  const fixKey = (k: string) => (isNaN(Number(k)) ? k : Number(k));\n  const keys = Array.from(d3.union(Data.map((d) => fixKey(d.Key))));\n  const index = new Map(keys.map((key, i) => [key, i]));\n  const fx = (key: string | number) => (index.get(key) ?? 0) % n;\n  const fy = (key: string | number) => Math.floor((index.get(key) ?? 0) / n);\n\n  return Plot.plot({\n    marginLeft: 60,\n    width: 1024,\n    grid: true,\n    nice: true,\n    x: {\n      label: \"Distribution\",\n    },\n    color: {\n      type: \"ordinal\",\n      legend: true,\n      scheme: \"Spectral\",\n      label: \"Counter\",\n    },\n    y: {\n      insetTop: 16,\n      domain: [0, 1],\n    },\n    fx: {\n      ticks: [],\n    },\n    fy: {\n      ticks: [],\n    },\n    style: \"background:transparent;\",\n    marks: [\n      Plot.barY(\n        Data,\n        Plot.binX(\n          { y: \"proportion-facet\", x: \"x1\", interval: 0.1, cumulative: 1 },\n          {\n            tip: true,\n            fill: (d: Datum) => fixKey(d.Key),\n            x: (d: Datum) => d.Value,\n            fx: (d: Datum) => fx(fixKey(d.Key)),\n            fy: (d: Datum) => fy(fixKey(d.Key)),\n          }\n        )\n      ),\n      Plot.text(keys, {\n        frameAnchor: \"top\",\n        dy: 3,\n        fx,\n        fy,\n      }),\n      Plot.axisX({ anchor: \"bottom\", tickSpacing: 35 }),\n      Plot.axisX({ anchor: \"top\", tickSpacing: 35 }),\n      Plot.frame(),\n    ],\n  });\n}\n\nexport {};\n"],
-  "mappings": "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",
+  "sourcesContent": ["export default function ascending(a, b) {\n  return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n", "export default function descending(a, b) {\n  return a == null || b == null ? NaN\n    : b < a ? -1\n    : b > a ? 1\n    : b >= a ? 0\n    : NaN;\n}\n", "import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n  let compare1, compare2, delta;\n\n  // If an accessor is specified, promote it to a comparator. In this case we\n  // can test whether the search value is (self-) comparable. We can\u2019t do this\n  // for a comparator (except for specific, known comparators) because we can\u2019t\n  // tell if the comparator is symmetric, and an asymmetric comparator can\u2019t be\n  // used to test whether a single value is comparable.\n  if (f.length !== 2) {\n    compare1 = ascending;\n    compare2 = (d, x) => ascending(f(d), x);\n    delta = (d, x) => f(d) - x;\n  } else {\n    compare1 = f === ascending || f === descending ? f : zero;\n    compare2 = f;\n    delta = f;\n  }\n\n  function left(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) < 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function right(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) <= 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function center(a, x, lo = 0, hi = a.length) {\n    const i = left(a, x, lo, hi - 1);\n    return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n  }\n\n  return {left, center, right};\n}\n\nfunction zero() {\n  return 0;\n}\n", "export default function number(x) {\n  return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  }\n}\n", "import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n", "export default function count(values, valueof) {\n  let count = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        ++count;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        ++count;\n      }\n    }\n  }\n  return count;\n}\n", "function length(array) {\n  return array.length | 0;\n}\n\nfunction empty(length) {\n  return !(length > 0);\n}\n\nfunction arrayify(values) {\n  return typeof values !== \"object\" || \"length\" in values ? values : Array.from(values);\n}\n\nfunction reducer(reduce) {\n  return values => reduce(...values);\n}\n\nexport default function cross(...values) {\n  const reduce = typeof values[values.length - 1] === \"function\" && reducer(values.pop());\n  values = values.map(arrayify);\n  const lengths = values.map(length);\n  const j = values.length - 1;\n  const index = new Array(j + 1).fill(0);\n  const product = [];\n  if (j < 0 || lengths.some(empty)) return product;\n  while (true) {\n    product.push(index.map((j, i) => values[i][j]));\n    let i = j;\n    while (++index[i] === lengths[i]) {\n      if (i === 0) return reduce ? product.map(reduce) : product;\n      index[i--] = 0;\n    }\n  }\n}\n", "export default function cumsum(values, valueof) {\n  var sum = 0, index = 0;\n  return Float64Array.from(values, valueof === undefined\n    ? v => (sum += +v || 0)\n    : v => (sum += +valueof(v, index++, values) || 0));\n}", "export default function variance(values, valueof) {\n  let count = 0;\n  let delta;\n  let mean = 0;\n  let sum = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        delta = value - mean;\n        mean += delta / ++count;\n        sum += delta * (value - mean);\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        delta = value - mean;\n        mean += delta / ++count;\n        sum += delta * (value - mean);\n      }\n    }\n  }\n  if (count > 1) return sum / (count - 1);\n}\n", "import variance from \"./variance.js\";\n\nexport default function deviation(values, valueof) {\n  const v = variance(values, valueof);\n  return v ? Math.sqrt(v) : v;\n}\n", "export default function extent(values, valueof) {\n  let min;\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null) {\n        if (min === undefined) {\n          if (value >= value) min = max = value;\n        } else {\n          if (min > value) min = value;\n          if (max < value) max = value;\n        }\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null) {\n        if (min === undefined) {\n          if (value >= value) min = max = value;\n        } else {\n          if (min > value) min = value;\n          if (max < value) max = value;\n        }\n      }\n    }\n  }\n  return [min, max];\n}\n", "// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nexport class Adder {\n  constructor() {\n    this._partials = new Float64Array(32);\n    this._n = 0;\n  }\n  add(x) {\n    const p = this._partials;\n    let i = 0;\n    for (let j = 0; j < this._n && j < 32; j++) {\n      const y = p[j],\n        hi = x + y,\n        lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n      if (lo) p[i++] = lo;\n      x = hi;\n    }\n    p[i] = x;\n    this._n = i + 1;\n    return this;\n  }\n  valueOf() {\n    const p = this._partials;\n    let n = this._n, x, y, lo, hi = 0;\n    if (n > 0) {\n      hi = p[--n];\n      while (n > 0) {\n        x = hi;\n        y = p[--n];\n        hi = x + y;\n        lo = y - (hi - x);\n        if (lo) break;\n      }\n      if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\n        y = lo * 2;\n        x = hi + y;\n        if (y == x - hi) hi = x;\n      }\n    }\n    return hi;\n  }\n}\n\nexport function fsum(values, valueof) {\n  const adder = new Adder();\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value = +value) {\n        adder.add(value);\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if (value = +valueof(value, ++index, values)) {\n        adder.add(value);\n      }\n    }\n  }\n  return +adder;\n}\n\nexport function fcumsum(values, valueof) {\n  const adder = new Adder();\n  let index = -1;\n  return Float64Array.from(values, valueof === undefined\n      ? v => adder.add(+v || 0)\n      : v => adder.add(+valueof(v, ++index, values) || 0)\n  );\n}\n", "export class InternMap extends Map {\n  constructor(entries, key = keyof) {\n    super();\n    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n    if (entries != null) for (const [key, value] of entries) this.set(key, value);\n  }\n  get(key) {\n    return super.get(intern_get(this, key));\n  }\n  has(key) {\n    return super.has(intern_get(this, key));\n  }\n  set(key, value) {\n    return super.set(intern_set(this, key), value);\n  }\n  delete(key) {\n    return super.delete(intern_delete(this, key));\n  }\n}\n\nexport class InternSet extends Set {\n  constructor(values, key = keyof) {\n    super();\n    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n    if (values != null) for (const value of values) this.add(value);\n  }\n  has(value) {\n    return super.has(intern_get(this, value));\n  }\n  add(value) {\n    return super.add(intern_set(this, value));\n  }\n  delete(value) {\n    return super.delete(intern_delete(this, value));\n  }\n}\n\nfunction intern_get({_intern, _key}, value) {\n  const key = _key(value);\n  return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n  const key = _key(value);\n  if (_intern.has(key)) return _intern.get(key);\n  _intern.set(key, value);\n  return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n  const key = _key(value);\n  if (_intern.has(key)) {\n    value = _intern.get(key);\n    _intern.delete(key);\n  }\n  return value;\n}\n\nfunction keyof(value) {\n  return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n", "export default function identity(x) {\n  return x;\n}\n", "import {InternMap} from \"internmap\";\nimport identity from \"./identity.js\";\n\nexport default function group(values, ...keys) {\n  return nest(values, identity, identity, keys);\n}\n\nexport function groups(values, ...keys) {\n  return nest(values, Array.from, identity, keys);\n}\n\nfunction flatten(groups, keys) {\n  for (let i = 1, n = keys.length; i < n; ++i) {\n    groups = groups.flatMap(g => g.pop().map(([key, value]) => [...g, key, value]));\n  }\n  return groups;\n}\n\nexport function flatGroup(values, ...keys) {\n  return flatten(groups(values, ...keys), keys);\n}\n\nexport function flatRollup(values, reduce, ...keys) {\n  return flatten(rollups(values, reduce, ...keys), keys);\n}\n\nexport function rollup(values, reduce, ...keys) {\n  return nest(values, identity, reduce, keys);\n}\n\nexport function rollups(values, reduce, ...keys) {\n  return nest(values, Array.from, reduce, keys);\n}\n\nexport function index(values, ...keys) {\n  return nest(values, identity, unique, keys);\n}\n\nexport function indexes(values, ...keys) {\n  return nest(values, Array.from, unique, keys);\n}\n\nfunction unique(values) {\n  if (values.length !== 1) throw new Error(\"duplicate key\");\n  return values[0];\n}\n\nfunction nest(values, map, reduce, keys) {\n  return (function regroup(values, i) {\n    if (i >= keys.length) return reduce(values);\n    const groups = new InternMap();\n    const keyof = keys[i++];\n    let index = -1;\n    for (const value of values) {\n      const key = keyof(value, ++index, values);\n      const group = groups.get(key);\n      if (group) group.push(value);\n      else groups.set(key, [value]);\n    }\n    for (const [key, values] of groups) {\n      groups.set(key, regroup(values, i));\n    }\n    return map(groups);\n  })(values, 0);\n}\n", "export default function permute(source, keys) {\n  return Array.from(keys, key => source[key]);\n}\n", "import ascending from \"./ascending.js\";\nimport permute from \"./permute.js\";\n\nexport default function sort(values, ...F) {\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n  values = Array.from(values);\n  let [f] = F;\n  if ((f && f.length !== 2) || F.length > 1) {\n    const index = Uint32Array.from(values, (d, i) => i);\n    if (F.length > 1) {\n      F = F.map(f => values.map(f));\n      index.sort((i, j) => {\n        for (const f of F) {\n          const c = ascendingDefined(f[i], f[j]);\n          if (c) return c;\n        }\n      });\n    } else {\n      f = values.map(f);\n      index.sort((i, j) => ascendingDefined(f[i], f[j]));\n    }\n    return permute(values, index);\n  }\n  return values.sort(compareDefined(f));\n}\n\nexport function compareDefined(compare = ascending) {\n  if (compare === ascending) return ascendingDefined;\n  if (typeof compare !== \"function\") throw new TypeError(\"compare is not a function\");\n  return (a, b) => {\n    const x = compare(a, b);\n    if (x || x === 0) return x;\n    return (compare(b, b) === 0) - (compare(a, a) === 0);\n  };\n}\n\nexport function ascendingDefined(a, b) {\n  return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\n}\n", "import ascending from \"./ascending.js\";\nimport group, {rollup} from \"./group.js\";\nimport sort from \"./sort.js\";\n\nexport default function groupSort(values, reduce, key) {\n  return (reduce.length !== 2\n    ? sort(rollup(values, reduce, key), (([ak, av], [bk, bv]) => ascending(av, bv) || ascending(ak, bk)))\n    : sort(group(values, key), (([ak, av], [bk, bv]) => reduce(av, bv) || ascending(ak, bk))))\n    .map(([key]) => key);\n}\n", "const e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n  const step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log10(step)),\n      error = step / Math.pow(10, power),\n      factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n  let i1, i2, inc;\n  if (power < 0) {\n    inc = Math.pow(10, -power) / factor;\n    i1 = Math.round(start * inc);\n    i2 = Math.round(stop * inc);\n    if (i1 / inc < start) ++i1;\n    if (i2 / inc > stop) --i2;\n    inc = -inc;\n  } else {\n    inc = Math.pow(10, power) * factor;\n    i1 = Math.round(start / inc);\n    i2 = Math.round(stop / inc);\n    if (i1 * inc < start) ++i1;\n    if (i2 * inc > stop) --i2;\n  }\n  if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n  return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  if (!(count > 0)) return [];\n  if (start === stop) return [start];\n  const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n  if (!(i2 >= i1)) return [];\n  const n = i2 - i1 + 1, ticks = new Array(n);\n  if (reverse) {\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n    else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n  } else {\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n    else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n  }\n  return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n  return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n", "import count from \"../count.js\";\n\nexport default function thresholdSturges(values) {\n  return Math.max(1, Math.ceil(Math.log(count(values)) / Math.LN2) + 1);\n}\n", "export default function max(values, valueof) {\n  let max;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value;\n      }\n    }\n  }\n  return max;\n}\n", "export default function maxIndex(values, valueof) {\n  let max;\n  let maxIndex = -1;\n  let index = -1;\n  if (valueof === undefined) {\n    for (const value of values) {\n      ++index;\n      if (value != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value, maxIndex = index;\n      }\n    }\n  } else {\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (max < value || (max === undefined && value >= value))) {\n        max = value, maxIndex = index;\n      }\n    }\n  }\n  return maxIndex;\n}\n", "export default function min(values, valueof) {\n  let min;\n  if (valueof === undefined) {\n    for (const value of values) {\n      if (value != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value;\n      }\n    }\n  }\n  return min;\n}\n", "export default function minIndex(values, valueof) {\n  let min;\n  let minIndex = -1;\n  let index = -1;\n  if (valueof === undefined) {\n    for (const value of values) {\n      ++index;\n      if (value != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value, minIndex = index;\n      }\n    }\n  } else {\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null\n          && (min > value || (min === undefined && value >= value))) {\n        min = value, minIndex = index;\n      }\n    }\n  }\n  return minIndex;\n}\n", "import {ascendingDefined, compareDefined} from \"./sort.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = Infinity, compare) {\n  k = Math.floor(k);\n  left = Math.floor(Math.max(0, left));\n  right = Math.floor(Math.min(array.length - 1, right));\n\n  if (!(left <= k && k <= right)) return array;\n\n  compare = compare === undefined ? ascendingDefined : compareDefined(compare);\n\n  while (right > left) {\n    if (right - left > 600) {\n      const n = right - left + 1;\n      const m = k - left + 1;\n      const z = Math.log(n);\n      const s = 0.5 * Math.exp(2 * z / 3);\n      const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n      const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n      const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n      quickselect(array, k, newLeft, newRight, compare);\n    }\n\n    const t = array[k];\n    let i = left;\n    let j = right;\n\n    swap(array, left, k);\n    if (compare(array[right], t) > 0) swap(array, left, right);\n\n    while (i < j) {\n      swap(array, i, j), ++i, --j;\n      while (compare(array[i], t) < 0) ++i;\n      while (compare(array[j], t) > 0) --j;\n    }\n\n    if (compare(array[left], t) === 0) swap(array, left, j);\n    else ++j, swap(array, j, right);\n\n    if (j <= k) left = j + 1;\n    if (k <= j) right = j - 1;\n  }\n\n  return array;\n}\n\nfunction swap(array, i, j) {\n  const t = array[i];\n  array[i] = array[j];\n  array[j] = t;\n}\n", "import ascending from \"./ascending.js\";\n\nexport default function greatest(values, compare = ascending) {\n  let max;\n  let defined = false;\n  if (compare.length === 1) {\n    let maxValue;\n    for (const element of values) {\n      const value = compare(element);\n      if (defined\n          ? ascending(value, maxValue) > 0\n          : ascending(value, value) === 0) {\n        max = element;\n        maxValue = value;\n        defined = true;\n      }\n    }\n  } else {\n    for (const value of values) {\n      if (defined\n          ? compare(value, max) > 0\n          : compare(value, value) === 0) {\n        max = value;\n        defined = true;\n      }\n    }\n  }\n  return max;\n}\n", "import max from \"./max.js\";\nimport maxIndex from \"./maxIndex.js\";\nimport min from \"./min.js\";\nimport minIndex from \"./minIndex.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\nimport {ascendingDefined} from \"./sort.js\";\nimport greatest from \"./greatest.js\";\n\nexport default function quantile(values, p, valueof) {\n  values = Float64Array.from(numbers(values, valueof));\n  if (!(n = values.length) || isNaN(p = +p)) return;\n  if (p <= 0 || n < 2) return min(values);\n  if (p >= 1) return max(values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n      value1 = min(values.subarray(i0 + 1));\n  return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n  if (!(n = values.length) || isNaN(p = +p)) return;\n  if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n  if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = +valueof(values[i0], i0, values),\n      value1 = +valueof(values[i0 + 1], i0 + 1, values);\n  return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileIndex(values, p, valueof) {\n  values = Float64Array.from(numbers(values, valueof));\n  if (!(n = values.length) || isNaN(p = +p)) return;\n  if (p <= 0 || n < 2) return minIndex(values);\n  if (p >= 1) return maxIndex(values);\n  var n,\n      i = Math.floor((n - 1) * p),\n      order = (i, j) => ascendingDefined(values[i], values[j]),\n      index = quickselect(Uint32Array.from(values, (_, i) => i), i, 0, n - 1, order);\n  return greatest(index.subarray(0, i + 1), i => values[i]);\n}\n", "import count from \"../count.js\";\nimport quantile from \"../quantile.js\";\n\nexport default function thresholdFreedmanDiaconis(values, min, max) {\n  const c = count(values), d = quantile(values, 0.75) - quantile(values, 0.25);\n  return c && d ? Math.ceil((max - min) / (2 * d * Math.pow(c, -1 / 3))) : 1;\n}\n", "import count from \"../count.js\";\nimport deviation from \"../deviation.js\";\n\nexport default function thresholdScott(values, min, max) {\n  const c = count(values), d = deviation(values);\n  return c && d ? Math.ceil((max - min) * Math.cbrt(c) / (3.49 * d)) : 1;\n}\n", "export default function mean(values, valueof) {\n  let count = 0;\n  let sum = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        ++count, sum += value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        ++count, sum += value;\n      }\n    }\n  }\n  if (count) return sum / count;\n}\n", "import quantile, {quantileIndex} from \"./quantile.js\";\n\nexport default function median(values, valueof) {\n  return quantile(values, 0.5, valueof);\n}\n\nexport function medianIndex(values, valueof) {\n  return quantileIndex(values, 0.5, valueof);\n}\n", "function* flatten(arrays) {\n  for (const array of arrays) {\n    yield* array;\n  }\n}\n\nexport default function merge(arrays) {\n  return Array.from(flatten(arrays));\n}\n", "import {InternMap} from \"internmap\";\n\nexport default function mode(values, valueof) {\n  const counts = new InternMap();\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && value >= value) {\n        counts.set(value, (counts.get(value) || 0) + 1);\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && value >= value) {\n        counts.set(value, (counts.get(value) || 0) + 1);\n      }\n    }\n  }\n  let modeValue;\n  let modeCount = 0;\n  for (const [value, count] of counts) {\n    if (count > modeCount) {\n      modeCount = count;\n      modeValue = value;\n    }\n  }\n  return modeValue;\n}\n", "export default function pairs(values, pairof = pair) {\n  const pairs = [];\n  let previous;\n  let first = false;\n  for (const value of values) {\n    if (first) pairs.push(pairof(previous, value));\n    previous = value;\n    first = true;\n  }\n  return pairs;\n}\n\nexport function pair(a, b) {\n  return [a, b];\n}\n", "export default function range(start, stop, step) {\n  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n  var i = -1,\n      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n      range = new Array(n);\n\n  while (++i < n) {\n    range[i] = start + i * step;\n  }\n\n  return range;\n}\n", "export default function sum(values, valueof) {\n  let sum = 0;\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value = +value) {\n        sum += value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if (value = +valueof(value, ++index, values)) {\n        sum += value;\n      }\n    }\n  }\n  return sum;\n}\n", "export default function reverse(values) {\n  if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n  return Array.from(values).reverse();\n}\n", "import {InternSet} from \"internmap\";\n\nexport default function union(...others) {\n  const set = new InternSet();\n  for (const other of others) {\n    for (const o of other) {\n      set.add(o);\n    }\n  }\n  return set;\n}\n", "export default function(x) {\n  return x;\n}\n", "import identity from \"./identity.js\";\n\nvar top = 1,\n    right = 2,\n    bottom = 3,\n    left = 4,\n    epsilon = 1e-6;\n\nfunction translateX(x) {\n  return \"translate(\" + x + \",0)\";\n}\n\nfunction translateY(y) {\n  return \"translate(0,\" + y + \")\";\n}\n\nfunction number(scale) {\n  return d => +scale(d);\n}\n\nfunction center(scale, offset) {\n  offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n  if (scale.round()) offset = Math.round(offset);\n  return d => +scale(d) + offset;\n}\n\nfunction entering() {\n  return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n  var tickArguments = [],\n      tickValues = null,\n      tickFormat = null,\n      tickSizeInner = 6,\n      tickSizeOuter = 6,\n      tickPadding = 3,\n      offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\n      k = orient === top || orient === left ? -1 : 1,\n      x = orient === left || orient === right ? \"x\" : \"y\",\n      transform = orient === top || orient === bottom ? translateX : translateY;\n\n  function axis(context) {\n    var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n        format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n        spacing = Math.max(tickSizeInner, 0) + tickPadding,\n        range = scale.range(),\n        range0 = +range[0] + offset,\n        range1 = +range[range.length - 1] + offset,\n        position = (scale.bandwidth ? center : number)(scale.copy(), offset),\n        selection = context.selection ? context.selection() : context,\n        path = selection.selectAll(\".domain\").data([null]),\n        tick = selection.selectAll(\".tick\").data(values, scale).order(),\n        tickExit = tick.exit(),\n        tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n        line = tick.select(\"line\"),\n        text = tick.select(\"text\");\n\n    path = path.merge(path.enter().insert(\"path\", \".tick\")\n        .attr(\"class\", \"domain\")\n        .attr(\"stroke\", \"currentColor\"));\n\n    tick = tick.merge(tickEnter);\n\n    line = line.merge(tickEnter.append(\"line\")\n        .attr(\"stroke\", \"currentColor\")\n        .attr(x + \"2\", k * tickSizeInner));\n\n    text = text.merge(tickEnter.append(\"text\")\n        .attr(\"fill\", \"currentColor\")\n        .attr(x, k * spacing)\n        .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n    if (context !== selection) {\n      path = path.transition(context);\n      tick = tick.transition(context);\n      line = line.transition(context);\n      text = text.transition(context);\n\n      tickExit = tickExit.transition(context)\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute(\"transform\"); });\n\n      tickEnter\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); });\n    }\n\n    tickExit.remove();\n\n    path\n        .attr(\"d\", orient === left || orient === right\n            ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\n            : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\n\n    tick\n        .attr(\"opacity\", 1)\n        .attr(\"transform\", function(d) { return transform(position(d) + offset); });\n\n    line\n        .attr(x + \"2\", k * tickSizeInner);\n\n    text\n        .attr(x, k * spacing)\n        .text(format);\n\n    selection.filter(entering)\n        .attr(\"fill\", \"none\")\n        .attr(\"font-size\", 10)\n        .attr(\"font-family\", \"sans-serif\")\n        .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n    selection\n        .each(function() { this.__axis = position; });\n  }\n\n  axis.scale = function(_) {\n    return arguments.length ? (scale = _, axis) : scale;\n  };\n\n  axis.ticks = function() {\n    return tickArguments = Array.from(arguments), axis;\n  };\n\n  axis.tickArguments = function(_) {\n    return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();\n  };\n\n  axis.tickValues = function(_) {\n    return arguments.length ? (tickValues = _ == null ? null : Array.from(_), axis) : tickValues && tickValues.slice();\n  };\n\n  axis.tickFormat = function(_) {\n    return arguments.length ? (tickFormat = _, axis) : tickFormat;\n  };\n\n  axis.tickSize = function(_) {\n    return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeInner = function(_) {\n    return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeOuter = function(_) {\n    return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n  };\n\n  axis.tickPadding = function(_) {\n    return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n  };\n\n  axis.offset = function(_) {\n    return arguments.length ? (offset = +_, axis) : offset;\n  };\n\n  return axis;\n}\n\nexport function axisTop(scale) {\n  return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n  return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n  return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n  return axis(left, scale);\n}\n", "var noop = {value: () => {}};\n\nfunction dispatch() {\n  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n    if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n    _[t] = [];\n  }\n  return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n  this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n    return {type: t, name: name};\n  });\n}\n\nDispatch.prototype = dispatch.prototype = {\n  constructor: Dispatch,\n  on: function(typename, callback) {\n    var _ = this._,\n        T = parseTypenames(typename + \"\", _),\n        t,\n        i = -1,\n        n = T.length;\n\n    // If no callback was specified, return the callback of the given type and name.\n    if (arguments.length < 2) {\n      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n      return;\n    }\n\n    // If a type was specified, set the callback for the given type and name.\n    // Otherwise, if a null callback was specified, remove callbacks of the given name.\n    if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n    while (++i < n) {\n      if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n      else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n    }\n\n    return this;\n  },\n  copy: function() {\n    var copy = {}, _ = this._;\n    for (var t in _) copy[t] = _[t].slice();\n    return new Dispatch(copy);\n  },\n  call: function(type, that) {\n    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  },\n  apply: function(type, that, args) {\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  }\n};\n\nfunction get(type, name) {\n  for (var i = 0, n = type.length, c; i < n; ++i) {\n    if ((c = type[i]).name === name) {\n      return c.value;\n    }\n  }\n}\n\nfunction set(type, name, callback) {\n  for (var i = 0, n = type.length; i < n; ++i) {\n    if (type[i].name === name) {\n      type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n      break;\n    }\n  }\n  if (callback != null) type.push({name: name, value: callback});\n  return type;\n}\n\nexport default dispatch;\n", "export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n  svg: \"http://www.w3.org/2000/svg\",\n  xhtml: xhtml,\n  xlink: \"http://www.w3.org/1999/xlink\",\n  xml: \"http://www.w3.org/XML/1998/namespace\",\n  xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n", "import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n  var prefix = name += \"\", i = prefix.indexOf(\":\");\n  if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n", "import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n  return function() {\n    var document = this.ownerDocument,\n        uri = this.namespaceURI;\n    return uri === xhtml && document.documentElement.namespaceURI === xhtml\n        ? document.createElement(name)\n        : document.createElementNS(uri, name);\n  };\n}\n\nfunction creatorFixed(fullname) {\n  return function() {\n    return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n  };\n}\n\nexport default function(name) {\n  var fullname = namespace(name);\n  return (fullname.local\n      ? creatorFixed\n      : creatorInherit)(fullname);\n}\n", "function none() {}\n\nexport default function(selector) {\n  return selector == null ? none : function() {\n    return this.querySelector(selector);\n  };\n}\n", "import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n", "// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don\u2019t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n  return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n", "function empty() {\n  return [];\n}\n\nexport default function(selector) {\n  return selector == null ? empty : function() {\n    return this.querySelectorAll(selector);\n  };\n}\n", "import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n  return function() {\n    return array(select.apply(this, arguments));\n  };\n}\n\nexport default function(select) {\n  if (typeof select === \"function\") select = arrayAll(select);\n  else select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        subgroups.push(select.call(node, node.__data__, i, group));\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, parents);\n}\n", "export default function(selector) {\n  return function() {\n    return this.matches(selector);\n  };\n}\n\nexport function childMatcher(selector) {\n  return function(node) {\n    return node.matches(selector);\n  };\n}\n\n", "import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n  return function() {\n    return find.call(this.children, match);\n  };\n}\n\nfunction childFirst() {\n  return this.firstElementChild;\n}\n\nexport default function(match) {\n  return this.select(match == null ? childFirst\n      : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n", "import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n  return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n  return function() {\n    return filter.call(this.children, match);\n  };\n}\n\nexport default function(match) {\n  return this.selectAll(match == null ? children\n      : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n", "import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n", "export default function(update) {\n  return new Array(update.length);\n}\n", "import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n  this.ownerDocument = parent.ownerDocument;\n  this.namespaceURI = parent.namespaceURI;\n  this._next = null;\n  this._parent = parent;\n  this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n  constructor: EnterNode,\n  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n  querySelector: function(selector) { return this._parent.querySelector(selector); },\n  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n", "export default function(x) {\n  return function() {\n    return x;\n  };\n}\n", "import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n  var i = 0,\n      node,\n      groupLength = group.length,\n      dataLength = data.length;\n\n  // Put any non-null nodes that fit into update.\n  // Put any null nodes into enter.\n  // Put any remaining data into enter.\n  for (; i < dataLength; ++i) {\n    if (node = group[i]) {\n      node.__data__ = data[i];\n      update[i] = node;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Put any non-null nodes that don\u2019t fit into exit.\n  for (; i < groupLength; ++i) {\n    if (node = group[i]) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n  var i,\n      node,\n      nodeByKeyValue = new Map,\n      groupLength = group.length,\n      dataLength = data.length,\n      keyValues = new Array(groupLength),\n      keyValue;\n\n  // Compute the key for each node.\n  // If multiple nodes have the same key, the duplicates are added to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if (node = group[i]) {\n      keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n      if (nodeByKeyValue.has(keyValue)) {\n        exit[i] = node;\n      } else {\n        nodeByKeyValue.set(keyValue, node);\n      }\n    }\n  }\n\n  // Compute the key for each datum.\n  // If there a node associated with this key, join and add it to update.\n  // If there is not (or the key is a duplicate), add it to enter.\n  for (i = 0; i < dataLength; ++i) {\n    keyValue = key.call(parent, data[i], i, data) + \"\";\n    if (node = nodeByKeyValue.get(keyValue)) {\n      update[i] = node;\n      node.__data__ = data[i];\n      nodeByKeyValue.delete(keyValue);\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Add any remaining nodes that were not bound to data to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction datum(node) {\n  return node.__data__;\n}\n\nexport default function(value, key) {\n  if (!arguments.length) return Array.from(this, datum);\n\n  var bind = key ? bindKey : bindIndex,\n      parents = this._parents,\n      groups = this._groups;\n\n  if (typeof value !== \"function\") value = constant(value);\n\n  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n    var parent = parents[j],\n        group = groups[j],\n        groupLength = group.length,\n        data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n        dataLength = data.length,\n        enterGroup = enter[j] = new Array(dataLength),\n        updateGroup = update[j] = new Array(dataLength),\n        exitGroup = exit[j] = new Array(groupLength);\n\n    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n    // Now connect the enter nodes to their following update node, such that\n    // appendChild can insert the materialized enter node before this node,\n    // rather than at the end of the parent node.\n    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n      if (previous = enterGroup[i0]) {\n        if (i0 >= i1) i1 = i0 + 1;\n        while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n        previous._next = next || null;\n      }\n    }\n  }\n\n  update = new Selection(update, parents);\n  update._enter = enter;\n  update._exit = exit;\n  return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn\u2019t worried about \u201Clive\u201D collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don\u2019t; we\u2019d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n  return typeof data === \"object\" && \"length\" in data\n    ? data // Array, TypedArray, NodeList, array-like\n    : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n", "import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n", "export default function(onenter, onupdate, onexit) {\n  var enter = this.enter(), update = this, exit = this.exit();\n  if (typeof onenter === \"function\") {\n    enter = onenter(enter);\n    if (enter) enter = enter.selection();\n  } else {\n    enter = enter.append(onenter + \"\");\n  }\n  if (onupdate != null) {\n    update = onupdate(update);\n    if (update) update = update.selection();\n  }\n  if (onexit == null) exit.remove(); else onexit(exit);\n  return enter && update ? enter.merge(update).order() : update;\n}\n", "import {Selection} from \"./index.js\";\n\nexport default function(context) {\n  var selection = context.selection ? context.selection() : context;\n\n  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Selection(merges, this._parents);\n}\n", "export default function() {\n\n  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n      if (node = group[i]) {\n        if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n        next = node;\n      }\n    }\n  }\n\n  return this;\n}\n", "import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n  if (!compare) compare = ascending;\n\n  function compareNode(a, b) {\n    return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n  }\n\n  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        sortgroup[i] = node;\n      }\n    }\n    sortgroup.sort(compareNode);\n  }\n\n  return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n", "export default function() {\n  var callback = arguments[0];\n  arguments[0] = this;\n  callback.apply(null, arguments);\n  return this;\n}\n", "export default function() {\n  return Array.from(this);\n}\n", "export default function() {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n      var node = group[i];\n      if (node) return node;\n    }\n  }\n\n  return null;\n}\n", "export default function() {\n  let size = 0;\n  for (const node of this) ++size; // eslint-disable-line no-unused-vars\n  return size;\n}\n", "export default function() {\n  return !this.node();\n}\n", "export default function(callback) {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) callback.call(node, node.__data__, i, group);\n    }\n  }\n\n  return this;\n}\n", "import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, value) {\n  return function() {\n    this.setAttribute(name, value);\n  };\n}\n\nfunction attrConstantNS(fullname, value) {\n  return function() {\n    this.setAttributeNS(fullname.space, fullname.local, value);\n  };\n}\n\nfunction attrFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttribute(name);\n    else this.setAttribute(name, v);\n  };\n}\n\nfunction attrFunctionNS(fullname, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n    else this.setAttributeNS(fullname.space, fullname.local, v);\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name);\n\n  if (arguments.length < 2) {\n    var node = this.node();\n    return fullname.local\n        ? node.getAttributeNS(fullname.space, fullname.local)\n        : node.getAttribute(fullname);\n  }\n\n  return this.each((value == null\n      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)\n      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n", "export default function(node) {\n  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n      || (node.document && node) // node is a Window\n      || node.defaultView; // node is a Document\n}\n", "import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, value, priority) {\n  return function() {\n    this.style.setProperty(name, value, priority);\n  };\n}\n\nfunction styleFunction(name, value, priority) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.style.removeProperty(name);\n    else this.style.setProperty(name, v, priority);\n  };\n}\n\nexport default function(name, value, priority) {\n  return arguments.length > 1\n      ? this.each((value == null\n            ? styleRemove : typeof value === \"function\"\n            ? styleFunction\n            : styleConstant)(name, value, priority == null ? \"\" : priority))\n      : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n  return node.style.getPropertyValue(name)\n      || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n", "function propertyRemove(name) {\n  return function() {\n    delete this[name];\n  };\n}\n\nfunction propertyConstant(name, value) {\n  return function() {\n    this[name] = value;\n  };\n}\n\nfunction propertyFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) delete this[name];\n    else this[name] = v;\n  };\n}\n\nexport default function(name, value) {\n  return arguments.length > 1\n      ? this.each((value == null\n          ? propertyRemove : typeof value === \"function\"\n          ? propertyFunction\n          : propertyConstant)(name, value))\n      : this.node()[name];\n}\n", "function classArray(string) {\n  return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n  return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n  this._node = node;\n  this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n  add: function(name) {\n    var i = this._names.indexOf(name);\n    if (i < 0) {\n      this._names.push(name);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  remove: function(name) {\n    var i = this._names.indexOf(name);\n    if (i >= 0) {\n      this._names.splice(i, 1);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  contains: function(name) {\n    return this._names.indexOf(name) >= 0;\n  }\n};\n\nfunction classedAdd(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n  return function() {\n    classedAdd(this, names);\n  };\n}\n\nfunction classedFalse(names) {\n  return function() {\n    classedRemove(this, names);\n  };\n}\n\nfunction classedFunction(names, value) {\n  return function() {\n    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n  };\n}\n\nexport default function(name, value) {\n  var names = classArray(name + \"\");\n\n  if (arguments.length < 2) {\n    var list = classList(this.node()), i = -1, n = names.length;\n    while (++i < n) if (!list.contains(names[i])) return false;\n    return true;\n  }\n\n  return this.each((typeof value === \"function\"\n      ? classedFunction : value\n      ? classedTrue\n      : classedFalse)(names, value));\n}\n", "function textRemove() {\n  this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.textContent = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? textRemove : (typeof value === \"function\"\n          ? textFunction\n          : textConstant)(value))\n      : this.node().textContent;\n}\n", "function htmlRemove() {\n  this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n  return function() {\n    this.innerHTML = value;\n  };\n}\n\nfunction htmlFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.innerHTML = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? htmlRemove : (typeof value === \"function\"\n          ? htmlFunction\n          : htmlConstant)(value))\n      : this.node().innerHTML;\n}\n", "function raise() {\n  if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n  return this.each(raise);\n}\n", "function lower() {\n  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n  return this.each(lower);\n}\n", "import creator from \"../creator.js\";\n\nexport default function(name) {\n  var create = typeof name === \"function\" ? name : creator(name);\n  return this.select(function() {\n    return this.appendChild(create.apply(this, arguments));\n  });\n}\n", "import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n  return null;\n}\n\nexport default function(name, before) {\n  var create = typeof name === \"function\" ? name : creator(name),\n      select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n  return this.select(function() {\n    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n  });\n}\n", "function remove() {\n  var parent = this.parentNode;\n  if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n  return this.each(remove);\n}\n", "function selection_cloneShallow() {\n  var clone = this.cloneNode(false), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n  var clone = this.cloneNode(true), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n", "export default function(value) {\n  return arguments.length\n      ? this.property(\"__data__\", value)\n      : this.node().__data__;\n}\n", "function contextListener(listener) {\n  return function(event) {\n    listener.call(this, event, this.__data__);\n  };\n}\n\nfunction parseTypenames(typenames) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    return {type: t, name: name};\n  });\n}\n\nfunction onRemove(typename) {\n  return function() {\n    var on = this.__on;\n    if (!on) return;\n    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n      } else {\n        on[++i] = o;\n      }\n    }\n    if (++i) on.length = i;\n    else delete this.__on;\n  };\n}\n\nfunction onAdd(typename, value, options) {\n  return function() {\n    var on = this.__on, o, listener = contextListener(value);\n    if (on) for (var j = 0, m = on.length; j < m; ++j) {\n      if ((o = on[j]).type === typename.type && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n        this.addEventListener(o.type, o.listener = listener, o.options = options);\n        o.value = value;\n        return;\n      }\n    }\n    this.addEventListener(typename.type, listener, options);\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n    if (!on) this.__on = [o];\n    else on.push(o);\n  };\n}\n\nexport default function(typename, value, options) {\n  var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n  if (arguments.length < 2) {\n    var on = this.node().__on;\n    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n      for (i = 0, o = on[j]; i < n; ++i) {\n        if ((t = typenames[i]).type === o.type && t.name === o.name) {\n          return o.value;\n        }\n      }\n    }\n    return;\n  }\n\n  on = value ? onAdd : onRemove;\n  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n  return this;\n}\n", "import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n  var window = defaultView(node),\n      event = window.CustomEvent;\n\n  if (typeof event === \"function\") {\n    event = new event(type, params);\n  } else {\n    event = window.document.createEvent(\"Event\");\n    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n    else event.initEvent(type, false, false);\n  }\n\n  node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params);\n  };\n}\n\nfunction dispatchFunction(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params.apply(this, arguments));\n  };\n}\n\nexport default function(type, params) {\n  return this.each((typeof params === \"function\"\n      ? dispatchFunction\n      : dispatchConstant)(type, params));\n}\n", "export default function*() {\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) yield node;\n    }\n  }\n}\n", "import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n  this._groups = groups;\n  this._parents = parents;\n}\n\nfunction selection() {\n  return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n  return this;\n}\n\nSelection.prototype = selection.prototype = {\n  constructor: Selection,\n  select: selection_select,\n  selectAll: selection_selectAll,\n  selectChild: selection_selectChild,\n  selectChildren: selection_selectChildren,\n  filter: selection_filter,\n  data: selection_data,\n  enter: selection_enter,\n  exit: selection_exit,\n  join: selection_join,\n  merge: selection_merge,\n  selection: selection_selection,\n  order: selection_order,\n  sort: selection_sort,\n  call: selection_call,\n  nodes: selection_nodes,\n  node: selection_node,\n  size: selection_size,\n  empty: selection_empty,\n  each: selection_each,\n  attr: selection_attr,\n  style: selection_style,\n  property: selection_property,\n  classed: selection_classed,\n  text: selection_text,\n  html: selection_html,\n  raise: selection_raise,\n  lower: selection_lower,\n  append: selection_append,\n  insert: selection_insert,\n  remove: selection_remove,\n  clone: selection_clone,\n  datum: selection_datum,\n  on: selection_on,\n  dispatch: selection_dispatch,\n  [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n", "import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n      : new Selection([[selector]], root);\n}\n", "export default function(event) {\n  let sourceEvent;\n  while (sourceEvent = event.sourceEvent) event = sourceEvent;\n  return event;\n}\n", "import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n  event = sourceEvent(event);\n  if (node === undefined) node = event.currentTarget;\n  if (node) {\n    var svg = node.ownerSVGElement || node;\n    if (svg.createSVGPoint) {\n      var point = svg.createSVGPoint();\n      point.x = event.clientX, point.y = event.clientY;\n      point = point.matrixTransform(node.getScreenCTM().inverse());\n      return [point.x, point.y];\n    }\n    if (node.getBoundingClientRect) {\n      var rect = node.getBoundingClientRect();\n      return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n    }\n  }\n  return [event.pageX, event.pageY];\n}\n", "export default function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n", "import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex = /^#([0-9a-f]{3,8})$/,\n    reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n    reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n    reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n    reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n    reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n    reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  copy(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHex8: color_formatHex8,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n  return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n      : null) // invalid hex\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb() {\n    return this;\n  },\n  clamp() {\n    return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n  },\n  displayable() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatHex8: rgb_formatHex8,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n  const a = clampa(this.opacity);\n  return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n  return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n  return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n  value = clampi(value);\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  clamp() {\n    return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n  },\n  displayable() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl() {\n    const a = clampa(this.opacity);\n    return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n  }\n}));\n\nfunction clamph(value) {\n  value = (value || 0) % 360;\n  return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n  return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n", "export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n", "import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n    Xn = 0.96422,\n    Yn = 1,\n    Zn = 0.82521,\n    t0 = 4 / 29,\n    t1 = 6 / 29,\n    t2 = 3 * t1 * t1,\n    t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n  if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n  if (o instanceof Hcl) return hcl2lab(o);\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\n  var r = rgb2lrgb(o.r),\n      g = rgb2lrgb(o.g),\n      b = rgb2lrgb(o.b),\n      y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n  if (r === g && g === b) x = z = y; else {\n    x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n    z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n  }\n  return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n  return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n  return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n  this.l = +l;\n  this.a = +a;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n  brighter(k) {\n    return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  darker(k) {\n    return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  rgb() {\n    var y = (this.l + 16) / 116,\n        x = isNaN(this.a) ? y : y + this.a / 500,\n        z = isNaN(this.b) ? y : y - this.b / 200;\n    x = Xn * lab2xyz(x);\n    y = Yn * lab2xyz(y);\n    z = Zn * lab2xyz(z);\n    return new Rgb(\n      lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n      lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n      lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n      this.opacity\n    );\n  }\n}));\n\nfunction xyz2lab(t) {\n  return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n  return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n  return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n  return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n  if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n  if (!(o instanceof Lab)) o = labConvert(o);\n  if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n  var h = Math.atan2(o.b, o.a) * degrees;\n  return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n  return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n  return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n  this.h = +h;\n  this.c = +c;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n  if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n  var h = o.h * radians;\n  return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n  brighter(k) {\n    return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n  },\n  darker(k) {\n    return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n  },\n  rgb() {\n    return hcl2lab(this).rgb();\n  }\n}));\n", "import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\nvar A = -0.14861,\n    B = +1.78277,\n    C = -0.29227,\n    D = -0.90649,\n    E = +1.97294,\n    ED = E * D,\n    EB = E * B,\n    BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n  if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n      bl = b - l,\n      k = (E * (g - l) - C * bl) / D,\n      s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n      h = s ? Math.atan2(k, bl) * degrees - 120 : NaN;\n  return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n  return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb() {\n    var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\n        l = +this.l,\n        a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n        cosh = Math.cos(h),\n        sinh = Math.sin(h);\n    return new Rgb(\n      255 * (l + a * (A * cosh + B * sinh)),\n      255 * (l + a * (C * cosh + D * sinh)),\n      255 * (l + a * (E * cosh)),\n      this.opacity\n    );\n  }\n}));\n", "export function basis(t1, v0, v1, v2, v3) {\n  var t2 = t1 * t1, t3 = t2 * t1;\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n      + (4 - 6 * t2 + 3 * t3) * v1\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n      + t3 * v3) / 6;\n}\n\nexport default function(values) {\n  var n = values.length - 1;\n  return function(t) {\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n        v1 = values[i],\n        v2 = values[i + 1],\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n", "import {basis} from \"./basis.js\";\n\nexport default function(values) {\n  var n = values.length;\n  return function(t) {\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n        v0 = values[(i + n - 1) % n],\n        v1 = values[i % n],\n        v2 = values[(i + 1) % n],\n        v3 = values[(i + 2) % n];\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n", "export default x => () => x;\n", "import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n", "import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n", "export default function(a, b) {\n  if (!b) b = [];\n  var n = a ? Math.min(b.length, a.length) : 0,\n      c = b.slice(),\n      i;\n  return function(t) {\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n    return c;\n  };\n}\n\nexport function isNumberArray(x) {\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n", "import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n", "export default function(a, b) {\n  var d = new Date;\n  return a = +a, b = +b, function(t) {\n    return d.setTime(a * (1 - t) + b * t), d;\n  };\n}\n", "export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n", "import value from \"./value.js\";\n\nexport default function(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = value(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n}\n", "import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n", "import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? constant(b)\n      : (t === \"number\" ? number\n      : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n      : b instanceof color ? rgb\n      : b instanceof Date ? date\n      : isNumberArray(b) ? numberArray\n      : Array.isArray(b) ? genericArray\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n      : number)(a, b);\n}\n", "export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return Math.round(a * (1 - t) + b * t);\n  };\n}\n", "var degrees = 180 / Math.PI;\n\nexport var identity = {\n  translateX: 0,\n  translateY: 0,\n  rotate: 0,\n  skewX: 0,\n  scaleX: 1,\n  scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n  var scaleX, scaleY, skewX;\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n  return {\n    translateX: e,\n    translateY: f,\n    rotate: Math.atan2(b, a) * degrees,\n    skewX: Math.atan(skewX) * degrees,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n", "import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n  const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n  return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n  if (value == null) return identity;\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n  svgNode.setAttribute(\"transform\", value);\n  if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n  value = value.matrix;\n  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n", "import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n  function pop(s) {\n    return s.length ? s.pop() + \" \" : \"\";\n  }\n\n  function translate(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb || yb) {\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n    }\n  }\n\n  function rotate(a, b, s, q) {\n    if (a !== b) {\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"rotate(\" + b + degParen);\n    }\n  }\n\n  function skewX(a, b, s, q) {\n    if (a !== b) {\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"skewX(\" + b + degParen);\n    }\n  }\n\n  function scale(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb !== 1 || yb !== 1) {\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n    }\n  }\n\n  return function(a, b) {\n    var s = [], // string constants and placeholders\n        q = []; // number interpolators\n    a = parse(a), b = parse(b);\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n    rotate(a.rotate, b.rotate, s, q);\n    skewX(a.skewX, b.skewX, s, q);\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n    a = b = null; // gc\n    return function(t) {\n      var i = -1, n = q.length, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n", "import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hsl(hue) {\n  return function(start, end) {\n    var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n        s = color(start.s, end.s),\n        l = color(start.l, end.l),\n        opacity = color(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.s = s(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n", "import {lab as colorLab} from \"d3-color\";\nimport color from \"./color.js\";\n\nexport default function lab(start, end) {\n  var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),\n      a = color(start.a, end.a),\n      b = color(start.b, end.b),\n      opacity = color(start.opacity, end.opacity);\n  return function(t) {\n    start.l = l(t);\n    start.a = a(t);\n    start.b = b(t);\n    start.opacity = opacity(t);\n    return start + \"\";\n  };\n}\n", "import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hcl(hue) {\n  return function(start, end) {\n    var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n        c = color(start.c, end.c),\n        l = color(start.l, end.l),\n        opacity = color(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.c = c(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n", "import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n  return (function cubehelixGamma(y) {\n    y = +y;\n\n    function cubehelix(start, end) {\n      var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n          s = color(start.s, end.s),\n          l = color(start.l, end.l),\n          opacity = color(start.opacity, end.opacity);\n      return function(t) {\n        start.h = h(t);\n        start.s = s(t);\n        start.l = l(Math.pow(t, y));\n        start.opacity = opacity(t);\n        return start + \"\";\n      };\n    }\n\n    cubehelix.gamma = cubehelixGamma;\n\n    return cubehelix;\n  })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n", "import {default as value} from \"./value.js\";\n\nexport default function piecewise(interpolate, values) {\n  if (values === undefined) values = interpolate, interpolate = value;\n  var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n  while (i < n) I[i] = interpolate(v, v = values[++i]);\n  return function(t) {\n    var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n    return I[i](t - i);\n  };\n}\n", "export default function(interpolator, n) {\n  var samples = new Array(n);\n  for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n  return samples;\n}\n", "var frame = 0, // is an animation frame pending?\n    timeout = 0, // is a timeout pending?\n    interval = 0, // are any timers active?\n    pokeDelay = 1000, // how frequently we check for clock skew\n    taskHead,\n    taskTail,\n    clockLast = 0,\n    clockNow = 0,\n    clockSkew = 0,\n    clock = typeof performance === \"object\" && performance.now ? performance : Date,\n    setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n  clockNow = 0;\n}\n\nexport function Timer() {\n  this._call =\n  this._time =\n  this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n  constructor: Timer,\n  restart: function(callback, delay, time) {\n    if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n    if (!this._next && taskTail !== this) {\n      if (taskTail) taskTail._next = this;\n      else taskHead = this;\n      taskTail = this;\n    }\n    this._call = callback;\n    this._time = time;\n    sleep();\n  },\n  stop: function() {\n    if (this._call) {\n      this._call = null;\n      this._time = Infinity;\n      sleep();\n    }\n  }\n};\n\nexport function timer(callback, delay, time) {\n  var t = new Timer;\n  t.restart(callback, delay, time);\n  return t;\n}\n\nexport function timerFlush() {\n  now(); // Get the current time, if not already set.\n  ++frame; // Pretend we\u2019ve set an alarm, if we haven\u2019t already.\n  var t = taskHead, e;\n  while (t) {\n    if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n    t = t._next;\n  }\n  --frame;\n}\n\nfunction wake() {\n  clockNow = (clockLast = clock.now()) + clockSkew;\n  frame = timeout = 0;\n  try {\n    timerFlush();\n  } finally {\n    frame = 0;\n    nap();\n    clockNow = 0;\n  }\n}\n\nfunction poke() {\n  var now = clock.now(), delay = now - clockLast;\n  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n  var t0, t1 = taskHead, t2, time = Infinity;\n  while (t1) {\n    if (t1._call) {\n      if (time > t1._time) time = t1._time;\n      t0 = t1, t1 = t1._next;\n    } else {\n      t2 = t1._next, t1._next = null;\n      t1 = t0 ? t0._next = t2 : taskHead = t2;\n    }\n  }\n  taskTail = t0;\n  sleep(time);\n}\n\nfunction sleep(time) {\n  if (frame) return; // Soonest alarm already set, or will be.\n  if (timeout) timeout = clearTimeout(timeout);\n  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n  if (delay > 24) {\n    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n    if (interval) interval = clearInterval(interval);\n  } else {\n    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n    frame = 1, setFrame(wake);\n  }\n}\n", "import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n  var t = new Timer;\n  delay = delay == null ? 0 : +delay;\n  t.restart(elapsed => {\n    t.stop();\n    callback(elapsed + delay);\n  }, delay, time);\n  return t;\n}\n", "import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n  var schedules = node.__transition;\n  if (!schedules) node.__transition = {};\n  else if (id in schedules) return;\n  create(node, id, {\n    name: name,\n    index: index, // For context during callback.\n    group: group, // For context during callback.\n    on: emptyOn,\n    tween: emptyTween,\n    time: timing.time,\n    delay: timing.delay,\n    duration: timing.duration,\n    ease: timing.ease,\n    timer: null,\n    state: CREATED\n  });\n}\n\nexport function init(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n  return schedule;\n}\n\nexport function set(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n  return schedule;\n}\n\nexport function get(node, id) {\n  var schedule = node.__transition;\n  if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n  return schedule;\n}\n\nfunction create(node, id, self) {\n  var schedules = node.__transition,\n      tween;\n\n  // Initialize the self timer when the transition is created.\n  // Note the actual delay is not known until the first callback!\n  schedules[id] = self;\n  self.timer = timer(schedule, 0, self.time);\n\n  function schedule(elapsed) {\n    self.state = SCHEDULED;\n    self.timer.restart(start, self.delay, self.time);\n\n    // If the elapsed delay is less than our first sleep, start immediately.\n    if (self.delay <= elapsed) start(elapsed - self.delay);\n  }\n\n  function start(elapsed) {\n    var i, j, n, o;\n\n    // If the state is not SCHEDULED, then we previously errored on start.\n    if (self.state !== SCHEDULED) return stop();\n\n    for (i in schedules) {\n      o = schedules[i];\n      if (o.name !== self.name) continue;\n\n      // While this element already has a starting transition during this frame,\n      // defer starting an interrupting transition until that transition has a\n      // chance to tick (and possibly end); see d3/d3-transition#54!\n      if (o.state === STARTED) return timeout(start);\n\n      // Interrupt the active transition, if any.\n      if (o.state === RUNNING) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n\n      // Cancel any pre-empted transitions.\n      else if (+i < id) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n    }\n\n    // Defer the first tick to end of the current frame; see d3/d3#1576.\n    // Note the transition may be canceled after start and before the first tick!\n    // Note this must be scheduled before the start event; see d3/d3-transition#16!\n    // Assuming this is successful, subsequent callbacks go straight to tick.\n    timeout(function() {\n      if (self.state === STARTED) {\n        self.state = RUNNING;\n        self.timer.restart(tick, self.delay, self.time);\n        tick(elapsed);\n      }\n    });\n\n    // Dispatch the start event.\n    // Note this must be done before the tween are initialized.\n    self.state = STARTING;\n    self.on.call(\"start\", node, node.__data__, self.index, self.group);\n    if (self.state !== STARTING) return; // interrupted\n    self.state = STARTED;\n\n    // Initialize the tween, deleting null tween.\n    tween = new Array(n = self.tween.length);\n    for (i = 0, j = -1; i < n; ++i) {\n      if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n        tween[++j] = o;\n      }\n    }\n    tween.length = j + 1;\n  }\n\n  function tick(elapsed) {\n    var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n        i = -1,\n        n = tween.length;\n\n    while (++i < n) {\n      tween[i].call(node, t);\n    }\n\n    // Dispatch the end event.\n    if (self.state === ENDING) {\n      self.on.call(\"end\", node, node.__data__, self.index, self.group);\n      stop();\n    }\n  }\n\n  function stop() {\n    self.state = ENDED;\n    self.timer.stop();\n    delete schedules[id];\n    for (var i in schedules) return; // eslint-disable-line no-unused-vars\n    delete node.__transition;\n  }\n}\n", "import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n  var schedules = node.__transition,\n      schedule,\n      active,\n      empty = true,\n      i;\n\n  if (!schedules) return;\n\n  name = name == null ? null : name + \"\";\n\n  for (i in schedules) {\n    if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n    active = schedule.state > STARTING && schedule.state < ENDING;\n    schedule.state = ENDED;\n    schedule.timer.stop();\n    schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n    delete schedules[i];\n  }\n\n  if (empty) delete node.__transition;\n}\n", "import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n  return this.each(function() {\n    interrupt(this, name);\n  });\n}\n", "import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n  var tween0, tween1;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we\u2019re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = tween0 = tween;\n      for (var i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1 = tween1.slice();\n          tween1.splice(i, 1);\n          break;\n        }\n      }\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nfunction tweenFunction(id, name, value) {\n  var tween0, tween1;\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we\u2019re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = (tween0 = tween).slice();\n      for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1[i] = t;\n          break;\n        }\n      }\n      if (i === n) tween1.push(t);\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nexport default function(name, value) {\n  var id = this._id;\n\n  name += \"\";\n\n  if (arguments.length < 2) {\n    var tween = get(this.node(), id).tween;\n    for (var i = 0, n = tween.length, t; i < n; ++i) {\n      if ((t = tween[i]).name === name) {\n        return t.value;\n      }\n    }\n    return null;\n  }\n\n  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n  var id = transition._id;\n\n  transition.each(function() {\n    var schedule = set(this, id);\n    (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n  });\n\n  return function(node) {\n    return get(node, id).value[name];\n  };\n}\n", "import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n  var c;\n  return (typeof b === \"number\" ? interpolateNumber\n      : b instanceof color ? interpolateRgb\n      : (c = color(b)) ? (b = c, interpolateRgb)\n      : interpolateString)(a, b);\n}\n", "import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttribute(name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttributeNS(fullname.space, fullname.local);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttribute(name);\n    string0 = this.getAttribute(name);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n    string0 = this.getAttributeNS(fullname.space, fullname.local);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n  return this.attrTween(name, typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n      : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n      : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n", "import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n  return function(t) {\n    this.setAttribute(name, i.call(this, t));\n  };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n  return function(t) {\n    this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n  };\n}\n\nfunction attrTweenNS(fullname, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nfunction attrTween(name, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value) {\n  var key = \"attr.\" + name;\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  var fullname = namespace(name);\n  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n", "import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n  return function() {\n    init(this, id).delay = +value.apply(this, arguments);\n  };\n}\n\nfunction delayConstant(id, value) {\n  return value = +value, function() {\n    init(this, id).delay = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? delayFunction\n          : delayConstant)(id, value))\n      : get(this.node(), id).delay;\n}\n", "import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n  return function() {\n    set(this, id).duration = +value.apply(this, arguments);\n  };\n}\n\nfunction durationConstant(id, value) {\n  return value = +value, function() {\n    set(this, id).duration = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? durationFunction\n          : durationConstant)(id, value))\n      : get(this.node(), id).duration;\n}\n", "import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    set(this, id).ease = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each(easeConstant(id, value))\n      : get(this.node(), id).ease;\n}\n", "import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (typeof v !== \"function\") throw new Error;\n    set(this, id).ease = v;\n  };\n}\n\nexport default function(value) {\n  if (typeof value !== \"function\") throw new Error;\n  return this.each(easeVarying(this._id, value));\n}\n", "import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, this._name, this._id);\n}\n", "import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n  if (transition._id !== this._id) throw new Error;\n\n  for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Transition(merges, this._parents, this._name, this._id);\n}\n", "import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n  return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n    var i = t.indexOf(\".\");\n    if (i >= 0) t = t.slice(0, i);\n    return !t || t === \"start\";\n  });\n}\n\nfunction onFunction(id, name, listener) {\n  var on0, on1, sit = start(name) ? init : set;\n  return function() {\n    var schedule = sit(this, id),\n        on = schedule.on;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we\u2019re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, listener) {\n  var id = this._id;\n\n  return arguments.length < 2\n      ? get(this.node(), id).on.on(name)\n      : this.each(onFunction(id, name, listener));\n}\n", "function removeFunction(id) {\n  return function() {\n    var parent = this.parentNode;\n    for (var i in this.__transition) if (+i !== id) return;\n    if (parent) parent.removeChild(this);\n  };\n}\n\nexport default function() {\n  return this.on(\"end.remove\", removeFunction(this._id));\n}\n", "import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n        schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, name, id);\n}\n", "import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n          if (child = children[k]) {\n            schedule(child, name, id, k, children, inherit);\n          }\n        }\n        subgroups.push(children);\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, parents, name, id);\n}\n", "import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n  return new Selection(this._groups, this._parents);\n}\n", "import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        string1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, string10 = string1);\n  };\n}\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = style(this, name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction styleFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        value1 = value(this),\n        string1 = value1 + \"\";\n    if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction styleMaybeRemove(id, name) {\n  var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n  return function() {\n    var schedule = set(this, id),\n        on = schedule.on,\n        listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we\u2019re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, value, priority) {\n  var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n  return value == null ? this\n      .styleTween(name, styleNull(name, i))\n      .on(\"end.style.\" + name, styleRemove(name))\n    : typeof value === \"function\" ? this\n      .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n      .each(styleMaybeRemove(this._id, name))\n    : this\n      .styleTween(name, styleConstant(name, i, value), priority)\n      .on(\"end.style.\" + name, null);\n}\n", "function styleInterpolate(name, i, priority) {\n  return function(t) {\n    this.style.setProperty(name, i.call(this, t), priority);\n  };\n}\n\nfunction styleTween(name, value, priority) {\n  var t, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n    return t;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value, priority) {\n  var key = \"style.\" + (name += \"\");\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n", "import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var value1 = value(this);\n    this.textContent = value1 == null ? \"\" : value1;\n  };\n}\n\nexport default function(value) {\n  return this.tween(\"text\", typeof value === \"function\"\n      ? textFunction(tweenValue(this, \"text\", value))\n      : textConstant(value == null ? \"\" : value + \"\"));\n}\n", "function textInterpolate(i) {\n  return function(t) {\n    this.textContent = i.call(this, t);\n  };\n}\n\nfunction textTween(value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(value) {\n  var key = \"text\";\n  if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, textTween(value));\n}\n", "import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n  var name = this._name,\n      id0 = this._id,\n      id1 = newId();\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        var inherit = get(node, id0);\n        schedule(node, name, id1, i, group, {\n          time: inherit.time + inherit.delay + inherit.duration,\n          delay: 0,\n          duration: inherit.duration,\n          ease: inherit.ease\n        });\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id1);\n}\n", "import {set} from \"./schedule.js\";\n\nexport default function() {\n  var on0, on1, that = this, id = that._id, size = that.size();\n  return new Promise(function(resolve, reject) {\n    var cancel = {value: reject},\n        end = {value: function() { if (--size === 0) resolve(); }};\n\n    that.each(function() {\n      var schedule = set(this, id),\n          on = schedule.on;\n\n      // If this node shared a dispatch with the previous node,\n      // just assign the updated shared dispatch and we\u2019re done!\n      // Otherwise, copy-on-write.\n      if (on !== on0) {\n        on1 = (on0 = on).copy();\n        on1._.cancel.push(cancel);\n        on1._.interrupt.push(cancel);\n        on1._.end.push(end);\n      }\n\n      schedule.on = on1;\n    });\n\n    // The selection was empty, resolve end immediately\n    if (size === 0) resolve();\n  });\n}\n", "import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n  this._groups = groups;\n  this._parents = parents;\n  this._name = name;\n  this._id = id;\n}\n\nexport default function transition(name) {\n  return selection().transition(name);\n}\n\nexport function newId() {\n  return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n  constructor: Transition,\n  select: transition_select,\n  selectAll: transition_selectAll,\n  selectChild: selection_prototype.selectChild,\n  selectChildren: selection_prototype.selectChildren,\n  filter: transition_filter,\n  merge: transition_merge,\n  selection: transition_selection,\n  transition: transition_transition,\n  call: selection_prototype.call,\n  nodes: selection_prototype.nodes,\n  node: selection_prototype.node,\n  size: selection_prototype.size,\n  empty: selection_prototype.empty,\n  each: selection_prototype.each,\n  on: transition_on,\n  attr: transition_attr,\n  attrTween: transition_attrTween,\n  style: transition_style,\n  styleTween: transition_styleTween,\n  text: transition_text,\n  textTween: transition_textTween,\n  remove: transition_remove,\n  tween: transition_tween,\n  delay: transition_delay,\n  duration: transition_duration,\n  ease: transition_ease,\n  easeVarying: transition_easeVarying,\n  end: transition_end,\n  [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n", "export function cubicIn(t) {\n  return t * t * t;\n}\n\nexport function cubicOut(t) {\n  return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n", "import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n  time: null, // Set on use.\n  delay: 0,\n  duration: 250,\n  ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n  var timing;\n  while (!(timing = node.__transition) || !(timing = timing[id])) {\n    if (!(node = node.parentNode)) {\n      throw new Error(`transition ${id} not found`);\n    }\n  }\n  return timing;\n}\n\nexport default function(name) {\n  var id,\n      timing;\n\n  if (name instanceof Transition) {\n    id = name._id, name = name._name;\n  } else {\n    id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n  }\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        schedule(node, name, id, i, group, timing || inherit(node, id));\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id);\n}\n", "import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n", "import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolate} from \"d3-interpolate\";\nimport {pointer, select} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport BrushEvent from \"./event.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\nvar MODE_DRAG = {name: \"drag\"},\n    MODE_SPACE = {name: \"space\"},\n    MODE_HANDLE = {name: \"handle\"},\n    MODE_CENTER = {name: \"center\"};\n\nconst {abs, max, min} = Math;\n\nfunction number1(e) {\n  return [+e[0], +e[1]];\n}\n\nfunction number2(e) {\n  return [number1(e[0]), number1(e[1])];\n}\n\nvar X = {\n  name: \"x\",\n  handles: [\"w\", \"e\"].map(type),\n  input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; },\n  output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n};\n\nvar Y = {\n  name: \"y\",\n  handles: [\"n\", \"s\"].map(type),\n  input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; },\n  output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n};\n\nvar XY = {\n  name: \"xy\",\n  handles: [\"n\", \"w\", \"e\", \"s\", \"nw\", \"ne\", \"sw\", \"se\"].map(type),\n  input: function(xy) { return xy == null ? null : number2(xy); },\n  output: function(xy) { return xy; }\n};\n\nvar cursors = {\n  overlay: \"crosshair\",\n  selection: \"move\",\n  n: \"ns-resize\",\n  e: \"ew-resize\",\n  s: \"ns-resize\",\n  w: \"ew-resize\",\n  nw: \"nwse-resize\",\n  ne: \"nesw-resize\",\n  se: \"nwse-resize\",\n  sw: \"nesw-resize\"\n};\n\nvar flipX = {\n  e: \"w\",\n  w: \"e\",\n  nw: \"ne\",\n  ne: \"nw\",\n  se: \"sw\",\n  sw: \"se\"\n};\n\nvar flipY = {\n  n: \"s\",\n  s: \"n\",\n  nw: \"sw\",\n  ne: \"se\",\n  se: \"ne\",\n  sw: \"nw\"\n};\n\nvar signsX = {\n  overlay: +1,\n  selection: +1,\n  n: null,\n  e: +1,\n  s: null,\n  w: -1,\n  nw: -1,\n  ne: +1,\n  se: +1,\n  sw: -1\n};\n\nvar signsY = {\n  overlay: +1,\n  selection: +1,\n  n: -1,\n  e: null,\n  s: +1,\n  w: null,\n  nw: -1,\n  ne: -1,\n  se: +1,\n  sw: +1\n};\n\nfunction type(t) {\n  return {type: t};\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n  return !event.ctrlKey && !event.button;\n}\n\nfunction defaultExtent() {\n  var svg = this.ownerSVGElement || this;\n  if (svg.hasAttribute(\"viewBox\")) {\n    svg = svg.viewBox.baseVal;\n    return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];\n  }\n  return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\n// Like d3.local, but with the name \u201C__brush\u201D rather than auto-generated.\nfunction local(node) {\n  while (!node.__brush) if (!(node = node.parentNode)) return;\n  return node.__brush;\n}\n\nfunction empty(extent) {\n  return extent[0][0] === extent[1][0]\n      || extent[0][1] === extent[1][1];\n}\n\nexport function brushSelection(node) {\n  var state = node.__brush;\n  return state ? state.dim.output(state.selection) : null;\n}\n\nexport function brushX() {\n  return brush(X);\n}\n\nexport function brushY() {\n  return brush(Y);\n}\n\nexport default function() {\n  return brush(XY);\n}\n\nfunction brush(dim) {\n  var extent = defaultExtent,\n      filter = defaultFilter,\n      touchable = defaultTouchable,\n      keys = true,\n      listeners = dispatch(\"start\", \"brush\", \"end\"),\n      handleSize = 6,\n      touchending;\n\n  function brush(group) {\n    var overlay = group\n        .property(\"__brush\", initialize)\n      .selectAll(\".overlay\")\n      .data([type(\"overlay\")]);\n\n    overlay.enter().append(\"rect\")\n        .attr(\"class\", \"overlay\")\n        .attr(\"pointer-events\", \"all\")\n        .attr(\"cursor\", cursors.overlay)\n      .merge(overlay)\n        .each(function() {\n          var extent = local(this).extent;\n          select(this)\n              .attr(\"x\", extent[0][0])\n              .attr(\"y\", extent[0][1])\n              .attr(\"width\", extent[1][0] - extent[0][0])\n              .attr(\"height\", extent[1][1] - extent[0][1]);\n        });\n\n    group.selectAll(\".selection\")\n      .data([type(\"selection\")])\n      .enter().append(\"rect\")\n        .attr(\"class\", \"selection\")\n        .attr(\"cursor\", cursors.selection)\n        .attr(\"fill\", \"#777\")\n        .attr(\"fill-opacity\", 0.3)\n        .attr(\"stroke\", \"#fff\")\n        .attr(\"shape-rendering\", \"crispEdges\");\n\n    var handle = group.selectAll(\".handle\")\n      .data(dim.handles, function(d) { return d.type; });\n\n    handle.exit().remove();\n\n    handle.enter().append(\"rect\")\n        .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n        .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\n    group\n        .each(redraw)\n        .attr(\"fill\", \"none\")\n        .attr(\"pointer-events\", \"all\")\n        .on(\"mousedown.brush\", started)\n      .filter(touchable)\n        .on(\"touchstart.brush\", started)\n        .on(\"touchmove.brush\", touchmoved)\n        .on(\"touchend.brush touchcancel.brush\", touchended)\n        .style(\"touch-action\", \"none\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  brush.move = function(group, selection, event) {\n    if (group.tween) {\n      group\n          .on(\"start.brush\", function(event) { emitter(this, arguments).beforestart().start(event); })\n          .on(\"interrupt.brush end.brush\", function(event) { emitter(this, arguments).end(event); })\n          .tween(\"brush\", function() {\n            var that = this,\n                state = that.__brush,\n                emit = emitter(that, arguments),\n                selection0 = state.selection,\n                selection1 = dim.input(typeof selection === \"function\" ? selection.apply(this, arguments) : selection, state.extent),\n                i = interpolate(selection0, selection1);\n\n            function tween(t) {\n              state.selection = t === 1 && selection1 === null ? null : i(t);\n              redraw.call(that);\n              emit.brush();\n            }\n\n            return selection0 !== null && selection1 !== null ? tween : tween(1);\n          });\n    } else {\n      group\n          .each(function() {\n            var that = this,\n                args = arguments,\n                state = that.__brush,\n                selection1 = dim.input(typeof selection === \"function\" ? selection.apply(that, args) : selection, state.extent),\n                emit = emitter(that, args).beforestart();\n\n            interrupt(that);\n            state.selection = selection1 === null ? null : selection1;\n            redraw.call(that);\n            emit.start(event).brush(event).end(event);\n          });\n    }\n  };\n\n  brush.clear = function(group, event) {\n    brush.move(group, null, event);\n  };\n\n  function redraw() {\n    var group = select(this),\n        selection = local(this).selection;\n\n    if (selection) {\n      group.selectAll(\".selection\")\n          .style(\"display\", null)\n          .attr(\"x\", selection[0][0])\n          .attr(\"y\", selection[0][1])\n          .attr(\"width\", selection[1][0] - selection[0][0])\n          .attr(\"height\", selection[1][1] - selection[0][1]);\n\n      group.selectAll(\".handle\")\n          .style(\"display\", null)\n          .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\n          .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\n          .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\n          .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\n    }\n\n    else {\n      group.selectAll(\".selection,.handle\")\n          .style(\"display\", \"none\")\n          .attr(\"x\", null)\n          .attr(\"y\", null)\n          .attr(\"width\", null)\n          .attr(\"height\", null);\n    }\n  }\n\n  function emitter(that, args, clean) {\n    var emit = that.__brush.emitter;\n    return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean);\n  }\n\n  function Emitter(that, args, clean) {\n    this.that = that;\n    this.args = args;\n    this.state = that.__brush;\n    this.active = 0;\n    this.clean = clean;\n  }\n\n  Emitter.prototype = {\n    beforestart: function() {\n      if (++this.active === 1) this.state.emitter = this, this.starting = true;\n      return this;\n    },\n    start: function(event, mode) {\n      if (this.starting) this.starting = false, this.emit(\"start\", event, mode);\n      else this.emit(\"brush\", event);\n      return this;\n    },\n    brush: function(event, mode) {\n      this.emit(\"brush\", event, mode);\n      return this;\n    },\n    end: function(event, mode) {\n      if (--this.active === 0) delete this.state.emitter, this.emit(\"end\", event, mode);\n      return this;\n    },\n    emit: function(type, event, mode) {\n      var d = select(this.that).datum();\n      listeners.call(\n        type,\n        this.that,\n        new BrushEvent(type, {\n          sourceEvent: event,\n          target: brush,\n          selection: dim.output(this.state.selection),\n          mode,\n          dispatch: listeners\n        }),\n        d\n      );\n    }\n  };\n\n  function started(event) {\n    if (touchending && !event.touches) return;\n    if (!filter.apply(this, arguments)) return;\n\n    var that = this,\n        type = event.target.__data__.type,\n        mode = (keys && event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE),\n        signX = dim === Y ? null : signsX[type],\n        signY = dim === X ? null : signsY[type],\n        state = local(that),\n        extent = state.extent,\n        selection = state.selection,\n        W = extent[0][0], w0, w1,\n        N = extent[0][1], n0, n1,\n        E = extent[1][0], e0, e1,\n        S = extent[1][1], s0, s1,\n        dx = 0,\n        dy = 0,\n        moving,\n        shifting = signX && signY && keys && event.shiftKey,\n        lockX,\n        lockY,\n        points = Array.from(event.touches || [event], t => {\n          const i = t.identifier;\n          t = pointer(t, that);\n          t.point0 = t.slice();\n          t.identifier = i;\n          return t;\n        });\n\n    interrupt(that);\n    var emit = emitter(that, arguments, true).beforestart();\n\n    if (type === \"overlay\") {\n      if (selection) moving = true;\n      const pts = [points[0], points[1] || points[0]];\n      state.selection = selection = [[\n          w0 = dim === Y ? W : min(pts[0][0], pts[1][0]),\n          n0 = dim === X ? N : min(pts[0][1], pts[1][1])\n        ], [\n          e0 = dim === Y ? E : max(pts[0][0], pts[1][0]),\n          s0 = dim === X ? S : max(pts[0][1], pts[1][1])\n        ]];\n      if (points.length > 1) move(event);\n    } else {\n      w0 = selection[0][0];\n      n0 = selection[0][1];\n      e0 = selection[1][0];\n      s0 = selection[1][1];\n    }\n\n    w1 = w0;\n    n1 = n0;\n    e1 = e0;\n    s1 = s0;\n\n    var group = select(that)\n        .attr(\"pointer-events\", \"none\");\n\n    var overlay = group.selectAll(\".overlay\")\n        .attr(\"cursor\", cursors[type]);\n\n    if (event.touches) {\n      emit.moved = moved;\n      emit.ended = ended;\n    } else {\n      var view = select(event.view)\n          .on(\"mousemove.brush\", moved, true)\n          .on(\"mouseup.brush\", ended, true);\n      if (keys) view\n          .on(\"keydown.brush\", keydowned, true)\n          .on(\"keyup.brush\", keyupped, true)\n\n      dragDisable(event.view);\n    }\n\n    redraw.call(that);\n    emit.start(event, mode.name);\n\n    function moved(event) {\n      for (const p of event.changedTouches || [event]) {\n        for (const d of points)\n          if (d.identifier === p.identifier) d.cur = pointer(p, that);\n      }\n      if (shifting && !lockX && !lockY && points.length === 1) {\n        const point = points[0];\n        if (abs(point.cur[0] - point[0]) > abs(point.cur[1] - point[1]))\n          lockY = true;\n        else\n          lockX = true;\n      }\n      for (const point of points)\n        if (point.cur) point[0] = point.cur[0], point[1] = point.cur[1];\n      moving = true;\n      noevent(event);\n      move(event);\n    }\n\n    function move(event) {\n      const point = points[0], point0 = point.point0;\n      var t;\n\n      dx = point[0] - point0[0];\n      dy = point[1] - point0[1];\n\n      switch (mode) {\n        case MODE_SPACE:\n        case MODE_DRAG: {\n          if (signX) dx = max(W - w0, min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n          if (signY) dy = max(N - n0, min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n          break;\n        }\n        case MODE_HANDLE: {\n          if (points[1]) {\n            if (signX) w1 = max(W, min(E, points[0][0])), e1 = max(W, min(E, points[1][0])), signX = 1;\n            if (signY) n1 = max(N, min(S, points[0][1])), s1 = max(N, min(S, points[1][1])), signY = 1;\n          } else {\n            if (signX < 0) dx = max(W - w0, min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n            else if (signX > 0) dx = max(W - e0, min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n            if (signY < 0) dy = max(N - n0, min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n            else if (signY > 0) dy = max(N - s0, min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n          }\n          break;\n        }\n        case MODE_CENTER: {\n          if (signX) w1 = max(W, min(E, w0 - dx * signX)), e1 = max(W, min(E, e0 + dx * signX));\n          if (signY) n1 = max(N, min(S, n0 - dy * signY)), s1 = max(N, min(S, s0 + dy * signY));\n          break;\n        }\n      }\n\n      if (e1 < w1) {\n        signX *= -1;\n        t = w0, w0 = e0, e0 = t;\n        t = w1, w1 = e1, e1 = t;\n        if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n      }\n\n      if (s1 < n1) {\n        signY *= -1;\n        t = n0, n0 = s0, s0 = t;\n        t = n1, n1 = s1, s1 = t;\n        if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n      }\n\n      if (state.selection) selection = state.selection; // May be set by brush.move!\n      if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n      if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n      if (selection[0][0] !== w1\n          || selection[0][1] !== n1\n          || selection[1][0] !== e1\n          || selection[1][1] !== s1) {\n        state.selection = [[w1, n1], [e1, s1]];\n        redraw.call(that);\n        emit.brush(event, mode.name);\n      }\n    }\n\n    function ended(event) {\n      nopropagation(event);\n      if (event.touches) {\n        if (event.touches.length) return;\n        if (touchending) clearTimeout(touchending);\n        touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n      } else {\n        dragEnable(event.view, moving);\n        view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n      }\n      group.attr(\"pointer-events\", \"all\");\n      overlay.attr(\"cursor\", cursors.overlay);\n      if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\n      if (empty(selection)) state.selection = null, redraw.call(that);\n      emit.end(event, mode.name);\n    }\n\n    function keydowned(event) {\n      switch (event.keyCode) {\n        case 16: { // SHIFT\n          shifting = signX && signY;\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_HANDLE) {\n            if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n            if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n            mode = MODE_CENTER;\n            move(event);\n          }\n          break;\n        }\n        case 32: { // SPACE; takes priority over ALT\n          if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n            if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n            mode = MODE_SPACE;\n            overlay.attr(\"cursor\", cursors.selection);\n            move(event);\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent(event);\n    }\n\n    function keyupped(event) {\n      switch (event.keyCode) {\n        case 16: { // SHIFT\n          if (shifting) {\n            lockX = lockY = shifting = false;\n            move(event);\n          }\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n            if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n            mode = MODE_HANDLE;\n            move(event);\n          }\n          break;\n        }\n        case 32: { // SPACE\n          if (mode === MODE_SPACE) {\n            if (event.altKey) {\n              if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n              if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n              mode = MODE_CENTER;\n            } else {\n              if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n              if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n              mode = MODE_HANDLE;\n            }\n            overlay.attr(\"cursor\", cursors[type]);\n            move(event);\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent(event);\n    }\n  }\n\n  function touchmoved(event) {\n    emitter(this, arguments).moved(event);\n  }\n\n  function touchended(event) {\n    emitter(this, arguments).ended(event);\n  }\n\n  function initialize() {\n    var state = this.__brush || {selection: null};\n    state.extent = number2(extent.apply(this, arguments));\n    state.dim = dim;\n    return state;\n  }\n\n  brush.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant(number2(_)), brush) : extent;\n  };\n\n  brush.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), brush) : filter;\n  };\n\n  brush.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), brush) : touchable;\n  };\n\n  brush.handleSize = function(_) {\n    return arguments.length ? (handleSize = +_, brush) : handleSize;\n  };\n\n  brush.keyModifiers = function(_) {\n    return arguments.length ? (keys = !!_, brush) : keys;\n  };\n\n  brush.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? brush : value;\n  };\n\n  return brush;\n}\n", "const pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n  this._ += strings[0];\n  for (let i = 1, n = strings.length; i < n; ++i) {\n    this._ += arguments[i] + strings[i];\n  }\n}\n\nfunction appendRound(digits) {\n  let d = Math.floor(digits);\n  if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n  if (d > 15) return append;\n  const k = 10 ** d;\n  return function(strings) {\n    this._ += strings[0];\n    for (let i = 1, n = strings.length; i < n; ++i) {\n      this._ += Math.round(arguments[i] * k) / k + strings[i];\n    }\n  };\n}\n\nexport class Path {\n  constructor(digits) {\n    this._x0 = this._y0 = // start of current subpath\n    this._x1 = this._y1 = null; // end of current subpath\n    this._ = \"\";\n    this._append = digits == null ? append : appendRound(digits);\n  }\n  moveTo(x, y) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n  }\n  closePath() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._append`Z`;\n    }\n  }\n  lineTo(x, y) {\n    this._append`L${this._x1 = +x},${this._y1 = +y}`;\n  }\n  quadraticCurveTo(x1, y1, x, y) {\n    this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  bezierCurveTo(x1, y1, x2, y2, x, y) {\n    this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  arcTo(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let x0 = this._x1,\n        y0 = this._y1,\n        x21 = x2 - x1,\n        y21 = y2 - y1,\n        x01 = x0 - x1,\n        y01 = y0 - y1,\n        l01_2 = x01 * x01 + y01 * y01;\n\n    // Is this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._append`M${this._x1 = x1},${this._y1 = y1}`;\n    }\n\n    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n    else if (!(l01_2 > epsilon));\n\n    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n    // Equivalently, is (x1,y1) coincident with (x2,y2)?\n    // Or, is the radius zero? Line to (x1,y1).\n    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n      this._append`L${this._x1 = x1},${this._y1 = y1}`;\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      let x20 = x2 - x0,\n          y20 = y2 - y0,\n          l21_2 = x21 * x21 + y21 * y21,\n          l20_2 = x20 * x20 + y20 * y20,\n          l21 = Math.sqrt(l21_2),\n          l01 = Math.sqrt(l01_2),\n          l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n          t01 = l / l01,\n          t21 = l / l21;\n\n      // If the start tangent is not coincident with (x0,y0), line to.\n      if (Math.abs(t01 - 1) > epsilon) {\n        this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n      }\n\n      this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n    }\n  }\n  arc(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let dx = r * Math.cos(a0),\n        dy = r * Math.sin(a0),\n        x0 = x + dx,\n        y0 = y + dy,\n        cw = 1 ^ ccw,\n        da = ccw ? a0 - a1 : a1 - a0;\n\n    // Is this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._append`M${x0},${y0}`;\n    }\n\n    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n      this._append`L${x0},${y0}`;\n    }\n\n    // Is this arc empty? We\u2019re done.\n    if (!r) return;\n\n    // Does the angle go the wrong way? Flip the direction.\n    if (da < 0) da = da % tau + tau;\n\n    // Is this a complete circle? Draw two arcs to complete the circle.\n    if (da > tauEpsilon) {\n      this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n    }\n\n    // Is this arc non-empty? Draw an arc!\n    else if (da > epsilon) {\n      this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n    }\n  }\n  rect(x, y, w, h) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n  }\n  toString() {\n    return this._;\n  }\n}\n\nexport function path() {\n  return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n  return new Path(+digits);\n}\n", "export default function(x) {\n  return Math.abs(x = Math.round(x)) >= 1e21\n      ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n      : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, \u00B1Infinity\n  var i, coefficient = x.slice(0, i);\n\n  // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n  // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n  return [\n    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n    +x.slice(i + 1)\n  ];\n}\n", "import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n  return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n", "export default function(grouping, thousands) {\n  return function(value, width) {\n    var i = value.length,\n        t = [],\n        j = 0,\n        g = grouping[0],\n        length = 0;\n\n    while (i > 0 && g > 0) {\n      if (length + g + 1 > width) g = Math.max(1, width - length);\n      t.push(value.substring(i -= g, i + g));\n      if ((length += g + 1) > width) break;\n      g = grouping[j = (j + 1) % grouping.length];\n    }\n\n    return t.reverse().join(thousands);\n  };\n}\n", "export default function(numerals) {\n  return function(value) {\n    return value.replace(/[0-9]/g, function(i) {\n      return numerals[+i];\n    });\n  };\n}\n", "// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n  var match;\n  return new FormatSpecifier({\n    fill: match[1],\n    align: match[2],\n    sign: match[3],\n    symbol: match[4],\n    zero: match[5],\n    width: match[6],\n    comma: match[7],\n    precision: match[8] && match[8].slice(1),\n    trim: match[9],\n    type: match[10]\n  });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n  this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n  this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n  this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n  this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n  this.zero = !!specifier.zero;\n  this.width = specifier.width === undefined ? undefined : +specifier.width;\n  this.comma = !!specifier.comma;\n  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n  this.trim = !!specifier.trim;\n  this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n  return this.fill\n      + this.align\n      + this.sign\n      + this.symbol\n      + (this.zero ? \"0\" : \"\")\n      + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n      + (this.comma ? \",\" : \"\")\n      + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n      + (this.trim ? \"~\" : \"\")\n      + this.type;\n};\n", "// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n    switch (s[i]) {\n      case \".\": i0 = i1 = i; break;\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n      default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n", "import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1],\n      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n      n = coefficient.length;\n  return i === n ? coefficient\n      : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n      : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n      : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n", "import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1];\n  return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n      : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n", "import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n  \"%\": (x, p) => (x * 100).toFixed(p),\n  \"b\": (x) => Math.round(x).toString(2),\n  \"c\": (x) => x + \"\",\n  \"d\": formatDecimal,\n  \"e\": (x, p) => x.toExponential(p),\n  \"f\": (x, p) => x.toFixed(p),\n  \"g\": (x, p) => x.toPrecision(p),\n  \"o\": (x) => Math.round(x).toString(8),\n  \"p\": (x, p) => formatRounded(x * 100, p),\n  \"r\": formatRounded,\n  \"s\": formatPrefixAuto,\n  \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n  \"x\": (x) => Math.round(x).toString(16)\n};\n", "export default function(x) {\n  return x;\n}\n", "import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n    prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"\u00B5\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n  var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n      currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n      currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n      decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n      numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n      percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n      minus = locale.minus === undefined ? \"\u2212\" : locale.minus + \"\",\n      nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n  function newFormat(specifier) {\n    specifier = formatSpecifier(specifier);\n\n    var fill = specifier.fill,\n        align = specifier.align,\n        sign = specifier.sign,\n        symbol = specifier.symbol,\n        zero = specifier.zero,\n        width = specifier.width,\n        comma = specifier.comma,\n        precision = specifier.precision,\n        trim = specifier.trim,\n        type = specifier.type;\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // The \"\" type, and any invalid type, is an alias for \".12~g\".\n    else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    // Compute the prefix and suffix.\n    // For SI-prefix, the suffix is lazily computed.\n    var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n        suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n    // What format function should we use?\n    // Is this an integer type?\n    // Can this type generate exponential notation?\n    var formatType = formatTypes[type],\n        maybeSuffix = /[defgprs%]/.test(type);\n\n    // Set the default precision if not specified,\n    // or clamp the specified precision to the supported range.\n    // For significant precision, it must be in [1, 21].\n    // For fixed precision, it must be in [0, 20].\n    precision = precision === undefined ? 6\n        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n        : Math.max(0, Math.min(20, precision));\n\n    function format(value) {\n      var valuePrefix = prefix,\n          valueSuffix = suffix,\n          i, n, c;\n\n      if (type === \"c\") {\n        valueSuffix = formatType(value) + valueSuffix;\n        value = \"\";\n      } else {\n        value = +value;\n\n        // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n        var valueNegative = value < 0 || 1 / value < 0;\n\n        // Perform the initial formatting.\n        value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n        // Trim insignificant zeros.\n        if (trim) value = formatTrim(value);\n\n        // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n        if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n        // Compute the prefix and suffix.\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n        valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n        // Break the formatted value into the integer \u201Cvalue\u201D part that can be\n        // grouped, and fractional or exponential \u201Csuffix\u201D part that is not.\n        if (maybeSuffix) {\n          i = -1, n = value.length;\n          while (++i < n) {\n            if (c = value.charCodeAt(i), 48 > c || c > 57) {\n              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n              value = value.slice(0, i);\n              break;\n            }\n          }\n        }\n      }\n\n      // If the fill character is not \"0\", grouping is applied before padding.\n      if (comma && !zero) value = group(value, Infinity);\n\n      // Compute the padding.\n      var length = valuePrefix.length + value.length + valueSuffix.length,\n          padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n      // If the fill character is \"0\", grouping is applied after padding.\n      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n      // Reconstruct the final output based on the desired alignment.\n      switch (align) {\n        case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n        case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n        case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n        default: value = padding + valuePrefix + value + valueSuffix; break;\n      }\n\n      return numerals(value);\n    }\n\n    format.toString = function() {\n      return specifier + \"\";\n    };\n\n    return format;\n  }\n\n  function formatPrefix(specifier, value) {\n    var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n        e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n        k = Math.pow(10, -e),\n        prefix = prefixes[8 + e / 3];\n    return function(value) {\n      return f(k * value) + prefix;\n    };\n  }\n\n  return {\n    format: newFormat,\n    formatPrefix: formatPrefix\n  };\n}\n", "import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n  thousands: \",\",\n  grouping: [3],\n  currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  format = locale.format;\n  formatPrefix = locale.formatPrefix;\n  return locale;\n}\n", "import exponent from \"./exponent.js\";\n\nexport default function(step) {\n  return Math.max(0, -exponent(Math.abs(step)));\n}\n", "import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n", "import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n  step = Math.abs(step), max = Math.abs(max) - step;\n  return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n", "export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var hypot = Math.hypot;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n  return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n  return (x = sin(x / 2)) * x;\n}\n", "export default function noop() {}\n", "function streamGeometry(geometry, stream) {\n  if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n    streamGeometryType[geometry.type](geometry, stream);\n  }\n}\n\nvar streamObjectType = {\n  Feature: function(object, stream) {\n    streamGeometry(object.geometry, stream);\n  },\n  FeatureCollection: function(object, stream) {\n    var features = object.features, i = -1, n = features.length;\n    while (++i < n) streamGeometry(features[i].geometry, stream);\n  }\n};\n\nvar streamGeometryType = {\n  Sphere: function(object, stream) {\n    stream.sphere();\n  },\n  Point: function(object, stream) {\n    object = object.coordinates;\n    stream.point(object[0], object[1], object[2]);\n  },\n  MultiPoint: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n  },\n  LineString: function(object, stream) {\n    streamLine(object.coordinates, stream, 0);\n  },\n  MultiLineString: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamLine(coordinates[i], stream, 0);\n  },\n  Polygon: function(object, stream) {\n    streamPolygon(object.coordinates, stream);\n  },\n  MultiPolygon: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamPolygon(coordinates[i], stream);\n  },\n  GeometryCollection: function(object, stream) {\n    var geometries = object.geometries, i = -1, n = geometries.length;\n    while (++i < n) streamGeometry(geometries[i], stream);\n  }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n  var i = -1, n = coordinates.length - closed, coordinate;\n  stream.lineStart();\n  while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n  stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n  var i = -1, n = coordinates.length;\n  stream.polygonStart();\n  while (++i < n) streamLine(coordinates[i], stream, 1);\n  stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n  if (object && streamObjectType.hasOwnProperty(object.type)) {\n    streamObjectType[object.type](object, stream);\n  } else {\n    streamGeometry(object, stream);\n  }\n}\n", "import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function spherical(cartesian) {\n  return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n  var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n  return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n  return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n  a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n  return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n  var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n  d[0] /= l, d[1] /= l, d[2] /= l;\n}\n", "export default function(a, b) {\n\n  function compose(x, y) {\n    return x = a(x, y), b(x[0], x[1]);\n  }\n\n  if (a.invert && b.invert) compose.invert = function(x, y) {\n    return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n  };\n\n  return compose;\n}\n", "import compose from \"./compose.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n  if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n  return [lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n  return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n    : rotationLambda(deltaLambda))\n    : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n    : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n  return function(lambda, phi) {\n    lambda += deltaLambda;\n    if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n    return [lambda, phi];\n  };\n}\n\nfunction rotationLambda(deltaLambda) {\n  var rotation = forwardRotationLambda(deltaLambda);\n  rotation.invert = forwardRotationLambda(-deltaLambda);\n  return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n  var cosDeltaPhi = cos(deltaPhi),\n      sinDeltaPhi = sin(deltaPhi),\n      cosDeltaGamma = cos(deltaGamma),\n      sinDeltaGamma = sin(deltaGamma);\n\n  function rotation(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaPhi + x * sinDeltaPhi;\n    return [\n      atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n      asin(k * cosDeltaGamma + y * sinDeltaGamma)\n    ];\n  }\n\n  rotation.invert = function(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaGamma - y * sinDeltaGamma;\n    return [\n      atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n      asin(k * cosDeltaPhi - x * sinDeltaPhi)\n    ];\n  };\n\n  return rotation;\n}\n\nexport default function(rotate) {\n  rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n  function forward(coordinates) {\n    coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  }\n\n  forward.invert = function(coordinates) {\n    coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  };\n\n  return forward;\n}\n", "import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0\u00B0, 0\u00B0], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n  if (!delta) return;\n  var cosRadius = cos(radius),\n      sinRadius = sin(radius),\n      step = direction * delta;\n  if (t0 == null) {\n    t0 = radius + direction * tau;\n    t1 = radius - step / 2;\n  } else {\n    t0 = circleRadius(cosRadius, t0);\n    t1 = circleRadius(cosRadius, t1);\n    if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n  }\n  for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n    point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n    stream.point(point[0], point[1]);\n  }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n  point = cartesian(point), point[0] -= cosRadius;\n  cartesianNormalizeInPlace(point);\n  var radius = acos(-point[1]);\n  return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n  var center = constant([0, 0]),\n      radius = constant(90),\n      precision = constant(6),\n      ring,\n      rotate,\n      stream = {point: point};\n\n  function point(x, y) {\n    ring.push(x = rotate(x, y));\n    x[0] *= degrees, x[1] *= degrees;\n  }\n\n  function circle() {\n    var c = center.apply(this, arguments),\n        r = radius.apply(this, arguments) * radians,\n        p = precision.apply(this, arguments) * radians;\n    ring = [];\n    rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n    circleStream(stream, r, p, 1);\n    c = {type: \"Polygon\", coordinates: [ring]};\n    ring = rotate = null;\n    return c;\n  }\n\n  circle.center = function(_) {\n    return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n  };\n\n  circle.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n  };\n\n  circle.precision = function(_) {\n    return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n  };\n\n  return circle;\n}\n", "import noop from \"../noop.js\";\n\nexport default function() {\n  var lines = [],\n      line;\n  return {\n    point: function(x, y, m) {\n      line.push([x, y, m]);\n    },\n    lineStart: function() {\n      lines.push(line = []);\n    },\n    lineEnd: noop,\n    rejoin: function() {\n      if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n    },\n    result: function() {\n      var result = lines;\n      lines = [];\n      line = null;\n      return result;\n    }\n  };\n}\n", "import {abs, epsilon} from \"./math.js\";\n\nexport default function(a, b) {\n  return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n", "import pointEqual from \"../pointEqual.js\";\nimport {epsilon} from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n  this.x = point;\n  this.z = points;\n  this.o = other; // another intersection\n  this.e = entry; // is an entry?\n  this.v = false; // visited\n  this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n  var subject = [],\n      clip = [],\n      i,\n      n;\n\n  segments.forEach(function(segment) {\n    if ((n = segment.length - 1) <= 0) return;\n    var n, p0 = segment[0], p1 = segment[n], x;\n\n    if (pointEqual(p0, p1)) {\n      if (!p0[2] && !p1[2]) {\n        stream.lineStart();\n        for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n        stream.lineEnd();\n        return;\n      }\n      // handle degenerate cases by moving the point\n      p1[0] += 2 * epsilon;\n    }\n\n    subject.push(x = new Intersection(p0, segment, null, true));\n    clip.push(x.o = new Intersection(p0, null, x, false));\n    subject.push(x = new Intersection(p1, segment, null, false));\n    clip.push(x.o = new Intersection(p1, null, x, true));\n  });\n\n  if (!subject.length) return;\n\n  clip.sort(compareIntersection);\n  link(subject);\n  link(clip);\n\n  for (i = 0, n = clip.length; i < n; ++i) {\n    clip[i].e = startInside = !startInside;\n  }\n\n  var start = subject[0],\n      points,\n      point;\n\n  while (1) {\n    // Find first unvisited intersection.\n    var current = start,\n        isSubject = true;\n    while (current.v) if ((current = current.n) === start) return;\n    points = current.z;\n    stream.lineStart();\n    do {\n      current.v = current.o.v = true;\n      if (current.e) {\n        if (isSubject) {\n          for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.n.x, 1, stream);\n        }\n        current = current.n;\n      } else {\n        if (isSubject) {\n          points = current.p.z;\n          for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.p.x, -1, stream);\n        }\n        current = current.p;\n      }\n      current = current.o;\n      points = current.z;\n      isSubject = !isSubject;\n    } while (!current.v);\n    stream.lineEnd();\n  }\n}\n\nfunction link(array) {\n  if (!(n = array.length)) return;\n  var n,\n      i = 0,\n      a = array[0],\n      b;\n  while (++i < n) {\n    a.n = b = array[i];\n    b.p = a;\n    a = b;\n  }\n  a.n = b = array[0];\n  b.p = a;\n}\n", "import {Adder} from \"d3-array\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, epsilon2, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nfunction longitude(point) {\n  return abs(point[0]) <= pi ? point[0] : sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n  var lambda = longitude(point),\n      phi = point[1],\n      sinPhi = sin(phi),\n      normal = [sin(lambda), -cos(lambda), 0],\n      angle = 0,\n      winding = 0;\n\n  var sum = new Adder();\n\n  if (sinPhi === 1) phi = halfPi + epsilon;\n  else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n  for (var i = 0, n = polygon.length; i < n; ++i) {\n    if (!(m = (ring = polygon[i]).length)) continue;\n    var ring,\n        m,\n        point0 = ring[m - 1],\n        lambda0 = longitude(point0),\n        phi0 = point0[1] / 2 + quarterPi,\n        sinPhi0 = sin(phi0),\n        cosPhi0 = cos(phi0);\n\n    for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n      var point1 = ring[j],\n          lambda1 = longitude(point1),\n          phi1 = point1[1] / 2 + quarterPi,\n          sinPhi1 = sin(phi1),\n          cosPhi1 = cos(phi1),\n          delta = lambda1 - lambda0,\n          sign = delta >= 0 ? 1 : -1,\n          absDelta = sign * delta,\n          antimeridian = absDelta > pi,\n          k = sinPhi0 * sinPhi1;\n\n      sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n      angle += antimeridian ? delta + sign * tau : delta;\n\n      // Are the longitudes either side of the point\u2019s meridian (lambda),\n      // and are the latitudes smaller than the parallel (phi)?\n      if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n        var arc = cartesianCross(cartesian(point0), cartesian(point1));\n        cartesianNormalizeInPlace(arc);\n        var intersection = cartesianCross(normal, arc);\n        cartesianNormalizeInPlace(intersection);\n        var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n        if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n          winding += antimeridian ^ delta >= 0 ? 1 : -1;\n        }\n      }\n    }\n  }\n\n  // First, determine whether the South pole is inside or outside:\n  //\n  // It is inside if:\n  // * the polygon winds around it in a clockwise direction.\n  // * the polygon does not (cumulatively) wind around it, but has a negative\n  //   (counter-clockwise) area.\n  //\n  // Second, count the (signed) number of times a segment crosses a lambda\n  // from the point to the South pole.  If it is zero, then the point is the\n  // same side as the South pole.\n\n  return (angle < -epsilon || angle < epsilon && sum < -epsilon2) ^ (winding & 1);\n}\n", "import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n  return function(sink) {\n    var line = clipLine(sink),\n        ringBuffer = clipBuffer(),\n        ringSink = clipLine(ringBuffer),\n        polygonStarted = false,\n        polygon,\n        segments,\n        ring;\n\n    var clip = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() {\n        clip.point = pointRing;\n        clip.lineStart = ringStart;\n        clip.lineEnd = ringEnd;\n        segments = [];\n        polygon = [];\n      },\n      polygonEnd: function() {\n        clip.point = point;\n        clip.lineStart = lineStart;\n        clip.lineEnd = lineEnd;\n        segments = merge(segments);\n        var startInside = polygonContains(polygon, start);\n        if (segments.length) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n        } else if (startInside) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          interpolate(null, null, 1, sink);\n          sink.lineEnd();\n        }\n        if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n        segments = polygon = null;\n      },\n      sphere: function() {\n        sink.polygonStart();\n        sink.lineStart();\n        interpolate(null, null, 1, sink);\n        sink.lineEnd();\n        sink.polygonEnd();\n      }\n    };\n\n    function point(lambda, phi) {\n      if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n    }\n\n    function pointLine(lambda, phi) {\n      line.point(lambda, phi);\n    }\n\n    function lineStart() {\n      clip.point = pointLine;\n      line.lineStart();\n    }\n\n    function lineEnd() {\n      clip.point = point;\n      line.lineEnd();\n    }\n\n    function pointRing(lambda, phi) {\n      ring.push([lambda, phi]);\n      ringSink.point(lambda, phi);\n    }\n\n    function ringStart() {\n      ringSink.lineStart();\n      ring = [];\n    }\n\n    function ringEnd() {\n      pointRing(ring[0][0], ring[0][1]);\n      ringSink.lineEnd();\n\n      var clean = ringSink.clean(),\n          ringSegments = ringBuffer.result(),\n          i, n = ringSegments.length, m,\n          segment,\n          point;\n\n      ring.pop();\n      polygon.push(ring);\n      ring = null;\n\n      if (!n) return;\n\n      // No intersections.\n      if (clean & 1) {\n        segment = ringSegments[0];\n        if ((m = segment.length - 1) > 0) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n          sink.lineEnd();\n        }\n        return;\n      }\n\n      // Rejoin connected segments.\n      // TODO reuse ringBuffer.rejoin()?\n      if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n      segments.push(ringSegments.filter(validSegment));\n    }\n\n    return clip;\n  };\n}\n\nfunction validSegment(segment) {\n  return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n  return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n       - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n", "import clip from \"./index.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\n\nexport default clip(\n  function() { return true; },\n  clipAntimeridianLine,\n  clipAntimeridianInterpolate,\n  [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n  var lambda0 = NaN,\n      phi0 = NaN,\n      sign0 = NaN,\n      clean; // no intersections\n\n  return {\n    lineStart: function() {\n      stream.lineStart();\n      clean = 1;\n    },\n    point: function(lambda1, phi1) {\n      var sign1 = lambda1 > 0 ? pi : -pi,\n          delta = abs(lambda1 - lambda0);\n      if (abs(delta - pi) < epsilon) { // line crosses a pole\n        stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        stream.point(lambda1, phi0);\n        clean = 0;\n      } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n        if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n        if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n        phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        clean = 0;\n      }\n      stream.point(lambda0 = lambda1, phi0 = phi1);\n      sign0 = sign1;\n    },\n    lineEnd: function() {\n      stream.lineEnd();\n      lambda0 = phi0 = NaN;\n    },\n    clean: function() {\n      return 2 - clean; // if intersections, rejoin first and last segments\n    }\n  };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n  var cosPhi0,\n      cosPhi1,\n      sinLambda0Lambda1 = sin(lambda0 - lambda1);\n  return abs(sinLambda0Lambda1) > epsilon\n      ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n          - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n          / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n      : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n  var phi;\n  if (from == null) {\n    phi = direction * halfPi;\n    stream.point(-pi, phi);\n    stream.point(0, phi);\n    stream.point(pi, phi);\n    stream.point(pi, 0);\n    stream.point(pi, -phi);\n    stream.point(0, -phi);\n    stream.point(-pi, -phi);\n    stream.point(-pi, 0);\n    stream.point(-pi, phi);\n  } else if (abs(from[0] - to[0]) > epsilon) {\n    var lambda = from[0] < to[0] ? pi : -pi;\n    phi = direction * lambda / 2;\n    stream.point(-lambda, phi);\n    stream.point(0, phi);\n    stream.point(lambda, phi);\n  } else {\n    stream.point(to[0], to[1]);\n  }\n}\n", "import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n  var cr = cos(radius),\n      delta = 6 * radians,\n      smallRadius = cr > 0,\n      notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n  function interpolate(from, to, direction, stream) {\n    circleStream(stream, radius, delta, direction, from, to);\n  }\n\n  function visible(lambda, phi) {\n    return cos(lambda) * cos(phi) > cr;\n  }\n\n  // Takes a line and cuts into visible segments. Return values used for polygon\n  // clipping: 0 - there were intersections or the line was empty; 1 - no\n  // intersections 2 - there were intersections, and the first and last segments\n  // should be rejoined.\n  function clipLine(stream) {\n    var point0, // previous point\n        c0, // code for previous point\n        v0, // visibility of previous point\n        v00, // visibility of first point\n        clean; // no intersections\n    return {\n      lineStart: function() {\n        v00 = v0 = false;\n        clean = 1;\n      },\n      point: function(lambda, phi) {\n        var point1 = [lambda, phi],\n            point2,\n            v = visible(lambda, phi),\n            c = smallRadius\n              ? v ? 0 : code(lambda, phi)\n              : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n        if (!point0 && (v00 = v0 = v)) stream.lineStart();\n        if (v !== v0) {\n          point2 = intersect(point0, point1);\n          if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n            point1[2] = 1;\n        }\n        if (v !== v0) {\n          clean = 0;\n          if (v) {\n            // outside going in\n            stream.lineStart();\n            point2 = intersect(point1, point0);\n            stream.point(point2[0], point2[1]);\n          } else {\n            // inside going out\n            point2 = intersect(point0, point1);\n            stream.point(point2[0], point2[1], 2);\n            stream.lineEnd();\n          }\n          point0 = point2;\n        } else if (notHemisphere && point0 && smallRadius ^ v) {\n          var t;\n          // If the codes for two points are different, or are both zero,\n          // and there this segment intersects with the small circle.\n          if (!(c & c0) && (t = intersect(point1, point0, true))) {\n            clean = 0;\n            if (smallRadius) {\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1]);\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n            } else {\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1], 3);\n            }\n          }\n        }\n        if (v && (!point0 || !pointEqual(point0, point1))) {\n          stream.point(point1[0], point1[1]);\n        }\n        point0 = point1, v0 = v, c0 = c;\n      },\n      lineEnd: function() {\n        if (v0) stream.lineEnd();\n        point0 = null;\n      },\n      // Rejoin first and last segments if there were intersections and the first\n      // and last points were visible.\n      clean: function() {\n        return clean | ((v00 && v0) << 1);\n      }\n    };\n  }\n\n  // Intersects the great circle between a and b with the clip circle.\n  function intersect(a, b, two) {\n    var pa = cartesian(a),\n        pb = cartesian(b);\n\n    // We have two planes, n1.p = d1 and n2.p = d2.\n    // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 \u2A2F n2).\n    var n1 = [1, 0, 0], // normal\n        n2 = cartesianCross(pa, pb),\n        n2n2 = cartesianDot(n2, n2),\n        n1n2 = n2[0], // cartesianDot(n1, n2),\n        determinant = n2n2 - n1n2 * n1n2;\n\n    // Two polar points.\n    if (!determinant) return !two && a;\n\n    var c1 =  cr * n2n2 / determinant,\n        c2 = -cr * n1n2 / determinant,\n        n1xn2 = cartesianCross(n1, n2),\n        A = cartesianScale(n1, c1),\n        B = cartesianScale(n2, c2);\n    cartesianAddInPlace(A, B);\n\n    // Solve |p(t)|^2 = 1.\n    var u = n1xn2,\n        w = cartesianDot(A, u),\n        uu = cartesianDot(u, u),\n        t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n    if (t2 < 0) return;\n\n    var t = sqrt(t2),\n        q = cartesianScale(u, (-w - t) / uu);\n    cartesianAddInPlace(q, A);\n    q = spherical(q);\n\n    if (!two) return q;\n\n    // Two intersection points.\n    var lambda0 = a[0],\n        lambda1 = b[0],\n        phi0 = a[1],\n        phi1 = b[1],\n        z;\n\n    if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n    var delta = lambda1 - lambda0,\n        polar = abs(delta - pi) < epsilon,\n        meridian = polar || delta < epsilon;\n\n    if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n    // Check that the first point is between a and b.\n    if (meridian\n        ? polar\n          ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n          : phi0 <= q[1] && q[1] <= phi1\n        : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n      var q1 = cartesianScale(u, (-w + t) / uu);\n      cartesianAddInPlace(q1, A);\n      return [q, spherical(q1)];\n    }\n  }\n\n  // Generates a 4-bit vector representing the location of a point relative to\n  // the small circle's bounding box.\n  function code(lambda, phi) {\n    var r = smallRadius ? radius : pi - radius,\n        code = 0;\n    if (lambda < -r) code |= 1; // left\n    else if (lambda > r) code |= 2; // right\n    if (phi < -r) code |= 4; // below\n    else if (phi > r) code |= 8; // above\n    return code;\n  }\n\n  return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n", "export default function(a, b, x0, y0, x1, y1) {\n  var ax = a[0],\n      ay = a[1],\n      bx = b[0],\n      by = b[1],\n      t0 = 0,\n      t1 = 1,\n      dx = bx - ax,\n      dy = by - ay,\n      r;\n\n  r = x0 - ax;\n  if (!dx && r > 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dx > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = x1 - ax;\n  if (!dx && r < 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dx > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  r = y0 - ay;\n  if (!dy && r > 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dy > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = y1 - ay;\n  if (!dy && r < 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dy > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n  if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n  return true;\n}\n", "import {abs, epsilon} from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon\u2019s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n  function visible(x, y) {\n    return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n  }\n\n  function interpolate(from, to, direction, stream) {\n    var a = 0, a1 = 0;\n    if (from == null\n        || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n        || comparePoint(from, to) < 0 ^ direction > 0) {\n      do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n      while ((a = (a + direction + 4) % 4) !== a1);\n    } else {\n      stream.point(to[0], to[1]);\n    }\n  }\n\n  function corner(p, direction) {\n    return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n        : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n        : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n        : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n  }\n\n  function compareIntersection(a, b) {\n    return comparePoint(a.x, b.x);\n  }\n\n  function comparePoint(a, b) {\n    var ca = corner(a, 1),\n        cb = corner(b, 1);\n    return ca !== cb ? ca - cb\n        : ca === 0 ? b[1] - a[1]\n        : ca === 1 ? a[0] - b[0]\n        : ca === 2 ? a[1] - b[1]\n        : b[0] - a[0];\n  }\n\n  return function(stream) {\n    var activeStream = stream,\n        bufferStream = clipBuffer(),\n        segments,\n        polygon,\n        ring,\n        x__, y__, v__, // first point\n        x_, y_, v_, // previous point\n        first,\n        clean;\n\n    var clipStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: polygonStart,\n      polygonEnd: polygonEnd\n    };\n\n    function point(x, y) {\n      if (visible(x, y)) activeStream.point(x, y);\n    }\n\n    function polygonInside() {\n      var winding = 0;\n\n      for (var i = 0, n = polygon.length; i < n; ++i) {\n        for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n          a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n          if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n          else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n        }\n      }\n\n      return winding;\n    }\n\n    // Buffer geometry within a polygon and then clip it en masse.\n    function polygonStart() {\n      activeStream = bufferStream, segments = [], polygon = [], clean = true;\n    }\n\n    function polygonEnd() {\n      var startInside = polygonInside(),\n          cleanInside = clean && startInside,\n          visible = (segments = merge(segments)).length;\n      if (cleanInside || visible) {\n        stream.polygonStart();\n        if (cleanInside) {\n          stream.lineStart();\n          interpolate(null, null, 1, stream);\n          stream.lineEnd();\n        }\n        if (visible) {\n          clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n        }\n        stream.polygonEnd();\n      }\n      activeStream = stream, segments = polygon = ring = null;\n    }\n\n    function lineStart() {\n      clipStream.point = linePoint;\n      if (polygon) polygon.push(ring = []);\n      first = true;\n      v_ = false;\n      x_ = y_ = NaN;\n    }\n\n    // TODO rather than special-case polygons, simply handle them separately.\n    // Ideally, coincident intersection points should be jittered to avoid\n    // clipping issues.\n    function lineEnd() {\n      if (segments) {\n        linePoint(x__, y__);\n        if (v__ && v_) bufferStream.rejoin();\n        segments.push(bufferStream.result());\n      }\n      clipStream.point = point;\n      if (v_) activeStream.lineEnd();\n    }\n\n    function linePoint(x, y) {\n      var v = visible(x, y);\n      if (polygon) ring.push([x, y]);\n      if (first) {\n        x__ = x, y__ = y, v__ = v;\n        first = false;\n        if (v) {\n          activeStream.lineStart();\n          activeStream.point(x, y);\n        }\n      } else {\n        if (v && v_) activeStream.point(x, y);\n        else {\n          var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n              b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n          if (clipLine(a, b, x0, y0, x1, y1)) {\n            if (!v_) {\n              activeStream.lineStart();\n              activeStream.point(a[0], a[1]);\n            }\n            activeStream.point(b[0], b[1]);\n            if (!v) activeStream.lineEnd();\n            clean = false;\n          } else if (v) {\n            activeStream.lineStart();\n            activeStream.point(x, y);\n            clean = false;\n          }\n        }\n      }\n      x_ = x, y_ = y, v_ = v;\n    }\n\n    return clipStream;\n  };\n}\n", "export default x => x;\n", "import {Adder} from \"d3-array\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = new Adder(),\n    areaRingSum = new Adder(),\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar areaStream = {\n  point: noop,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: function() {\n    areaStream.lineStart = areaRingStart;\n    areaStream.lineEnd = areaRingEnd;\n  },\n  polygonEnd: function() {\n    areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n    areaSum.add(abs(areaRingSum));\n    areaRingSum = new Adder();\n  },\n  result: function() {\n    var area = areaSum / 2;\n    areaSum = new Adder();\n    return area;\n  }\n};\n\nfunction areaRingStart() {\n  areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n  areaStream.point = areaPoint;\n  x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n  areaRingSum.add(y0 * x - x0 * y);\n  x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n  areaPoint(x00, y00);\n}\n\nexport default areaStream;\n", "import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n    y0 = x0,\n    x1 = -x0,\n    y1 = x1;\n\nvar boundsStream = {\n  point: boundsPoint,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: noop,\n  polygonEnd: noop,\n  result: function() {\n    var bounds = [[x0, y0], [x1, y1]];\n    x1 = y1 = -(y0 = x0 = Infinity);\n    return bounds;\n  }\n};\n\nfunction boundsPoint(x, y) {\n  if (x < x0) x0 = x;\n  if (x > x1) x1 = x;\n  if (y < y0) y0 = y;\n  if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n", "import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n    Y0 = 0,\n    Z0 = 0,\n    X1 = 0,\n    Y1 = 0,\n    Z1 = 0,\n    X2 = 0,\n    Y2 = 0,\n    Z2 = 0,\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar centroidStream = {\n  point: centroidPoint,\n  lineStart: centroidLineStart,\n  lineEnd: centroidLineEnd,\n  polygonStart: function() {\n    centroidStream.lineStart = centroidRingStart;\n    centroidStream.lineEnd = centroidRingEnd;\n  },\n  polygonEnd: function() {\n    centroidStream.point = centroidPoint;\n    centroidStream.lineStart = centroidLineStart;\n    centroidStream.lineEnd = centroidLineEnd;\n  },\n  result: function() {\n    var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n        : Z1 ? [X1 / Z1, Y1 / Z1]\n        : Z0 ? [X0 / Z0, Y0 / Z0]\n        : [NaN, NaN];\n    X0 = Y0 = Z0 =\n    X1 = Y1 = Z1 =\n    X2 = Y2 = Z2 = 0;\n    return centroid;\n  }\n};\n\nfunction centroidPoint(x, y) {\n  X0 += x;\n  Y0 += y;\n  ++Z0;\n}\n\nfunction centroidLineStart() {\n  centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n  centroidStream.point = centroidPointLine;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n  var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n  X1 += z * (x0 + x) / 2;\n  Y1 += z * (y0 + y) / 2;\n  Z1 += z;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n  centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n  centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n  centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n  centroidStream.point = centroidPointRing;\n  centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n  var dx = x - x0,\n      dy = y - y0,\n      z = sqrt(dx * dx + dy * dy);\n\n  X1 += z * (x0 + x) / 2;\n  Y1 += z * (y0 + y) / 2;\n  Z1 += z;\n\n  z = y0 * x - x0 * y;\n  X2 += z * (x0 + x);\n  Y2 += z * (y0 + y);\n  Z2 += z * 3;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n", "import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n  this._context = context;\n}\n\nPathContext.prototype = {\n  _radius: 4.5,\n  pointRadius: function(_) {\n    return this._radius = _, this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._context.closePath();\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._context.moveTo(x, y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._context.lineTo(x, y);\n        break;\n      }\n      default: {\n        this._context.moveTo(x + this._radius, y);\n        this._context.arc(x, y, this._radius, 0, tau);\n        break;\n      }\n    }\n  },\n  result: noop\n};\n", "import {Adder} from \"d3-array\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = new Adder(),\n    lengthRing,\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar lengthStream = {\n  point: noop,\n  lineStart: function() {\n    lengthStream.point = lengthPointFirst;\n  },\n  lineEnd: function() {\n    if (lengthRing) lengthPoint(x00, y00);\n    lengthStream.point = noop;\n  },\n  polygonStart: function() {\n    lengthRing = true;\n  },\n  polygonEnd: function() {\n    lengthRing = null;\n  },\n  result: function() {\n    var length = +lengthSum;\n    lengthSum = new Adder();\n    return length;\n  }\n};\n\nfunction lengthPointFirst(x, y) {\n  lengthStream.point = lengthPoint;\n  x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n  x0 -= x, y0 -= y;\n  lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n  x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n", "// Simple caching for constant-radius points.\nlet cacheDigits, cacheAppend, cacheRadius, cacheCircle;\n\nexport default class PathString {\n  constructor(digits) {\n    this._append = digits == null ? append : appendRound(digits);\n    this._radius = 4.5;\n    this._ = \"\";\n  }\n  pointRadius(_) {\n    this._radius = +_;\n    return this;\n  }\n  polygonStart() {\n    this._line = 0;\n  }\n  polygonEnd() {\n    this._line = NaN;\n  }\n  lineStart() {\n    this._point = 0;\n  }\n  lineEnd() {\n    if (this._line === 0) this._ += \"Z\";\n    this._point = NaN;\n  }\n  point(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._append`M${x},${y}`;\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._append`L${x},${y}`;\n        break;\n      }\n      default: {\n        this._append`M${x},${y}`;\n        if (this._radius !== cacheRadius || this._append !== cacheAppend) {\n          const r = this._radius;\n          const s = this._;\n          this._ = \"\"; // stash the old string so we can cache the circle path fragment\n          this._append`m0,${r}a${r},${r} 0 1,1 0,${-2 * r}a${r},${r} 0 1,1 0,${2 * r}z`;\n          cacheRadius = r;\n          cacheAppend = this._append;\n          cacheCircle = this._;\n          this._ = s;\n        }\n        this._ += cacheCircle;\n        break;\n      }\n    }\n  }\n  result() {\n    const result = this._;\n    this._ = \"\";\n    return result.length ? result : null;\n  }\n}\n\nfunction append(strings) {\n  let i = 1;\n  this._ += strings[0];\n  for (const j = strings.length; i < j; ++i) {\n    this._ += arguments[i] + strings[i];\n  }\n}\n\nfunction appendRound(digits) {\n  const d = Math.floor(digits);\n  if (!(d >= 0)) throw new RangeError(`invalid digits: ${digits}`);\n  if (d > 15) return append;\n  if (d !== cacheDigits) {\n    const k = 10 ** d;\n    cacheDigits = d;\n    cacheAppend = function append(strings) {\n      let i = 1;\n      this._ += strings[0];\n      for (const j = strings.length; i < j; ++i) {\n        this._ += Math.round(arguments[i] * k) / k + strings[i];\n      }\n    };\n  }\n  return cacheAppend;\n}\n", "import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n  let digits = 3,\n      pointRadius = 4.5,\n      projectionStream,\n      contextStream;\n\n  function path(object) {\n    if (object) {\n      if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n      stream(object, projectionStream(contextStream));\n    }\n    return contextStream.result();\n  }\n\n  path.area = function(object) {\n    stream(object, projectionStream(pathArea));\n    return pathArea.result();\n  };\n\n  path.measure = function(object) {\n    stream(object, projectionStream(pathMeasure));\n    return pathMeasure.result();\n  };\n\n  path.bounds = function(object) {\n    stream(object, projectionStream(pathBounds));\n    return pathBounds.result();\n  };\n\n  path.centroid = function(object) {\n    stream(object, projectionStream(pathCentroid));\n    return pathCentroid.result();\n  };\n\n  path.projection = function(_) {\n    if (!arguments.length) return projection;\n    projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream;\n    return path;\n  };\n\n  path.context = function(_) {\n    if (!arguments.length) return context;\n    contextStream = _ == null ? (context = null, new PathString(digits)) : new PathContext(context = _);\n    if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n    return path;\n  };\n\n  path.pointRadius = function(_) {\n    if (!arguments.length) return pointRadius;\n    pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n    return path;\n  };\n\n  path.digits = function(_) {\n    if (!arguments.length) return digits;\n    if (_ == null) digits = null;\n    else {\n      const d = Math.floor(_);\n      if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n      digits = d;\n    }\n    if (context === null) contextStream = new PathString(digits);\n    return path;\n  };\n\n  return path.projection(projection).digits(digits).context(context);\n}\n", "export default function(methods) {\n  return {\n    stream: transformer(methods)\n  };\n}\n\nexport function transformer(methods) {\n  return function(stream) {\n    var s = new TransformStream;\n    for (var key in methods) s[key] = methods[key];\n    s.stream = stream;\n    return s;\n  };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n  constructor: TransformStream,\n  point: function(x, y) { this.stream.point(x, y); },\n  sphere: function() { this.stream.sphere(); },\n  lineStart: function() { this.stream.lineStart(); },\n  lineEnd: function() { this.stream.lineEnd(); },\n  polygonStart: function() { this.stream.polygonStart(); },\n  polygonEnd: function() { this.stream.polygonEnd(); }\n};\n", "import {default as geoStream} from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n  var clip = projection.clipExtent && projection.clipExtent();\n  projection.scale(150).translate([0, 0]);\n  if (clip != null) projection.clipExtent(null);\n  geoStream(object, projection.stream(boundsStream));\n  fitBounds(boundsStream.result());\n  if (clip != null) projection.clipExtent(clip);\n  return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n  return fit(projection, function(b) {\n    var w = extent[1][0] - extent[0][0],\n        h = extent[1][1] - extent[0][1],\n        k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n        x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n        y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nexport function fitSize(projection, size, object) {\n  return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n  return fit(projection, function(b) {\n    var w = +width,\n        k = w / (b[1][0] - b[0][0]),\n        x = (w - k * (b[1][0] + b[0][0])) / 2,\n        y = -k * b[0][1];\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n  return fit(projection, function(b) {\n    var h = +height,\n        k = h / (b[1][1] - b[0][1]),\n        x = -k * b[0][0],\n        y = (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n", "import {cartesian} from \"../cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n    cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n  return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n  return transformer({\n    point: function(x, y) {\n      x = project(x, y);\n      this.stream.point(x[0], x[1]);\n    }\n  });\n}\n\nfunction resample(project, delta2) {\n\n  function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n    var dx = x1 - x0,\n        dy = y1 - y0,\n        d2 = dx * dx + dy * dy;\n    if (d2 > 4 * delta2 && depth--) {\n      var a = a0 + a1,\n          b = b0 + b1,\n          c = c0 + c1,\n          m = sqrt(a * a + b * b + c * c),\n          phi2 = asin(c /= m),\n          lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n          p = project(lambda2, phi2),\n          x2 = p[0],\n          y2 = p[1],\n          dx2 = x2 - x0,\n          dy2 = y2 - y0,\n          dz = dy * dx2 - dx * dy2;\n      if (dz * dz / d2 > delta2 // perpendicular projected distance\n          || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n          || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n        resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n        stream.point(x2, y2);\n        resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n      }\n    }\n  }\n  return function(stream) {\n    var lambda00, x00, y00, a00, b00, c00, // first point\n        lambda0, x0, y0, a0, b0, c0; // previous point\n\n    var resampleStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n      polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n    };\n\n    function point(x, y) {\n      x = project(x, y);\n      stream.point(x[0], x[1]);\n    }\n\n    function lineStart() {\n      x0 = NaN;\n      resampleStream.point = linePoint;\n      stream.lineStart();\n    }\n\n    function linePoint(lambda, phi) {\n      var c = cartesian([lambda, phi]), p = project(lambda, phi);\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n      stream.point(x0, y0);\n    }\n\n    function lineEnd() {\n      resampleStream.point = point;\n      stream.lineEnd();\n    }\n\n    function ringStart() {\n      lineStart();\n      resampleStream.point = ringPoint;\n      resampleStream.lineEnd = ringEnd;\n    }\n\n    function ringPoint(lambda, phi) {\n      linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n      resampleStream.point = linePoint;\n    }\n\n    function ringEnd() {\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n      resampleStream.lineEnd = lineEnd;\n      lineEnd();\n    }\n\n    return resampleStream;\n  };\n}\n", "import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\n\nvar transformRadians = transformer({\n  point: function(x, y) {\n    this.stream.point(x * radians, y * radians);\n  }\n});\n\nfunction transformRotate(rotate) {\n  return transformer({\n    point: function(x, y) {\n      var r = rotate(x, y);\n      return this.stream.point(r[0], r[1]);\n    }\n  });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n  function transform(x, y) {\n    x *= sx; y *= sy;\n    return [dx + k * x, dy - k * y];\n  }\n  transform.invert = function(x, y) {\n    return [(x - dx) / k * sx, (dy - y) / k * sy];\n  };\n  return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n  if (!alpha) return scaleTranslate(k, dx, dy, sx, sy);\n  var cosAlpha = cos(alpha),\n      sinAlpha = sin(alpha),\n      a = cosAlpha * k,\n      b = sinAlpha * k,\n      ai = cosAlpha / k,\n      bi = sinAlpha / k,\n      ci = (sinAlpha * dy - cosAlpha * dx) / k,\n      fi = (sinAlpha * dx + cosAlpha * dy) / k;\n  function transform(x, y) {\n    x *= sx; y *= sy;\n    return [a * x - b * y + dx, dy - b * x - a * y];\n  }\n  transform.invert = function(x, y) {\n    return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n  };\n  return transform;\n}\n\nexport default function projection(project) {\n  return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n  var project,\n      k = 150, // scale\n      x = 480, y = 250, // translate\n      lambda = 0, phi = 0, // center\n      deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n      alpha = 0, // post-rotate angle\n      sx = 1, // reflectX\n      sy = 1, // reflectX\n      theta = null, preclip = clipAntimeridian, // pre-clip angle\n      x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n      delta2 = 0.5, // precision\n      projectResample,\n      projectTransform,\n      projectRotateTransform,\n      cache,\n      cacheStream;\n\n  function projection(point) {\n    return projectRotateTransform(point[0] * radians, point[1] * radians);\n  }\n\n  function invert(point) {\n    point = projectRotateTransform.invert(point[0], point[1]);\n    return point && [point[0] * degrees, point[1] * degrees];\n  }\n\n  projection.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n  };\n\n  projection.preclip = function(_) {\n    return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n  };\n\n  projection.postclip = function(_) {\n    return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n  };\n\n  projection.clipAngle = function(_) {\n    return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n  };\n\n  projection.clipExtent = function(_) {\n    return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  projection.scale = function(_) {\n    return arguments.length ? (k = +_, recenter()) : k;\n  };\n\n  projection.translate = function(_) {\n    return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n  };\n\n  projection.center = function(_) {\n    return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n  };\n\n  projection.rotate = function(_) {\n    return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n  };\n\n  projection.angle = function(_) {\n    return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n  };\n\n  projection.reflectX = function(_) {\n    return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n  };\n\n  projection.reflectY = function(_) {\n    return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n  };\n\n  projection.precision = function(_) {\n    return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n  };\n\n  projection.fitExtent = function(extent, object) {\n    return fitExtent(projection, extent, object);\n  };\n\n  projection.fitSize = function(size, object) {\n    return fitSize(projection, size, object);\n  };\n\n  projection.fitWidth = function(width, object) {\n    return fitWidth(projection, width, object);\n  };\n\n  projection.fitHeight = function(height, object) {\n    return fitHeight(projection, height, object);\n  };\n\n  function recenter() {\n    var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n        transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, alpha);\n    rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n    projectTransform = compose(project, transform);\n    projectRotateTransform = compose(rotate, projectTransform);\n    projectResample = resample(projectTransform, delta2);\n    return reset();\n  }\n\n  function reset() {\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  return function() {\n    project = projectAt.apply(this, arguments);\n    projection.invert = project.invert && invert;\n    return recenter();\n  };\n}\n", "import {degrees, pi, radians} from \"../math.js\";\nimport {projectionMutator} from \"./index.js\";\n\nexport function conicProjection(projectAt) {\n  var phi0 = 0,\n      phi1 = pi / 3,\n      m = projectionMutator(projectAt),\n      p = m(phi0, phi1);\n\n  p.parallels = function(_) {\n    return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n  };\n\n  return p;\n}\n", "import {asin, cos, sin} from \"../math.js\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n  var cosPhi0 = cos(phi0);\n\n  function forward(lambda, phi) {\n    return [lambda * cosPhi0, sin(phi) / cosPhi0];\n  }\n\n  forward.invert = function(x, y) {\n    return [x / cosPhi0, asin(y * cosPhi0)];\n  };\n\n  return forward;\n}\n", "import {abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea.js\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n  var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n  // Are the parallels symmetrical around the Equator?\n  if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n  var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n  function project(x, y) {\n    var r = sqrt(c - 2 * n * sin(y)) / n;\n    return [r * sin(x *= n), r0 - r * cos(x)];\n  }\n\n  project.invert = function(x, y) {\n    var r0y = r0 - y,\n        l = atan2(x, abs(r0y)) * sign(r0y);\n    if (r0y * n < 0)\n      l -= pi * sign(x) * sign(r0y);\n    return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n  };\n\n  return project;\n}\n\nexport default function() {\n  return conicProjection(conicEqualAreaRaw)\n      .scale(155.424)\n      .center([0, 33.6442]);\n}\n", "import conicEqualArea from \"./conicEqualArea.js\";\n\nexport default function() {\n  return conicEqualArea()\n      .parallels([29.5, 45.5])\n      .scale(1070)\n      .translate([480, 250])\n      .rotate([96, 0])\n      .center([-0.6, 38.7]);\n}\n", "import {epsilon} from \"../math.js\";\nimport albers from \"./albers.js\";\nimport conicEqualArea from \"./conicEqualArea.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n  var n = streams.length;\n  return {\n    point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n    sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n    lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n    lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n    polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n    polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n  };\n}\n\n// A composite projection for the United States, configured by default for\n// 960\u00D7500. The projection also works quite well at 960\u00D7600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nexport default function() {\n  var cache,\n      cacheStream,\n      lower48 = albers(), lower48Point,\n      alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n      hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n      point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n  function albersUsa(coordinates) {\n    var x = coordinates[0], y = coordinates[1];\n    return point = null,\n        (lower48Point.point(x, y), point)\n        || (alaskaPoint.point(x, y), point)\n        || (hawaiiPoint.point(x, y), point);\n  }\n\n  albersUsa.invert = function(coordinates) {\n    var k = lower48.scale(),\n        t = lower48.translate(),\n        x = (coordinates[0] - t[0]) / k,\n        y = (coordinates[1] - t[1]) / k;\n    return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n        : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n        : lower48).invert(coordinates);\n  };\n\n  albersUsa.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n  };\n\n  albersUsa.precision = function(_) {\n    if (!arguments.length) return lower48.precision();\n    lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n    return reset();\n  };\n\n  albersUsa.scale = function(_) {\n    if (!arguments.length) return lower48.scale();\n    lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n    return albersUsa.translate(lower48.translate());\n  };\n\n  albersUsa.translate = function(_) {\n    if (!arguments.length) return lower48.translate();\n    var k = lower48.scale(), x = +_[0], y = +_[1];\n\n    lower48Point = lower48\n        .translate(_)\n        .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n        .stream(pointStream);\n\n    alaskaPoint = alaska\n        .translate([x - 0.307 * k, y + 0.201 * k])\n        .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n        .stream(pointStream);\n\n    hawaiiPoint = hawaii\n        .translate([x - 0.205 * k, y + 0.212 * k])\n        .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n        .stream(pointStream);\n\n    return reset();\n  };\n\n  albersUsa.fitExtent = function(extent, object) {\n    return fitExtent(albersUsa, extent, object);\n  };\n\n  albersUsa.fitSize = function(size, object) {\n    return fitSize(albersUsa, size, object);\n  };\n\n  albersUsa.fitWidth = function(width, object) {\n    return fitWidth(albersUsa, width, object);\n  };\n\n  albersUsa.fitHeight = function(height, object) {\n    return fitHeight(albersUsa, height, object);\n  };\n\n  function reset() {\n    cache = cacheStream = null;\n    return albersUsa;\n  }\n\n  return albersUsa.scale(1070);\n}\n", "import {asin, atan2, cos, sin, sqrt} from \"../math.js\";\n\nexport function azimuthalRaw(scale) {\n  return function(x, y) {\n    var cx = cos(x),\n        cy = cos(y),\n        k = scale(cx * cy);\n        if (k === Infinity) return [2, 0];\n    return [\n      k * cy * sin(x),\n      k * sin(y)\n    ];\n  }\n}\n\nexport function azimuthalInvert(angle) {\n  return function(x, y) {\n    var z = sqrt(x * x + y * y),\n        c = angle(z),\n        sc = sin(c),\n        cc = cos(c);\n    return [\n      atan2(x * sc, z * cc),\n      asin(z && y * sc / z)\n    ];\n  }\n}\n", "import {asin, sqrt} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n  return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n  return 2 * asin(z / 2);\n});\n\nexport default function() {\n  return projection(azimuthalEqualAreaRaw)\n      .scale(124.75)\n      .clipAngle(180 - 1e-3);\n}\n", "import {acos, sin} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n  return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n  return z;\n});\n\nexport default function() {\n  return projection(azimuthalEquidistantRaw)\n      .scale(79.4188)\n      .clipAngle(180 - 1e-3);\n}\n", "import {atan, exp, halfPi, log, pi, tan, tau} from \"../math.js\";\nimport rotation from \"../rotation.js\";\nimport projection from \"./index.js\";\n\nexport function mercatorRaw(lambda, phi) {\n  return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n  return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n  return mercatorProjection(mercatorRaw)\n      .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n  var m = projection(project),\n      center = m.center,\n      scale = m.scale,\n      translate = m.translate,\n      clipExtent = m.clipExtent,\n      x0 = null, y0, x1, y1; // clip extent\n\n  m.scale = function(_) {\n    return arguments.length ? (scale(_), reclip()) : scale();\n  };\n\n  m.translate = function(_) {\n    return arguments.length ? (translate(_), reclip()) : translate();\n  };\n\n  m.center = function(_) {\n    return arguments.length ? (center(_), reclip()) : center();\n  };\n\n  m.clipExtent = function(_) {\n    return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  function reclip() {\n    var k = pi * scale(),\n        t = m(rotation(m.rotate()).invert([0, 0]));\n    return clipExtent(x0 == null\n        ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n        ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n        : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n  }\n\n  return reclip();\n}\n", "import {abs, atan, atan2, cos, epsilon, halfPi, log, pi, pow, sign, sin, sqrt, tan} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {mercatorRaw} from \"./mercator.js\";\n\nfunction tany(y) {\n  return tan((halfPi + y) / 2);\n}\n\nexport function conicConformalRaw(y0, y1) {\n  var cy0 = cos(y0),\n      n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\n      f = cy0 * pow(tany(y0), n) / n;\n\n  if (!n) return mercatorRaw;\n\n  function project(x, y) {\n    if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\n    else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\n    var r = f / pow(tany(y), n);\n    return [r * sin(n * x), f - r * cos(n * x)];\n  }\n\n  project.invert = function(x, y) {\n    var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy),\n      l = atan2(x, abs(fy)) * sign(fy);\n    if (fy * n < 0)\n      l -= pi * sign(x) * sign(fy);\n    return [l / n, 2 * atan(pow(f / r, 1 / n)) - halfPi];\n  };\n\n  return project;\n}\n\nexport default function() {\n  return conicProjection(conicConformalRaw)\n      .scale(109.5)\n      .parallels([30, 30]);\n}\n", "import projection from \"./index.js\";\n\nexport function equirectangularRaw(lambda, phi) {\n  return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n  return projection(equirectangularRaw)\n      .scale(152.63);\n}\n", "import {abs, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {equirectangularRaw} from \"./equirectangular.js\";\n\nexport function conicEquidistantRaw(y0, y1) {\n  var cy0 = cos(y0),\n      n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),\n      g = cy0 / n + y0;\n\n  if (abs(n) < epsilon) return equirectangularRaw;\n\n  function project(x, y) {\n    var gy = g - y, nx = n * x;\n    return [gy * sin(nx), g - gy * cos(nx)];\n  }\n\n  project.invert = function(x, y) {\n    var gy = g - y,\n        l = atan2(x, abs(gy)) * sign(gy);\n    if (gy * n < 0)\n      l -= pi * sign(x) * sign(gy);\n    return [l / n, g - sign(n) * sqrt(x * x + gy * gy)];\n  };\n\n  return project;\n}\n\nexport default function() {\n  return conicProjection(conicEquidistantRaw)\n      .scale(131.154)\n      .center([0, 13.9389]);\n}\n", "import projection from \"./index.js\";\nimport {abs, asin, cos, epsilon2, sin, sqrt} from \"../math.js\";\n\nvar A1 = 1.340264,\n    A2 = -0.081106,\n    A3 = 0.000893,\n    A4 = 0.003796,\n    M = sqrt(3) / 2,\n    iterations = 12;\n\nexport function equalEarthRaw(lambda, phi) {\n  var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n  return [\n    lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n    l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n  ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n  var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n  for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n    fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n    fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n    l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n    if (abs(delta) < epsilon2) break;\n  }\n  return [\n    M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n    asin(sin(l) / M)\n  ];\n};\n\nexport default function() {\n  return projection(equalEarthRaw)\n      .scale(177.158);\n}\n", "import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function gnomonicRaw(x, y) {\n  var cy = cos(y), k = cos(x) * cy;\n  return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nexport default function() {\n  return projection(gnomonicRaw)\n      .scale(144.049)\n      .clipAngle(60);\n}\n", "import {asin, cos, epsilon, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function orthographicRaw(x, y) {\n  return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n  return projection(orthographicRaw)\n      .scale(249.5)\n      .clipAngle(90 + epsilon);\n}\n", "import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function stereographicRaw(x, y) {\n  var cy = cos(y), k = 1 + cos(x) * cy;\n  return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n  return 2 * atan(z);\n});\n\nexport default function() {\n  return projection(stereographicRaw)\n      .scale(250)\n      .clipAngle(142);\n}\n", "import {atan, exp, halfPi, log, tan} from \"../math.js\";\nimport {mercatorProjection} from \"./mercator.js\";\n\nexport function transverseMercatorRaw(lambda, phi) {\n  return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n  return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\nexport default function() {\n  var m = mercatorProjection(transverseMercatorRaw),\n      center = m.center,\n      rotate = m.rotate;\n\n  m.center = function(_) {\n    return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n  };\n\n  m.rotate = function(_) {\n    return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n  };\n\n  return rotate([0, 0, 90])\n      .scale(159.155);\n}\n", "export function initRange(domain, range) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.range(domain); break;\n    default: this.range(range).domain(domain); break;\n  }\n  return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: {\n      if (typeof domain === \"function\") this.interpolator(domain);\n      else this.range(domain);\n      break;\n    }\n    default: {\n      this.domain(domain);\n      if (typeof interpolator === \"function\") this.interpolator(interpolator);\n      else this.range(interpolator);\n      break;\n    }\n  }\n  return this;\n}\n", "import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n  var index = new InternMap(),\n      domain = [],\n      range = [],\n      unknown = implicit;\n\n  function scale(d) {\n    let i = index.get(d);\n    if (i === undefined) {\n      if (unknown !== implicit) return unknown;\n      index.set(d, i = domain.push(d) - 1);\n    }\n    return range[i % range.length];\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [], index = new InternMap();\n    for (const value of _) {\n      if (index.has(value)) continue;\n      index.set(value, domain.push(value) - 1);\n    }\n    return scale;\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), scale) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return ordinal(domain, range).unknown(unknown);\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n", "import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n  var scale = ordinal().unknown(undefined),\n      domain = scale.domain,\n      ordinalRange = scale.range,\n      r0 = 0,\n      r1 = 1,\n      step,\n      bandwidth,\n      round = false,\n      paddingInner = 0,\n      paddingOuter = 0,\n      align = 0.5;\n\n  delete scale.unknown;\n\n  function rescale() {\n    var n = domain().length,\n        reverse = r1 < r0,\n        start = reverse ? r1 : r0,\n        stop = reverse ? r0 : r1;\n    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n    if (round) step = Math.floor(step);\n    start += (stop - start - step * (n - paddingInner)) * align;\n    bandwidth = step * (1 - paddingInner);\n    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n    var values = sequence(n).map(function(i) { return start + step * i; });\n    return ordinalRange(reverse ? values.reverse() : values);\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n  };\n\n  scale.rangeRound = function(_) {\n    return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n  };\n\n  scale.bandwidth = function() {\n    return bandwidth;\n  };\n\n  scale.step = function() {\n    return step;\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, rescale()) : round;\n  };\n\n  scale.padding = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n  };\n\n  scale.paddingInner = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n  };\n\n  scale.paddingOuter = function(_) {\n    return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n  };\n\n  scale.align = function(_) {\n    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n  };\n\n  scale.copy = function() {\n    return band(domain(), [r0, r1])\n        .round(round)\n        .paddingInner(paddingInner)\n        .paddingOuter(paddingOuter)\n        .align(align);\n  };\n\n  return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n  var copy = scale.copy;\n\n  scale.padding = scale.paddingOuter;\n  delete scale.paddingInner;\n  delete scale.paddingOuter;\n\n  scale.copy = function() {\n    return pointish(copy());\n  };\n\n  return scale;\n}\n\nexport function point() {\n  return pointish(band.apply(null, arguments).paddingInner(1));\n}\n", "export default function constants(x) {\n  return function() {\n    return x;\n  };\n}\n", "export default function number(x) {\n  return +x;\n}\n", "import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n  return x;\n}\n\nfunction normalize(a, b) {\n  return (b -= (a = +a))\n      ? function(x) { return (x - a) / b; }\n      : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n  var t;\n  if (a > b) t = a, a = b, b = t;\n  return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n  else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n  return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n  var j = Math.min(domain.length, range.length) - 1,\n      d = new Array(j),\n      r = new Array(j),\n      i = -1;\n\n  // Reverse descending domains.\n  if (domain[j] < domain[0]) {\n    domain = domain.slice().reverse();\n    range = range.slice().reverse();\n  }\n\n  while (++i < j) {\n    d[i] = normalize(domain[i], domain[i + 1]);\n    r[i] = interpolate(range[i], range[i + 1]);\n  }\n\n  return function(x) {\n    var i = bisect(domain, x, 1, j) - 1;\n    return r[i](d[i](x));\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .range(source.range())\n      .interpolate(source.interpolate())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport function transformer() {\n  var domain = unit,\n      range = unit,\n      interpolate = interpolateValue,\n      transform,\n      untransform,\n      unknown,\n      clamp = identity,\n      piecewise,\n      output,\n      input;\n\n  function rescale() {\n    var n = Math.min(domain.length, range.length);\n    if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n    piecewise = n > 2 ? polymap : bimap;\n    output = input = null;\n    return scale;\n  }\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n  }\n\n  scale.invert = function(y) {\n    return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = Array.from(_), interpolate = interpolateRound, rescale();\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n  };\n\n  scale.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, rescale()) : interpolate;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t, u) {\n    transform = t, untransform = u;\n    return rescale();\n  };\n}\n\nexport default function continuous() {\n  return transformer()(identity, identity);\n}\n", "import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n  var step = tickStep(start, stop, count),\n      precision;\n  specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n  switch (specifier.type) {\n    case \"s\": {\n      var value = Math.max(Math.abs(start), Math.abs(stop));\n      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n      return formatPrefix(specifier, value);\n    }\n    case \"\":\n    case \"e\":\n    case \"g\":\n    case \"p\":\n    case \"r\": {\n      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n      break;\n    }\n    case \"f\":\n    case \"%\": {\n      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n      break;\n    }\n  }\n  return format(specifier);\n}\n", "import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n  var domain = scale.domain;\n\n  scale.ticks = function(count) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    var d = domain();\n    return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n  };\n\n  scale.nice = function(count) {\n    if (count == null) count = 10;\n\n    var d = domain();\n    var i0 = 0;\n    var i1 = d.length - 1;\n    var start = d[i0];\n    var stop = d[i1];\n    var prestep;\n    var step;\n    var maxIter = 10;\n\n    if (stop < start) {\n      step = start, start = stop, stop = step;\n      step = i0, i0 = i1, i1 = step;\n    }\n    \n    while (maxIter-- > 0) {\n      step = tickIncrement(start, stop, count);\n      if (step === prestep) {\n        d[i0] = start\n        d[i1] = stop\n        return domain(d);\n      } else if (step > 0) {\n        start = Math.floor(start / step) * step;\n        stop = Math.ceil(stop / step) * step;\n      } else if (step < 0) {\n        start = Math.ceil(start * step) / step;\n        stop = Math.floor(stop * step) / step;\n      } else {\n        break;\n      }\n      prestep = step;\n    }\n\n    return scale;\n  };\n\n  return scale;\n}\n\nexport default function linear() {\n  var scale = continuous();\n\n  scale.copy = function() {\n    return copy(scale, linear());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n", "import {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nexport default function identity(domain) {\n  var unknown;\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : x;\n  }\n\n  scale.invert = scale;\n\n  scale.domain = scale.range = function(_) {\n    return arguments.length ? (domain = Array.from(_, number), scale) : domain.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return identity(domain).unknown(unknown);\n  };\n\n  domain = arguments.length ? Array.from(domain, number) : [0, 1];\n\n  return linearish(scale);\n}\n", "export default function nice(domain, interval) {\n  domain = domain.slice();\n\n  var i0 = 0,\n      i1 = domain.length - 1,\n      x0 = domain[i0],\n      x1 = domain[i1],\n      t;\n\n  if (x1 < x0) {\n    t = i0, i0 = i1, i1 = t;\n    t = x0, x0 = x1, x1 = t;\n  }\n\n  domain[i0] = interval.floor(x0);\n  domain[i1] = interval.ceil(x1);\n  return domain;\n}\n", "import {ticks} from \"d3-array\";\nimport {format, formatSpecifier} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformLog(x) {\n  return Math.log(x);\n}\n\nfunction transformExp(x) {\n  return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n  return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n  return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n  return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n  return base === 10 ? pow10\n      : base === Math.E ? Math.exp\n      : x => Math.pow(base, x);\n}\n\nfunction logp(base) {\n  return base === Math.E ? Math.log\n      : base === 10 && Math.log10\n      || base === 2 && Math.log2\n      || (base = Math.log(base), x => Math.log(x) / base);\n}\n\nfunction reflect(f) {\n  return (x, k) => -f(-x, k);\n}\n\nexport function loggish(transform) {\n  const scale = transform(transformLog, transformExp);\n  const domain = scale.domain;\n  let base = 10;\n  let logs;\n  let pows;\n\n  function rescale() {\n    logs = logp(base), pows = powp(base);\n    if (domain()[0] < 0) {\n      logs = reflect(logs), pows = reflect(pows);\n      transform(transformLogn, transformExpn);\n    } else {\n      transform(transformLog, transformExp);\n    }\n    return scale;\n  }\n\n  scale.base = function(_) {\n    return arguments.length ? (base = +_, rescale()) : base;\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.ticks = count => {\n    const d = domain();\n    let u = d[0];\n    let v = d[d.length - 1];\n    const r = v < u;\n\n    if (r) ([u, v] = [v, u]);\n\n    let i = logs(u);\n    let j = logs(v);\n    let k;\n    let t;\n    const n = count == null ? 10 : +count;\n    let z = [];\n\n    if (!(base % 1) && j - i < n) {\n      i = Math.floor(i), j = Math.ceil(j);\n      if (u > 0) for (; i <= j; ++i) {\n        for (k = 1; k < base; ++k) {\n          t = i < 0 ? k / pows(-i) : k * pows(i);\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      } else for (; i <= j; ++i) {\n        for (k = base - 1; k >= 1; --k) {\n          t = i > 0 ? k / pows(-i) : k * pows(i);\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      }\n      if (z.length * 2 < n) z = ticks(u, v, n);\n    } else {\n      z = ticks(i, j, Math.min(j - i, n)).map(pows);\n    }\n    return r ? z.reverse() : z;\n  };\n\n  scale.tickFormat = (count, specifier) => {\n    if (count == null) count = 10;\n    if (specifier == null) specifier = base === 10 ? \"s\" : \",\";\n    if (typeof specifier !== \"function\") {\n      if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;\n      specifier = format(specifier);\n    }\n    if (count === Infinity) return specifier;\n    const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n    return d => {\n      let i = d / pows(Math.round(logs(d)));\n      if (i * base < base - 0.5) i *= base;\n      return i <= k ? specifier(d) : \"\";\n    };\n  };\n\n  scale.nice = () => {\n    return domain(nice(domain(), {\n      floor: x => pows(Math.floor(logs(x))),\n      ceil: x => pows(Math.ceil(logs(x)))\n    }));\n  };\n\n  return scale;\n}\n\nexport default function log() {\n  const scale = loggish(transformer()).domain([1, 10]);\n  scale.copy = () => copy(scale, log()).base(scale.base());\n  initRange.apply(scale, arguments);\n  return scale;\n}\n", "import {linearish} from \"./linear.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformSymlog(c) {\n  return function(x) {\n    return Math.sign(x) * Math.log1p(Math.abs(x / c));\n  };\n}\n\nfunction transformSymexp(c) {\n  return function(x) {\n    return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n  };\n}\n\nexport function symlogish(transform) {\n  var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n  scale.constant = function(_) {\n    return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n  };\n\n  return linearish(scale);\n}\n\nexport default function symlog() {\n  var scale = symlogish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, symlog()).constant(scale.constant());\n  };\n\n  return initRange.apply(scale, arguments);\n}\n", "import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n  return function(x) {\n    return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n  };\n}\n\nfunction transformSqrt(x) {\n  return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n  return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n  var scale = transform(identity, identity),\n      exponent = 1;\n\n  function rescale() {\n    return exponent === 1 ? transform(identity, identity)\n        : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n        : transform(transformPow(exponent), transformPow(1 / exponent));\n  }\n\n  scale.exponent = function(_) {\n    return arguments.length ? (exponent = +_, rescale()) : exponent;\n  };\n\n  return linearish(scale);\n}\n\nexport default function pow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, pow()).exponent(scale.exponent());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n\nexport function sqrt() {\n  return pow.apply(null, arguments).exponent(0.5);\n}\n", "import {ascending, bisect, quantileSorted as threshold} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantile() {\n  var domain = [],\n      range = [],\n      thresholds = [],\n      unknown;\n\n  function rescale() {\n    var i = 0, n = Math.max(1, range.length);\n    thresholds = new Array(n - 1);\n    while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n    return scale;\n  }\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n  }\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return i < 0 ? [NaN, NaN] : [\n      i > 0 ? thresholds[i - 1] : domain[0],\n      i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n    ];\n  };\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [];\n    for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n    domain.sort(ascending);\n    return rescale();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.quantiles = function() {\n    return thresholds.slice();\n  };\n\n  scale.copy = function() {\n    return quantile()\n        .domain(domain)\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(scale, arguments);\n}\n", "import {bisect} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function threshold() {\n  var domain = [0.5],\n      range = [0, 1],\n      unknown,\n      n = 1;\n\n  function scale(x) {\n    return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n  };\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return [domain[i - 1], domain[i]];\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return threshold()\n        .domain(domain)\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(scale, arguments);\n}\n", "const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n  function interval(date) {\n    return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n  }\n\n  interval.floor = (date) => {\n    return floori(date = new Date(+date)), date;\n  };\n\n  interval.ceil = (date) => {\n    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n  };\n\n  interval.round = (date) => {\n    const d0 = interval(date), d1 = interval.ceil(date);\n    return date - d0 < d1 - date ? d0 : d1;\n  };\n\n  interval.offset = (date, step) => {\n    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n  };\n\n  interval.range = (start, stop, step) => {\n    const range = [];\n    start = interval.ceil(start);\n    step = step == null ? 1 : Math.floor(step);\n    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n    let previous;\n    do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n    while (previous < start && start < stop);\n    return range;\n  };\n\n  interval.filter = (test) => {\n    return timeInterval((date) => {\n      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n    }, (date, step) => {\n      if (date >= date) {\n        if (step < 0) while (++step <= 0) {\n          while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n        } else while (--step >= 0) {\n          while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n        }\n      }\n    });\n  };\n\n  if (count) {\n    interval.count = (start, end) => {\n      t0.setTime(+start), t1.setTime(+end);\n      floori(t0), floori(t1);\n      return Math.floor(count(t0, t1));\n    };\n\n    interval.every = (step) => {\n      step = Math.floor(step);\n      return !isFinite(step) || !(step > 0) ? null\n          : !(step > 1) ? interval\n          : interval.filter(field\n              ? (d) => field(d) % step === 0\n              : (d) => interval.count(0, d) % step === 0);\n    };\n  }\n\n  return interval;\n}\n", "import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n  // noop\n}, (date, step) => {\n  date.setTime(+date + step);\n}, (start, end) => {\n  return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n  k = Math.floor(k);\n  if (!isFinite(k) || !(k > 0)) return null;\n  if (!(k > 1)) return millisecond;\n  return timeInterval((date) => {\n    date.setTime(Math.floor(date / k) * k);\n  }, (date, step) => {\n    date.setTime(+date + step * k);\n  }, (start, end) => {\n    return (end - start) / k;\n  });\n};\n\nexport const milliseconds = millisecond.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n  date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n  return (end - start) / durationSecond;\n}, (date) => {\n  return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n  date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n  return (end - start) / durationMinute;\n}, (date) => {\n  return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n  date.setUTCSeconds(0, 0);\n}, (date, step) => {\n  date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n  return (end - start) / durationMinute;\n}, (date) => {\n  return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n  date.setTime(+date + step * durationHour);\n}, (start, end) => {\n  return (end - start) / durationHour;\n}, (date) => {\n  return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n  date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n  date.setTime(+date + step * durationHour);\n}, (start, end) => {\n  return (end - start) / durationHour;\n}, (date) => {\n  return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n  date => date.setHours(0, 0, 0, 0),\n  (date, step) => date.setDate(date.getDate() + step),\n  (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n  date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n  return (end - start) / durationDay;\n}, (date) => {\n  return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n  return (end - start) / durationDay;\n}, (date) => {\n  return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n", "import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n  return timeInterval((date) => {\n    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n    date.setHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setDate(date.getDate() + step * 7);\n  }, (start, end) => {\n    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n  });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n  return timeInterval((date) => {\n    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n    date.setUTCHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setUTCDate(date.getUTCDate() + step * 7);\n  }, (start, end) => {\n    return (end - start) / durationWeek;\n  });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n", "import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n  date.setDate(1);\n  date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n  return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n  date.setUTCDate(1);\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n  return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n", "import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n  date.setMonth(0, 1);\n  date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n  return end.getFullYear() - start.getFullYear();\n}, (date) => {\n  return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n    date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n    date.setMonth(0, 1);\n    date.setHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setFullYear(date.getFullYear() + step * k);\n  });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n  date.setUTCMonth(0, 1);\n  date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n  date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n  return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n  return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n    date.setUTCMonth(0, 1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, (date, step) => {\n    date.setUTCFullYear(date.getUTCFullYear() + step * k);\n  });\n};\n\nexport const utcYears = utcYear.range;\n", "import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n  const tickIntervals = [\n    [second,  1,      durationSecond],\n    [second,  5,  5 * durationSecond],\n    [second, 15, 15 * durationSecond],\n    [second, 30, 30 * durationSecond],\n    [minute,  1,      durationMinute],\n    [minute,  5,  5 * durationMinute],\n    [minute, 15, 15 * durationMinute],\n    [minute, 30, 30 * durationMinute],\n    [  hour,  1,      durationHour  ],\n    [  hour,  3,  3 * durationHour  ],\n    [  hour,  6,  6 * durationHour  ],\n    [  hour, 12, 12 * durationHour  ],\n    [   day,  1,      durationDay   ],\n    [   day,  2,  2 * durationDay   ],\n    [  week,  1,      durationWeek  ],\n    [ month,  1,      durationMonth ],\n    [ month,  3,  3 * durationMonth ],\n    [  year,  1,      durationYear  ]\n  ];\n\n  function ticks(start, stop, count) {\n    const reverse = stop < start;\n    if (reverse) [start, stop] = [stop, start];\n    const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n    const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n    return reverse ? ticks.reverse() : ticks;\n  }\n\n  function tickInterval(start, stop, count) {\n    const target = Math.abs(stop - start) / count;\n    const i = bisector(([,, step]) => step).right(tickIntervals, target);\n    if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n    if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n    const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n    return t.every(step);\n  }\n\n  return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n", "import {\n  timeDay,\n  timeSunday,\n  timeMonday,\n  timeThursday,\n  timeYear,\n  utcDay,\n  utcSunday,\n  utcMonday,\n  utcThursday,\n  utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n    date.setFullYear(d.y);\n    return date;\n  }\n  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n    date.setUTCFullYear(d.y);\n    return date;\n  }\n  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n  return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n  var locale_dateTime = locale.dateTime,\n      locale_date = locale.date,\n      locale_time = locale.time,\n      locale_periods = locale.periods,\n      locale_weekdays = locale.days,\n      locale_shortWeekdays = locale.shortDays,\n      locale_months = locale.months,\n      locale_shortMonths = locale.shortMonths;\n\n  var periodRe = formatRe(locale_periods),\n      periodLookup = formatLookup(locale_periods),\n      weekdayRe = formatRe(locale_weekdays),\n      weekdayLookup = formatLookup(locale_weekdays),\n      shortWeekdayRe = formatRe(locale_shortWeekdays),\n      shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n      monthRe = formatRe(locale_months),\n      monthLookup = formatLookup(locale_months),\n      shortMonthRe = formatRe(locale_shortMonths),\n      shortMonthLookup = formatLookup(locale_shortMonths);\n\n  var formats = {\n    \"a\": formatShortWeekday,\n    \"A\": formatWeekday,\n    \"b\": formatShortMonth,\n    \"B\": formatMonth,\n    \"c\": null,\n    \"d\": formatDayOfMonth,\n    \"e\": formatDayOfMonth,\n    \"f\": formatMicroseconds,\n    \"g\": formatYearISO,\n    \"G\": formatFullYearISO,\n    \"H\": formatHour24,\n    \"I\": formatHour12,\n    \"j\": formatDayOfYear,\n    \"L\": formatMilliseconds,\n    \"m\": formatMonthNumber,\n    \"M\": formatMinutes,\n    \"p\": formatPeriod,\n    \"q\": formatQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatSeconds,\n    \"u\": formatWeekdayNumberMonday,\n    \"U\": formatWeekNumberSunday,\n    \"V\": formatWeekNumberISO,\n    \"w\": formatWeekdayNumberSunday,\n    \"W\": formatWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatYear,\n    \"Y\": formatFullYear,\n    \"Z\": formatZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var utcFormats = {\n    \"a\": formatUTCShortWeekday,\n    \"A\": formatUTCWeekday,\n    \"b\": formatUTCShortMonth,\n    \"B\": formatUTCMonth,\n    \"c\": null,\n    \"d\": formatUTCDayOfMonth,\n    \"e\": formatUTCDayOfMonth,\n    \"f\": formatUTCMicroseconds,\n    \"g\": formatUTCYearISO,\n    \"G\": formatUTCFullYearISO,\n    \"H\": formatUTCHour24,\n    \"I\": formatUTCHour12,\n    \"j\": formatUTCDayOfYear,\n    \"L\": formatUTCMilliseconds,\n    \"m\": formatUTCMonthNumber,\n    \"M\": formatUTCMinutes,\n    \"p\": formatUTCPeriod,\n    \"q\": formatUTCQuarter,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatUTCSeconds,\n    \"u\": formatUTCWeekdayNumberMonday,\n    \"U\": formatUTCWeekNumberSunday,\n    \"V\": formatUTCWeekNumberISO,\n    \"w\": formatUTCWeekdayNumberSunday,\n    \"W\": formatUTCWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatUTCYear,\n    \"Y\": formatUTCFullYear,\n    \"Z\": formatUTCZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var parses = {\n    \"a\": parseShortWeekday,\n    \"A\": parseWeekday,\n    \"b\": parseShortMonth,\n    \"B\": parseMonth,\n    \"c\": parseLocaleDateTime,\n    \"d\": parseDayOfMonth,\n    \"e\": parseDayOfMonth,\n    \"f\": parseMicroseconds,\n    \"g\": parseYear,\n    \"G\": parseFullYear,\n    \"H\": parseHour24,\n    \"I\": parseHour24,\n    \"j\": parseDayOfYear,\n    \"L\": parseMilliseconds,\n    \"m\": parseMonthNumber,\n    \"M\": parseMinutes,\n    \"p\": parsePeriod,\n    \"q\": parseQuarter,\n    \"Q\": parseUnixTimestamp,\n    \"s\": parseUnixTimestampSeconds,\n    \"S\": parseSeconds,\n    \"u\": parseWeekdayNumberMonday,\n    \"U\": parseWeekNumberSunday,\n    \"V\": parseWeekNumberISO,\n    \"w\": parseWeekdayNumberSunday,\n    \"W\": parseWeekNumberMonday,\n    \"x\": parseLocaleDate,\n    \"X\": parseLocaleTime,\n    \"y\": parseYear,\n    \"Y\": parseFullYear,\n    \"Z\": parseZone,\n    \"%\": parseLiteralPercent\n  };\n\n  // These recursive directive definitions must be deferred.\n  formats.x = newFormat(locale_date, formats);\n  formats.X = newFormat(locale_time, formats);\n  formats.c = newFormat(locale_dateTime, formats);\n  utcFormats.x = newFormat(locale_date, utcFormats);\n  utcFormats.X = newFormat(locale_time, utcFormats);\n  utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n  function newFormat(specifier, formats) {\n    return function(date) {\n      var string = [],\n          i = -1,\n          j = 0,\n          n = specifier.length,\n          c,\n          pad,\n          format;\n\n      if (!(date instanceof Date)) date = new Date(+date);\n\n      while (++i < n) {\n        if (specifier.charCodeAt(i) === 37) {\n          string.push(specifier.slice(j, i));\n          if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n          else pad = c === \"e\" ? \" \" : \"0\";\n          if (format = formats[c]) c = format(date, pad);\n          string.push(c);\n          j = i + 1;\n        }\n      }\n\n      string.push(specifier.slice(j, i));\n      return string.join(\"\");\n    };\n  }\n\n  function newParse(specifier, Z) {\n    return function(string) {\n      var d = newDate(1900, undefined, 1),\n          i = parseSpecifier(d, specifier, string += \"\", 0),\n          week, day;\n      if (i != string.length) return null;\n\n      // If a UNIX timestamp is specified, return it.\n      if (\"Q\" in d) return new Date(d.Q);\n      if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n      // If this is utcParse, never use the local timezone.\n      if (Z && !(\"Z\" in d)) d.Z = 0;\n\n      // The am-pm flag is 0 for AM, and 1 for PM.\n      if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n      // If the month was not specified, inherit from the quarter.\n      if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n      // Convert day-of-week and week-of-year to day-of-year.\n      if (\"V\" in d) {\n        if (d.V < 1 || d.V > 53) return null;\n        if (!(\"w\" in d)) d.w = 1;\n        if (\"Z\" in d) {\n          week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n          week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n          week = utcDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getUTCFullYear();\n          d.m = week.getUTCMonth();\n          d.d = week.getUTCDate() + (d.w + 6) % 7;\n        } else {\n          week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n          week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n          week = timeDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getFullYear();\n          d.m = week.getMonth();\n          d.d = week.getDate() + (d.w + 6) % 7;\n        }\n      } else if (\"W\" in d || \"U\" in d) {\n        if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n        day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n        d.m = 0;\n        d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n      }\n\n      // If a time zone is specified, all fields are interpreted as UTC and then\n      // offset according to the specified time zone.\n      if (\"Z\" in d) {\n        d.H += d.Z / 100 | 0;\n        d.M += d.Z % 100;\n        return utcDate(d);\n      }\n\n      // Otherwise, all fields are in local time.\n      return localDate(d);\n    };\n  }\n\n  function parseSpecifier(d, specifier, string, j) {\n    var i = 0,\n        n = specifier.length,\n        m = string.length,\n        c,\n        parse;\n\n    while (i < n) {\n      if (j >= m) return -1;\n      c = specifier.charCodeAt(i++);\n      if (c === 37) {\n        c = specifier.charAt(i++);\n        parse = parses[c in pads ? specifier.charAt(i++) : c];\n        if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n      } else if (c != string.charCodeAt(j++)) {\n        return -1;\n      }\n    }\n\n    return j;\n  }\n\n  function parsePeriod(d, string, i) {\n    var n = periodRe.exec(string.slice(i));\n    return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseShortWeekday(d, string, i) {\n    var n = shortWeekdayRe.exec(string.slice(i));\n    return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseWeekday(d, string, i) {\n    var n = weekdayRe.exec(string.slice(i));\n    return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseShortMonth(d, string, i) {\n    var n = shortMonthRe.exec(string.slice(i));\n    return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseMonth(d, string, i) {\n    var n = monthRe.exec(string.slice(i));\n    return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n  }\n\n  function parseLocaleDateTime(d, string, i) {\n    return parseSpecifier(d, locale_dateTime, string, i);\n  }\n\n  function parseLocaleDate(d, string, i) {\n    return parseSpecifier(d, locale_date, string, i);\n  }\n\n  function parseLocaleTime(d, string, i) {\n    return parseSpecifier(d, locale_time, string, i);\n  }\n\n  function formatShortWeekday(d) {\n    return locale_shortWeekdays[d.getDay()];\n  }\n\n  function formatWeekday(d) {\n    return locale_weekdays[d.getDay()];\n  }\n\n  function formatShortMonth(d) {\n    return locale_shortMonths[d.getMonth()];\n  }\n\n  function formatMonth(d) {\n    return locale_months[d.getMonth()];\n  }\n\n  function formatPeriod(d) {\n    return locale_periods[+(d.getHours() >= 12)];\n  }\n\n  function formatQuarter(d) {\n    return 1 + ~~(d.getMonth() / 3);\n  }\n\n  function formatUTCShortWeekday(d) {\n    return locale_shortWeekdays[d.getUTCDay()];\n  }\n\n  function formatUTCWeekday(d) {\n    return locale_weekdays[d.getUTCDay()];\n  }\n\n  function formatUTCShortMonth(d) {\n    return locale_shortMonths[d.getUTCMonth()];\n  }\n\n  function formatUTCMonth(d) {\n    return locale_months[d.getUTCMonth()];\n  }\n\n  function formatUTCPeriod(d) {\n    return locale_periods[+(d.getUTCHours() >= 12)];\n  }\n\n  function formatUTCQuarter(d) {\n    return 1 + ~~(d.getUTCMonth() / 3);\n  }\n\n  return {\n    format: function(specifier) {\n      var f = newFormat(specifier += \"\", formats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    parse: function(specifier) {\n      var p = newParse(specifier += \"\", false);\n      p.toString = function() { return specifier; };\n      return p;\n    },\n    utcFormat: function(specifier) {\n      var f = newFormat(specifier += \"\", utcFormats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    utcParse: function(specifier) {\n      var p = newParse(specifier += \"\", true);\n      p.toString = function() { return specifier; };\n      return p;\n    }\n  };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n    numberRe = /^\\s*\\d+/, // note: ignores next directive\n    percentRe = /^%/,\n    requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n  var sign = value < 0 ? \"-\" : \"\",\n      string = (sign ? -value : value) + \"\",\n      length = string.length;\n  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n  return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n  return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n  return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 4));\n  return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n  var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 6));\n  return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n  var n = percentRe.exec(string.slice(i, i + 1));\n  return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n  return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n  return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n  return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n  return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n  return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n  return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n  return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n  return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n  return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n  var day = d.getDay();\n  return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n  return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n  var day = d.getDay();\n  return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n  d = dISO(d);\n  return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n  return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n  return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n  d = dISO(d);\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n  var day = d.getDay();\n  d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n  var z = d.getTimezoneOffset();\n  return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n      + pad(z / 60 | 0, \"0\", 2)\n      + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n  return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n  return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n  return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n  return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n  return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n  return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n  return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n  return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n  return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n  var dow = d.getUTCDay();\n  return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n  return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n  var day = d.getUTCDay();\n  return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n  d = UTCdISO(d);\n  return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n  return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n  return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n  d = UTCdISO(d);\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n  var day = d.getUTCDay();\n  d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n  return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n  return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n  return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n  return Math.floor(+d / 1000);\n}\n", "import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n  dateTime: \"%x, %X\",\n  date: \"%-m/%-d/%Y\",\n  time: \"%-I:%M:%S %p\",\n  periods: [\"AM\", \"PM\"],\n  days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n  shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n  shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  timeFormat = locale.format;\n  timeParse = locale.parse;\n  utcFormat = locale.utcFormat;\n  utcParse = locale.utcParse;\n  return locale;\n}\n", "import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n  return new Date(t);\n}\n\nfunction number(t) {\n  return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n  var scale = continuous(),\n      invert = scale.invert,\n      domain = scale.domain;\n\n  var formatMillisecond = format(\".%L\"),\n      formatSecond = format(\":%S\"),\n      formatMinute = format(\"%I:%M\"),\n      formatHour = format(\"%I %p\"),\n      formatDay = format(\"%a %d\"),\n      formatWeek = format(\"%b %d\"),\n      formatMonth = format(\"%B\"),\n      formatYear = format(\"%Y\");\n\n  function tickFormat(date) {\n    return (second(date) < date ? formatMillisecond\n        : minute(date) < date ? formatSecond\n        : hour(date) < date ? formatMinute\n        : day(date) < date ? formatHour\n        : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n        : year(date) < date ? formatMonth\n        : formatYear)(date);\n  }\n\n  scale.invert = function(y) {\n    return new Date(invert(y));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n  };\n\n  scale.ticks = function(interval) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    return specifier == null ? tickFormat : format(specifier);\n  };\n\n  scale.nice = function(interval) {\n    var d = domain();\n    if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n    return interval ? domain(nice(d, interval)) : scale;\n  };\n\n  scale.copy = function() {\n    return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n  };\n\n  return scale;\n}\n\nexport default function time() {\n  return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n", "import {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcTicks, utcTickInterval} from \"d3-time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {calendar} from \"./time.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function utcTime() {\n  return initRange.apply(calendar(utcTicks, utcTickInterval, utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n", "import {interpolate, interpolateRound} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n  var x0 = 0,\n      x1 = 1,\n      t0,\n      t1,\n      k10,\n      transform,\n      interpolator = identity,\n      clamp = false,\n      unknown;\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = !!_, scale) : clamp;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  function range(interpolate) {\n    return function(_) {\n      var r0, r1;\n      return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n    };\n  }\n\n  scale.range = range(interpolate);\n\n  scale.rangeRound = range(interpolateRound);\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t) {\n    transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n    return scale;\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .interpolator(source.interpolator())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport default function sequential() {\n  var scale = linearish(transformer()(identity));\n\n  scale.copy = function() {\n    return copy(scale, sequential());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n  var scale = loggish(transformer()).domain([1, 10]);\n\n  scale.copy = function() {\n    return copy(scale, sequentialLog()).base(scale.base());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n  var scale = symlogish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, sequentialSymlog()).constant(scale.constant());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, sequentialPow()).exponent(scale.exponent());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n  return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n", "import {interpolate, interpolateRound, piecewise} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {copy} from \"./sequential.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n  var x0 = 0,\n      x1 = 0.5,\n      x2 = 1,\n      s = 1,\n      t0,\n      t1,\n      t2,\n      k10,\n      k21,\n      interpolator = identity,\n      transform,\n      clamp = false,\n      unknown;\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2];\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = !!_, scale) : clamp;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  function range(interpolate) {\n    return function(_) {\n      var r0, r1, r2;\n      return arguments.length ? ([r0, r1, r2] = _, interpolator = piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];\n    };\n  }\n\n  scale.range = range(interpolate);\n\n  scale.rangeRound = range(interpolateRound);\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t) {\n    transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1;\n    return scale;\n  };\n}\n\nexport default function diverging() {\n  var scale = linearish(transformer()(identity));\n\n  scale.copy = function() {\n    return copy(scale, diverging());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingLog() {\n  var scale = loggish(transformer()).domain([0.1, 1, 10]);\n\n  scale.copy = function() {\n    return copy(scale, divergingLog()).base(scale.base());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSymlog() {\n  var scale = symlogish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, divergingSymlog()).constant(scale.constant());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingPow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, divergingPow()).exponent(scale.exponent());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSqrt() {\n  return divergingPow.apply(null, arguments).exponent(0.5);\n}\n", "export default function(specifier) {\n  var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n  while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n  return colors;\n}\n", "import colors from \"../colors.js\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n", "import colors from \"../colors.js\";\n\nexport default colors(\"4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab\");\n", "import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default scheme => interpolateRgbBasis(scheme[scheme.length - 1]);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"d8b365f5f5f55ab4ac\",\n  \"a6611adfc27d80cdc1018571\",\n  \"a6611adfc27df5f5f580cdc1018571\",\n  \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n  \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n  \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n  \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n  \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n  \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"af8dc3f7f7f77fbf7b\",\n  \"7b3294c2a5cfa6dba0008837\",\n  \"7b3294c2a5cff7f7f7a6dba0008837\",\n  \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n  \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n  \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n  \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n  \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n  \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e9a3c9f7f7f7a1d76a\",\n  \"d01c8bf1b6dab8e1864dac26\",\n  \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n  \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n  \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n  \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n  \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n  \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n  \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"998ec3f7f7f7f1a340\",\n  \"5e3c99b2abd2fdb863e66101\",\n  \"5e3c99b2abd2f7f7f7fdb863e66101\",\n  \"542788998ec3d8daebfee0b6f1a340b35806\",\n  \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n  \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n  \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n  \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n  \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"ef8a62f7f7f767a9cf\",\n  \"ca0020f4a58292c5de0571b0\",\n  \"ca0020f4a582f7f7f792c5de0571b0\",\n  \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n  \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n  \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n  \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n  \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n  \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"ef8a62ffffff999999\",\n  \"ca0020f4a582bababa404040\",\n  \"ca0020f4a582ffffffbababa404040\",\n  \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n  \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n  \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n  \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n  \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n  \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fc8d59ffffbf91bfdb\",\n  \"d7191cfdae61abd9e92c7bb6\",\n  \"d7191cfdae61ffffbfabd9e92c7bb6\",\n  \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n  \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n  \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n  \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n  \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n  \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fc8d59ffffbf91cf60\",\n  \"d7191cfdae61a6d96a1a9641\",\n  \"d7191cfdae61ffffbfa6d96a1a9641\",\n  \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n  \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n  \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n  \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n  \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n  \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fc8d59ffffbf99d594\",\n  \"d7191cfdae61abdda42b83ba\",\n  \"d7191cfdae61ffffbfabdda42b83ba\",\n  \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n  \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n  \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n  \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n  \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n  \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e5f5f999d8c92ca25f\",\n  \"edf8fbb2e2e266c2a4238b45\",\n  \"edf8fbb2e2e266c2a42ca25f006d2c\",\n  \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n  \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n  \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n  \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e0ecf49ebcda8856a7\",\n  \"edf8fbb3cde38c96c688419d\",\n  \"edf8fbb3cde38c96c68856a7810f7c\",\n  \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n  \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n  \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n  \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e0f3dba8ddb543a2ca\",\n  \"f0f9e8bae4bc7bccc42b8cbe\",\n  \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n  \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n  \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n  \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n  \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fee8c8fdbb84e34a33\",\n  \"fef0d9fdcc8afc8d59d7301f\",\n  \"fef0d9fdcc8afc8d59e34a33b30000\",\n  \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n  \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n  \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n  \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"ece2f0a6bddb1c9099\",\n  \"f6eff7bdc9e167a9cf02818a\",\n  \"f6eff7bdc9e167a9cf1c9099016c59\",\n  \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n  \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n  \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n  \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"ece7f2a6bddb2b8cbe\",\n  \"f1eef6bdc9e174a9cf0570b0\",\n  \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n  \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n  \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n  \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n  \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e7e1efc994c7dd1c77\",\n  \"f1eef6d7b5d8df65b0ce1256\",\n  \"f1eef6d7b5d8df65b0dd1c77980043\",\n  \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n  \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n  \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n  \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fde0ddfa9fb5c51b8a\",\n  \"feebe2fbb4b9f768a1ae017e\",\n  \"feebe2fbb4b9f768a1c51b8a7a0177\",\n  \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n  \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n  \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n  \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"edf8b17fcdbb2c7fb8\",\n  \"ffffcca1dab441b6c4225ea8\",\n  \"ffffcca1dab441b6c42c7fb8253494\",\n  \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n  \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n  \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n  \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"f7fcb9addd8e31a354\",\n  \"ffffccc2e69978c679238443\",\n  \"ffffccc2e69978c67931a354006837\",\n  \"ffffccd9f0a3addd8e78c67931a354006837\",\n  \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n  \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n  \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fff7bcfec44fd95f0e\",\n  \"ffffd4fed98efe9929cc4c02\",\n  \"ffffd4fed98efe9929d95f0e993404\",\n  \"ffffd4fee391fec44ffe9929d95f0e993404\",\n  \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n  \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n  \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"ffeda0feb24cf03b20\",\n  \"ffffb2fecc5cfd8d3ce31a1c\",\n  \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n  \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n  \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n  \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n  \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"deebf79ecae13182bd\",\n  \"eff3ffbdd7e76baed62171b5\",\n  \"eff3ffbdd7e76baed63182bd08519c\",\n  \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n  \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n  \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n  \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e5f5e0a1d99b31a354\",\n  \"edf8e9bae4b374c476238b45\",\n  \"edf8e9bae4b374c47631a354006d2c\",\n  \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n  \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n  \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n  \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"f0f0f0bdbdbd636363\",\n  \"f7f7f7cccccc969696525252\",\n  \"f7f7f7cccccc969696636363252525\",\n  \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n  \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n  \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n  \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"efedf5bcbddc756bb1\",\n  \"f2f0f7cbc9e29e9ac86a51a3\",\n  \"f2f0f7cbc9e29e9ac8756bb154278f\",\n  \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n  \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n  \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n  \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fee0d2fc9272de2d26\",\n  \"fee5d9fcae91fb6a4acb181d\",\n  \"fee5d9fcae91fb6a4ade2d26a50f15\",\n  \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n  \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n  \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n  \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n", "import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fee6cefdae6be6550d\",\n  \"feeddefdbe85fd8d3cd94701\",\n  \"feeddefdbe85fd8d3ce6550da63603\",\n  \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n  \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n  \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n  \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n", "export default function(t) {\n  t = Math.max(0, Math.min(1, t));\n  return \"rgb(\"\n      + Math.max(0, Math.min(255, Math.round(-4.54 - t * (35.34 - t * (2381.73 - t * (6402.7 - t * (7024.72 - t * 2710.57))))))) + \", \"\n      + Math.max(0, Math.min(255, Math.round(32.49 + t * (170.73 + t * (52.82 - t * (131.46 - t * (176.58 - t * 67.37))))))) + \", \"\n      + Math.max(0, Math.min(255, Math.round(81.24 + t * (442.36 - t * (2482.43 - t * (6167.24 - t * (6614.94 - t * 2475.67)))))))\n      + \")\";\n}\n", "import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n", "import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n  if (t < 0 || t > 1) t -= Math.floor(t);\n  var ts = Math.abs(t - 0.5);\n  c.h = 360 * t - 100;\n  c.s = 1.5 - 1.5 * ts;\n  c.l = 0.8 - 0.9 * ts;\n  return c + \"\";\n}\n", "import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n    pi_1_3 = Math.PI / 3,\n    pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n  var x;\n  t = (0.5 - t) * Math.PI;\n  c.r = 255 * (x = Math.sin(t)) * x;\n  c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n  c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n  return c + \"\";\n}\n", "export default function(t) {\n  t = Math.max(0, Math.min(1, t));\n  return \"rgb(\"\n      + Math.max(0, Math.min(255, Math.round(34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))) + \", \"\n      + Math.max(0, Math.min(255, Math.round(23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))) + \", \"\n      + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66)))))))\n      + \")\";\n}\n", "import colors from \"../colors.js\";\n\nfunction ramp(range) {\n  var n = range.length;\n  return function(t) {\n    return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n  };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n", "export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n  return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n", "import {min, sqrt} from \"../math.js\";\n\nconst sqrt3 = sqrt(3);\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size + min(size / 28, 0.75)) * 0.59436;\n    const t = r / 2;\n    const u = t * sqrt3;\n    context.moveTo(0, r);\n    context.lineTo(0, -r);\n    context.moveTo(-u, -t);\n    context.lineTo(u, t);\n    context.moveTo(-u, t);\n    context.lineTo(u, -t);\n  }\n};\n", "import {pi, sqrt, tau} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size / pi);\n    context.moveTo(r, 0);\n    context.arc(0, 0, r, 0, tau);\n  }\n};\n", "import {sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size / 5) / 2;\n    context.moveTo(-3 * r, -r);\n    context.lineTo(-r, -r);\n    context.lineTo(-r, -3 * r);\n    context.lineTo(r, -3 * r);\n    context.lineTo(r, -r);\n    context.lineTo(3 * r, -r);\n    context.lineTo(3 * r, r);\n    context.lineTo(r, r);\n    context.lineTo(r, 3 * r);\n    context.lineTo(-r, 3 * r);\n    context.lineTo(-r, r);\n    context.lineTo(-3 * r, r);\n    context.closePath();\n  }\n};\n", "import {sqrt} from \"../math.js\";\n\nconst tan30 = sqrt(1 / 3);\nconst tan30_2 = tan30 * 2;\n\nexport default {\n  draw(context, size) {\n    const y = sqrt(size / tan30_2);\n    const x = y * tan30;\n    context.moveTo(0, -y);\n    context.lineTo(x, 0);\n    context.lineTo(0, y);\n    context.lineTo(-x, 0);\n    context.closePath();\n  }\n};\n", "import {sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size) * 0.62625;\n    context.moveTo(0, -r);\n    context.lineTo(r, 0);\n    context.lineTo(0, r);\n    context.lineTo(-r, 0);\n    context.closePath();\n  }\n};\n", "import {min, sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size - min(size / 7, 2)) * 0.87559;\n    context.moveTo(-r, 0);\n    context.lineTo(r, 0);\n    context.moveTo(0, r);\n    context.lineTo(0, -r);\n  }\n};\n", "import {sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const w = sqrt(size);\n    const x = -w / 2;\n    context.rect(x, x, w, w);\n  }\n};\n", "import {sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size) * 0.4431;\n    context.moveTo(r, r);\n    context.lineTo(r, -r);\n    context.lineTo(-r, -r);\n    context.lineTo(-r, r);\n    context.closePath();\n  }\n};\n", "import {sin, cos, sqrt, pi, tau} from \"../math.js\";\n\nconst ka = 0.89081309152928522810;\nconst kr = sin(pi / 10) / sin(7 * pi / 10);\nconst kx = sin(tau / 10) * kr;\nconst ky = -cos(tau / 10) * kr;\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size * ka);\n    const x = kx * r;\n    const y = ky * r;\n    context.moveTo(0, -r);\n    context.lineTo(x, y);\n    for (let i = 1; i < 5; ++i) {\n      const a = tau * i / 5;\n      const c = cos(a);\n      const s = sin(a);\n      context.lineTo(s * r, -c * r);\n      context.lineTo(c * x - s * y, s * x + c * y);\n    }\n    context.closePath();\n  }\n};\n", "import {sqrt} from \"../math.js\";\n\nconst sqrt3 = sqrt(3);\n\nexport default {\n  draw(context, size) {\n    const y = -sqrt(size / (sqrt3 * 3));\n    context.moveTo(0, y * 2);\n    context.lineTo(-sqrt3 * y, -y);\n    context.lineTo(sqrt3 * y, -y);\n    context.closePath();\n  }\n};\n", "import {sqrt} from \"../math.js\";\n\nconst sqrt3 = sqrt(3);\n\nexport default {\n  draw(context, size) {\n    const s = sqrt(size) * 0.6824;\n    const t = s  / 2;\n    const u = (s * sqrt3) / 2; // cos(Math.PI / 6)\n    context.moveTo(0, -s);\n    context.lineTo(u, t);\n    context.lineTo(-u, t);\n    context.closePath();\n  }\n};\n", "import {sqrt} from \"../math.js\";\n\nconst c = -0.5;\nconst s = sqrt(3) / 2;\nconst k = 1 / sqrt(12);\nconst a = (k / 2 + 1) * 3;\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size / a);\n    const x0 = r / 2, y0 = r * k;\n    const x1 = x0, y1 = r * k + r;\n    const x2 = -x1, y2 = y1;\n    context.moveTo(x0, y0);\n    context.lineTo(x1, y1);\n    context.lineTo(x2, y2);\n    context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n    context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n    context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n    context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n    context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n    context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n    context.closePath();\n  }\n};\n", "import {min, sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size - min(size / 6, 1.7)) * 0.6189;\n    context.moveTo(-r, -r);\n    context.lineTo(r, r);\n    context.moveTo(-r, r);\n    context.lineTo(r, -r);\n  }\n};\n", "import constant from \"./constant.js\";\nimport {withPath} from \"./path.js\";\nimport asterisk from \"./symbol/asterisk.js\";\nimport circle from \"./symbol/circle.js\";\nimport cross from \"./symbol/cross.js\";\nimport diamond from \"./symbol/diamond.js\";\nimport diamond2 from \"./symbol/diamond2.js\";\nimport plus from \"./symbol/plus.js\";\nimport square from \"./symbol/square.js\";\nimport square2 from \"./symbol/square2.js\";\nimport star from \"./symbol/star.js\";\nimport triangle from \"./symbol/triangle.js\";\nimport triangle2 from \"./symbol/triangle2.js\";\nimport wye from \"./symbol/wye.js\";\nimport times from \"./symbol/times.js\";\n\n// These symbols are designed to be filled.\nexport const symbolsFill = [\n  circle,\n  cross,\n  diamond,\n  square,\n  star,\n  triangle,\n  wye\n];\n\n// These symbols are designed to be stroked (with a width of 1.5px and round caps).\nexport const symbolsStroke = [\n  circle,\n  plus,\n  times,\n  triangle2,\n  asterisk,\n  square2,\n  diamond2\n];\n\nexport default function Symbol(type, size) {\n  let context = null,\n      path = withPath(symbol);\n\n  type = typeof type === \"function\" ? type : constant(type || circle);\n  size = typeof size === \"function\" ? size : constant(size === undefined ? 64 : +size);\n\n  function symbol() {\n    let buffer;\n    if (!context) context = buffer = path();\n    type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  symbol.type = function(_) {\n    return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n  };\n\n  symbol.size = function(_) {\n    return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n  };\n\n  symbol.context = function(_) {\n    return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n  };\n\n  return symbol;\n}\n", "export function Transform(k, x, y) {\n  this.k = k;\n  this.x = x;\n  this.y = y;\n}\n\nTransform.prototype = {\n  constructor: Transform,\n  scale: function(k) {\n    return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n  },\n  translate: function(x, y) {\n    return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n  },\n  apply: function(point) {\n    return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n  },\n  applyX: function(x) {\n    return x * this.k + this.x;\n  },\n  applyY: function(y) {\n    return y * this.k + this.y;\n  },\n  invert: function(location) {\n    return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n  },\n  invertX: function(x) {\n    return (x - this.x) / this.k;\n  },\n  invertY: function(y) {\n    return (y - this.y) / this.k;\n  },\n  rescaleX: function(x) {\n    return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n  },\n  rescaleY: function(y) {\n    return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n  },\n  toString: function() {\n    return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n  }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n  while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n  return node.__zoom;\n}\n", "import {ascending, descending} from \"d3\";\n\nexport function defined(x) {\n  return x != null && !Number.isNaN(x);\n}\n\nexport function ascendingDefined(a, b) {\n  return +defined(b) - +defined(a) || ascending(a, b);\n}\n\nexport function descendingDefined(a, b) {\n  return +defined(b) - +defined(a) || descending(a, b);\n}\n\nexport function nonempty(x) {\n  return x != null && `${x}` !== \"\";\n}\n\nexport function finite(x) {\n  return isFinite(x) ? x : NaN;\n}\n\nexport function positive(x) {\n  return x > 0 && isFinite(x) ? x : NaN;\n}\n\nexport function negative(x) {\n  return x < 0 && isFinite(x) ? x : NaN;\n}\n", "export default function format(date, fallback) {\n  if (!(date instanceof Date)) date = new Date(+date);\n  if (isNaN(date)) return typeof fallback === \"function\" ? fallback(date) : fallback;\n  const hours = date.getUTCHours();\n  const minutes = date.getUTCMinutes();\n  const seconds = date.getUTCSeconds();\n  const milliseconds = date.getUTCMilliseconds();\n  return `${formatYear(date.getUTCFullYear(), 4)}-${pad(date.getUTCMonth() + 1, 2)}-${pad(date.getUTCDate(), 2)}${\n    hours || minutes || seconds || milliseconds ? `T${pad(hours, 2)}:${pad(minutes, 2)}${\n      seconds || milliseconds ? `:${pad(seconds, 2)}${\n        milliseconds ? `.${pad(milliseconds, 3)}` : ``\n      }` : ``\n    }Z` : ``\n  }`;\n}\n\nfunction formatYear(year) {\n  return year < 0 ? `-${pad(-year, 6)}`\n    : year > 9999 ? `+${pad(year, 6)}`\n    : pad(year, 4);\n}\n\nfunction pad(value, width) {\n  return `${value}`.padStart(width, \"0\");\n}\n", "const re = /^(?:[-+]\\d{2})?\\d{4}(?:-\\d{2}(?:-\\d{2})?)?(?:T\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{3})?)?(?:Z|[-+]\\d{2}:?\\d{2})?)?$/;\n\nexport default function parse(string, fallback) {\n  if (!re.test(string += \"\")) return typeof fallback === \"function\" ? fallback(string) : fallback;\n  return new Date(string);\n}\n", "import {bisector, extent, median, pairs, timeFormat, utcFormat} from \"d3\";\nimport {utcSecond, utcMinute, utcHour, unixDay, utcWeek, utcMonth, utcYear} from \"d3\";\nimport {utcMonday, utcTuesday, utcWednesday, utcThursday, utcFriday, utcSaturday, utcSunday} from \"d3\";\nimport {timeSecond, timeMinute, timeHour, timeDay, timeWeek, timeMonth, timeYear} from \"d3\";\nimport {timeMonday, timeTuesday, timeWednesday, timeThursday, timeFriday, timeSaturday, timeSunday} from \"d3\";\nimport {orderof} from \"./options.js\";\n\nconst durationSecond = 1000;\nconst durationMinute = durationSecond * 60;\nconst durationHour = durationMinute * 60;\nconst durationDay = durationHour * 24;\nconst durationWeek = durationDay * 7;\nconst durationMonth = durationDay * 30;\nconst durationYear = durationDay * 365;\n\n// See https://github.com/d3/d3-time/blob/9e8dc940f38f78d7588aad68a54a25b1f0c2d97b/src/ticks.js#L14-L33\nconst formats = [\n  [\"millisecond\", 0.5 * durationSecond],\n  [\"second\", durationSecond],\n  [\"second\", 30 * durationSecond],\n  [\"minute\", durationMinute],\n  [\"minute\", 30 * durationMinute],\n  [\"hour\", durationHour],\n  [\"hour\", 12 * durationHour],\n  [\"day\", durationDay],\n  [\"day\", 2 * durationDay],\n  [\"week\", durationWeek],\n  [\"month\", durationMonth],\n  [\"month\", 3 * durationMonth],\n  [\"year\", durationYear]\n];\n\nconst timeIntervals = new Map([\n  [\"second\", timeSecond],\n  [\"minute\", timeMinute],\n  [\"hour\", timeHour],\n  [\"day\", timeDay], // TODO local time equivalent of unixDay?\n  [\"week\", timeWeek],\n  [\"month\", timeMonth],\n  [\"year\", timeYear],\n  [\"monday\", timeMonday],\n  [\"tuesday\", timeTuesday],\n  [\"wednesday\", timeWednesday],\n  [\"thursday\", timeThursday],\n  [\"friday\", timeFriday],\n  [\"saturday\", timeSaturday],\n  [\"sunday\", timeSunday]\n]);\n\nconst utcIntervals = new Map([\n  [\"second\", utcSecond],\n  [\"minute\", utcMinute],\n  [\"hour\", utcHour],\n  [\"day\", unixDay],\n  [\"week\", utcWeek],\n  [\"month\", utcMonth],\n  [\"year\", utcYear],\n  [\"monday\", utcMonday],\n  [\"tuesday\", utcTuesday],\n  [\"wednesday\", utcWednesday],\n  [\"thursday\", utcThursday],\n  [\"friday\", utcFriday],\n  [\"saturday\", utcSaturday],\n  [\"sunday\", utcSunday]\n]);\n\nfunction parseInterval(input, intervals) {\n  let name = `${input}`.toLowerCase();\n  if (name.endsWith(\"s\")) name = name.slice(0, -1); // drop plural\n  let period = 1;\n  const match = /^(?:(\\d+)\\s+)/.exec(name);\n  if (match) {\n    name = name.slice(match[0].length);\n    period = +match[1];\n  }\n  switch (name) {\n    case \"quarter\":\n      name = \"month\";\n      period *= 3;\n      break;\n    case \"half\":\n      name = \"month\";\n      period *= 6;\n      break;\n  }\n  let interval = intervals.get(name);\n  if (!interval) throw new Error(`unknown interval: ${input}`);\n  if (!(period > 1)) return interval;\n  if (!interval.every) throw new Error(`non-periodic interval: ${name}`);\n  return interval.every(period);\n}\n\nexport function maybeTimeInterval(interval) {\n  return parseInterval(interval, timeIntervals);\n}\n\nexport function maybeUtcInterval(interval) {\n  return parseInterval(interval, utcIntervals);\n}\n\nexport function isUtcYear(i) {\n  if (!i) return false;\n  const date = i.floor(new Date(Date.UTC(2000, 11, 31)));\n  return utcYear(date) >= date; // coercing equality\n}\n\nexport function isTimeYear(i) {\n  if (!i) return false;\n  const date = i.floor(new Date(2000, 11, 31));\n  return timeYear(date) >= date; // coercing equality\n}\n\nexport function formatTimeTicks(scale, data, ticks, anchor) {\n  const format = scale.type === \"time\" ? timeFormat : utcFormat;\n  const template =\n    anchor === \"left\" || anchor === \"right\"\n      ? (f1, f2) => `\\n${f1}\\n${f2}` // extra newline to keep f1 centered\n      : anchor === \"top\"\n      ? (f1, f2) => `${f2}\\n${f1}`\n      : (f1, f2) => `${f1}\\n${f2}`;\n  switch (getTimeTicksInterval(scale, data, ticks)) {\n    case \"millisecond\":\n      return formatConditional(format(\".%L\"), format(\":%M:%S\"), template);\n    case \"second\":\n      return formatConditional(format(\":%S\"), format(\"%-I:%M\"), template);\n    case \"minute\":\n      return formatConditional(format(\"%-I:%M\"), format(\"%p\"), template);\n    case \"hour\":\n      return formatConditional(format(\"%-I %p\"), format(\"%b %-d\"), template);\n    case \"day\":\n      return formatConditional(format(\"%-d\"), format(\"%b\"), template);\n    case \"week\":\n      return formatConditional(format(\"%-d\"), format(\"%b\"), template);\n    case \"month\":\n      return formatConditional(format(\"%b\"), format(\"%Y\"), template);\n    case \"year\":\n      return format(\"%Y\");\n  }\n  throw new Error(\"unable to format time ticks\");\n}\n\n// Compute the median difference between adjacent ticks, ignoring repeated\n// ticks; this implies an effective time interval, assuming that ticks are\n// regularly spaced; choose the largest format less than this interval so that\n// the ticks show the field that is changing. If the ticks are not available,\n// fallback to an approximation based on the desired number of ticks.\nfunction getTimeTicksInterval(scale, data, ticks) {\n  const medianStep = median(pairs(data, (a, b) => Math.abs(b - a) || NaN));\n  if (medianStep > 0) return formats[bisector(([, step]) => step).right(formats, medianStep, 1, formats.length) - 1][0];\n  const [start, stop] = extent(scale.domain());\n  const count = typeof ticks === \"number\" ? ticks : 10;\n  const step = Math.abs(stop - start) / count;\n  return formats[bisector(([, step]) => Math.log(step)).center(formats, Math.log(step))][0];\n}\n\nfunction formatConditional(format1, format2, template) {\n  return (x, i, X) => {\n    const f1 = format1(x, i); // always shown\n    const f2 = format2(x, i); // only shown if different\n    const j = i - orderof(X); // detect reversed domains\n    return i !== j && X[j] !== undefined && f2 === format2(X[j], j) ? f1 : template(f1, f2);\n  };\n}\n", "import {color, descending, quantile, range as rangei} from \"d3\";\nimport {parse as isoParse} from \"isoformat\";\nimport {defined} from \"./defined.js\";\nimport {maybeTimeInterval, maybeUtcInterval} from \"./time.js\";\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray\nexport const TypedArray = Object.getPrototypeOf(Uint8Array);\nconst objectToString = Object.prototype.toString;\n\nexport function valueof(data, value, type) {\n  const valueType = typeof value;\n  return valueType === \"string\"\n    ? maybeTypedMap(data, field(value), type)\n    : valueType === \"function\"\n    ? maybeTypedMap(data, value, type)\n    : valueType === \"number\" || value instanceof Date || valueType === \"boolean\"\n    ? map(data, constant(value), type)\n    : typeof value?.transform === \"function\"\n    ? maybeTypedArrayify(value.transform(data), type)\n    : maybeTypedArrayify(value, type);\n}\n\nfunction maybeTypedMap(data, f, type) {\n  return map(data, type?.prototype instanceof TypedArray ? floater(f) : f, type);\n}\n\nfunction maybeTypedArrayify(data, type) {\n  return type === undefined\n    ? arrayify(data) // preserve undefined type\n    : data instanceof type\n    ? data\n    : type.prototype instanceof TypedArray && !(data instanceof TypedArray)\n    ? type.from(data, coerceNumber)\n    : type.from(data);\n}\n\nfunction floater(f) {\n  return (d, i) => coerceNumber(f(d, i));\n}\n\nexport const singleton = [null]; // for data-less decoration marks, e.g. frame\nexport const field = (name) => (d) => d[name];\nexport const indexOf = {transform: range};\nexport const identity = {transform: (d) => d};\nexport const zero = () => 0;\nexport const one = () => 1;\nexport const yes = () => true;\nexport const string = (x) => (x == null ? x : `${x}`);\nexport const number = (x) => (x == null ? x : +x);\nexport const boolean = (x) => (x == null ? x : !!x);\nexport const first = (x) => (x ? x[0] : undefined);\nexport const second = (x) => (x ? x[1] : undefined);\nexport const third = (x) => (x ? x[2] : undefined);\nexport const constant = (x) => () => x;\n\n// Converts a string like \u201Cp25\u201D into a function that takes an index I and an\n// accessor function f, returning the corresponding percentile value.\nexport function percentile(reduce) {\n  const p = +`${reduce}`.slice(1) / 100;\n  return (I, f) => quantile(I, p, f);\n}\n\n// If the values are specified as a typed array, no coercion is required.\nexport function coerceNumbers(values) {\n  return values instanceof TypedArray ? values : map(values, coerceNumber, Float64Array);\n}\n\n// Unlike Mark\u2019s number, here we want to convert null and undefined to NaN since\n// the result will be stored in a Float64Array and we don\u2019t want null to be\n// coerced to zero. We use Number instead of unary + to allow BigInt coercion.\nfunction coerceNumber(x) {\n  return x == null ? NaN : Number(x);\n}\n\nexport function coerceDates(values) {\n  return map(values, coerceDate);\n}\n\n// When coercing strings to dates, we only want to allow the ISO 8601 format\n// since the built-in string parsing of the Date constructor varies across\n// browsers. (In the future, this could be made more liberal if desired, though\n// it is still generally preferable to do date parsing yourself explicitly,\n// rather than rely on Plot.) Any non-string values are coerced to number first\n// and treated as milliseconds since UNIX epoch.\nexport function coerceDate(x) {\n  return x instanceof Date && !isNaN(x)\n    ? x\n    : typeof x === \"string\"\n    ? isoParse(x)\n    : x == null || isNaN((x = +x))\n    ? undefined\n    : new Date(x);\n}\n\n// Some channels may allow a string constant to be specified; to differentiate\n// string constants (e.g., \"red\") from named fields (e.g., \"date\"), this\n// function tests whether the given value is a CSS color string and returns a\n// tuple [channel, constant] where one of the two is undefined, and the other is\n// the given value. If you wish to reference a named field that is also a valid\n// CSS color, use an accessor (d => d.red) instead.\nexport function maybeColorChannel(value, defaultValue) {\n  if (value === undefined) value = defaultValue;\n  return value === null ? [undefined, \"none\"] : isColor(value) ? [undefined, value] : [value, undefined];\n}\n\n// Similar to maybeColorChannel, this tests whether the given value is a number\n// indicating a constant, and otherwise assumes that it\u2019s a channel value.\nexport function maybeNumberChannel(value, defaultValue) {\n  if (value === undefined) value = defaultValue;\n  return value === null || typeof value === \"number\" ? [undefined, value] : [value, undefined];\n}\n\n// Validates the specified optional string against the allowed list of keywords.\nexport function maybeKeyword(input, name, allowed) {\n  if (input != null) return keyword(input, name, allowed);\n}\n\n// Validates the specified required string against the allowed list of keywords.\nexport function keyword(input, name, allowed) {\n  const i = `${input}`.toLowerCase();\n  if (!allowed.includes(i)) throw new Error(`invalid ${name}: ${input}`);\n  return i;\n}\n\n// Promotes the specified data to an array as needed.\nexport function arrayify(data) {\n  return data == null || data instanceof Array || data instanceof TypedArray ? data : Array.from(data);\n}\n\n// An optimization of type.from(values, f): if the given values are already an\n// instanceof the desired array type, the faster values.map method is used.\nexport function map(values, f, type = Array) {\n  return values == null ? values : values instanceof type ? values.map(f) : type.from(values, f);\n}\n\n// An optimization of type.from(values): if the given values are already an\n// instanceof the desired array type, the faster values.slice method is used.\nexport function slice(values, type = Array) {\n  return values instanceof type ? values.slice() : type.from(values);\n}\n\n// Returns true if any of x, x1, or x2 is not (strictly) undefined.\nexport function hasX({x, x1, x2}) {\n  return x !== undefined || x1 !== undefined || x2 !== undefined;\n}\n\n// Returns true if any of y, y1, or y2 is not (strictly) undefined.\nexport function hasY({y, y1, y2}) {\n  return y !== undefined || y1 !== undefined || y2 !== undefined;\n}\n\n// Returns true if has x or y, or if interval is not (strictly) undefined.\nexport function hasXY(options) {\n  return hasX(options) || hasY(options) || options.interval !== undefined;\n}\n\n// Disambiguates an options object (e.g., {y: \"x2\"}) from a primitive value.\nexport function isObject(option) {\n  return option?.toString === objectToString;\n}\n\n// Disambiguates a scale options object (e.g., {color: {type: \"linear\"}}) from\n// some other option (e.g., {color: \"red\"}). When creating standalone legends,\n// this is used to test whether a scale is defined; this should be consistent\n// with inferScaleType when there are no channels associated with the scale, and\n// if this returns true, then normalizeScale must return non-null.\nexport function isScaleOptions(option) {\n  return isObject(option) && (option.type !== undefined || option.domain !== undefined);\n}\n\n// Disambiguates an options object (e.g., {y: \"x2\"}) from a channel value\n// definition expressed as a channel transform (e.g., {transform: \u2026}).\nexport function isOptions(option) {\n  return isObject(option) && typeof option.transform !== \"function\";\n}\n\n// Disambiguates a sort transform (e.g., {sort: \"date\"}) from a channel domain\n// sort definition (e.g., {sort: {y: \"x\"}}).\nexport function isDomainSort(sort) {\n  return isOptions(sort) && sort.value === undefined && sort.channel === undefined;\n}\n\n// For marks specified either as [0, x] or [x1, x2], such as areas and bars.\nexport function maybeZero(x, x1, x2, x3 = identity) {\n  if (x1 === undefined && x2 === undefined) {\n    // {x} or {}\n    (x1 = 0), (x2 = x === undefined ? x3 : x);\n  } else if (x1 === undefined) {\n    // {x, x2} or {x2}\n    x1 = x === undefined ? 0 : x;\n  } else if (x2 === undefined) {\n    // {x, x1} or {x1}\n    x2 = x === undefined ? 0 : x;\n  }\n  return [x1, x2];\n}\n\n// For marks that have x and y channels (e.g., cell, dot, line, text).\nexport function maybeTuple(x, y) {\n  return x === undefined && y === undefined ? [first, second] : [x, y];\n}\n\n// A helper for extracting the z channel, if it is variable. Used by transforms\n// that require series, such as moving average and normalize.\nexport function maybeZ({z, fill, stroke} = {}) {\n  if (z === undefined) [z] = maybeColorChannel(fill);\n  if (z === undefined) [z] = maybeColorChannel(stroke);\n  return z;\n}\n\n// Returns a Uint32Array with elements [0, 1, 2, \u2026 data.length - 1].\nexport function range(data) {\n  const n = data.length;\n  const r = new Uint32Array(n);\n  for (let i = 0; i < n; ++i) r[i] = i;\n  return r;\n}\n\n// Returns a filtered range of data given the test function.\nexport function where(data, test) {\n  return range(data).filter((i) => test(data[i], i, data));\n}\n\n// Returns an array [values[index[0]], values[index[1]], \u2026].\nexport function take(values, index) {\n  return map(index, (i) => values[i]);\n}\n\n// If f does not take exactly one argument, wraps it in a function that uses take.\nexport function taker(f) {\n  return f.length === 1 ? (index, values) => f(take(values, index)) : f;\n}\n\n// Uses subarray if available, and otherwise slice.\nexport function subarray(I, i, j) {\n  return I.subarray ? I.subarray(i, j) : I.slice(i, j);\n}\n\n// Based on InternMap (d3.group).\nexport function keyof(value) {\n  return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n\nexport function maybeInput(key, options) {\n  if (options[key] !== undefined) return options[key];\n  switch (key) {\n    case \"x1\":\n    case \"x2\":\n      key = \"x\";\n      break;\n    case \"y1\":\n    case \"y2\":\n      key = \"y\";\n      break;\n  }\n  return options[key];\n}\n\nexport function column(source) {\n  // Defines a column whose values are lazily populated by calling the returned\n  // setter. If the given source is labeled, the label is propagated to the\n  // returned column definition.\n  let value;\n  return [\n    {\n      transform: () => value,\n      label: labelof(source)\n    },\n    (v) => (value = v)\n  ];\n}\n\n// Like column, but allows the source to be null.\nexport function maybeColumn(source) {\n  return source == null ? [source] : column(source);\n}\n\nexport function labelof(value, defaultValue) {\n  return typeof value === \"string\" ? value : value && value.label !== undefined ? value.label : defaultValue;\n}\n\n// Assuming that both x1 and x2 and lazy columns (per above), this derives a new\n// a column that\u2019s the average of the two, and which inherits the column label\n// (if any). Both input columns are assumed to be quantitative. If either column\n// is temporal, the returned column is also temporal.\nexport function mid(x1, x2) {\n  return {\n    transform(data) {\n      const X1 = x1.transform(data);\n      const X2 = x2.transform(data);\n      return isTemporal(X1) || isTemporal(X2)\n        ? map(X1, (_, i) => new Date((+X1[i] + +X2[i]) / 2))\n        : map(X1, (_, i) => (+X1[i] + +X2[i]) / 2, Float64Array);\n    },\n    label: x1.label\n  };\n}\n\n// If the scale options declare an interval, applies it to the values V.\nexport function maybeApplyInterval(V, scale) {\n  const t = maybeIntervalTransform(scale?.interval, scale?.type);\n  return t ? map(V, t) : V;\n}\n\n// Returns the equivalent scale transform for the specified interval option.\nexport function maybeIntervalTransform(interval, type) {\n  const i = maybeInterval(interval, type);\n  return i && ((v) => (defined(v) ? i.floor(v) : v));\n}\n\n// If interval is not nullish, converts interval shorthand such as a number (for\n// multiples) or a time interval name (such as \u201Cday\u201D) to a {floor, offset,\n// range} object similar to a D3 time interval.\nexport function maybeInterval(interval, type) {\n  if (interval == null) return;\n  if (typeof interval === \"number\") {\n    if (0 < interval && interval < 1 && Number.isInteger(1 / interval)) interval = -1 / interval;\n    const n = Math.abs(interval);\n    return interval < 0\n      ? {\n          floor: (d) => Math.floor(d * n) / n,\n          offset: (d) => (d * n + 1) / n, // note: no optional step for simplicity\n          range: (lo, hi) => rangei(Math.ceil(lo * n), hi * n).map((x) => x / n)\n        }\n      : {\n          floor: (d) => Math.floor(d / n) * n,\n          offset: (d) => d + n, // note: no optional step for simplicity\n          range: (lo, hi) => rangei(Math.ceil(lo / n), hi / n).map((x) => x * n)\n        };\n  }\n  if (typeof interval === \"string\") return (type === \"time\" ? maybeTimeInterval : maybeUtcInterval)(interval);\n  if (typeof interval.floor !== \"function\") throw new Error(\"invalid interval; missing floor method\");\n  if (typeof interval.offset !== \"function\") throw new Error(\"invalid interval; missing offset method\");\n  return interval;\n}\n\n// Like maybeInterval, but requires a range method too.\nexport function maybeRangeInterval(interval, type) {\n  interval = maybeInterval(interval, type);\n  if (interval && typeof interval.range !== \"function\") throw new Error(\"invalid interval: missing range method\");\n  return interval;\n}\n\n// Like maybeRangeInterval, but requires a ceil method too.\nexport function maybeNiceInterval(interval, type) {\n  interval = maybeRangeInterval(interval, type);\n  if (interval && typeof interval.ceil !== \"function\") throw new Error(\"invalid interval: missing ceil method\");\n  return interval;\n}\n\n// This distinguishes between per-dimension options and a standalone value.\nexport function maybeValue(value) {\n  return value === undefined || isOptions(value) ? value : {value};\n}\n\n// Coerces the given channel values (if any) to numbers. This is useful when\n// values will be interpolated into other code, such as an SVG transform, and\n// where we don\u2019t wish to allow unexpected behavior for weird input.\nexport function numberChannel(source) {\n  return source == null\n    ? null\n    : {\n        transform: (data) => valueof(data, source, Float64Array),\n        label: labelof(source)\n      };\n}\n\nexport function isTuples(data) {\n  if (!isIterable(data)) return false;\n  for (const d of data) {\n    if (d == null) continue;\n    return typeof d === \"object\" && \"0\" in d && \"1\" in d;\n  }\n}\n\nexport function isIterable(value) {\n  return value && typeof value[Symbol.iterator] === \"function\";\n}\n\nexport function isTextual(values) {\n  for (const value of values) {\n    if (value == null) continue;\n    return typeof value !== \"object\" || value instanceof Date;\n  }\n}\n\nexport function isOrdinal(values) {\n  for (const value of values) {\n    if (value == null) continue;\n    const type = typeof value;\n    return type === \"string\" || type === \"boolean\";\n  }\n}\n\nexport function isTemporal(values) {\n  for (const value of values) {\n    if (value == null) continue;\n    return value instanceof Date;\n  }\n}\n\n// Are these strings that might represent dates? This is stricter than ISO 8601\n// because we want to ignore false positives on numbers; for example, the string\n// \"1192\" is more likely to represent a number than a date even though it is\n// valid ISO 8601 representing 1192-01-01.\nexport function isTemporalString(values) {\n  for (const value of values) {\n    if (value == null) continue;\n    return typeof value === \"string\" && isNaN(value) && isoParse(value);\n  }\n}\n\n// Are these strings that might represent numbers? This is stricter than\n// coercion because we want to ignore false positives on e.g. empty strings.\nexport function isNumericString(values) {\n  for (const value of values) {\n    if (value == null) continue;\n    if (typeof value !== \"string\") return false;\n    if (!value.trim()) continue;\n    return !isNaN(value);\n  }\n}\n\nexport function isNumeric(values) {\n  for (const value of values) {\n    if (value == null) continue;\n    return typeof value === \"number\";\n  }\n}\n\n// Returns true if every non-null value in the specified iterable of values\n// passes the specified predicate, and there is at least one non-null value;\n// returns false if at least one non-null value does not pass the specified\n// predicate; otherwise returns undefined (as if all values are null).\nexport function isEvery(values, is) {\n  let every;\n  for (const value of values) {\n    if (value == null) continue;\n    if (!is(value)) return false;\n    every = true;\n  }\n  return every;\n}\n\n// Mostly relies on d3-color, with a few extra color keywords. Currently this\n// strictly requires that the value be a string; we might want to apply string\n// coercion here, though note that d3-color instances would need to support\n// valueOf to work correctly with InternMap.\n// https://www.w3.org/TR/SVG11/painting.html#SpecifyingPaint\nexport function isColor(value) {\n  if (typeof value !== \"string\") return false;\n  value = value.toLowerCase().trim();\n  return (\n    value === \"none\" ||\n    value === \"currentcolor\" ||\n    (value.startsWith(\"url(\") && value.endsWith(\")\")) || // <funciri>, e.g. pattern or gradient\n    (value.startsWith(\"var(\") && value.endsWith(\")\")) || // CSS variable\n    color(value) !== null\n  );\n}\n\nexport function isOpacity(value) {\n  return typeof value === \"number\" && ((0 <= value && value <= 1) || isNaN(value));\n}\n\nexport function isNoneish(value) {\n  return value == null || isNone(value);\n}\n\nexport function isNone(value) {\n  return /^\\s*none\\s*$/i.test(value);\n}\n\nexport function isRound(value) {\n  return /^\\s*round\\s*$/i.test(value);\n}\n\nexport function maybeAnchor(value, name) {\n  return maybeKeyword(value, name, [\n    \"middle\",\n    \"top-left\",\n    \"top\",\n    \"top-right\",\n    \"right\",\n    \"bottom-right\",\n    \"bottom\",\n    \"bottom-left\",\n    \"left\"\n  ]);\n}\n\nexport function maybeFrameAnchor(value = \"middle\") {\n  return maybeAnchor(value, \"frameAnchor\");\n}\n\n// Like a sort comparator, returns a positive value if the given array of values\n// is in ascending order, a negative value if the values are in descending\n// order. Assumes monotonicity; only tests the first and last values.\nexport function orderof(values) {\n  if (values == null) return;\n  const first = values[0];\n  const last = values[values.length - 1];\n  return descending(first, last);\n}\n\n// Unlike {...defaults, ...options}, this ensures that any undefined (but\n// present) properties in options inherit the given default value.\nexport function inherit(options = {}, ...rest) {\n  let o = options;\n  for (const defaults of rest) {\n    for (const key in defaults) {\n      if (o[key] === undefined) {\n        const value = defaults[key];\n        if (o === options) o = {...o, [key]: value};\n        else o[key] = value;\n      }\n    }\n  }\n  return o;\n}\n\n// Given an iterable of named things (objects with a name property), returns a\n// corresponding object with properties associated with the given name.\nexport function named(things) {\n  console.warn(\"named iterables are deprecated; please use an object instead\");\n  const names = new Set();\n  return Object.fromEntries(\n    Array.from(things, (thing) => {\n      const {name} = thing;\n      if (name == null) throw new Error(\"missing name\");\n      const key = `${name}`;\n      if (key === \"__proto__\") throw new Error(`illegal name: ${key}`);\n      if (names.has(key)) throw new Error(`duplicate name: ${key}`);\n      names.add(key);\n      return [name, thing];\n    })\n  );\n}\n\nexport function maybeNamed(things) {\n  return isIterable(things) ? named(things) : things;\n}\n", "// Positional scales have associated axes, and for ordinal data, a point or band\n// scale is used instead of an ordinal scale.\nexport const position = Symbol(\"position\");\n\n// Color scales default to the turbo interpolator for quantitative data, and to\n// the Tableau10 scheme for ordinal data. Color scales may also have an\n// associated legend.\nexport const color = Symbol(\"color\");\n\n// Radius scales default to the sqrt type, have a default range of [0, 3], and a\n// default domain from 0 to the median first quartile of associated channels.\nexport const radius = Symbol(\"radius\");\n\n// Length scales default to the linear type, have a default range of [0, 12],\n// and a default domain from 0 to the median median of associated channels.\nexport const length = Symbol(\"length\");\n\n// Opacity scales have a default range of [0, 1], and a default domain from 0 to\n// the maximum value of associated channels.\nexport const opacity = Symbol(\"opacity\");\n\n// Symbol scales have a default range of categorical symbols.\nexport const symbol = Symbol(\"symbol\");\n\n// There isn\u2019t really a projection scale; this represents x and y for geometry.\nexport const projection = Symbol(\"projection\");\n\n// TODO Rather than hard-coding the list of known scale names, collect the names\n// and categories for each plot specification, so that custom marks can register\n// custom scales.\nexport const registry = new Map([\n  [\"x\", position],\n  [\"y\", position],\n  [\"fx\", position],\n  [\"fy\", position],\n  [\"r\", radius],\n  [\"color\", color],\n  [\"opacity\", opacity],\n  [\"symbol\", symbol],\n  [\"length\", length],\n  [\"projection\", projection]\n]);\n", "import {symbolAsterisk, symbolDiamond2, symbolPlus, symbolSquare2, symbolTriangle2, symbolTimes} from \"d3\";\nimport {symbolCircle, symbolCross, symbolDiamond, symbolSquare, symbolStar, symbolTriangle, symbolWye} from \"d3\";\n\nexport const sqrt3 = Math.sqrt(3);\nexport const sqrt4_3 = 2 / sqrt3;\n\nconst symbolHexagon = {\n  draw(context, size) {\n    const rx = Math.sqrt(size / Math.PI),\n      ry = rx * sqrt4_3,\n      hy = ry / 2;\n    context.moveTo(0, ry);\n    context.lineTo(rx, hy);\n    context.lineTo(rx, -hy);\n    context.lineTo(0, -ry);\n    context.lineTo(-rx, -hy);\n    context.lineTo(-rx, hy);\n    context.closePath();\n  }\n};\n\nconst symbols = new Map([\n  [\"asterisk\", symbolAsterisk],\n  [\"circle\", symbolCircle],\n  [\"cross\", symbolCross],\n  [\"diamond\", symbolDiamond],\n  [\"diamond2\", symbolDiamond2],\n  [\"hexagon\", symbolHexagon],\n  [\"plus\", symbolPlus],\n  [\"square\", symbolSquare],\n  [\"square2\", symbolSquare2],\n  [\"star\", symbolStar],\n  [\"times\", symbolTimes],\n  [\"triangle\", symbolTriangle],\n  [\"triangle2\", symbolTriangle2],\n  [\"wye\", symbolWye]\n]);\n\nfunction isSymbolObject(value) {\n  return value && typeof value.draw === \"function\";\n}\n\nexport function isSymbol(value) {\n  if (isSymbolObject(value)) return true;\n  if (typeof value !== \"string\") return false;\n  return symbols.has(value.toLowerCase());\n}\n\nexport function maybeSymbol(symbol) {\n  if (symbol == null || isSymbolObject(symbol)) return symbol;\n  const value = symbols.get(`${symbol}`.toLowerCase());\n  if (value) return value;\n  throw new Error(`invalid symbol: ${symbol}`);\n}\n\nexport function maybeSymbolChannel(symbol) {\n  if (symbol == null || isSymbolObject(symbol)) return [undefined, symbol];\n  if (typeof symbol === \"string\") {\n    const value = symbols.get(`${symbol}`.toLowerCase());\n    if (value) return [undefined, value];\n  }\n  return [symbol, undefined];\n}\n", "import {randomLcg} from \"d3\";\nimport {ascendingDefined, descendingDefined} from \"../defined.js\";\nimport {arrayify, isDomainSort, isOptions, maybeValue, valueof} from \"../options.js\";\n\nexport function basic({filter: f1, sort: s1, reverse: r1, transform: t1, initializer: i1, ...options} = {}, transform) {\n  // If both t1 and t2 are defined, returns a composite transform that first\n  // applies t1 and then applies t2.\n  if (t1 === undefined) {\n    // explicit transform overrides filter, sort, and reverse\n    if (f1 != null) t1 = filterTransform(f1);\n    if (s1 != null && !isDomainSort(s1)) t1 = composeTransform(t1, sortTransform(s1));\n    if (r1) t1 = composeTransform(t1, reverseTransform);\n  }\n  if (transform != null && i1 != null) throw new Error(\"transforms cannot be applied after initializers\");\n  return {\n    ...options,\n    ...((s1 === null || isDomainSort(s1)) && {sort: s1}),\n    transform: composeTransform(t1, transform)\n  };\n}\n\nexport function initializer({filter: f1, sort: s1, reverse: r1, initializer: i1, ...options} = {}, initializer) {\n  // If both i1 and i2 are defined, returns a composite initializer that first\n  // applies i1 and then applies i2.\n  if (i1 === undefined) {\n    // explicit initializer overrides filter, sort, and reverse\n    if (f1 != null) i1 = filterTransform(f1);\n    if (s1 != null && !isDomainSort(s1)) i1 = composeInitializer(i1, sortTransform(s1));\n    if (r1) i1 = composeInitializer(i1, reverseTransform);\n  }\n  return {\n    ...options,\n    ...((s1 === null || isDomainSort(s1)) && {sort: s1}),\n    initializer: composeInitializer(i1, initializer)\n  };\n}\n\nfunction composeTransform(t1, t2) {\n  if (t1 == null) return t2 === null ? undefined : t2;\n  if (t2 == null) return t1 === null ? undefined : t1;\n  return function (data, facets, plotOptions) {\n    ({data, facets} = t1.call(this, data, facets, plotOptions));\n    return t2.call(this, arrayify(data), facets, plotOptions);\n  };\n}\n\nfunction composeInitializer(i1, i2) {\n  if (i1 == null) return i2 === null ? undefined : i2;\n  if (i2 == null) return i1 === null ? undefined : i1;\n  return function (data, facets, channels, ...args) {\n    let c1, d1, f1, c2, d2, f2;\n    ({data: d1 = data, facets: f1 = facets, channels: c1} = i1.call(this, data, facets, channels, ...args));\n    ({data: d2 = d1, facets: f2 = f1, channels: c2} = i2.call(this, d1, f1, {...channels, ...c1}, ...args));\n    return {data: d2, facets: f2, channels: {...c1, ...c2}};\n  };\n}\n\nfunction apply(options, t) {\n  return (options.initializer != null ? initializer : basic)(options, t);\n}\n\nexport function filter(test, options) {\n  return apply(options, filterTransform(test));\n}\n\nfunction filterTransform(value) {\n  return (data, facets) => {\n    const V = valueof(data, value);\n    return {data, facets: facets.map((I) => I.filter((i) => V[i]))};\n  };\n}\n\nexport function reverse({sort, ...options} = {}) {\n  return {\n    ...apply(options, reverseTransform),\n    sort: isDomainSort(sort) ? sort : null\n  };\n}\n\nfunction reverseTransform(data, facets) {\n  return {data, facets: facets.map((I) => I.slice().reverse())};\n}\n\nexport function shuffle({seed, sort, ...options} = {}) {\n  return {\n    ...apply(options, sortValue(seed == null ? Math.random : randomLcg(seed))),\n    sort: isDomainSort(sort) ? sort : null\n  };\n}\n\nexport function sort(order, {sort, ...options} = {}) {\n  return {\n    ...(isOptions(order) && order.channel !== undefined ? initializer : apply)(options, sortTransform(order)),\n    sort: isDomainSort(sort) ? sort : null\n  };\n}\n\nfunction sortTransform(value) {\n  return (typeof value === \"function\" && value.length !== 1 ? sortData : sortValue)(value);\n}\n\nfunction sortData(compare) {\n  return (data, facets) => {\n    const compareData = (i, j) => compare(data[i], data[j]);\n    return {data, facets: facets.map((I) => I.slice().sort(compareData))};\n  };\n}\n\nfunction sortValue(value) {\n  let channel, order;\n  ({channel, value, order} = {...maybeValue(value)});\n  const negate = channel?.startsWith(\"-\");\n  if (negate) channel = channel.slice(1);\n  if (order === undefined) order = negate ? descendingDefined : ascendingDefined;\n  if (typeof order !== \"function\") {\n    switch (`${order}`.toLowerCase()) {\n      case \"ascending\":\n        order = ascendingDefined;\n        break;\n      case \"descending\":\n        order = descendingDefined;\n        break;\n      default:\n        throw new Error(`invalid order: ${order}`);\n    }\n  }\n  return (data, facets, channels) => {\n    let V;\n    if (channel === undefined) {\n      V = valueof(data, value);\n    } else {\n      if (channels === undefined) throw new Error(\"channel sort requires an initializer\");\n      V = channels[channel];\n      if (!V) return {}; // ignore missing channel\n      V = V.value;\n    }\n    const compareValue = (i, j) => order(V[i], V[j]);\n    return {data, facets: facets.map((I) => I.slice().sort(compareValue))};\n  };\n}\n", "import {\n  InternSet,\n  deviation,\n  group as grouper,\n  max,\n  maxIndex,\n  mean,\n  median,\n  min,\n  minIndex,\n  mode,\n  rollup,\n  sort,\n  sum,\n  variance\n} from \"d3\";\nimport {ascendingDefined} from \"../defined.js\";\nimport {\n  column,\n  first,\n  identity,\n  isObject,\n  isTemporal,\n  labelof,\n  maybeApplyInterval,\n  maybeColorChannel,\n  maybeColumn,\n  maybeInput,\n  maybeTuple,\n  percentile,\n  range,\n  second,\n  take,\n  valueof\n} from \"../options.js\";\nimport {basic} from \"./basic.js\";\n\n// Group on {z, fill, stroke}.\nexport function groupZ(outputs, options) {\n  return groupn(null, null, outputs, options);\n}\n\n// Group on {z, fill, stroke}, then on x.\nexport function groupX(outputs = {y: \"count\"}, options = {}) {\n  const {x = identity} = options;\n  if (x == null) throw new Error(\"missing channel: x\");\n  return groupn(x, null, outputs, options);\n}\n\n// Group on {z, fill, stroke}, then on y.\nexport function groupY(outputs = {x: \"count\"}, options = {}) {\n  const {y = identity} = options;\n  if (y == null) throw new Error(\"missing channel: y\");\n  return groupn(null, y, outputs, options);\n}\n\n// Group on {z, fill, stroke}, then on x and y.\nexport function group(outputs = {fill: \"count\"}, options = {}) {\n  let {x, y} = options;\n  [x, y] = maybeTuple(x, y);\n  if (x == null) throw new Error(\"missing channel: x\");\n  if (y == null) throw new Error(\"missing channel: y\");\n  return groupn(x, y, outputs, options);\n}\n\nfunction groupn(\n  x, // optionally group on x\n  y, // optionally group on y\n  {\n    data: reduceData = reduceIdentity,\n    filter,\n    sort,\n    reverse,\n    ...outputs // output channel definitions\n  } = {},\n  inputs = {} // input channels and options\n) {\n  // Compute the outputs.\n  outputs = maybeOutputs(outputs, inputs);\n  reduceData = maybeReduce(reduceData, identity);\n  sort = sort == null ? undefined : maybeOutput(\"sort\", sort, inputs);\n  filter = filter == null ? undefined : maybeEvaluator(\"filter\", filter, inputs);\n\n  // Produce x and y output channels as appropriate.\n  const [GX, setGX] = maybeColumn(x);\n  const [GY, setGY] = maybeColumn(y);\n\n  // Greedily materialize the z, fill, and stroke channels (if channels and not\n  // constants) so that we can reference them for subdividing groups without\n  // computing them more than once.\n  const {\n    z,\n    fill,\n    stroke,\n    x1,\n    x2, // consumed if x is an output\n    y1,\n    y2, // consumed if y is an output\n    ...options\n  } = inputs;\n  const [GZ, setGZ] = maybeColumn(z);\n  const [vfill] = maybeColorChannel(fill);\n  const [vstroke] = maybeColorChannel(stroke);\n  const [GF, setGF] = maybeColumn(vfill);\n  const [GS, setGS] = maybeColumn(vstroke);\n\n  return {\n    ...(\"z\" in inputs && {z: GZ || z}),\n    ...(\"fill\" in inputs && {fill: GF || fill}),\n    ...(\"stroke\" in inputs && {stroke: GS || stroke}),\n    ...basic(options, (data, facets, plotOptions) => {\n      const X = maybeApplyInterval(valueof(data, x), plotOptions?.x);\n      const Y = maybeApplyInterval(valueof(data, y), plotOptions?.y);\n      const Z = valueof(data, z);\n      const F = valueof(data, vfill);\n      const S = valueof(data, vstroke);\n      const G = maybeSubgroup(outputs, {z: Z, fill: F, stroke: S});\n      const groupFacets = [];\n      const groupData = [];\n      const GX = X && setGX([]);\n      const GY = Y && setGY([]);\n      const GZ = Z && setGZ([]);\n      const GF = F && setGF([]);\n      const GS = S && setGS([]);\n      let i = 0;\n      for (const o of outputs) o.initialize(data);\n      if (sort) sort.initialize(data);\n      if (filter) filter.initialize(data);\n      for (const facet of facets) {\n        const groupFacet = [];\n        for (const o of outputs) o.scope(\"facet\", facet);\n        if (sort) sort.scope(\"facet\", facet);\n        if (filter) filter.scope(\"facet\", facet);\n        for (const [f, I] of maybeGroup(facet, G)) {\n          for (const [y, gg] of maybeGroup(I, Y)) {\n            for (const [x, g] of maybeGroup(gg, X)) {\n              if (filter && !filter.reduce(g)) continue;\n              groupFacet.push(i++);\n              groupData.push(reduceData.reduceIndex(g, data));\n              if (X) GX.push(x);\n              if (Y) GY.push(y);\n              if (Z) GZ.push(G === Z ? f : Z[g[0]]);\n              if (F) GF.push(G === F ? f : F[g[0]]);\n              if (S) GS.push(G === S ? f : S[g[0]]);\n              for (const o of outputs) o.reduce(g);\n              if (sort) sort.reduce(g);\n            }\n          }\n        }\n        groupFacets.push(groupFacet);\n      }\n      maybeSort(groupFacets, sort, reverse);\n      return {data: groupData, facets: groupFacets};\n    }),\n    ...(!hasOutput(outputs, \"x\") && (GX ? {x: GX} : {x1, x2})),\n    ...(!hasOutput(outputs, \"y\") && (GY ? {y: GY} : {y1, y2})),\n    ...Object.fromEntries(outputs.map(({name, output}) => [name, output]))\n  };\n}\n\nexport function hasOutput(outputs, ...names) {\n  for (const {name} of outputs) {\n    if (names.includes(name)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport function maybeOutputs(outputs, inputs, asOutput = maybeOutput) {\n  const entries = Object.entries(outputs);\n  // Propagate standard mark channels by default.\n  if (inputs.title != null && outputs.title === undefined) entries.push([\"title\", reduceTitle]);\n  if (inputs.href != null && outputs.href === undefined) entries.push([\"href\", reduceFirst]);\n  return entries\n    .filter(([, reduce]) => reduce !== undefined)\n    .map(([name, reduce]) => (reduce === null ? nullOutput(name) : asOutput(name, reduce, inputs)));\n}\n\nexport function maybeOutput(name, reduce, inputs, asEvaluator = maybeEvaluator) {\n  let scale; // optional per-channel scale override\n  if (isObject(reduce) && \"reduce\" in reduce) (scale = reduce.scale), (reduce = reduce.reduce); // N.B. array.reduce\n  const evaluator = asEvaluator(name, reduce, inputs);\n  const [output, setOutput] = column(evaluator.label);\n  let O;\n  return {\n    name,\n    output: scale === undefined ? output : {value: output, scale},\n    initialize(data) {\n      evaluator.initialize(data);\n      O = setOutput([]);\n    },\n    scope(scope, I) {\n      evaluator.scope(scope, I);\n    },\n    reduce(I, extent) {\n      O.push(evaluator.reduce(I, extent));\n    }\n  };\n}\n\nfunction nullOutput(name) {\n  return {name, initialize() {}, scope() {}, reduce() {}};\n}\n\nexport function maybeEvaluator(name, reduce, inputs, asReduce = maybeReduce) {\n  const input = maybeInput(name, inputs);\n  const reducer = asReduce(reduce, input);\n  let V, context;\n  return {\n    label: labelof(reducer === reduceCount ? null : input, reducer.label),\n    initialize(data) {\n      V = input === undefined ? data : valueof(data, input);\n      if (reducer.scope === \"data\") {\n        context = reducer.reduceIndex(range(data), V);\n      }\n    },\n    scope(scope, I) {\n      if (reducer.scope === scope) {\n        context = reducer.reduceIndex(I, V);\n      }\n    },\n    reduce(I, extent) {\n      return reducer.scope == null ? reducer.reduceIndex(I, V, extent) : reducer.reduceIndex(I, V, context, extent);\n    }\n  };\n}\n\nexport function maybeGroup(I, X) {\n  return X\n    ? sort(\n        grouper(I, (i) => X[i]),\n        first\n      )\n    : [[, I]];\n}\n\nexport function maybeReduce(reduce, value, fallback = invalidReduce) {\n  if (reduce == null) return fallback(reduce);\n  if (typeof reduce.reduceIndex === \"function\") return reduce;\n  if (typeof reduce.reduce === \"function\" && isObject(reduce)) return reduceReduce(reduce); // N.B. array.reduce\n  if (typeof reduce === \"function\") return reduceFunction(reduce);\n  if (/^p\\d{2}$/i.test(reduce)) return reduceAccessor(percentile(reduce));\n  switch (`${reduce}`.toLowerCase()) {\n    case \"first\":\n      return reduceFirst;\n    case \"last\":\n      return reduceLast;\n    case \"identity\":\n      return reduceIdentity;\n    case \"count\":\n      return reduceCount;\n    case \"distinct\":\n      return reduceDistinct;\n    case \"sum\":\n      return value == null ? reduceCount : reduceSum;\n    case \"proportion\":\n      return reduceProportion(value, \"data\");\n    case \"proportion-facet\":\n      return reduceProportion(value, \"facet\");\n    case \"deviation\":\n      return reduceAccessor(deviation);\n    case \"min\":\n      return reduceAccessor(min);\n    case \"min-index\":\n      return reduceAccessor(minIndex);\n    case \"max\":\n      return reduceAccessor(max);\n    case \"max-index\":\n      return reduceAccessor(maxIndex);\n    case \"mean\":\n      return reduceMaybeTemporalAccessor(mean);\n    case \"median\":\n      return reduceMaybeTemporalAccessor(median);\n    case \"variance\":\n      return reduceAccessor(variance);\n    case \"mode\":\n      return reduceAccessor(mode);\n  }\n  return fallback(reduce);\n}\n\nfunction invalidReduce(reduce) {\n  throw new Error(`invalid reduce: ${reduce}`);\n}\n\nexport function maybeSubgroup(outputs, inputs) {\n  for (const name in inputs) {\n    const value = inputs[name];\n    if (value !== undefined && !outputs.some((o) => o.name === name)) {\n      return value;\n    }\n  }\n}\n\nexport function maybeSort(facets, sort, reverse) {\n  if (sort) {\n    const S = sort.output.transform();\n    const compare = (i, j) => ascendingDefined(S[i], S[j]);\n    facets.forEach((f) => f.sort(compare));\n  }\n  if (reverse) {\n    facets.forEach((f) => f.reverse());\n  }\n}\n\nfunction reduceReduce(reduce) {\n  console.warn(\"deprecated reduce interface; implement reduceIndex instead.\");\n  return {...reduce, reduceIndex: reduce.reduce.bind(reduce)};\n}\n\nfunction reduceFunction(f) {\n  return {\n    reduceIndex(I, X, extent) {\n      return f(take(X, I), extent);\n    }\n  };\n}\n\nfunction reduceAccessor(f) {\n  return {\n    reduceIndex(I, X) {\n      return f(I, (i) => X[i]);\n    }\n  };\n}\n\nfunction reduceMaybeTemporalAccessor(f) {\n  return {\n    reduceIndex(I, X) {\n      const x = f(I, (i) => X[i]);\n      return isTemporal(X) ? new Date(x) : x;\n    }\n  };\n}\n\nexport const reduceIdentity = {\n  reduceIndex(I, X) {\n    return take(X, I);\n  }\n};\n\nexport const reduceFirst = {\n  reduceIndex(I, X) {\n    return X[I[0]];\n  }\n};\n\nconst reduceTitle = {\n  reduceIndex(I, X) {\n    const n = 5;\n    const groups = sort(\n      rollup(\n        I,\n        (V) => V.length,\n        (i) => X[i]\n      ),\n      second\n    );\n    const top = groups.slice(-n).reverse();\n    if (top.length < groups.length) {\n      const bottom = groups.slice(0, 1 - n);\n      top[n - 1] = [`\u2026 ${bottom.length.toLocaleString(\"en-US\")} more`, sum(bottom, second)];\n    }\n    return top.map(([key, value]) => `${key} (${value.toLocaleString(\"en-US\")})`).join(\"\\n\");\n  }\n};\n\nconst reduceLast = {\n  reduceIndex(I, X) {\n    return X[I[I.length - 1]];\n  }\n};\n\nexport const reduceCount = {\n  label: \"Frequency\",\n  reduceIndex(I) {\n    return I.length;\n  }\n};\n\nconst reduceDistinct = {\n  label: \"Distinct\",\n  reduceIndex(I, X) {\n    const s = new InternSet();\n    for (const i of I) s.add(X[i]);\n    return s.size;\n  }\n};\n\nconst reduceSum = reduceAccessor(sum);\n\nfunction reduceProportion(value, scope) {\n  return value == null\n    ? {scope, label: \"Frequency\", reduceIndex: (I, V, basis = 1) => I.length / basis}\n    : {scope, reduceIndex: (I, V, basis = 1) => sum(I, (i) => V[i]) / basis};\n}\n", "import {InternSet, rollups} from \"d3\";\nimport {ascendingDefined, descendingDefined} from \"./defined.js\";\nimport {first, isColor, isEvery, isIterable, isOpacity, labelof, map, maybeValue, range, valueof} from \"./options.js\";\nimport {registry} from \"./scales/index.js\";\nimport {isSymbol, maybeSymbol} from \"./symbol.js\";\nimport {maybeReduce} from \"./transforms/group.js\";\n\nexport function createChannel(data, {scale, type, value, filter, hint}, name) {\n  if (hint === undefined && typeof value?.transform === \"function\") hint = value.hint;\n  return inferChannelScale(name, {\n    scale,\n    type,\n    value: valueof(data, value),\n    label: labelof(value),\n    filter,\n    hint\n  });\n}\n\nexport function createChannels(channels, data) {\n  return Object.fromEntries(\n    Object.entries(channels).map(([name, channel]) => [name, createChannel(data, channel, name)])\n  );\n}\n\n// TODO Use Float64Array for scales with numeric ranges, e.g. position?\nexport function valueObject(channels, scales) {\n  const values = Object.fromEntries(\n    Object.entries(channels).map(([name, {scale: scaleName, value}]) => {\n      const scale = scaleName == null ? null : scales[scaleName];\n      return [name, scale == null ? value : map(value, scale)];\n    })\n  );\n  values.channels = channels; // expose channel state for advanced usage\n  return values;\n}\n\n// If the channel uses the \"auto\" scale (or equivalently true), infer the scale\n// from the channel name and the provided values. For color and symbol channels,\n// no scale is applied if the values are literal; however for symbols, we must\n// promote symbol names (e.g., \"plus\") to symbol implementations (symbolPlus).\n// Note: mutates channel!\nexport function inferChannelScale(name, channel) {\n  const {scale, value} = channel;\n  if (scale === true || scale === \"auto\") {\n    switch (name) {\n      case \"fill\":\n      case \"stroke\":\n      case \"color\":\n        channel.scale = scale !== true && isEvery(value, isColor) ? null : \"color\";\n        break;\n      case \"fillOpacity\":\n      case \"strokeOpacity\":\n      case \"opacity\":\n        channel.scale = scale !== true && isEvery(value, isOpacity) ? null : \"opacity\";\n        break;\n      case \"symbol\":\n        if (scale !== true && isEvery(value, isSymbol)) {\n          channel.scale = null;\n          channel.value = map(value, maybeSymbol);\n        } else {\n          channel.scale = \"symbol\";\n        }\n        break;\n      default:\n        channel.scale = registry.has(name) ? name : null;\n        break;\n    }\n  } else if (scale === false) {\n    channel.scale = null;\n  } else if (scale != null && !registry.has(scale)) {\n    throw new Error(`unknown scale: ${scale}`);\n  }\n  return channel;\n}\n\n// Note: mutates channel.domain! This is set to a function so that it is lazily\n// computed; i.e., if the scale\u2019s domain is set explicitly, that takes priority\n// over the sort option, and we don\u2019t need to do additional work.\nexport function channelDomain(data, facets, channels, facetChannels, options) {\n  const {order: defaultOrder, reverse: defaultReverse, reduce: defaultReduce = true, limit: defaultLimit} = options;\n  for (const x in options) {\n    if (!registry.has(x)) continue; // ignore unknown scale keys (including generic options)\n    let {value: y, order = defaultOrder, reverse = defaultReverse, reduce = defaultReduce, limit = defaultLimit} = maybeValue(options[x]); // prettier-ignore\n    const negate = y?.startsWith(\"-\");\n    if (negate) y = y.slice(1);\n    order = order === undefined ? negate !== (y === \"width\" || y === \"height\") ? descendingGroup : ascendingGroup : maybeOrder(order); // prettier-ignore\n    if (reduce == null || reduce === false) continue; // disabled reducer\n    const X = x === \"fx\" || x === \"fy\" ? reindexFacetChannel(facets, facetChannels[x]) : findScaleChannel(channels, x);\n    if (!X) throw new Error(`missing channel for scale: ${x}`);\n    const XV = X.value;\n    const [lo = 0, hi = Infinity] = isIterable(limit) ? limit : limit < 0 ? [limit] : [0, limit];\n    if (y == null) {\n      X.domain = () => {\n        let domain = Array.from(new InternSet(XV)); // remove any duplicates\n        if (reverse) domain = domain.reverse();\n        if (lo !== 0 || hi !== Infinity) domain = domain.slice(lo, hi);\n        return domain;\n      };\n    } else {\n      const YV =\n        y === \"data\"\n          ? data\n          : y === \"height\"\n          ? difference(channels, \"y1\", \"y2\")\n          : y === \"width\"\n          ? difference(channels, \"x1\", \"x2\")\n          : values(channels, y, y === \"y\" ? \"y2\" : y === \"x\" ? \"x2\" : undefined);\n      const reducer = maybeReduce(reduce === true ? \"max\" : reduce, YV);\n      X.domain = () => {\n        let domain = rollups(\n          range(XV),\n          (I) => reducer.reduceIndex(I, YV),\n          (i) => XV[i]\n        );\n        if (order) domain.sort(order);\n        if (reverse) domain.reverse();\n        if (lo !== 0 || hi !== Infinity) domain = domain.slice(lo, hi);\n        return domain.map(first);\n      };\n    }\n  }\n}\n\nfunction findScaleChannel(channels, scale) {\n  for (const name in channels) {\n    const channel = channels[name];\n    if (channel.scale === scale) return channel;\n  }\n}\n\n// Facet channels are not affected by transforms; so, to compute the domain of a\n// facet scale, we must first re-index the facet channel according to the\n// transformed mark index. Note: mutates channel, but that should be safe here?\nfunction reindexFacetChannel(facets, channel) {\n  const originalFacets = facets.original;\n  if (originalFacets === facets) return channel; // not transformed\n  const V1 = channel.value;\n  const V2 = (channel.value = []); // mutates channel!\n  for (let i = 0; i < originalFacets.length; ++i) {\n    const vi = V1[originalFacets[i][0]];\n    for (const j of facets[i]) V2[j] = vi;\n  }\n  return channel;\n}\n\nfunction difference(channels, k1, k2) {\n  const X1 = values(channels, k1);\n  const X2 = values(channels, k2);\n  return map(X2, (x2, i) => Math.abs(x2 - X1[i]), Float64Array);\n}\n\nfunction values(channels, name, alias) {\n  let channel = channels[name];\n  if (!channel && alias !== undefined) channel = channels[alias];\n  if (channel) return channel.value;\n  throw new Error(`missing channel: ${name}`);\n}\n\nfunction maybeOrder(order) {\n  if (order == null || typeof order === \"function\") return order;\n  switch (`${order}`.toLowerCase()) {\n    case \"ascending\":\n      return ascendingGroup;\n    case \"descending\":\n      return descendingGroup;\n  }\n  throw new Error(`invalid order: ${order}`);\n}\n\nfunction ascendingGroup([ak, av], [bk, bv]) {\n  return ascendingDefined(av, bv) || ascendingDefined(ak, bk);\n}\n\nfunction descendingGroup([ak, av], [bk, bv]) {\n  return descendingDefined(av, bv) || ascendingDefined(ak, bk);\n}\n\nexport function getSource(channels, key) {\n  let channel = channels[key];\n  if (!channel) return;\n  while (channel.source) channel = channel.source;\n  return channel.source === null ? null : channel;\n}\n", "import {creator, select} from \"d3\";\n\nexport function createContext(options = {}) {\n  const {document = typeof window !== \"undefined\" ? window.document : undefined} = options;\n  return {document};\n}\n\nexport function create(name, {document}) {\n  return select(creator(name).call(document.documentElement));\n}\n", "let warnings = 0;\n\nexport function consumeWarnings() {\n  const w = warnings;\n  warnings = 0;\n  return w;\n}\n\nexport function warn(message) {\n  console.warn(message);\n  ++warnings;\n}\n", "import {\n  geoAlbers,\n  geoAlbersUsa,\n  geoAzimuthalEqualArea,\n  geoAzimuthalEquidistant,\n  geoClipRectangle,\n  geoConicConformal,\n  geoConicEqualArea,\n  geoConicEquidistant,\n  geoEqualEarth,\n  geoEquirectangular,\n  geoGnomonic,\n  geoMercator,\n  geoOrthographic,\n  geoPath,\n  geoStereographic,\n  geoStream,\n  geoTransform,\n  geoTransverseMercator\n} from \"d3\";\nimport {valueObject} from \"./channel.js\";\nimport {coerceNumbers, constant, isObject} from \"./options.js\";\nimport {warn} from \"./warnings.js\";\n\nconst pi = Math.PI;\nconst tau = 2 * pi;\nconst defaultAspectRatio = 0.618;\n\nexport function createProjection(\n  {\n    projection,\n    inset: globalInset = 0,\n    insetTop = globalInset,\n    insetRight = globalInset,\n    insetBottom = globalInset,\n    insetLeft = globalInset\n  } = {},\n  dimensions\n) {\n  if (projection == null) return;\n  if (typeof projection.stream === \"function\") return projection; // d3 projection\n  let options;\n  let domain;\n  let clip = \"frame\";\n\n  // If the projection was specified as an object with additional options,\n  // extract those. The order of precedence for insetTop (and other insets) is:\n  // projection.insetTop, projection.inset, (global) insetTop, (global) inset.\n  // Any other options on this object will be passed through to the initializer.\n  if (isObject(projection)) {\n    let inset;\n    ({\n      type: projection,\n      domain,\n      inset,\n      insetTop = inset !== undefined ? inset : insetTop,\n      insetRight = inset !== undefined ? inset : insetRight,\n      insetBottom = inset !== undefined ? inset : insetBottom,\n      insetLeft = inset !== undefined ? inset : insetLeft,\n      clip = clip,\n      ...options\n    } = projection);\n    if (projection == null) return;\n  }\n\n  // For named projections, retrieve the corresponding projection initializer.\n  if (typeof projection !== \"function\") ({type: projection} = namedProjection(projection));\n\n  // Compute the frame dimensions and invoke the projection initializer.\n  const {width, height, marginLeft, marginRight, marginTop, marginBottom} = dimensions;\n  const dx = width - marginLeft - marginRight - insetLeft - insetRight;\n  const dy = height - marginTop - marginBottom - insetTop - insetBottom;\n  projection = projection?.({width: dx, height: dy, clip, ...options});\n\n  // The projection initializer might decide to not use a projection.\n  if (projection == null) return;\n  clip = maybePostClip(clip, marginLeft, marginTop, width - marginRight, height - marginBottom);\n\n  // Translate the origin to the top-left corner, respecting margins and insets.\n  let tx = marginLeft + insetLeft;\n  let ty = marginTop + insetTop;\n  let transform;\n\n  // If a domain is specified, fit the projection to the frame.\n  if (domain != null) {\n    const [[x0, y0], [x1, y1]] = geoPath(projection).bounds(domain);\n    const k = Math.min(dx / (x1 - x0), dy / (y1 - y0));\n    if (k > 0) {\n      tx -= (k * (x0 + x1) - dx) / 2;\n      ty -= (k * (y0 + y1) - dy) / 2;\n      transform = geoTransform({\n        point(x, y) {\n          this.stream.point(x * k + tx, y * k + ty);\n        }\n      });\n    } else {\n      warn(`Warning: the projection could not be fit to the specified domain; using the default scale.`);\n    }\n  }\n\n  transform ??=\n    tx === 0 && ty === 0\n      ? identity()\n      : geoTransform({\n          point(x, y) {\n            this.stream.point(x + tx, y + ty);\n          }\n        });\n\n  return {stream: (s) => projection.stream(transform.stream(clip(s)))};\n}\n\nfunction namedProjection(projection) {\n  switch (`${projection}`.toLowerCase()) {\n    case \"albers-usa\":\n      return scaleProjection(geoAlbersUsa, 0.7463, 0.4673);\n    case \"albers\":\n      return conicProjection(geoAlbers, 0.7463, 0.4673);\n    case \"azimuthal-equal-area\":\n      return scaleProjection(geoAzimuthalEqualArea, 4, 4);\n    case \"azimuthal-equidistant\":\n      return scaleProjection(geoAzimuthalEquidistant, tau, tau);\n    case \"conic-conformal\":\n      return conicProjection(geoConicConformal, tau, tau);\n    case \"conic-equal-area\":\n      return conicProjection(geoConicEqualArea, 6.1702, 2.9781);\n    case \"conic-equidistant\":\n      return conicProjection(geoConicEquidistant, 7.312, 3.6282);\n    case \"equal-earth\":\n      return scaleProjection(geoEqualEarth, 5.4133, 2.6347);\n    case \"equirectangular\":\n      return scaleProjection(geoEquirectangular, tau, pi);\n    case \"gnomonic\":\n      return scaleProjection(geoGnomonic, 3.4641, 3.4641);\n    case \"identity\":\n      return {type: identity};\n    case \"reflect-y\":\n      return {type: reflectY};\n    case \"mercator\":\n      return scaleProjection(geoMercator, tau, tau);\n    case \"orthographic\":\n      return scaleProjection(geoOrthographic, 2, 2);\n    case \"stereographic\":\n      return scaleProjection(geoStereographic, 2, 2);\n    case \"transverse-mercator\":\n      return scaleProjection(geoTransverseMercator, tau, tau);\n    default:\n      throw new Error(`unknown projection type: ${projection}`);\n  }\n}\n\nfunction maybePostClip(clip, x1, y1, x2, y2) {\n  if (clip === false || clip == null || typeof clip === \"number\") return (s) => s;\n  if (clip === true) clip = \"frame\";\n  switch (`${clip}`.toLowerCase()) {\n    case \"frame\":\n      return geoClipRectangle(x1, y1, x2, y2);\n    default:\n      throw new Error(`unknown projection clip type: ${clip}`);\n  }\n}\n\nfunction scaleProjection(createProjection, kx, ky) {\n  return {\n    type: ({width, height, rotate, precision = 0.15, clip}) => {\n      const projection = createProjection();\n      if (precision != null) projection.precision?.(precision);\n      if (rotate != null) projection.rotate?.(rotate);\n      if (typeof clip === \"number\") projection.clipAngle?.(clip);\n      projection.scale(Math.min(width / kx, height / ky));\n      projection.translate([width / 2, height / 2]);\n      return projection;\n    },\n    aspectRatio: ky / kx\n  };\n}\n\nfunction conicProjection(createProjection, kx, ky) {\n  const {type, aspectRatio} = scaleProjection(createProjection, kx, ky);\n  return {\n    type: (options) => {\n      const {parallels, domain, width, height} = options;\n      const projection = type(options);\n      if (parallels != null) {\n        projection.parallels(parallels);\n        if (domain === undefined) {\n          projection.fitSize([width, height], {type: \"Sphere\"});\n        }\n      }\n      return projection;\n    },\n    aspectRatio\n  };\n}\n\nconst identity = constant({stream: (stream) => stream});\n\nconst reflectY = constant(\n  geoTransform({\n    point(x, y) {\n      this.stream.point(x, -y);\n    }\n  })\n);\n\n// Applies a point-wise projection to the given paired x and y channels.\n// Note: mutates values!\nexport function project(cx, cy, values, projection) {\n  const x = values[cx];\n  const y = values[cy];\n  const n = x.length;\n  const X = (values[cx] = new Float64Array(n).fill(NaN));\n  const Y = (values[cy] = new Float64Array(n).fill(NaN));\n  let i;\n  const stream = projection.stream({\n    point(x, y) {\n      X[i] = x;\n      Y[i] = y;\n    }\n  });\n  for (i = 0; i < n; ++i) {\n    stream.point(x[i], y[i]);\n  }\n}\n\n// Returns true if a projection was specified. This should match the logic of\n// createProjection above, and is called before we construct the projection.\n// (Though note that we ignore the edge case where the projection initializer\n// may return null.)\nexport function hasProjection({projection} = {}) {\n  if (projection == null) return false;\n  if (typeof projection.stream === \"function\") return true;\n  if (isObject(projection)) projection = projection.type;\n  return projection != null;\n}\n\n// When a named projection is specified, we can use its natural aspect ratio to\n// determine a good value for the projection\u2019s height based on the desired\n// width. When we don\u2019t have a way to know, the golden ratio is our best guess.\n// Due to a circular dependency (we need to know the height before we can\n// construct the projection), we have to test the raw projection option rather\n// than the materialized projection; therefore we must be extremely careful that\n// the logic of this function exactly matches createProjection above!\nexport function projectionAspectRatio(projection) {\n  if (typeof projection?.stream === \"function\") return defaultAspectRatio;\n  if (isObject(projection)) projection = projection.type;\n  if (projection == null) return;\n  if (typeof projection !== \"function\") {\n    const {aspectRatio} = namedProjection(projection);\n    if (aspectRatio) return aspectRatio;\n  }\n  return defaultAspectRatio;\n}\n\n// Extract the (possibly) scaled values for the x and y channels, and apply the\n// projection if any.\nexport function applyPosition(channels, scales, {projection}) {\n  const {x, y} = channels;\n  let position = {};\n  if (x) position.x = x;\n  if (y) position.y = y;\n  position = valueObject(position, scales);\n  if (projection && x?.scale === \"x\" && y?.scale === \"y\") project(\"x\", \"y\", position, projection);\n  if (x) position.x = coerceNumbers(position.x);\n  if (y) position.y = coerceNumbers(position.y);\n  return position;\n}\n\nexport function getGeometryChannels(channel) {\n  const X = [];\n  const Y = [];\n  const x = {scale: \"x\", value: X};\n  const y = {scale: \"y\", value: Y};\n  const sink = {\n    point(x, y) {\n      X.push(x);\n      Y.push(y);\n    },\n    lineStart() {},\n    lineEnd() {},\n    polygonStart() {},\n    polygonEnd() {},\n    sphere() {}\n  };\n  for (const object of channel.value) geoStream(object, sink);\n  return [x, y];\n}\n", "import {\n  interpolateBlues,\n  interpolateBrBG,\n  interpolateBuGn,\n  interpolateBuPu,\n  interpolateGnBu,\n  interpolateGreens,\n  interpolateGreys,\n  interpolateOranges,\n  interpolateOrRd,\n  interpolatePiYG,\n  interpolatePRGn,\n  interpolatePuBu,\n  interpolatePuBuGn,\n  interpolatePuOr,\n  interpolatePuRd,\n  interpolatePurples,\n  interpolateRdBu,\n  interpolateRdGy,\n  interpolateRdPu,\n  interpolateRdYlBu,\n  interpolateRdYlGn,\n  interpolateReds,\n  interpolateSpectral,\n  interpolateYlGn,\n  interpolateYlGnBu,\n  interpolateYlOrBr,\n  interpolateYlOrRd,\n  interpolateTurbo,\n  interpolateViridis,\n  interpolateMagma,\n  interpolateInferno,\n  interpolatePlasma,\n  interpolateCividis,\n  interpolateCubehelixDefault,\n  interpolateWarm,\n  interpolateCool,\n  interpolateRainbow,\n  interpolateSinebow,\n  quantize,\n  schemeAccent,\n  schemeBlues,\n  schemeBrBG,\n  schemeBuGn,\n  schemeBuPu,\n  schemeCategory10,\n  schemeDark2,\n  schemeGnBu,\n  schemeGreens,\n  schemeGreys,\n  schemeOranges,\n  schemeOrRd,\n  schemePaired,\n  schemePastel1,\n  schemePastel2,\n  schemePiYG,\n  schemePRGn,\n  schemePuBu,\n  schemePuBuGn,\n  schemePuOr,\n  schemePuRd,\n  schemePurples,\n  schemeRdBu,\n  schemeRdGy,\n  schemeRdPu,\n  schemeRdYlBu,\n  schemeRdYlGn,\n  schemeReds,\n  schemeSet1,\n  schemeSet2,\n  schemeSet3,\n  schemeSpectral,\n  schemeTableau10,\n  schemeYlGn,\n  schemeYlGnBu,\n  schemeYlOrBr,\n  schemeYlOrRd\n} from \"d3\";\n\nconst categoricalSchemes = new Map([\n  [\"accent\", schemeAccent],\n  [\"category10\", schemeCategory10],\n  [\"dark2\", schemeDark2],\n  [\"paired\", schemePaired],\n  [\"pastel1\", schemePastel1],\n  [\"pastel2\", schemePastel2],\n  [\"set1\", schemeSet1],\n  [\"set2\", schemeSet2],\n  [\"set3\", schemeSet3],\n  [\"tableau10\", schemeTableau10]\n]);\n\nexport function isCategoricalScheme(scheme) {\n  return scheme != null && categoricalSchemes.has(`${scheme}`.toLowerCase());\n}\n\nconst ordinalSchemes = new Map([\n  ...categoricalSchemes,\n\n  // diverging\n  [\"brbg\", scheme11(schemeBrBG, interpolateBrBG)],\n  [\"prgn\", scheme11(schemePRGn, interpolatePRGn)],\n  [\"piyg\", scheme11(schemePiYG, interpolatePiYG)],\n  [\"puor\", scheme11(schemePuOr, interpolatePuOr)],\n  [\"rdbu\", scheme11(schemeRdBu, interpolateRdBu)],\n  [\"rdgy\", scheme11(schemeRdGy, interpolateRdGy)],\n  [\"rdylbu\", scheme11(schemeRdYlBu, interpolateRdYlBu)],\n  [\"rdylgn\", scheme11(schemeRdYlGn, interpolateRdYlGn)],\n  [\"spectral\", scheme11(schemeSpectral, interpolateSpectral)],\n\n  // reversed diverging (for temperature data)\n  [\"burd\", scheme11r(schemeRdBu, interpolateRdBu)],\n  [\"buylrd\", scheme11r(schemeRdYlBu, interpolateRdYlBu)],\n\n  // sequential (single-hue)\n  [\"blues\", scheme9(schemeBlues, interpolateBlues)],\n  [\"greens\", scheme9(schemeGreens, interpolateGreens)],\n  [\"greys\", scheme9(schemeGreys, interpolateGreys)],\n  [\"oranges\", scheme9(schemeOranges, interpolateOranges)],\n  [\"purples\", scheme9(schemePurples, interpolatePurples)],\n  [\"reds\", scheme9(schemeReds, interpolateReds)],\n\n  // sequential (multi-hue)\n  [\"turbo\", schemei(interpolateTurbo)],\n  [\"viridis\", schemei(interpolateViridis)],\n  [\"magma\", schemei(interpolateMagma)],\n  [\"inferno\", schemei(interpolateInferno)],\n  [\"plasma\", schemei(interpolatePlasma)],\n  [\"cividis\", schemei(interpolateCividis)],\n  [\"cubehelix\", schemei(interpolateCubehelixDefault)],\n  [\"warm\", schemei(interpolateWarm)],\n  [\"cool\", schemei(interpolateCool)],\n  [\"bugn\", scheme9(schemeBuGn, interpolateBuGn)],\n  [\"bupu\", scheme9(schemeBuPu, interpolateBuPu)],\n  [\"gnbu\", scheme9(schemeGnBu, interpolateGnBu)],\n  [\"orrd\", scheme9(schemeOrRd, interpolateOrRd)],\n  [\"pubu\", scheme9(schemePuBu, interpolatePuBu)],\n  [\"pubugn\", scheme9(schemePuBuGn, interpolatePuBuGn)],\n  [\"purd\", scheme9(schemePuRd, interpolatePuRd)],\n  [\"rdpu\", scheme9(schemeRdPu, interpolateRdPu)],\n  [\"ylgn\", scheme9(schemeYlGn, interpolateYlGn)],\n  [\"ylgnbu\", scheme9(schemeYlGnBu, interpolateYlGnBu)],\n  [\"ylorbr\", scheme9(schemeYlOrBr, interpolateYlOrBr)],\n  [\"ylorrd\", scheme9(schemeYlOrRd, interpolateYlOrRd)],\n\n  // cyclical\n  [\"rainbow\", schemeicyclical(interpolateRainbow)],\n  [\"sinebow\", schemeicyclical(interpolateSinebow)]\n]);\n\nfunction scheme9(scheme, interpolate) {\n  return ({length: n}) => {\n    if (n === 1) return [scheme[3][1]]; // favor midpoint\n    if (n === 2) return [scheme[3][1], scheme[3][2]]; // favor darker\n    n = Math.max(3, Math.floor(n));\n    return n > 9 ? quantize(interpolate, n) : scheme[n];\n  };\n}\n\nfunction scheme11(scheme, interpolate) {\n  return ({length: n}) => {\n    if (n === 2) return [scheme[3][0], scheme[3][2]]; // favor diverging extrema\n    n = Math.max(3, Math.floor(n));\n    return n > 11 ? quantize(interpolate, n) : scheme[n];\n  };\n}\n\nfunction scheme11r(scheme, interpolate) {\n  return ({length: n}) => {\n    if (n === 2) return [scheme[3][2], scheme[3][0]]; // favor diverging extrema\n    n = Math.max(3, Math.floor(n));\n    return n > 11 ? quantize((t) => interpolate(1 - t), n) : scheme[n].slice().reverse();\n  };\n}\n\nfunction schemei(interpolate) {\n  return ({length: n}) => quantize(interpolate, Math.max(2, Math.floor(n)));\n}\n\nfunction schemeicyclical(interpolate) {\n  return ({length: n}) => quantize(interpolate, Math.floor(n) + 1).slice(0, -1);\n}\n\nexport function ordinalScheme(scheme) {\n  const s = `${scheme}`.toLowerCase();\n  if (!ordinalSchemes.has(s)) throw new Error(`unknown ordinal scheme: ${s}`);\n  return ordinalSchemes.get(s);\n}\n\nexport function ordinalRange(scheme, length) {\n  const s = ordinalScheme(scheme);\n  const r = typeof s === \"function\" ? s({length}) : s;\n  return r.length !== length ? r.slice(0, length) : r;\n}\n\n// If the specified domain contains only booleans (ignoring null and undefined),\n// returns a corresponding range where false is mapped to the low color and true\n// is mapped to the high color of the specified scheme.\nexport function maybeBooleanRange(domain, scheme = \"greys\") {\n  const range = new Set();\n  const [f, t] = ordinalRange(scheme, 2);\n  for (const value of domain) {\n    if (value == null) continue;\n    if (value === true) range.add(t);\n    else if (value === false) range.add(f);\n    else return;\n  }\n  return [...range];\n}\n\nconst quantitativeSchemes = new Map([\n  // diverging\n  [\"brbg\", interpolateBrBG],\n  [\"prgn\", interpolatePRGn],\n  [\"piyg\", interpolatePiYG],\n  [\"puor\", interpolatePuOr],\n  [\"rdbu\", interpolateRdBu],\n  [\"rdgy\", interpolateRdGy],\n  [\"rdylbu\", interpolateRdYlBu],\n  [\"rdylgn\", interpolateRdYlGn],\n  [\"spectral\", interpolateSpectral],\n\n  // reversed diverging (for temperature data)\n  [\"burd\", (t) => interpolateRdBu(1 - t)],\n  [\"buylrd\", (t) => interpolateRdYlBu(1 - t)],\n\n  // sequential (single-hue)\n  [\"blues\", interpolateBlues],\n  [\"greens\", interpolateGreens],\n  [\"greys\", interpolateGreys],\n  [\"purples\", interpolatePurples],\n  [\"reds\", interpolateReds],\n  [\"oranges\", interpolateOranges],\n\n  // sequential (multi-hue)\n  [\"turbo\", interpolateTurbo],\n  [\"viridis\", interpolateViridis],\n  [\"magma\", interpolateMagma],\n  [\"inferno\", interpolateInferno],\n  [\"plasma\", interpolatePlasma],\n  [\"cividis\", interpolateCividis],\n  [\"cubehelix\", interpolateCubehelixDefault],\n  [\"warm\", interpolateWarm],\n  [\"cool\", interpolateCool],\n  [\"bugn\", interpolateBuGn],\n  [\"bupu\", interpolateBuPu],\n  [\"gnbu\", interpolateGnBu],\n  [\"orrd\", interpolateOrRd],\n  [\"pubugn\", interpolatePuBuGn],\n  [\"pubu\", interpolatePuBu],\n  [\"purd\", interpolatePuRd],\n  [\"rdpu\", interpolateRdPu],\n  [\"ylgnbu\", interpolateYlGnBu],\n  [\"ylgn\", interpolateYlGn],\n  [\"ylorbr\", interpolateYlOrBr],\n  [\"ylorrd\", interpolateYlOrRd],\n\n  // cyclical\n  [\"rainbow\", interpolateRainbow],\n  [\"sinebow\", interpolateSinebow]\n]);\n\nexport function quantitativeScheme(scheme) {\n  const s = `${scheme}`.toLowerCase();\n  if (!quantitativeSchemes.has(s)) throw new Error(`unknown quantitative scheme: ${s}`);\n  return quantitativeSchemes.get(s);\n}\n\nconst divergingSchemes = new Set([\n  \"brbg\",\n  \"prgn\",\n  \"piyg\",\n  \"puor\",\n  \"rdbu\",\n  \"rdgy\",\n  \"rdylbu\",\n  \"rdylgn\",\n  \"spectral\",\n  \"burd\",\n  \"buylrd\"\n]);\n\nexport function isDivergingScheme(scheme) {\n  return scheme != null && divergingSchemes.has(`${scheme}`.toLowerCase());\n}\n", "import {\n  descending,\n  extent,\n  interpolateHcl,\n  interpolateHsl,\n  interpolateLab,\n  interpolateNumber,\n  interpolateRgb,\n  interpolateRound,\n  max,\n  median,\n  min,\n  piecewise,\n  quantile,\n  quantize,\n  reverse as reverseof,\n  scaleIdentity,\n  scaleLinear,\n  scaleLog,\n  scalePow,\n  scaleQuantile,\n  scaleSymlog,\n  scaleThreshold,\n  ticks\n} from \"d3\";\nimport {finite, negative, positive} from \"../defined.js\";\nimport {arrayify, constant, maybeNiceInterval, maybeRangeInterval, orderof, slice} from \"../options.js\";\nimport {color, length, opacity, radius, registry} from \"./index.js\";\nimport {ordinalRange, quantitativeScheme} from \"./schemes.js\";\n\nexport const flip = (i) => (t) => i(1 - t);\nconst unit = [0, 1];\n\nconst interpolators = new Map([\n  // numbers\n  [\"number\", interpolateNumber],\n\n  // color spaces\n  [\"rgb\", interpolateRgb],\n  [\"hsl\", interpolateHsl],\n  [\"hcl\", interpolateHcl],\n  [\"lab\", interpolateLab]\n]);\n\nexport function maybeInterpolator(interpolate) {\n  const i = `${interpolate}`.toLowerCase();\n  if (!interpolators.has(i)) throw new Error(`unknown interpolator: ${i}`);\n  return interpolators.get(i);\n}\n\nexport function createScaleQ(\n  key,\n  scale,\n  channels,\n  {\n    type,\n    nice,\n    clamp,\n    zero,\n    domain = inferAutoDomain(key, channels),\n    unknown,\n    round,\n    scheme,\n    interval,\n    range = registry.get(key) === radius\n      ? inferRadialRange(channels, domain)\n      : registry.get(key) === length\n      ? inferLengthRange(channels, domain)\n      : registry.get(key) === opacity\n      ? unit\n      : undefined,\n    interpolate = registry.get(key) === color\n      ? scheme == null && range !== undefined\n        ? interpolateRgb\n        : quantitativeScheme(scheme !== undefined ? scheme : type === \"cyclical\" ? \"rainbow\" : \"turbo\")\n      : round\n      ? interpolateRound\n      : interpolateNumber,\n    reverse\n  }\n) {\n  interval = maybeRangeInterval(interval, type);\n  if (type === \"cyclical\" || type === \"sequential\") type = \"linear\"; // shorthand for color schemes\n  if (typeof interpolate !== \"function\") interpolate = maybeInterpolator(interpolate); // named interpolator\n  reverse = !!reverse;\n\n  // If an explicit range is specified, and it has a different length than the\n  // domain, then redistribute the range using a piecewise interpolator.\n  if (range !== undefined) {\n    const n = (domain = arrayify(domain)).length;\n    const m = (range = arrayify(range)).length;\n    if (n !== m) {\n      if (interpolate.length === 1) throw new Error(\"invalid piecewise interpolator\"); // e.g., turbo\n      interpolate = piecewise(interpolate, range);\n      range = undefined;\n    }\n  }\n\n  // Disambiguate between a two-argument interpolator that is used in\n  // conjunction with the range, and a one-argument \u201Cfixed\u201D interpolator on the\n  // [0, 1] interval as with the RdBu color scheme.\n  if (interpolate.length === 1) {\n    if (reverse) {\n      interpolate = flip(interpolate);\n      reverse = false;\n    }\n    if (range === undefined) {\n      range = Float64Array.from(domain, (_, i) => i / (domain.length - 1));\n      if (range.length === 2) range = unit; // optimize common case of [0, 1]\n    }\n    scale.interpolate((range === unit ? constant : interpolatePiecewise)(interpolate));\n  } else {\n    scale.interpolate(interpolate);\n  }\n\n  // If a zero option is specified, we assume that the domain is numeric, and we\n  // want to ensure that the domain crosses zero. However, note that the domain\n  // may be reversed (descending) so we shouldn\u2019t assume that the first value is\n  // smaller than the last; and also it\u2019s possible that the domain has more than\n  // two values for a \u201Cpoly\u201D scale. And lastly be careful not to mutate input!\n  if (zero) {\n    const [min, max] = extent(domain);\n    if (min > 0 || max < 0) {\n      domain = slice(domain);\n      if (orderof(domain) !== Math.sign(min)) domain[domain.length - 1] = 0; // [2, 1] or [-2, -1]\n      else domain[0] = 0; // [1, 2] or [-1, -2]\n    }\n  }\n\n  if (reverse) domain = reverseof(domain);\n  scale.domain(domain).unknown(unknown);\n  if (nice) scale.nice(maybeNice(nice, type)), (domain = scale.domain());\n  if (range !== undefined) scale.range(range);\n  if (clamp) scale.clamp(clamp);\n  return {type, domain, range, scale, interpolate, interval};\n}\n\nfunction maybeNice(nice, type) {\n  return nice === true ? undefined : typeof nice === \"number\" ? nice : maybeNiceInterval(nice, type);\n}\n\nexport function createScaleLinear(key, channels, options) {\n  return createScaleQ(key, scaleLinear(), channels, options);\n}\n\nexport function createScaleSqrt(key, channels, options) {\n  return createScalePow(key, channels, {...options, exponent: 0.5});\n}\n\nexport function createScalePow(key, channels, {exponent = 1, ...options}) {\n  return createScaleQ(key, scalePow().exponent(exponent), channels, {...options, type: \"pow\"});\n}\n\nexport function createScaleLog(key, channels, {base = 10, domain = inferLogDomain(channels), ...options}) {\n  return createScaleQ(key, scaleLog().base(base), channels, {...options, domain});\n}\n\nexport function createScaleSymlog(key, channels, {constant = 1, ...options}) {\n  return createScaleQ(key, scaleSymlog().constant(constant), channels, options);\n}\n\nexport function createScaleQuantile(\n  key,\n  channels,\n  {\n    range,\n    quantiles = range === undefined ? 5 : (range = [...range]).length, // deprecated; use n instead\n    n = quantiles,\n    scheme = \"rdylbu\",\n    domain = inferQuantileDomain(channels),\n    unknown,\n    interpolate,\n    reverse\n  }\n) {\n  if (range === undefined) {\n    range =\n      interpolate !== undefined\n        ? quantize(interpolate, n)\n        : registry.get(key) === color\n        ? ordinalRange(scheme, n)\n        : undefined;\n  }\n  if (domain.length > 0) {\n    domain = scaleQuantile(domain, range === undefined ? {length: n} : range).quantiles();\n  }\n  return createScaleThreshold(key, channels, {domain, range, reverse, unknown});\n}\n\nexport function createScaleQuantize(\n  key,\n  channels,\n  {\n    range,\n    n = range === undefined ? 5 : (range = [...range]).length,\n    scheme = \"rdylbu\",\n    domain = inferAutoDomain(key, channels),\n    unknown,\n    interpolate,\n    reverse\n  }\n) {\n  const [min, max] = extent(domain);\n  let thresholds;\n  if (range === undefined) {\n    thresholds = ticks(min, max, n); // approximate number of nice, round thresholds\n    if (thresholds[0] <= min) thresholds.splice(0, 1); // drop exact lower bound\n    if (thresholds[thresholds.length - 1] >= max) thresholds.pop(); // drop exact upper bound\n    n = thresholds.length + 1;\n    range =\n      interpolate !== undefined\n        ? quantize(interpolate, n)\n        : registry.get(key) === color\n        ? ordinalRange(scheme, n)\n        : undefined;\n  } else {\n    thresholds = quantize(interpolateNumber(min, max), n + 1).slice(1, -1); // exactly n - 1 thresholds to match range\n    if (min instanceof Date) thresholds = thresholds.map((x) => new Date(x)); // preserve date types\n  }\n  if (orderof(arrayify(domain)) < 0) thresholds.reverse(); // preserve descending domain\n  return createScaleThreshold(key, channels, {domain: thresholds, range, reverse, unknown});\n}\n\nexport function createScaleThreshold(\n  key,\n  channels,\n  {\n    domain = [0], // explicit thresholds in ascending order\n    unknown,\n    scheme = \"rdylbu\",\n    interpolate,\n    range = interpolate !== undefined\n      ? quantize(interpolate, domain.length + 1)\n      : registry.get(key) === color\n      ? ordinalRange(scheme, domain.length + 1)\n      : undefined,\n    reverse\n  }\n) {\n  domain = arrayify(domain);\n  const sign = orderof(domain); // preserve descending domain\n  if (!isNaN(sign) && !isOrdered(domain, sign)) throw new Error(`the ${key} scale has a non-monotonic domain`);\n  if (reverse) range = reverseof(range); // domain ascending, so reverse range\n  return {\n    type: \"threshold\",\n    scale: scaleThreshold(sign < 0 ? reverseof(domain) : domain, range === undefined ? [] : range).unknown(unknown),\n    domain,\n    range\n  };\n}\n\nfunction isOrdered(domain, sign) {\n  for (let i = 1, n = domain.length, d = domain[0]; i < n; ++i) {\n    const s = descending(d, (d = domain[i]));\n    if (s !== 0 && s !== sign) return false;\n  }\n  return true;\n}\n\nexport function createScaleIdentity() {\n  return {type: \"identity\", scale: scaleIdentity()};\n}\n\nexport function inferDomain(channels, f = finite) {\n  return channels.length\n    ? [\n        min(channels, ({value}) => (value === undefined ? value : min(value, f))),\n        max(channels, ({value}) => (value === undefined ? value : max(value, f)))\n      ]\n    : [0, 1];\n}\n\nfunction inferAutoDomain(key, channels) {\n  const type = registry.get(key);\n  return (type === radius || type === opacity || type === length ? inferZeroDomain : inferDomain)(channels);\n}\n\nfunction inferZeroDomain(channels) {\n  return [0, channels.length ? max(channels, ({value}) => (value === undefined ? value : max(value, finite))) : 1];\n}\n\n// We don\u2019t want the upper bound of the radial domain to be zero, as this would\n// be degenerate, so we ignore nonpositive values. We also don\u2019t want the\n// maximum default radius to exceed 30px.\nfunction inferRadialRange(channels, domain) {\n  const hint = channels.find(({radius}) => radius !== undefined);\n  if (hint !== undefined) return [0, hint.radius]; // a natural maximum radius, e.g. hexbins\n  const h25 = quantile(channels, 0.5, ({value}) => (value === undefined ? NaN : quantile(value, 0.25, positive)));\n  const range = domain.map((d) => 3 * Math.sqrt(d / h25));\n  const k = 30 / max(range);\n  return k < 1 ? range.map((r) => r * k) : range;\n}\n\n// We want a length scale\u2019s domain to go from zero to a positive value, and to\n// treat negative lengths if any as inverted vectors of equivalent magnitude. We\n// also don\u2019t want the maximum default length to exceed 60px.\nfunction inferLengthRange(channels, domain) {\n  const h50 = median(channels, ({value}) => (value === undefined ? NaN : median(value, Math.abs)));\n  const range = domain.map((d) => (12 * d) / h50);\n  const k = 60 / max(range);\n  return k < 1 ? range.map((r) => r * k) : range;\n}\n\nfunction inferLogDomain(channels) {\n  for (const {value} of channels) {\n    if (value !== undefined) {\n      for (let v of value) {\n        if (v > 0) return inferDomain(channels, positive);\n        if (v < 0) return inferDomain(channels, negative);\n      }\n    }\n  }\n  return [1, 10];\n}\n\nfunction inferQuantileDomain(channels) {\n  const domain = [];\n  for (const {value} of channels) {\n    if (value === undefined) continue;\n    for (const v of value) domain.push(v);\n  }\n  return domain;\n}\n\nexport function interpolatePiecewise(interpolate) {\n  return (i, j) => (t) => interpolate(i + t * (j - i));\n}\n", "import {\n  descending,\n  interpolateNumber,\n  interpolateRgb,\n  piecewise,\n  scaleDiverging,\n  scaleDivergingLog,\n  scaleDivergingPow,\n  scaleDivergingSymlog\n} from \"d3\";\nimport {negative, positive} from \"../defined.js\";\nimport {arrayify} from \"../options.js\";\nimport {warn} from \"../warnings.js\";\nimport {color, registry} from \"./index.js\";\nimport {flip, inferDomain, interpolatePiecewise, maybeInterpolator} from \"./quantitative.js\";\nimport {quantitativeScheme} from \"./schemes.js\";\n\nfunction createScaleD(\n  key,\n  scale,\n  transform,\n  channels,\n  {\n    type,\n    nice,\n    clamp,\n    domain = inferDomain(channels),\n    unknown,\n    pivot = 0,\n    scheme,\n    range,\n    symmetric = true,\n    interpolate = registry.get(key) === color\n      ? scheme == null && range !== undefined\n        ? interpolateRgb\n        : quantitativeScheme(scheme !== undefined ? scheme : \"rdbu\")\n      : interpolateNumber,\n    reverse\n  }\n) {\n  pivot = +pivot;\n  domain = arrayify(domain);\n  let [min, max] = domain;\n  if (domain.length > 2) warn(`Warning: the diverging ${key} scale domain contains extra elements.`);\n\n  if (descending(min, max) < 0) ([min, max] = [max, min]), (reverse = !reverse);\n  min = Math.min(min, pivot);\n  max = Math.max(max, pivot);\n\n  // Sometimes interpolate is a named interpolator, such as \"lab\" for Lab color\n  // space. Other times interpolate is a function that takes two arguments and\n  // is used in conjunction with the range. And other times the interpolate\n  // function is a \u201Cfixed\u201D interpolator on the [0, 1] interval, as when a\n  // color scheme such as interpolateRdBu is used.\n  if (typeof interpolate !== \"function\") {\n    interpolate = maybeInterpolator(interpolate);\n  }\n\n  // If an explicit range is specified, promote it to a piecewise interpolator.\n  if (range !== undefined) {\n    interpolate =\n      interpolate.length === 1 ? interpolatePiecewise(interpolate)(...range) : piecewise(interpolate, range);\n  }\n\n  // Reverse before normalization.\n  if (reverse) interpolate = flip(interpolate);\n\n  // Normalize the interpolator for symmetric difference around the pivot.\n  if (symmetric) {\n    const mid = transform.apply(pivot);\n    const mindelta = mid - transform.apply(min);\n    const maxdelta = transform.apply(max) - mid;\n    if (mindelta < maxdelta) min = transform.invert(mid - maxdelta);\n    else if (mindelta > maxdelta) max = transform.invert(mid + mindelta);\n  }\n\n  scale.domain([min, pivot, max]).unknown(unknown).interpolator(interpolate);\n  if (clamp) scale.clamp(clamp);\n  if (nice) scale.nice(nice);\n  return {type, domain: [min, max], pivot, interpolate, scale};\n}\n\nexport function createScaleDiverging(key, channels, options) {\n  return createScaleD(key, scaleDiverging(), transformIdentity, channels, options);\n}\n\nexport function createScaleDivergingSqrt(key, channels, options) {\n  return createScaleDivergingPow(key, channels, {...options, exponent: 0.5});\n}\n\nexport function createScaleDivergingPow(key, channels, {exponent = 1, ...options}) {\n  return createScaleD(key, scaleDivergingPow().exponent((exponent = +exponent)), transformPow(exponent), channels, {\n    ...options,\n    type: \"diverging-pow\"\n  });\n}\n\nexport function createScaleDivergingLog(\n  key,\n  channels,\n  {base = 10, pivot = 1, domain = inferDomain(channels, pivot < 0 ? negative : positive), ...options}\n) {\n  return createScaleD(key, scaleDivergingLog().base((base = +base)), transformLog, channels, {\n    domain,\n    pivot,\n    ...options\n  });\n}\n\nexport function createScaleDivergingSymlog(key, channels, {constant = 1, ...options}) {\n  return createScaleD(\n    key,\n    scaleDivergingSymlog().constant((constant = +constant)),\n    transformSymlog(constant),\n    channels,\n    options\n  );\n}\n\nconst transformIdentity = {\n  apply(x) {\n    return x;\n  },\n  invert(x) {\n    return x;\n  }\n};\n\nconst transformLog = {\n  apply: Math.log,\n  invert: Math.exp\n};\n\nconst transformSqrt = {\n  apply(x) {\n    return Math.sign(x) * Math.sqrt(Math.abs(x));\n  },\n  invert(x) {\n    return Math.sign(x) * (x * x);\n  }\n};\n\nfunction transformPow(exponent) {\n  return exponent === 0.5\n    ? transformSqrt\n    : {\n        apply(x) {\n          return Math.sign(x) * Math.pow(Math.abs(x), exponent);\n        },\n        invert(x) {\n          return Math.sign(x) * Math.pow(Math.abs(x), 1 / exponent);\n        }\n      };\n}\n\nfunction transformSymlog(constant) {\n  return {\n    apply(x) {\n      return Math.sign(x) * Math.log1p(Math.abs(x / constant));\n    },\n    invert(x) {\n      return Math.sign(x) * Math.expm1(Math.abs(x)) * constant;\n    }\n  };\n}\n", "import {scaleTime, scaleUtc} from \"d3\";\nimport {createScaleQ} from \"./quantitative.js\";\n\nfunction createScaleT(key, scale, channels, options) {\n  return createScaleQ(key, scale, channels, options);\n}\n\nexport function createScaleTime(key, channels, options) {\n  return createScaleT(key, scaleTime(), channels, options);\n}\n\nexport function createScaleUtc(key, channels, options) {\n  return createScaleT(key, scaleUtc(), channels, options);\n}\n", "import {InternSet, extent, quantize, reverse as reverseof, sort, symbolsFill, symbolsStroke} from \"d3\";\nimport {scaleBand, scaleOrdinal, scalePoint, scaleImplicit} from \"d3\";\nimport {ascendingDefined} from \"../defined.js\";\nimport {isNoneish, map, maybeRangeInterval} from \"../options.js\";\nimport {maybeSymbol} from \"../symbol.js\";\nimport {registry, color, position, symbol} from \"./index.js\";\nimport {maybeBooleanRange, ordinalScheme, quantitativeScheme} from \"./schemes.js\";\n\n// This denotes an implicitly ordinal color scale: the scale type was not set,\n// but the associated values are strings or booleans. If the associated defined\n// values are entirely boolean, the range will default to greys. You can opt out\n// of this by setting the type explicitly.\nexport const ordinalImplicit = Symbol(\"ordinal\");\n\nfunction createScaleO(key, scale, channels, {type, interval, domain, range, reverse, hint}) {\n  interval = maybeRangeInterval(interval, type);\n  if (domain === undefined) domain = inferDomain(channels, interval, key);\n  if (type === \"categorical\" || type === ordinalImplicit) type = \"ordinal\"; // shorthand for color schemes\n  if (reverse) domain = reverseof(domain);\n  scale.domain(domain);\n  if (range !== undefined) {\n    // If the range is specified as a function, pass it the domain.\n    if (typeof range === \"function\") range = range(domain);\n    scale.range(range);\n  }\n  return {type, domain, range, scale, hint, interval};\n}\n\nexport function createScaleOrdinal(key, channels, {type, interval, domain, range, scheme, unknown, ...options}) {\n  interval = maybeRangeInterval(interval, type);\n  if (domain === undefined) domain = inferDomain(channels, interval, key);\n  let hint;\n  if (registry.get(key) === symbol) {\n    hint = inferSymbolHint(channels);\n    range = range === undefined ? inferSymbolRange(hint) : map(range, maybeSymbol);\n  } else if (registry.get(key) === color) {\n    if (range === undefined && (type === \"ordinal\" || type === ordinalImplicit)) {\n      range = maybeBooleanRange(domain, scheme);\n      if (range !== undefined) scheme = undefined; // Don\u2019t re-apply scheme.\n    }\n    if (scheme === undefined && range === undefined) {\n      scheme = type === \"ordinal\" ? \"turbo\" : \"tableau10\";\n    }\n    if (scheme !== undefined) {\n      if (range !== undefined) {\n        const interpolate = quantitativeScheme(scheme);\n        const t0 = range[0],\n          d = range[1] - range[0];\n        range = ({length: n}) => quantize((t) => interpolate(t0 + d * t), n);\n      } else {\n        range = ordinalScheme(scheme);\n      }\n    }\n  }\n  if (unknown === scaleImplicit) {\n    throw new Error(`implicit unknown on ${key} scale is not supported`);\n  }\n  return createScaleO(key, scaleOrdinal().unknown(unknown), channels, {...options, type, domain, range, hint});\n}\n\nexport function createScalePoint(key, channels, {align = 0.5, padding = 0.5, ...options}) {\n  return maybeRound(scalePoint().align(align).padding(padding), channels, options, key);\n}\n\nexport function createScaleBand(\n  key,\n  channels,\n  {\n    align = 0.5,\n    padding = 0.1,\n    paddingInner = padding,\n    paddingOuter = key === \"fx\" || key === \"fy\" ? 0 : padding,\n    ...options\n  }\n) {\n  return maybeRound(\n    scaleBand().align(align).paddingInner(paddingInner).paddingOuter(paddingOuter),\n    channels,\n    options,\n    key\n  );\n}\n\nfunction maybeRound(scale, channels, options, key) {\n  let {round} = options;\n  if (round !== undefined) scale.round((round = !!round));\n  scale = createScaleO(key, scale, channels, options);\n  scale.round = round; // preserve for autoScaleRound\n  return scale;\n}\n\nfunction inferDomain(channels, interval, key) {\n  const values = new InternSet();\n  for (const {value, domain} of channels) {\n    if (domain !== undefined) return domain(); // see channelDomain\n    if (value === undefined) continue;\n    for (const v of value) values.add(v);\n  }\n  if (interval !== undefined) {\n    const [min, max] = extent(values).map(interval.floor, interval);\n    return interval.range(min, interval.offset(max));\n  }\n  if (values.size > 10e3 && registry.get(key) === position) {\n    throw new Error(`implicit ordinal domain of ${key} scale has more than 10,000 values`);\n  }\n  return sort(values, ascendingDefined);\n}\n\n// If all channels provide a consistent hint, propagate it to the scale.\nfunction inferHint(channels, key) {\n  let value;\n  for (const {hint} of channels) {\n    const candidate = hint?.[key];\n    if (candidate === undefined) continue; // no hint here\n    if (value === undefined) value = candidate;\n    // first hint\n    else if (value !== candidate) return; // inconsistent hint\n  }\n  return value;\n}\n\nfunction inferSymbolHint(channels) {\n  return {\n    fill: inferHint(channels, \"fill\"),\n    stroke: inferHint(channels, \"stroke\")\n  };\n}\n\nfunction inferSymbolRange(hint) {\n  return isNoneish(hint.fill) ? symbolsStroke : symbolsFill;\n}\n", "import {\n  isOrdinal,\n  isTemporal,\n  isTemporalString,\n  isNumericString,\n  isScaleOptions,\n  map,\n  slice,\n  coerceNumbers,\n  coerceDates\n} from \"./options.js\";\nimport {registry, color, position, radius, opacity, symbol, length} from \"./scales/index.js\";\nimport {\n  createScaleLinear,\n  createScaleSqrt,\n  createScalePow,\n  createScaleLog,\n  createScaleSymlog,\n  createScaleQuantile,\n  createScaleQuantize,\n  createScaleThreshold,\n  createScaleIdentity\n} from \"./scales/quantitative.js\";\nimport {\n  createScaleDiverging,\n  createScaleDivergingSqrt,\n  createScaleDivergingPow,\n  createScaleDivergingLog,\n  createScaleDivergingSymlog\n} from \"./scales/diverging.js\";\nimport {isCategoricalScheme, isDivergingScheme} from \"./scales/schemes.js\";\nimport {createScaleTime, createScaleUtc} from \"./scales/temporal.js\";\nimport {createScaleOrdinal, createScalePoint, createScaleBand, ordinalImplicit} from \"./scales/ordinal.js\";\nimport {maybeSymbol} from \"./symbol.js\";\nimport {warn} from \"./warnings.js\";\n\nexport function createScales(\n  channelsByScale,\n  {\n    label: globalLabel,\n    inset: globalInset = 0,\n    insetTop: globalInsetTop = globalInset,\n    insetRight: globalInsetRight = globalInset,\n    insetBottom: globalInsetBottom = globalInset,\n    insetLeft: globalInsetLeft = globalInset,\n    round,\n    nice,\n    clamp,\n    zero,\n    align,\n    padding,\n    projection,\n    facet: {label: facetLabel = globalLabel} = {},\n    ...options\n  } = {}\n) {\n  const scales = {};\n  for (const [key, channels] of channelsByScale) {\n    const scaleOptions = options[key];\n    const scale = createScale(key, channels, {\n      round: registry.get(key) === position ? round : undefined, // only for position\n      nice,\n      clamp,\n      zero,\n      align,\n      padding,\n      projection,\n      ...scaleOptions\n    });\n    if (scale) {\n      // populate generic scale options (percent, transform, insets)\n      let {\n        label = key === \"fx\" || key === \"fy\" ? facetLabel : globalLabel,\n        percent,\n        transform,\n        inset,\n        insetTop = inset !== undefined ? inset : key === \"y\" ? globalInsetTop : 0, // not fy\n        insetRight = inset !== undefined ? inset : key === \"x\" ? globalInsetRight : 0, // not fx\n        insetBottom = inset !== undefined ? inset : key === \"y\" ? globalInsetBottom : 0, // not fy\n        insetLeft = inset !== undefined ? inset : key === \"x\" ? globalInsetLeft : 0 // not fx\n      } = scaleOptions || {};\n      if (transform == null) transform = undefined;\n      else if (typeof transform !== \"function\") throw new Error(\"invalid scale transform; not a function\");\n      scale.percent = !!percent;\n      scale.label = label === undefined ? inferScaleLabel(channels, scale) : label;\n      scale.transform = transform;\n      if (key === \"x\" || key === \"fx\") {\n        scale.insetLeft = +insetLeft;\n        scale.insetRight = +insetRight;\n      } else if (key === \"y\" || key === \"fy\") {\n        scale.insetTop = +insetTop;\n        scale.insetBottom = +insetBottom;\n      }\n      scales[key] = scale;\n    }\n  }\n  return scales;\n}\n\nexport function createScaleFunctions(scales) {\n  return Object.fromEntries(\n    Object.entries(scales)\n      .filter(([, {scale}]) => scale) // drop identity scales\n      .map(([name, {scale, type, interval, label}]) => {\n        scale.type = type; // for axis\n        if (interval != null) scale.interval = interval; // for axis\n        if (label != null) scale.label = label; // for axis\n        return [name, scale];\n      })\n  );\n}\n\n// Mutates scale.range!\nexport function autoScaleRange(scales, dimensions) {\n  const {x, y, fx, fy} = scales;\n  const superdimensions = fx || fy ? outerDimensions(dimensions) : dimensions;\n  if (fx) autoScaleRangeX(fx, superdimensions);\n  if (fy) autoScaleRangeY(fy, superdimensions);\n  const subdimensions = fx || fy ? innerDimensions(scales, dimensions) : dimensions;\n  if (x) autoScaleRangeX(x, subdimensions);\n  if (y) autoScaleRangeY(y, subdimensions);\n}\n\n// Channels can have labels; if all the channels for a given scale are\n// consistently labeled (i.e., have the same value if not undefined), and the\n// corresponding scale doesn\u2019t already have an explicit label, then the\n// channels\u2019 label is promoted to the scale. This inferred label should have an\n// orientation-appropriate arrow added when used as an axis, but we don\u2019t want\n// to add the arrow when the label is set explicitly as an option; so, the\n// inferred label is distinguished as an object with an \u201Cinferred\u201D property.\nfunction inferScaleLabel(channels = [], scale) {\n  let label;\n  for (const {label: l} of channels) {\n    if (l === undefined) continue;\n    if (label === undefined) label = l;\n    else if (label !== l) return;\n  }\n  if (label === undefined) return;\n  if (!isOrdinalScale(scale) && scale.percent) label = `${label} (%)`;\n  return {inferred: true, toString: () => label};\n}\n\n// Returns the dimensions of the outer frame; this is subdivided into facets\n// with the margins of each facet collapsing into the outer margins.\nexport function outerDimensions(dimensions) {\n  const {\n    marginTop,\n    marginRight,\n    marginBottom,\n    marginLeft,\n    width,\n    height,\n    facet: {\n      marginTop: facetMarginTop,\n      marginRight: facetMarginRight,\n      marginBottom: facetMarginBottom,\n      marginLeft: facetMarginLeft\n    }\n  } = dimensions;\n  return {\n    marginTop: Math.max(marginTop, facetMarginTop),\n    marginRight: Math.max(marginRight, facetMarginRight),\n    marginBottom: Math.max(marginBottom, facetMarginBottom),\n    marginLeft: Math.max(marginLeft, facetMarginLeft),\n    width,\n    height\n  };\n}\n\n// Returns the dimensions of each facet.\nexport function innerDimensions({fx, fy}, dimensions) {\n  const {marginTop, marginRight, marginBottom, marginLeft, width, height} = outerDimensions(dimensions);\n  return {\n    marginTop,\n    marginRight,\n    marginBottom,\n    marginLeft,\n    width: fx ? fx.scale.bandwidth() + marginLeft + marginRight : width,\n    height: fy ? fy.scale.bandwidth() + marginTop + marginBottom : height,\n    facet: {width, height}\n  };\n}\n\nfunction autoScaleRangeX(scale, dimensions) {\n  if (scale.range === undefined) {\n    const {insetLeft, insetRight} = scale;\n    const {width, marginLeft = 0, marginRight = 0} = dimensions;\n    const left = marginLeft + insetLeft;\n    const right = width - marginRight - insetRight;\n    scale.range = [left, Math.max(left, right)];\n    if (!isOrdinalScale(scale)) scale.range = piecewiseRange(scale);\n    scale.scale.range(scale.range);\n  }\n  autoScaleRound(scale);\n}\n\nfunction autoScaleRangeY(scale, dimensions) {\n  if (scale.range === undefined) {\n    const {insetTop, insetBottom} = scale;\n    const {height, marginTop = 0, marginBottom = 0} = dimensions;\n    const top = marginTop + insetTop;\n    const bottom = height - marginBottom - insetBottom;\n    scale.range = [Math.max(top, bottom), top];\n    if (!isOrdinalScale(scale)) scale.range = piecewiseRange(scale);\n    else scale.range.reverse();\n    scale.scale.range(scale.range);\n  }\n  autoScaleRound(scale);\n}\n\nfunction autoScaleRound(scale) {\n  if (scale.round === undefined && isBandScale(scale) && roundError(scale) <= 30) {\n    scale.scale.round(true);\n  }\n}\n\n// If we were to turn on rounding for this band or point scale, how much wasted\n// space would it introduce (on both ends of the range)? This must match\n// d3.scaleBand\u2019s rounding behavior:\n// https://github.com/d3/d3-scale/blob/83555bd759c7314420bd4240642beda5e258db9e/src/band.js#L20-L32\nfunction roundError({scale}) {\n  const n = scale.domain().length;\n  const [start, stop] = scale.range();\n  const paddingInner = scale.paddingInner ? scale.paddingInner() : 1;\n  const paddingOuter = scale.paddingOuter ? scale.paddingOuter() : scale.padding();\n  const m = n - paddingInner;\n  const step = Math.abs(stop - start) / Math.max(1, m + paddingOuter * 2);\n  return (step - Math.floor(step)) * m;\n}\n\nfunction piecewiseRange(scale) {\n  const length = scale.scale.domain().length + isThresholdScale(scale);\n  if (!(length > 2)) return scale.range;\n  const [start, end] = scale.range;\n  return Array.from({length}, (_, i) => start + (i / (length - 1)) * (end - start));\n}\n\nexport function normalizeScale(key, scale, hint) {\n  return createScale(key, hint === undefined ? undefined : [{hint}], {...scale});\n}\n\nfunction createScale(key, channels = [], options = {}) {\n  const type = inferScaleType(key, channels, options);\n\n  // Warn for common misuses of implicit ordinal scales. We disable this test if\n  // you specify a scale interval or if you set the domain or range explicitly,\n  // since setting the domain or range (typically with a cardinality of more than\n  // two) is another indication that you intended for the scale to be ordinal; we\n  // also disable it for facet scales since these are always band scales.\n  if (\n    options.type === undefined &&\n    options.domain === undefined &&\n    options.range === undefined &&\n    options.interval == null &&\n    key !== \"fx\" &&\n    key !== \"fy\" &&\n    isOrdinalScale({type})\n  ) {\n    const values = channels.map(({value}) => value).filter((value) => value !== undefined);\n    if (values.some(isTemporal))\n      warn(\n        `Warning: some data associated with the ${key} scale are dates. Dates are typically associated with a \"utc\" or \"time\" scale rather than a \"${formatScaleType(\n          type\n        )}\" scale. If you are using a bar mark, you probably want a rect mark with the interval option instead; if you are using a group transform, you probably want a bin transform instead. If you want to treat this data as ordinal, you can specify the interval of the ${key} scale (e.g., d3.utcDay), or you can suppress this warning by setting the type of the ${key} scale to \"${formatScaleType(\n          type\n        )}\".`\n      );\n    else if (values.some(isTemporalString))\n      warn(\n        `Warning: some data associated with the ${key} scale are strings that appear to be dates (e.g., YYYY-MM-DD). If these strings represent dates, you should parse them to Date objects. Dates are typically associated with a \"utc\" or \"time\" scale rather than a \"${formatScaleType(\n          type\n        )}\" scale. If you are using a bar mark, you probably want a rect mark with the interval option instead; if you are using a group transform, you probably want a bin transform instead. If you want to treat this data as ordinal, you can suppress this warning by setting the type of the ${key} scale to \"${formatScaleType(\n          type\n        )}\".`\n      );\n    else if (values.some(isNumericString))\n      warn(\n        `Warning: some data associated with the ${key} scale are strings that appear to be numbers. If these strings represent numbers, you should parse or coerce them to numbers. Numbers are typically associated with a \"linear\" scale rather than a \"${formatScaleType(\n          type\n        )}\" scale. If you want to treat this data as ordinal, you can specify the interval of the ${key} scale (e.g., 1 for integers), or you can suppress this warning by setting the type of the ${key} scale to \"${formatScaleType(\n          type\n        )}\".`\n      );\n  }\n\n  options.type = type; // Mutates input!\n\n  // Once the scale type is known, coerce the associated channel values and any\n  // explicitly-specified domain to the expected type.\n  switch (type) {\n    case \"diverging\":\n    case \"diverging-sqrt\":\n    case \"diverging-pow\":\n    case \"diverging-log\":\n    case \"diverging-symlog\":\n    case \"cyclical\":\n    case \"sequential\":\n    case \"linear\":\n    case \"sqrt\":\n    case \"threshold\":\n    case \"quantile\":\n    case \"pow\":\n    case \"log\":\n    case \"symlog\":\n      options = coerceType(channels, options, coerceNumbers);\n      break;\n    case \"identity\":\n      switch (registry.get(key)) {\n        case position:\n          options = coerceType(channels, options, coerceNumbers);\n          break;\n        case symbol:\n          options = coerceType(channels, options, coerceSymbols);\n          break;\n      }\n      break;\n    case \"utc\":\n    case \"time\":\n      options = coerceType(channels, options, coerceDates);\n      break;\n  }\n\n  switch (type) {\n    case \"diverging\":\n      return createScaleDiverging(key, channels, options);\n    case \"diverging-sqrt\":\n      return createScaleDivergingSqrt(key, channels, options);\n    case \"diverging-pow\":\n      return createScaleDivergingPow(key, channels, options);\n    case \"diverging-log\":\n      return createScaleDivergingLog(key, channels, options);\n    case \"diverging-symlog\":\n      return createScaleDivergingSymlog(key, channels, options);\n    case \"categorical\":\n    case \"ordinal\":\n    case ordinalImplicit:\n      return createScaleOrdinal(key, channels, options);\n    case \"cyclical\":\n    case \"sequential\":\n    case \"linear\":\n      return createScaleLinear(key, channels, options);\n    case \"sqrt\":\n      return createScaleSqrt(key, channels, options);\n    case \"threshold\":\n      return createScaleThreshold(key, channels, options);\n    case \"quantile\":\n      return createScaleQuantile(key, channels, options);\n    case \"quantize\":\n      return createScaleQuantize(key, channels, options);\n    case \"pow\":\n      return createScalePow(key, channels, options);\n    case \"log\":\n      return createScaleLog(key, channels, options);\n    case \"symlog\":\n      return createScaleSymlog(key, channels, options);\n    case \"utc\":\n      return createScaleUtc(key, channels, options);\n    case \"time\":\n      return createScaleTime(key, channels, options);\n    case \"point\":\n      return createScalePoint(key, channels, options);\n    case \"band\":\n      return createScaleBand(key, channels, options);\n    case \"identity\":\n      return registry.get(key) === position ? createScaleIdentity() : {type: \"identity\"};\n    case undefined:\n      return;\n    default:\n      throw new Error(`unknown scale type: ${type}`);\n  }\n}\n\nfunction formatScaleType(type) {\n  return typeof type === \"symbol\" ? type.description : type;\n}\n\n// A special type symbol when the x and y scales are replaced with a projection.\nconst typeProjection = {toString: () => \"projection\"};\n\nfunction inferScaleType(key, channels, {type, domain, range, scheme, pivot, projection}) {\n  // The facet scales are always band scales; this cannot be changed.\n  if (key === \"fx\" || key === \"fy\") return \"band\";\n\n  // If a projection is specified, the x- and y-scales are disabled; these\n  // channels will be projected rather than scaled. (But still check that none\n  // of the associated channels are incompatible with a projection.)\n  if ((key === \"x\" || key === \"y\") && projection != null) type = typeProjection;\n\n  // If a channel dictates a scale type, make sure that it is consistent with\n  // the user-specified scale type (if any) and all other channels. For example,\n  // barY requires x to be a band scale and disallows any other scale type.\n  for (const {type: t} of channels) {\n    if (t === undefined) continue;\n    else if (type === undefined) type = t;\n    else if (type !== t) throw new Error(`scale incompatible with channel: ${type} !== ${t}`);\n  }\n\n  // If the scale, a channel, or user specified a (consistent) type, return it.\n  if (type === typeProjection) return;\n  if (type !== undefined) return type;\n\n  // If there\u2019s no data (and no type) associated with this scale, don\u2019t create a scale.\n  if (domain === undefined && !channels.some(({value}) => value !== undefined)) return;\n\n  // Some scales have default types.\n  const kind = registry.get(key);\n  if (kind === radius) return \"sqrt\";\n  if (kind === opacity || kind === length) return \"linear\";\n  if (kind === symbol) return \"ordinal\";\n\n  // If the domain or range has more than two values, assume it\u2019s ordinal. You\n  // can still use a \u201Cpiecewise\u201D (or \u201Cpolylinear\u201D) scale, but you must set the\n  // type explicitly.\n  if ((domain || range || []).length > 2) return asOrdinalType(kind);\n\n  // Otherwise, infer the scale type from the data! Prefer the domain, if\n  // present, over channels. (The domain and channels should be consistently\n  // typed, and the domain is more explicit and typically much smaller.) We only\n  // check the first defined value for expedience and simplicity; we expect\n  // that the types are consistent.\n  if (domain !== undefined) {\n    if (isOrdinal(domain)) return asOrdinalType(kind);\n    if (isTemporal(domain)) return \"utc\";\n  } else {\n    const values = channels.map(({value}) => value).filter((value) => value !== undefined);\n    if (values.some(isOrdinal)) return asOrdinalType(kind);\n    if (values.some(isTemporal)) return \"utc\";\n  }\n\n  // For color scales, take a hint from the color scheme and pivot option.\n  if (kind === color) {\n    if (pivot != null || isDivergingScheme(scheme)) return \"diverging\";\n    if (isCategoricalScheme(scheme)) return \"categorical\";\n  }\n\n  return \"linear\";\n}\n\n// Positional scales default to a point scale instead of an ordinal scale.\nfunction asOrdinalType(kind) {\n  switch (kind) {\n    case position:\n      return \"point\";\n    case color:\n      return ordinalImplicit;\n    default:\n      return \"ordinal\";\n  }\n}\n\nexport function isTemporalScale({type}) {\n  return type === \"time\" || type === \"utc\";\n}\n\nexport function isOrdinalScale({type}) {\n  return type === \"ordinal\" || type === \"point\" || type === \"band\" || type === ordinalImplicit;\n}\n\nexport function isThresholdScale({type}) {\n  return type === \"threshold\";\n}\n\nfunction isBandScale({type}) {\n  return type === \"point\" || type === \"band\";\n}\n\nexport function isDivergingScale({type}) {\n  return /^diverging($|-)/.test(type);\n}\n\n// Certain marks have special behavior if a scale is collapsed, i.e. if the\n// domain is degenerate and represents only a single value such as [3, 3]; for\n// example, a rect will span the full extent of the chart along a collapsed\n// dimension (whereas a dot will simply be drawn in the center).\nexport function isCollapsed(scale) {\n  if (scale === undefined) return true; // treat missing scale as collapsed\n  const domain = scale.domain();\n  const value = scale(domain[0]);\n  for (let i = 1, n = domain.length; i < n; ++i) {\n    if (scale(domain[i]) - value) {\n      return false;\n    }\n  }\n  return true;\n}\n\n// Mutates channel.value!\nfunction coerceType(channels, {domain, ...options}, coerceValues) {\n  for (const c of channels) {\n    if (c.value !== undefined) {\n      c.value = coerceValues(c.value);\n    }\n  }\n  return {\n    domain: domain === undefined ? domain : coerceValues(domain),\n    ...options\n  };\n}\n\nfunction coerceSymbols(values) {\n  return map(values, maybeSymbol);\n}\n\nexport function scale(options = {}) {\n  let scale;\n  for (const key in options) {\n    if (!registry.has(key)) continue; // ignore unknown properties\n    if (!isScaleOptions(options[key])) continue; // e.g., ignore {color: \"red\"}\n    if (scale !== undefined) throw new Error(\"ambiguous scale definition; multiple scales found\");\n    scale = exposeScale(normalizeScale(key, options[key]));\n  }\n  if (scale === undefined) throw new Error(\"invalid scale definition; no scale found\");\n  return scale;\n}\n\nexport function exposeScales(scaleDescriptors) {\n  return (key) => {\n    if (!registry.has((key = `${key}`))) throw new Error(`unknown scale: ${key}`);\n    return key in scaleDescriptors ? exposeScale(scaleDescriptors[key]) : undefined;\n  };\n}\n\n// Note: axis- and legend-related properties (such as label, ticks and\n// tickFormat) are not included here as they do not affect the scale\u2019s behavior.\nfunction exposeScale({scale, type, domain, range, interpolate, interval, transform, percent, pivot}) {\n  if (type === \"identity\") return {type: \"identity\", apply: (d) => d, invert: (d) => d};\n  const unknown = scale.unknown ? scale.unknown() : undefined;\n  return {\n    type,\n    domain: slice(domain), // defensive copy\n    ...(range !== undefined && {range: slice(range)}), // defensive copy\n    ...(transform !== undefined && {transform}),\n    ...(percent && {percent}), // only exposed if truthy\n    ...(unknown !== undefined && {unknown}),\n    ...(interval !== undefined && {interval}),\n\n    // quantitative\n    ...(interpolate !== undefined && {interpolate}),\n    ...(scale.clamp && {clamp: scale.clamp()}),\n\n    // diverging (always asymmetric; we never want to apply the symmetric transform twice)\n    ...(pivot !== undefined && {pivot, symmetric: false}),\n\n    // log, diverging-log\n    ...(scale.base && {base: scale.base()}),\n\n    // pow, diverging-pow\n    ...(scale.exponent && {exponent: scale.exponent()}),\n\n    // symlog, diverging-symlog\n    ...(scale.constant && {constant: scale.constant()}),\n\n    // band, point\n    ...(scale.align && {align: scale.align(), round: scale.round()}),\n    ...(scale.padding &&\n      (scale.paddingInner\n        ? {paddingInner: scale.paddingInner(), paddingOuter: scale.paddingOuter()}\n        : {padding: scale.padding()})),\n    ...(scale.bandwidth && {bandwidth: scale.bandwidth(), step: scale.step()}),\n\n    // utilities\n    apply: (t) => scale(t),\n    ...(scale.invert && {invert: (t) => scale.invert(t)})\n  };\n}\n", "export function memoize1(compute) {\n  let cacheValue, cacheKeys;\n  return (...keys) => {\n    if (cacheKeys?.length !== keys.length || cacheKeys.some((k, i) => k !== keys[i])) {\n      cacheKeys = keys;\n      cacheValue = compute(...keys);\n    }\n    return cacheValue;\n  };\n}\n", "import {format as isoFormat} from \"isoformat\";\nimport {string} from \"./options.js\";\nimport {memoize1} from \"./memoize.js\";\n\nconst numberFormat = memoize1((locale) => {\n  return new Intl.NumberFormat(locale);\n});\n\nconst monthFormat = memoize1((locale, month) => {\n  return new Intl.DateTimeFormat(locale, {timeZone: \"UTC\", ...(month && {month})});\n});\n\nconst weekdayFormat = memoize1((locale, weekday) => {\n  return new Intl.DateTimeFormat(locale, {timeZone: \"UTC\", ...(weekday && {weekday})});\n});\n\nexport function formatNumber(locale = \"en-US\") {\n  const format = numberFormat(locale);\n  return (i) => (i != null && !isNaN(i) ? format.format(i) : undefined);\n}\n\nexport function formatMonth(locale = \"en-US\", format = \"short\") {\n  const fmt = monthFormat(locale, format);\n  return (i) => (i != null && !isNaN((i = +new Date(Date.UTC(2000, +i)))) ? fmt.format(i) : undefined);\n}\n\nexport function formatWeekday(locale = \"en-US\", format = \"short\") {\n  const fmt = weekdayFormat(locale, format);\n  return (i) => (i != null && !isNaN((i = +new Date(Date.UTC(2001, 0, +i)))) ? fmt.format(i) : undefined);\n}\n\nexport function formatIsoDate(date) {\n  return isoFormat(date, \"Invalid Date\");\n}\n\nexport function formatAuto(locale = \"en-US\") {\n  const number = formatNumber(locale);\n  return (v) => (v instanceof Date ? formatIsoDate : typeof v === \"number\" ? number : string)(v);\n}\n\n// TODO When Plot supports a top-level locale option, this should be removed\n// because it lacks context to know which locale to use; formatAuto should be\n// used instead whenever possible.\nexport const formatDefault = formatAuto();\n", "import {geoPath, group, namespaces} from \"d3\";\nimport {create} from \"./context.js\";\nimport {defined, nonempty} from \"./defined.js\";\nimport {formatDefault} from \"./format.js\";\nimport {\n  string,\n  number,\n  maybeColorChannel,\n  maybeNumberChannel,\n  maybeKeyword,\n  isNoneish,\n  isNone,\n  isRound,\n  keyof\n} from \"./options.js\";\nimport {warn} from \"./warnings.js\";\n\nexport const offset = (typeof window !== \"undefined\" ? window.devicePixelRatio > 1 : typeof it === \"undefined\") ? 0 : 0.5; // prettier-ignore\n\nlet nextClipId = 0;\n\nfunction getClipId() {\n  return `plot-clip-${++nextClipId}`;\n}\n\nexport function styles(\n  mark,\n  {\n    title,\n    href,\n    ariaLabel: variaLabel,\n    ariaDescription,\n    ariaHidden,\n    target,\n    fill,\n    fillOpacity,\n    stroke,\n    strokeWidth,\n    strokeOpacity,\n    strokeLinejoin,\n    strokeLinecap,\n    strokeMiterlimit,\n    strokeDasharray,\n    strokeDashoffset,\n    opacity,\n    mixBlendMode,\n    imageFilter,\n    paintOrder,\n    pointerEvents,\n    shapeRendering,\n    channels\n  },\n  {\n    ariaLabel: cariaLabel,\n    fill: defaultFill = \"currentColor\",\n    fillOpacity: defaultFillOpacity,\n    stroke: defaultStroke = \"none\",\n    strokeOpacity: defaultStrokeOpacity,\n    strokeWidth: defaultStrokeWidth,\n    strokeLinecap: defaultStrokeLinecap,\n    strokeLinejoin: defaultStrokeLinejoin,\n    strokeMiterlimit: defaultStrokeMiterlimit,\n    paintOrder: defaultPaintOrder\n  }\n) {\n  // Some marks don\u2019t support fill (e.g., tick and rule).\n  if (defaultFill === null) {\n    fill = null;\n    fillOpacity = null;\n  }\n\n  // Some marks don\u2019t support stroke (e.g., image).\n  if (defaultStroke === null) {\n    stroke = null;\n    strokeOpacity = null;\n  }\n\n  // Some marks default to fill with no stroke, while others default to stroke\n  // with no fill. For example, bar and area default to fill, while dot and line\n  // default to stroke. For marks that fill by default, the default fill only\n  // applies if the stroke is (constant) none; if you set a stroke, then the\n  // default fill becomes none. Similarly for marks that stroke by stroke, the\n  // default stroke only applies if the fill is (constant) none.\n  if (isNoneish(defaultFill)) {\n    if (!isNoneish(defaultStroke) && (!isNoneish(fill) || channels?.fill)) defaultStroke = \"none\";\n  } else {\n    if (isNoneish(defaultStroke) && (!isNoneish(stroke) || channels?.stroke)) defaultFill = \"none\";\n  }\n\n  const [vfill, cfill] = maybeColorChannel(fill, defaultFill);\n  const [vfillOpacity, cfillOpacity] = maybeNumberChannel(fillOpacity, defaultFillOpacity);\n  const [vstroke, cstroke] = maybeColorChannel(stroke, defaultStroke);\n  const [vstrokeOpacity, cstrokeOpacity] = maybeNumberChannel(strokeOpacity, defaultStrokeOpacity);\n  const [vopacity, copacity] = maybeNumberChannel(opacity);\n\n  // For styles that have no effect if there is no stroke, only apply the\n  // defaults if the stroke is not the constant none. (If stroke is a channel,\n  // then cstroke will be undefined, but there\u2019s still a stroke; hence we don\u2019t\n  // use isNoneish here.)\n  if (!isNone(cstroke)) {\n    if (strokeWidth === undefined) strokeWidth = defaultStrokeWidth;\n    if (strokeLinecap === undefined) strokeLinecap = defaultStrokeLinecap;\n    if (strokeLinejoin === undefined) strokeLinejoin = defaultStrokeLinejoin;\n\n    // The default stroke miterlimit need not be applied if the current stroke\n    // is the constant round; this only has effect on miter joins.\n    if (strokeMiterlimit === undefined && !isRound(strokeLinejoin)) strokeMiterlimit = defaultStrokeMiterlimit;\n\n    // The paint order only takes effect if there is both a fill and a stroke\n    // (at least if we ignore markers, which no built-in marks currently use).\n    if (!isNone(cfill) && paintOrder === undefined) paintOrder = defaultPaintOrder;\n  }\n\n  const [vstrokeWidth, cstrokeWidth] = maybeNumberChannel(strokeWidth);\n\n  // Some marks don\u2019t support fill (e.g., tick and rule).\n  if (defaultFill !== null) {\n    mark.fill = impliedString(cfill, \"currentColor\");\n    mark.fillOpacity = impliedNumber(cfillOpacity, 1);\n  }\n\n  // Some marks don\u2019t support stroke (e.g., image).\n  if (defaultStroke !== null) {\n    mark.stroke = impliedString(cstroke, \"none\");\n    mark.strokeWidth = impliedNumber(cstrokeWidth, 1);\n    mark.strokeOpacity = impliedNumber(cstrokeOpacity, 1);\n    mark.strokeLinejoin = impliedString(strokeLinejoin, \"miter\");\n    mark.strokeLinecap = impliedString(strokeLinecap, \"butt\");\n    mark.strokeMiterlimit = impliedNumber(strokeMiterlimit, 4);\n    mark.strokeDasharray = impliedString(strokeDasharray, \"none\");\n    mark.strokeDashoffset = impliedString(strokeDashoffset, \"0\");\n  }\n\n  mark.target = string(target);\n  mark.ariaLabel = string(cariaLabel);\n  mark.ariaDescription = string(ariaDescription);\n  mark.ariaHidden = string(ariaHidden);\n  mark.opacity = impliedNumber(copacity, 1);\n  mark.mixBlendMode = impliedString(mixBlendMode, \"normal\");\n  mark.imageFilter = impliedString(imageFilter, \"none\");\n  mark.paintOrder = impliedString(paintOrder, \"normal\");\n  mark.pointerEvents = impliedString(pointerEvents, \"auto\");\n  mark.shapeRendering = impliedString(shapeRendering, \"auto\");\n\n  return {\n    title: {value: title, optional: true, filter: null},\n    href: {value: href, optional: true, filter: null},\n    ariaLabel: {value: variaLabel, optional: true, filter: null},\n    fill: {value: vfill, scale: \"auto\", optional: true},\n    fillOpacity: {value: vfillOpacity, scale: \"auto\", optional: true},\n    stroke: {value: vstroke, scale: \"auto\", optional: true},\n    strokeOpacity: {value: vstrokeOpacity, scale: \"auto\", optional: true},\n    strokeWidth: {value: vstrokeWidth, optional: true},\n    opacity: {value: vopacity, scale: \"auto\", optional: true}\n  };\n}\n\n// Applies the specified titles via selection.call.\nexport function applyTitle(selection, L) {\n  if (L)\n    selection\n      .filter((i) => nonempty(L[i]))\n      .append(\"title\")\n      .call(applyText, L);\n}\n\n// Like applyTitle, but for grouped data (lines, areas).\nexport function applyTitleGroup(selection, L) {\n  if (L)\n    selection\n      .filter(([i]) => nonempty(L[i]))\n      .append(\"title\")\n      .call(applyTextGroup, L);\n}\n\nexport function applyText(selection, T) {\n  if (T) selection.text((i) => formatDefault(T[i]));\n}\n\nexport function applyTextGroup(selection, T) {\n  if (T) selection.text(([i]) => formatDefault(T[i]));\n}\n\nexport function applyChannelStyles(\n  selection,\n  {target, tip},\n  {\n    ariaLabel: AL,\n    title: T,\n    fill: F,\n    fillOpacity: FO,\n    stroke: S,\n    strokeOpacity: SO,\n    strokeWidth: SW,\n    opacity: O,\n    href: H\n  }\n) {\n  if (AL) applyAttr(selection, \"aria-label\", (i) => AL[i]);\n  if (F) applyAttr(selection, \"fill\", (i) => F[i]);\n  if (FO) applyAttr(selection, \"fill-opacity\", (i) => FO[i]);\n  if (S) applyAttr(selection, \"stroke\", (i) => S[i]);\n  if (SO) applyAttr(selection, \"stroke-opacity\", (i) => SO[i]);\n  if (SW) applyAttr(selection, \"stroke-width\", (i) => SW[i]);\n  if (O) applyAttr(selection, \"opacity\", (i) => O[i]);\n  if (H) applyHref(selection, (i) => H[i], target);\n  if (!tip) applyTitle(selection, T);\n}\n\nexport function applyGroupedChannelStyles(\n  selection,\n  {target, tip},\n  {\n    ariaLabel: AL,\n    title: T,\n    fill: F,\n    fillOpacity: FO,\n    stroke: S,\n    strokeOpacity: SO,\n    strokeWidth: SW,\n    opacity: O,\n    href: H\n  }\n) {\n  if (AL) applyAttr(selection, \"aria-label\", ([i]) => AL[i]);\n  if (F) applyAttr(selection, \"fill\", ([i]) => F[i]);\n  if (FO) applyAttr(selection, \"fill-opacity\", ([i]) => FO[i]);\n  if (S) applyAttr(selection, \"stroke\", ([i]) => S[i]);\n  if (SO) applyAttr(selection, \"stroke-opacity\", ([i]) => SO[i]);\n  if (SW) applyAttr(selection, \"stroke-width\", ([i]) => SW[i]);\n  if (O) applyAttr(selection, \"opacity\", ([i]) => O[i]);\n  if (H) applyHref(selection, ([i]) => H[i], target);\n  if (!tip) applyTitleGroup(selection, T);\n}\n\nfunction groupAesthetics(\n  {\n    ariaLabel: AL,\n    title: T,\n    fill: F,\n    fillOpacity: FO,\n    stroke: S,\n    strokeOpacity: SO,\n    strokeWidth: SW,\n    opacity: O,\n    href: H\n  },\n  {tip}\n) {\n  return [AL, tip ? undefined : T, F, FO, S, SO, SW, O, H].filter((c) => c !== undefined);\n}\n\nexport function groupZ(I, Z, z) {\n  const G = group(I, (i) => Z[i]);\n  if (z === undefined && G.size > (1 + I.length) >> 1) {\n    warn(\n      `Warning: the implicit z channel has high cardinality. This may occur when the fill or stroke channel is associated with quantitative data rather than ordinal or categorical data. You can suppress this warning by setting the z option explicitly; if this data represents a single series, set z to null.`\n    );\n  }\n  return G.values();\n}\n\nexport function* groupIndex(I, position, mark, channels) {\n  const {z} = mark;\n  const {z: Z} = channels; // group channel\n  const A = groupAesthetics(channels, mark); // aesthetic channels\n  const C = [...position, ...A]; // all channels\n\n  // Group the current index by Z (if any).\n  for (const G of Z ? groupZ(I, Z, z) : [I]) {\n    let Ag; // the A-values (aesthetics) of the current group, if any\n    let Gg; // the current group index (a subset of G, and I), if any\n    out: for (const i of G) {\n      // If any channel has an undefined value for this index, skip it.\n      for (const c of C) {\n        if (!defined(c[i])) {\n          if (Gg) Gg.push(-1);\n          continue out;\n        }\n      }\n\n      // Otherwise, if this is a new group, record the aesthetics for this\n      // group. Yield the current group and start a new one.\n      if (Ag === undefined) {\n        if (Gg) yield Gg;\n        (Ag = A.map((c) => keyof(c[i]))), (Gg = [i]);\n        continue;\n      }\n\n      // Otherwise, add the current index to the current group. Then, if any of\n      // the aesthetics don\u2019t match the current group, yield the current group\n      // and start a new group of the current index.\n      Gg.push(i);\n      for (let j = 0; j < A.length; ++j) {\n        const k = keyof(A[j][i]);\n        if (k !== Ag[j]) {\n          yield Gg;\n          (Ag = A.map((c) => keyof(c[i]))), (Gg = [i]);\n          continue out;\n        }\n      }\n    }\n\n    // Yield the current group, if any.\n    if (Gg) yield Gg;\n  }\n}\n\n// TODO Accept other types of clips (paths, urls, x, y, other marks\u2026)?\n// https://github.com/observablehq/plot/issues/181\nexport function maybeClip(clip) {\n  if (clip === true) clip = \"frame\";\n  else if (clip === false) clip = null;\n  return maybeKeyword(clip, \"clip\", [\"frame\", \"sphere\"]);\n}\n\n// Note: may mutate selection.node!\nfunction applyClip(selection, mark, dimensions, context) {\n  let clipUrl;\n  switch (mark.clip) {\n    case \"frame\": {\n      const {width, height, marginLeft, marginRight, marginTop, marginBottom} = dimensions;\n      const id = getClipId();\n      clipUrl = `url(#${id})`;\n      selection = create(\"svg:g\", context)\n        .call((g) =>\n          g\n            .append(\"svg:clipPath\")\n            .attr(\"id\", id)\n            .append(\"rect\")\n            .attr(\"x\", marginLeft)\n            .attr(\"y\", marginTop)\n            .attr(\"width\", width - marginRight - marginLeft)\n            .attr(\"height\", height - marginTop - marginBottom)\n        )\n        .each(function () {\n          this.appendChild(selection.node());\n          selection.node = () => this; // Note: mutation!\n        });\n      break;\n    }\n    case \"sphere\": {\n      const {projection} = context;\n      if (!projection) throw new Error(`the \"sphere\" clip option requires a projection`);\n      const id = getClipId();\n      clipUrl = `url(#${id})`;\n      selection\n        .append(\"clipPath\")\n        .attr(\"id\", id)\n        .append(\"path\")\n        .attr(\"d\", geoPath(projection)({type: \"Sphere\"}));\n      break;\n    }\n  }\n  // Here we\u2019re careful to apply the ARIA attributes to the outer G element when\n  // clipping is applied, and to apply the ARIA attributes before any other\n  // attributes (for readability).\n  applyAttr(selection, \"aria-label\", mark.ariaLabel);\n  applyAttr(selection, \"aria-description\", mark.ariaDescription);\n  applyAttr(selection, \"aria-hidden\", mark.ariaHidden);\n  applyAttr(selection, \"clip-path\", clipUrl);\n}\n\n// Note: may mutate selection.node!\nexport function applyIndirectStyles(selection, mark, dimensions, context) {\n  applyClip(selection, mark, dimensions, context);\n  applyAttr(selection, \"fill\", mark.fill);\n  applyAttr(selection, \"fill-opacity\", mark.fillOpacity);\n  applyAttr(selection, \"stroke\", mark.stroke);\n  applyAttr(selection, \"stroke-width\", mark.strokeWidth);\n  applyAttr(selection, \"stroke-opacity\", mark.strokeOpacity);\n  applyAttr(selection, \"stroke-linejoin\", mark.strokeLinejoin);\n  applyAttr(selection, \"stroke-linecap\", mark.strokeLinecap);\n  applyAttr(selection, \"stroke-miterlimit\", mark.strokeMiterlimit);\n  applyAttr(selection, \"stroke-dasharray\", mark.strokeDasharray);\n  applyAttr(selection, \"stroke-dashoffset\", mark.strokeDashoffset);\n  applyAttr(selection, \"shape-rendering\", mark.shapeRendering);\n  applyAttr(selection, \"filter\", mark.imageFilter);\n  applyAttr(selection, \"paint-order\", mark.paintOrder);\n  const {pointerEvents = context.pointerSticky === false ? \"none\" : undefined} = mark;\n  applyAttr(selection, \"pointer-events\", pointerEvents);\n}\n\nexport function applyDirectStyles(selection, mark) {\n  applyStyle(selection, \"mix-blend-mode\", mark.mixBlendMode);\n  applyAttr(selection, \"opacity\", mark.opacity);\n}\n\nfunction applyHref(selection, href, target) {\n  selection.each(function (i) {\n    const h = href(i);\n    if (h != null) {\n      const a = this.ownerDocument.createElementNS(namespaces.svg, \"a\");\n      a.setAttribute(\"fill\", \"inherit\");\n      a.setAttributeNS(namespaces.xlink, \"href\", h);\n      if (target != null) a.setAttribute(\"target\", target);\n      this.parentNode.insertBefore(a, this).appendChild(this);\n    }\n  });\n}\n\nexport function applyAttr(selection, name, value) {\n  if (value != null) selection.attr(name, value);\n}\n\nexport function applyStyle(selection, name, value) {\n  if (value != null) selection.style(name, value);\n}\n\nexport function applyTransform(selection, mark, {x, y}, tx = offset, ty = offset) {\n  tx += mark.dx;\n  ty += mark.dy;\n  if (x?.bandwidth) tx += x.bandwidth() / 2;\n  if (y?.bandwidth) ty += y.bandwidth() / 2;\n  if (tx || ty) selection.attr(\"transform\", `translate(${tx},${ty})`);\n}\n\nexport function impliedString(value, impliedValue) {\n  if ((value = string(value)) !== impliedValue) return value;\n}\n\nexport function impliedNumber(value, impliedValue) {\n  if ((value = number(value)) !== impliedValue) return value;\n}\n\n// https://www.w3.org/TR/CSS21/grammar.html\nconst validClassName =\n  /^-?([_a-z]|[\\240-\\377]|\\\\[0-9a-f]{1,6}(\\r\\n|[ \\t\\r\\n\\f])?|\\\\[^\\r\\n\\f0-9a-f])([_a-z0-9-]|[\\240-\\377]|\\\\[0-9a-f]{1,6}(\\r\\n|[ \\t\\r\\n\\f])?|\\\\[^\\r\\n\\f0-9a-f])*$/i;\n\nexport function maybeClassName(name) {\n  // The default should be changed whenever the default styles are changed, so\n  // as to avoid conflict when multiple versions of Plot are on the page.\n  if (name === undefined) return \"plot-d6a7b5\";\n  name = `${name}`;\n  if (!validClassName.test(name)) throw new Error(`invalid class name: ${name}`);\n  return name;\n}\n\nexport function applyInlineStyles(selection, style) {\n  if (typeof style === \"string\") {\n    selection.property(\"style\", style);\n  } else if (style != null) {\n    for (const element of selection) {\n      Object.assign(element.style, style);\n    }\n  }\n}\n\nexport function applyFrameAnchor({frameAnchor}, {width, height, marginTop, marginRight, marginBottom, marginLeft}) {\n  return [\n    /left$/.test(frameAnchor)\n      ? marginLeft\n      : /right$/.test(frameAnchor)\n      ? width - marginRight\n      : (marginLeft + width - marginRight) / 2,\n    /^top/.test(frameAnchor)\n      ? marginTop\n      : /^bottom/.test(frameAnchor)\n      ? height - marginBottom\n      : (marginTop + height - marginBottom) / 2\n  ];\n}\n", "import {extent} from \"d3\";\nimport {projectionAspectRatio} from \"./projection.js\";\nimport {isOrdinalScale} from \"./scales.js\";\nimport {offset} from \"./style.js\";\n\nexport function createDimensions(scales, marks, options = {}) {\n  // Compute the default margins: the maximum of the marks\u2019 margins. While not\n  // always used, they may be needed to compute the default height of the plot.\n  let marginTopDefault = 0.5 - offset,\n    marginRightDefault = 0.5 + offset,\n    marginBottomDefault = 0.5 + offset,\n    marginLeftDefault = 0.5 - offset;\n\n  for (const {marginTop, marginRight, marginBottom, marginLeft} of marks) {\n    if (marginTop > marginTopDefault) marginTopDefault = marginTop;\n    if (marginRight > marginRightDefault) marginRightDefault = marginRight;\n    if (marginBottom > marginBottomDefault) marginBottomDefault = marginBottom;\n    if (marginLeft > marginLeftDefault) marginLeftDefault = marginLeft;\n  }\n\n  // Compute the actual margins. The order of precedence is: the side-specific\n  // margin options, then the global margin option, then the defaults.\n  let {\n    margin,\n    marginTop = margin !== undefined ? margin : marginTopDefault,\n    marginRight = margin !== undefined ? margin : marginRightDefault,\n    marginBottom = margin !== undefined ? margin : marginBottomDefault,\n    marginLeft = margin !== undefined ? margin : marginLeftDefault\n  } = options;\n\n  // Coerce the margin options to numbers.\n  marginTop = +marginTop;\n  marginRight = +marginRight;\n  marginBottom = +marginBottom;\n  marginLeft = +marginLeft;\n\n  // Compute the outer dimensions of the plot. If the top and bottom margins are\n  // specified explicitly, adjust the automatic height accordingly.\n  let {\n    width = 640,\n    height = autoHeight(scales, options, {\n      width,\n      marginTopDefault,\n      marginRightDefault,\n      marginBottomDefault,\n      marginLeftDefault\n    }) + Math.max(0, marginTop - marginTopDefault + marginBottom - marginBottomDefault)\n  } = options;\n\n  // Coerce the width and height.\n  width = +width;\n  height = +height;\n\n  const dimensions = {\n    width,\n    height,\n    marginTop,\n    marginRight,\n    marginBottom,\n    marginLeft\n  };\n\n  // Compute the facet margins.\n  if (scales.fx || scales.fy) {\n    let {\n      margin: facetMargin,\n      marginTop: facetMarginTop = facetMargin !== undefined ? facetMargin : marginTop,\n      marginRight: facetMarginRight = facetMargin !== undefined ? facetMargin : marginRight,\n      marginBottom: facetMarginBottom = facetMargin !== undefined ? facetMargin : marginBottom,\n      marginLeft: facetMarginLeft = facetMargin !== undefined ? facetMargin : marginLeft\n    } = options.facet ?? {};\n\n    // Coerce the facet margin options to numbers.\n    facetMarginTop = +facetMarginTop;\n    facetMarginRight = +facetMarginRight;\n    facetMarginBottom = +facetMarginBottom;\n    facetMarginLeft = +facetMarginLeft;\n\n    dimensions.facet = {\n      marginTop: facetMarginTop,\n      marginRight: facetMarginRight,\n      marginBottom: facetMarginBottom,\n      marginLeft: facetMarginLeft\n    };\n  }\n\n  return dimensions;\n}\n\nfunction autoHeight(\n  {x, y, fy, fx},\n  {projection, aspectRatio},\n  {width, marginTopDefault, marginRightDefault, marginBottomDefault, marginLeftDefault}\n) {\n  const nfy = fy ? fy.scale.domain().length : 1;\n\n  // If a projection is specified, use its natural aspect ratio (if known).\n  const ar = projectionAspectRatio(projection);\n  if (ar) {\n    const nfx = fx ? fx.scale.domain().length : 1;\n    const far = ((1.1 * nfy - 0.1) / (1.1 * nfx - 0.1)) * ar; // 0.1 is default facet padding\n    const lar = Math.max(0.1, Math.min(10, far)); // clamp the aspect ratio to a \u201Creasonable\u201D value\n    return Math.round((width - marginLeftDefault - marginRightDefault) * lar + marginTopDefault + marginBottomDefault);\n  }\n\n  const ny = y ? (isOrdinalScale(y) ? y.scale.domain().length : Math.max(7, 17 / nfy)) : 1;\n\n  // If a desired aspect ratio is given, compute a default height to match.\n  if (aspectRatio != null) {\n    aspectRatio = +aspectRatio;\n    if (!(isFinite(aspectRatio) && aspectRatio > 0)) throw new Error(`invalid aspectRatio: ${aspectRatio}`);\n    const ratio = aspectRatioLength(\"y\", y) / (aspectRatioLength(\"x\", x) * aspectRatio);\n    const fxb = fx ? fx.scale.bandwidth() : 1;\n    const fyb = fy ? fy.scale.bandwidth() : 1;\n    const w = fxb * (width - marginLeftDefault - marginRightDefault) - x.insetLeft - x.insetRight;\n    return (ratio * w + y.insetTop + y.insetBottom) / fyb + marginTopDefault + marginBottomDefault;\n  }\n\n  return !!(y || fy) * Math.max(1, Math.min(60, ny * nfy)) * 20 + !!fx * 30 + 60;\n}\n\nfunction aspectRatioLength(k, scale) {\n  if (!scale) throw new Error(`aspectRatio requires ${k} scale`);\n  const {type, domain} = scale;\n  let transform;\n  switch (type) {\n    case \"linear\":\n    case \"utc\":\n    case \"time\":\n      transform = Number;\n      break;\n    case \"pow\": {\n      const exponent = scale.scale.exponent();\n      transform = (x) => Math.pow(x, exponent);\n      break;\n    }\n    case \"log\":\n      transform = Math.log;\n      break;\n    case \"point\":\n    case \"band\":\n      return domain.length;\n    default:\n      throw new Error(`unsupported ${k} scale for aspectRatio: ${type}`);\n  }\n  const [min, max] = extent(domain);\n  return Math.abs(transform(max) - transform(min));\n}\n", "import {InternMap, cross, rollup, sum} from \"d3\";\nimport {keyof, map, range} from \"./options.js\";\nimport {createScales} from \"./scales.js\";\n\n// Returns an array of {x?, y?, i} objects representing the facet domain.\nexport function createFacets(channelsByScale, options) {\n  const {fx, fy} = createScales(channelsByScale, options);\n  const fxDomain = fx?.scale.domain();\n  const fyDomain = fy?.scale.domain();\n  return fxDomain && fyDomain\n    ? cross(fxDomain, fyDomain).map(([x, y], i) => ({x, y, i}))\n    : fxDomain\n    ? fxDomain.map((x, i) => ({x, i}))\n    : fyDomain\n    ? fyDomain.map((y, i) => ({y, i}))\n    : undefined;\n}\n\nexport function recreateFacets(facets, {x: X, y: Y}) {\n  X &&= facetIndex(X);\n  Y &&= facetIndex(Y);\n  return facets\n    .filter(\n      X && Y // remove any facets no longer present in the domain\n        ? (f) => X.has(f.x) && Y.has(f.y)\n        : X\n        ? (f) => X.has(f.x)\n        : (f) => Y.has(f.y)\n    )\n    .sort(\n      X && Y // reorder facets to match the new scale domains\n        ? (a, b) => X.get(a.x) - X.get(b.x) || Y.get(a.y) - Y.get(b.y)\n        : X\n        ? (a, b) => X.get(a.x) - X.get(b.x)\n        : (a, b) => Y.get(a.y) - Y.get(b.y)\n    );\n}\n\n// Returns a (possibly nested) Map of [[key1, index1], [key2, index2], \u2026]\n// representing the data indexes associated with each facet.\nexport function facetGroups(data, {fx, fy}) {\n  const I = range(data);\n  const FX = fx?.value;\n  const FY = fy?.value;\n  return fx && fy\n    ? rollup(\n        I,\n        (G) => ((G.fx = FX[G[0]]), (G.fy = FY[G[0]]), G),\n        (i) => FX[i],\n        (i) => FY[i]\n      )\n    : fx\n    ? rollup(\n        I,\n        (G) => ((G.fx = FX[G[0]]), G),\n        (i) => FX[i]\n      )\n    : rollup(\n        I,\n        (G) => ((G.fy = FY[G[0]]), G),\n        (i) => FY[i]\n      );\n}\n\nexport function facetTranslator(fx, fy, {marginTop, marginLeft}) {\n  return fx && fy\n    ? ({x, y}) => `translate(${fx(x) - marginLeft},${fy(y) - marginTop})`\n    : fx\n    ? ({x}) => `translate(${fx(x) - marginLeft},0)`\n    : ({y}) => `translate(0,${fy(y) - marginTop})`;\n}\n\n// Returns an index that for each facet lists all the elements present in other\n// facets in the original index. TODO Memoize to avoid repeated work?\nexport function facetExclude(index) {\n  const ex = [];\n  const e = new Uint32Array(sum(index, (d) => d.length));\n  for (const i of index) {\n    let n = 0;\n    for (const j of index) {\n      if (i === j) continue;\n      e.set(j, n);\n      n += j.length;\n    }\n    ex.push(e.slice(0, n));\n  }\n  return ex;\n}\n\nconst facetAnchors = new Map([\n  [\"top\", facetAnchorTop],\n  [\"right\", facetAnchorRight],\n  [\"bottom\", facetAnchorBottom],\n  [\"left\", facetAnchorLeft],\n  [\"top-left\", and(facetAnchorTop, facetAnchorLeft)],\n  [\"top-right\", and(facetAnchorTop, facetAnchorRight)],\n  [\"bottom-left\", and(facetAnchorBottom, facetAnchorLeft)],\n  [\"bottom-right\", and(facetAnchorBottom, facetAnchorRight)],\n  [\"top-empty\", facetAnchorTopEmpty],\n  [\"right-empty\", facetAnchorRightEmpty],\n  [\"bottom-empty\", facetAnchorBottomEmpty],\n  [\"left-empty\", facetAnchorLeftEmpty],\n  [\"empty\", facetAnchorEmpty]\n]);\n\nexport function maybeFacetAnchor(facetAnchor) {\n  if (facetAnchor == null) return null;\n  const anchor = facetAnchors.get(`${facetAnchor}`.toLowerCase());\n  if (anchor) return anchor;\n  throw new Error(`invalid facet anchor: ${facetAnchor}`);\n}\n\nconst indexCache = new WeakMap();\n\nfunction facetIndex(V) {\n  let I = indexCache.get(V);\n  if (!I) indexCache.set(V, (I = new InternMap(map(V, (v, i) => [v, i]))));\n  return I;\n}\n\n// Like V.indexOf(v), but with the same semantics as InternMap.\nfunction facetIndexOf(V, v) {\n  return facetIndex(V).get(v);\n}\n\n// Like facets.find, but with the same semantics as InternMap.\nfunction facetFind(facets, x, y) {\n  x = keyof(x);\n  y = keyof(y);\n  return facets.find((f) => Object.is(keyof(f.x), x) && Object.is(keyof(f.y), y));\n}\n\nfunction facetEmpty(facets, x, y) {\n  return facetFind(facets, x, y)?.empty;\n}\n\nfunction facetAnchorTop(facets, {y: Y}, {y}) {\n  return Y ? facetIndexOf(Y, y) === 0 : true;\n}\n\nfunction facetAnchorBottom(facets, {y: Y}, {y}) {\n  return Y ? facetIndexOf(Y, y) === Y.length - 1 : true;\n}\n\nfunction facetAnchorLeft(facets, {x: X}, {x}) {\n  return X ? facetIndexOf(X, x) === 0 : true;\n}\n\nfunction facetAnchorRight(facets, {x: X}, {x}) {\n  return X ? facetIndexOf(X, x) === X.length - 1 : true;\n}\n\nfunction facetAnchorTopEmpty(facets, {y: Y}, {x, y, empty}) {\n  if (empty) return false;\n  if (!Y) return;\n  const i = facetIndexOf(Y, y);\n  if (i > 0) return facetEmpty(facets, x, Y[i - 1]);\n}\n\nfunction facetAnchorBottomEmpty(facets, {y: Y}, {x, y, empty}) {\n  if (empty) return false;\n  if (!Y) return;\n  const i = facetIndexOf(Y, y);\n  if (i < Y.length - 1) return facetEmpty(facets, x, Y[i + 1]);\n}\n\nfunction facetAnchorLeftEmpty(facets, {x: X}, {x, y, empty}) {\n  if (empty) return false;\n  if (!X) return;\n  const i = facetIndexOf(X, x);\n  if (i > 0) return facetEmpty(facets, X[i - 1], y);\n}\n\nfunction facetAnchorRightEmpty(facets, {x: X}, {x, y, empty}) {\n  if (empty) return false;\n  if (!X) return;\n  const i = facetIndexOf(X, x);\n  if (i < X.length - 1) return facetEmpty(facets, X[i + 1], y);\n}\n\nfunction facetAnchorEmpty(facets, channels, {empty}) {\n  return empty;\n}\n\nfunction and(a, b) {\n  return function () {\n    return a.apply(null, arguments) && b.apply(null, arguments);\n  };\n}\n\n// Facet filter, by mark; for now only the \"eq\" filter is provided.\nexport function facetFilter(facets, {channels: {fx, fy}, groups}) {\n  return fx && fy\n    ? facets.map(({x, y}) => groups.get(x)?.get(y) ?? [])\n    : fx\n    ? facets.map(({x}) => groups.get(x) ?? [])\n    : facets.map(({y}) => groups.get(y) ?? []);\n}\n", "import {channelDomain, createChannels, valueObject} from \"./channel.js\";\nimport {defined} from \"./defined.js\";\nimport {maybeFacetAnchor} from \"./facet.js\";\nimport {maybeKeyword, maybeNamed, maybeValue} from \"./options.js\";\nimport {arrayify, isDomainSort, isOptions, keyword, range, singleton} from \"./options.js\";\nimport {project} from \"./projection.js\";\nimport {maybeClip, styles} from \"./style.js\";\nimport {basic, initializer} from \"./transforms/basic.js\";\n\nexport class Mark {\n  constructor(data, channels = {}, options = {}, defaults) {\n    const {\n      facet = \"auto\",\n      facetAnchor,\n      fx,\n      fy,\n      sort,\n      dx = 0,\n      dy = 0,\n      margin = 0,\n      marginTop = margin,\n      marginRight = margin,\n      marginBottom = margin,\n      marginLeft = margin,\n      clip,\n      channels: extraChannels,\n      tip,\n      render\n    } = options;\n    this.data = data;\n    this.sort = isDomainSort(sort) ? sort : null;\n    this.initializer = initializer(options).initializer;\n    this.transform = this.initializer ? options.transform : basic(options).transform;\n    if (facet === null || facet === false) {\n      this.facet = null;\n    } else {\n      this.facet = keyword(facet === true ? \"include\" : facet, \"facet\", [\"auto\", \"include\", \"exclude\", \"super\"]);\n      this.fx = data === singleton && typeof fx === \"string\" ? [fx] : fx;\n      this.fy = data === singleton && typeof fy === \"string\" ? [fy] : fy;\n    }\n    this.facetAnchor = maybeFacetAnchor(facetAnchor);\n    channels = maybeNamed(channels);\n    if (extraChannels !== undefined) channels = {...maybeChannels(extraChannels), ...channels};\n    if (defaults !== undefined) channels = {...styles(this, options, defaults), ...channels};\n    this.channels = Object.fromEntries(\n      Object.entries(channels)\n        .map(([name, channel]) => {\n          if (isOptions(channel.value)) {\n            // apply scale overrides\n            const {value, scale = channel.scale} = channel.value;\n            channel = {...channel, scale, value};\n          }\n          if (data === singleton && typeof channel.value === \"string\") {\n            // convert field names to singleton values for decoration marks (e.g., frame)\n            const {value} = channel;\n            channel = {...channel, value: [value]};\n          }\n          return [name, channel];\n        })\n        .filter(([name, {value, optional}]) => {\n          if (value != null) return true;\n          if (optional) return false;\n          throw new Error(`missing channel value: ${name}`);\n        })\n    );\n    this.dx = +dx;\n    this.dy = +dy;\n    this.marginTop = +marginTop;\n    this.marginRight = +marginRight;\n    this.marginBottom = +marginBottom;\n    this.marginLeft = +marginLeft;\n    this.clip = maybeClip(clip);\n    this.tip = maybeTip(tip);\n    // Super-faceting currently disallow position channels; in the future, we\n    // could allow position to be specified in fx and fy in addition to (or\n    // instead of) x and y.\n    if (this.facet === \"super\") {\n      if (fx || fy) throw new Error(`super-faceting cannot use fx or fy`);\n      for (const name in this.channels) {\n        const {scale} = channels[name];\n        if (scale !== \"x\" && scale !== \"y\") continue;\n        throw new Error(`super-faceting cannot use x or y`);\n      }\n    }\n    if (render != null) {\n      this.render = composeRender(render, this.render);\n    }\n  }\n  initialize(facets, facetChannels, plotOptions) {\n    let data = arrayify(this.data);\n    if (facets === undefined && data != null) facets = [range(data)];\n    const originalFacets = facets;\n    if (this.transform != null) ({facets, data} = this.transform(data, facets, plotOptions)), (data = arrayify(data));\n    if (facets !== undefined) facets.original = originalFacets; // needed to read facetChannels\n    const channels = createChannels(this.channels, data);\n    if (this.sort != null) channelDomain(data, facets, channels, facetChannels, this.sort); // mutates facetChannels!\n    return {data, facets, channels};\n  }\n  filter(index, channels, values) {\n    for (const name in channels) {\n      const {filter = defined} = channels[name];\n      if (filter !== null) {\n        const value = values[name];\n        index = index.filter((i) => filter(value[i]));\n      }\n    }\n    return index;\n  }\n  // If there is a projection, and there are paired x and y channels associated\n  // with the x and y scale respectively (and not already in screen coordinates\n  // as with an initializer), then apply the projection, replacing the x and y\n  // values. Note that the x and y scales themselves don\u2019t exist if there is a\n  // projection, but whether the channels are associated with scales still\n  // determines whether the projection should apply; think of the projection as\n  // a combination xy-scale.\n  project(channels, values, context) {\n    for (const cx in channels) {\n      if (channels[cx].scale === \"x\" && /^x|x$/.test(cx)) {\n        const cy = cx.replace(/^x|x$/, \"y\");\n        if (cy in channels && channels[cy].scale === \"y\") {\n          project(cx, cy, values, context.projection);\n        }\n      }\n    }\n  }\n  scale(channels, scales, context) {\n    const values = valueObject(channels, scales);\n    if (context.projection) this.project(channels, values, context);\n    return values;\n  }\n}\n\nexport function marks(...marks) {\n  marks.plot = Mark.prototype.plot; // Note: depends on side-effect in plot!\n  return marks;\n}\n\nexport function composeRender(r1, r2) {\n  if (r1 == null) return r2 === null ? undefined : r2;\n  if (r2 == null) return r1 === null ? undefined : r1;\n  if (typeof r1 !== \"function\") throw new TypeError(`invalid render transform: ${r1}`);\n  if (typeof r2 !== \"function\") throw new TypeError(`invalid render transform: ${r2}`);\n  return function (i, s, v, d, c, next) {\n    return r1.call(this, i, s, v, d, c, (i, s, v, d, c) => {\n      return r2.call(this, i, s, v, d, c, next); // preserve this\n    });\n  };\n}\n\nfunction maybeChannels(channels) {\n  return Object.fromEntries(\n    Object.entries(maybeNamed(channels)).map(([name, channel]) => {\n      channel = maybeValue(channel);\n      if (channel.filter === undefined && channel.scale == null) channel = {...channel, filter: null};\n      return [name, channel];\n    })\n  );\n}\n\nfunction maybeTip(tip) {\n  return tip === true ? \"xy\" : tip === false ? null : maybeKeyword(tip, \"tip\", [\"x\", \"y\", \"xy\"]);\n}\n\nexport function withTip(options, tip) {\n  return options?.tip === true ? {...options, tip} : options;\n}\n", "import {pointer as pointof} from \"d3\";\nimport {composeRender} from \"../mark.js\";\nimport {applyFrameAnchor} from \"../style.js\";\n\nconst states = new WeakMap();\n\nfunction pointerK(kx, ky, {x, y, px, py, maxRadius = 40, channels, render, ...options} = {}) {\n  maxRadius = +maxRadius;\n  // When px or py is used, register an extra channel that the pointer\n  // interaction can use to control which point is focused; this allows pointing\n  // to function independently of where the downstream mark (e.g., a tip) is\n  // displayed. Also default x or y to null to disable maybeTuple etc.\n  if (px != null) (x ??= null), (channels = {...channels, px: {value: px, scale: \"x\"}});\n  if (py != null) (y ??= null), (channels = {...channels, py: {value: py, scale: \"y\"}});\n  return {\n    x,\n    y,\n    channels,\n    ...options,\n    // Unlike other composed transforms, the render transform must be the\n    // outermost render function because it will re-render dynamically in\n    // response to pointer events.\n    render: composeRender(function (index, scales, values, dimensions, context, next) {\n      context = {...context, pointerSticky: false};\n      const svg = context.ownerSVGElement;\n      const {data} = context.getMarkState(this);\n\n      // Isolate state per-pointer, per-plot; if the pointer is reused by\n      // multiple marks, they will share the same state (e.g., sticky modality).\n      let state = states.get(svg);\n      if (!state) states.set(svg, (state = {sticky: false, roots: [], renders: []}));\n\n      // This serves as a unique identifier of the rendered mark per-plot; it is\n      // used to record the currently-rendered elements (state.roots) so that we\n      // can tell when a rendered element is clicked on.\n      let renderIndex = state.renders.push(render) - 1;\n\n      // For faceting, we want to compute the local coordinates of each point,\n      // which means subtracting out the facet translation, if any. (It\u2019s\n      // tempting to do this using the local coordinates in SVG, but that\u2019s\n      // complicated by mark-specific transforms such as dx and dy.) Also, since\n      // band scales return the upper bound of the band, we have to offset by\n      // half the bandwidth.\n      const {x, y, fx, fy} = scales;\n      let tx = fx ? fx(index.fx) - dimensions.marginLeft : 0;\n      let ty = fy ? fy(index.fy) - dimensions.marginTop : 0;\n      if (x?.bandwidth) tx += x.bandwidth() / 2;\n      if (y?.bandwidth) ty += y.bandwidth() / 2;\n\n      // For faceting, we also need to record the closest point per facet per\n      // mark (!), since each facet has its own pointer event listeners; we only\n      // want the closest point across facets to be visible.\n      const faceted = index.fi != null;\n      let facetState;\n      if (faceted) {\n        let facetStates = state.facetStates;\n        if (!facetStates) state.facetStates = facetStates = new Map();\n        facetState = facetStates.get(this);\n        if (!facetState) facetStates.set(this, (facetState = new Map()));\n      }\n\n      // The order of precedence for the pointer position is: px & py; the\n      // middle of x1 & y1 and x2 & y2; or x1 & y1 (e.g., area); or lastly x &\n      // y. If a dimension is unspecified, the frame anchor is used.\n      const [cx, cy] = applyFrameAnchor(this, dimensions);\n      const {px: PX, py: PY} = values;\n      const px = PX ? (i) => PX[i] : anchorX(values, cx);\n      const py = PY ? (i) => PY[i] : anchorY(values, cy);\n\n      let i; // currently focused index\n      let g; // currently rendered mark\n      let s; // currently rendered stickiness\n      let f; // current animation frame\n\n      // When faceting, if more than one pointer would be visible, only show\n      // this one if it is the closest. We defer rendering using an animation\n      // frame to allow all pointer events to be received before deciding which\n      // mark to render; although when hiding, we render immediately.\n      function update(ii, ri) {\n        if (faceted) {\n          if (f) f = cancelAnimationFrame(f);\n          if (ii == null) facetState.delete(index.fi);\n          else {\n            facetState.set(index.fi, ri);\n            f = requestAnimationFrame(() => {\n              f = null;\n              for (const r of facetState.values()) {\n                if (r < ri) {\n                  ii = null;\n                  break;\n                }\n              }\n              render(ii);\n            });\n            return;\n          }\n        }\n        render(ii);\n      }\n\n      function render(ii) {\n        if (i === ii && s === state.sticky) return; // the tooltip hasn\u2019t moved\n        i = ii;\n        s = context.pointerSticky = state.sticky;\n        const I = i == null ? [] : [i];\n        if (faceted) (I.fx = index.fx), (I.fy = index.fy), (I.fi = index.fi);\n        const r = next(I, scales, values, dimensions, context);\n        if (g) {\n          // When faceting, preserve swapped mark and facet transforms; also\n          // remove ARIA attributes since these are promoted to the parent. This\n          // is perhaps brittle in that it depends on how Plot renders facets,\n          // but it produces a cleaner and more accessible SVG structure.\n          if (faceted) {\n            const p = g.parentNode;\n            const ft = g.getAttribute(\"transform\");\n            const mt = r.getAttribute(\"transform\");\n            ft ? r.setAttribute(\"transform\", ft) : r.removeAttribute(\"transform\");\n            mt ? p.setAttribute(\"transform\", mt) : p.removeAttribute(\"transform\");\n            r.removeAttribute(\"aria-label\");\n            r.removeAttribute(\"aria-description\");\n            r.removeAttribute(\"aria-hidden\");\n          }\n          g.replaceWith(r);\n        }\n        state.roots[renderIndex] = g = r;\n        context.dispatchValue(i == null ? null : data[i]);\n        return r;\n      }\n\n      function pointermove(event) {\n        if (state.sticky || (event.pointerType === \"mouse\" && event.buttons === 1)) return; // dragging\n        let [xp, yp] = pointof(event);\n        (xp -= tx), (yp -= ty); // correct for facets and band scales\n        let ii = null;\n        let ri = maxRadius * maxRadius;\n        for (const j of index) {\n          const dx = kx * (px(j) - xp);\n          const dy = ky * (py(j) - yp);\n          const rj = dx * dx + dy * dy;\n          if (rj <= ri) (ii = j), (ri = rj);\n        }\n        update(ii, ri);\n      }\n\n      function pointerdown(event) {\n        if (event.pointerType !== \"mouse\") return;\n        if (i == null) return; // not pointing\n        if (state.sticky && state.roots.some((r) => r?.contains(event.target))) return; // stay sticky\n        if (state.sticky) (state.sticky = false), state.renders.forEach((r) => r(null)); // clear all pointers\n        else (state.sticky = true), render(i);\n        event.stopImmediatePropagation(); // suppress other pointers\n      }\n\n      function pointerleave(event) {\n        if (event.pointerType !== \"mouse\") return;\n        if (!state.sticky) update(null);\n      }\n\n      // We listen to the svg element; listening to the window instead would let\n      // us receive pointer events from farther away, but would also make it\n      // hard to know when to remove the listeners. (Using a mutation observer\n      // to watch the entire document is likely too expensive.)\n      svg.addEventListener(\"pointerenter\", pointermove);\n      svg.addEventListener(\"pointermove\", pointermove);\n      svg.addEventListener(\"pointerdown\", pointerdown);\n      svg.addEventListener(\"pointerleave\", pointerleave);\n\n      return render(null);\n    }, render)\n  };\n}\n\nexport function pointer(options) {\n  return pointerK(1, 1, options);\n}\n\nexport function pointerX(options) {\n  return pointerK(1, 0.01, options);\n}\n\nexport function pointerY(options) {\n  return pointerK(0.01, 1, options);\n}\n\nexport function anchorX({x1: X1, x2: X2, x: X = X1}, cx) {\n  return X1 && X2 ? (i) => (X1[i] + X2[i]) / 2 : X ? (i) => X[i] : () => cx;\n}\n\nexport function anchorY({y1: Y1, y2: Y2, y: Y = Y1}, cy) {\n  return Y1 && Y2 ? (i) => (Y1[i] + Y2[i]) / 2 : Y ? (i) => Y[i] : () => cy;\n}\n", "import {isOrdinalScale} from \"./scales.js\";\n\nexport function inferFontVariant(scale) {\n  return isOrdinalScale(scale) && scale.interval === undefined ? undefined : \"tabular-nums\";\n}\n", "import {quantize, interpolateNumber, piecewise, format, scaleBand, scaleLinear, axisBottom} from \"d3\";\nimport {inferFontVariant} from \"../axes.js\";\nimport {createContext, create} from \"../context.js\";\nimport {map, maybeNumberChannel} from \"../options.js\";\nimport {interpolatePiecewise} from \"../scales/quantitative.js\";\nimport {applyInlineStyles, impliedString, maybeClassName} from \"../style.js\";\n\nexport function legendRamp(color, options) {\n  let {\n    label = color.label,\n    tickSize = 6,\n    width = 240,\n    height = 44 + tickSize,\n    marginTop = 18,\n    marginRight = 0,\n    marginBottom = 16 + tickSize,\n    marginLeft = 0,\n    style,\n    ticks = (width - marginLeft - marginRight) / 64,\n    tickFormat,\n    fontVariant = inferFontVariant(color),\n    round = true,\n    opacity,\n    className\n  } = options;\n  const context = createContext(options);\n  className = maybeClassName(className);\n  opacity = maybeNumberChannel(opacity)[1];\n  if (tickFormat === null) tickFormat = () => null;\n\n  const svg = create(\"svg\", context)\n    .attr(\"class\", `${className}-ramp`)\n    .attr(\"font-family\", \"system-ui, sans-serif\")\n    .attr(\"font-size\", 10)\n    .attr(\"width\", width)\n    .attr(\"height\", height)\n    .attr(\"viewBox\", `0 0 ${width} ${height}`)\n    .call((svg) =>\n      // Warning: if you edit this, change defaultClassName.\n      svg.append(\"style\").text(\n        `.${className}-ramp {\n  display: block;\n  background: white;\n  height: auto;\n  height: intrinsic;\n  max-width: 100%;\n  overflow: visible;\n}\n.${className}-ramp text {\n  white-space: pre;\n}`\n      )\n    )\n    .call(applyInlineStyles, style);\n\n  let tickAdjust = (g) => g.selectAll(\".tick line\").attr(\"y1\", marginTop + marginBottom - height);\n\n  let x;\n\n  // Some D3 scales use scale.interpolate, some scale.interpolator, and some\n  // scale.round; this normalizes the API so it works with all scale types.\n  const applyRange = round ? (x, range) => x.rangeRound(range) : (x, range) => x.range(range);\n\n  const {type, domain, range, interpolate, scale, pivot} = color;\n\n  // Continuous\n  if (interpolate) {\n    // Often interpolate is a \u201Cfixed\u201D interpolator on the [0, 1] interval, as\n    // with a built-in color scheme, but sometimes it is a function that takes\n    // two arguments and is used in conjunction with the range.\n    const interpolator =\n      range === undefined\n        ? interpolate\n        : piecewise(interpolate.length === 1 ? interpolatePiecewise(interpolate) : interpolate, range);\n\n    // Construct a D3 scale of the same type, but with a range that evenly\n    // divides the horizontal extent of the legend. (In the common case, the\n    // domain.length is two, and so the range is simply the extent.) For a\n    // diverging scale, we need an extra point in the range for the pivot such\n    // that the pivot is always drawn in the middle.\n    x = applyRange(\n      scale.copy(),\n      quantize(\n        interpolateNumber(marginLeft, width - marginRight),\n        Math.min(domain.length + (pivot !== undefined), range === undefined ? Infinity : range.length)\n      )\n    );\n\n    // Construct a 256\u00D71 canvas, filling each pixel using the interpolator.\n    const n = 256;\n    const canvas = context.document.createElement(\"canvas\");\n    canvas.width = n;\n    canvas.height = 1;\n    const context2 = canvas.getContext(\"2d\");\n    for (let i = 0, j = n - 1; i < n; ++i) {\n      context2.fillStyle = interpolator(i / j);\n      context2.fillRect(i, 0, 1, 1);\n    }\n\n    svg\n      .append(\"image\")\n      .attr(\"opacity\", opacity)\n      .attr(\"x\", marginLeft)\n      .attr(\"y\", marginTop)\n      .attr(\"width\", width - marginLeft - marginRight)\n      .attr(\"height\", height - marginTop - marginBottom)\n      .attr(\"preserveAspectRatio\", \"none\")\n      .attr(\"xlink:href\", canvas.toDataURL());\n  }\n\n  // Threshold\n  else if (type === \"threshold\") {\n    const thresholds = domain;\n\n    const thresholdFormat =\n      tickFormat === undefined ? (d) => d : typeof tickFormat === \"string\" ? format(tickFormat) : tickFormat;\n\n    // Construct a linear scale with evenly-spaced ticks for each of the\n    // thresholds; the domain extends one beyond the threshold extent.\n    x = applyRange(scaleLinear().domain([-1, range.length - 1]), [marginLeft, width - marginRight]);\n\n    svg\n      .append(\"g\")\n      .attr(\"fill-opacity\", opacity)\n      .selectAll()\n      .data(range)\n      .enter()\n      .append(\"rect\")\n      .attr(\"x\", (d, i) => x(i - 1))\n      .attr(\"y\", marginTop)\n      .attr(\"width\", (d, i) => x(i) - x(i - 1))\n      .attr(\"height\", height - marginTop - marginBottom)\n      .attr(\"fill\", (d) => d);\n\n    ticks = map(thresholds, (_, i) => i);\n    tickFormat = (i) => thresholdFormat(thresholds[i], i);\n  }\n\n  // Ordinal (hopefully!)\n  else {\n    x = applyRange(scaleBand().domain(domain), [marginLeft, width - marginRight]);\n\n    svg\n      .append(\"g\")\n      .attr(\"fill-opacity\", opacity)\n      .selectAll()\n      .data(domain)\n      .enter()\n      .append(\"rect\")\n      .attr(\"x\", x)\n      .attr(\"y\", marginTop)\n      .attr(\"width\", Math.max(0, x.bandwidth() - 1))\n      .attr(\"height\", height - marginTop - marginBottom)\n      .attr(\"fill\", scale);\n\n    tickAdjust = () => {};\n  }\n\n  svg\n    .append(\"g\")\n    .attr(\"transform\", `translate(0,${height - marginBottom})`)\n    .call(\n      axisBottom(x)\n        .ticks(Array.isArray(ticks) ? null : ticks, typeof tickFormat === \"string\" ? tickFormat : undefined)\n        .tickFormat(typeof tickFormat === \"function\" ? tickFormat : undefined)\n        .tickSize(tickSize)\n        .tickValues(Array.isArray(ticks) ? ticks : null)\n    )\n    .attr(\"font-size\", null)\n    .attr(\"font-family\", null)\n    .attr(\"font-variant\", impliedString(fontVariant, \"normal\"))\n    .call(tickAdjust)\n    .call((g) => g.select(\".domain\").remove());\n\n  if (label !== undefined) {\n    svg\n      .append(\"text\")\n      .attr(\"x\", marginLeft)\n      .attr(\"y\", marginTop - 6)\n      .attr(\"fill\", \"currentColor\") // TODO move to stylesheet?\n      .attr(\"font-weight\", \"bold\")\n      .text(label);\n  }\n\n  return svg.node();\n}\n", "export const radians = Math.PI / 180;\n", "import {create} from \"./context.js\";\n\nexport function markers(mark, {marker, markerStart = marker, markerMid = marker, markerEnd = marker} = {}) {\n  mark.markerStart = maybeMarker(markerStart);\n  mark.markerMid = maybeMarker(markerMid);\n  mark.markerEnd = maybeMarker(markerEnd);\n}\n\nfunction maybeMarker(marker) {\n  if (marker == null || marker === false) return null;\n  if (marker === true) return markerCircleFill;\n  if (typeof marker === \"function\") return marker;\n  switch (`${marker}`.toLowerCase()) {\n    case \"none\":\n      return null;\n    case \"arrow\":\n      return markerArrow(\"auto\");\n    case \"arrow-reverse\":\n      return markerArrow(\"auto-start-reverse\");\n    case \"dot\":\n      return markerDot;\n    case \"circle\":\n    case \"circle-fill\":\n      return markerCircleFill;\n    case \"circle-stroke\":\n      return markerCircleStroke;\n  }\n  throw new Error(`invalid marker: ${marker}`);\n}\n\nfunction markerArrow(orient) {\n  return (color, context) =>\n    create(\"svg:marker\", context)\n      .attr(\"viewBox\", \"-5 -5 10 10\")\n      .attr(\"markerWidth\", 6.67)\n      .attr(\"markerHeight\", 6.67)\n      .attr(\"orient\", orient)\n      .attr(\"fill\", \"none\")\n      .attr(\"stroke\", color)\n      .attr(\"stroke-width\", 1.5)\n      .attr(\"stroke-linecap\", \"round\")\n      .attr(\"stroke-linejoin\", \"round\")\n      .call((marker) => marker.append(\"path\").attr(\"d\", \"M-1.5,-3l3,3l-3,3\"))\n      .node();\n}\n\nfunction markerDot(color, context) {\n  return create(\"svg:marker\", context)\n    .attr(\"viewBox\", \"-5 -5 10 10\")\n    .attr(\"markerWidth\", 6.67)\n    .attr(\"markerHeight\", 6.67)\n    .attr(\"fill\", color)\n    .attr(\"stroke\", \"none\")\n    .call((marker) => marker.append(\"circle\").attr(\"r\", 2.5))\n    .node();\n}\n\nfunction markerCircleFill(color, context) {\n  return create(\"svg:marker\", context)\n    .attr(\"viewBox\", \"-5 -5 10 10\")\n    .attr(\"markerWidth\", 6.67)\n    .attr(\"markerHeight\", 6.67)\n    .attr(\"fill\", color)\n    .attr(\"stroke\", \"white\")\n    .attr(\"stroke-width\", 1.5)\n    .call((marker) => marker.append(\"circle\").attr(\"r\", 3))\n    .node();\n}\n\nfunction markerCircleStroke(color, context) {\n  return create(\"svg:marker\", context)\n    .attr(\"viewBox\", \"-5 -5 10 10\")\n    .attr(\"markerWidth\", 6.67)\n    .attr(\"markerHeight\", 6.67)\n    .attr(\"fill\", \"white\")\n    .attr(\"stroke\", color)\n    .attr(\"stroke-width\", 1.5)\n    .call((marker) => marker.append(\"circle\").attr(\"r\", 3))\n    .node();\n}\n\nlet nextMarkerId = 0;\n\nexport function applyMarkers(path, mark, {stroke: S}, context) {\n  return applyMarkersColor(path, mark, S && ((i) => S[i]), context);\n}\n\nexport function applyGroupedMarkers(path, mark, {stroke: S}, context) {\n  return applyMarkersColor(path, mark, S && (([i]) => S[i]), context);\n}\n\nfunction applyMarkersColor(path, {markerStart, markerMid, markerEnd, stroke}, strokeof = () => stroke, context) {\n  const iriByMarkerColor = new Map();\n\n  function applyMarker(marker) {\n    return function (i) {\n      const color = strokeof(i);\n      let iriByColor = iriByMarkerColor.get(marker);\n      if (!iriByColor) iriByMarkerColor.set(marker, (iriByColor = new Map()));\n      let iri = iriByColor.get(color);\n      if (!iri) {\n        const node = this.parentNode.insertBefore(marker(color, context), this);\n        const id = `plot-marker-${++nextMarkerId}`;\n        node.setAttribute(\"id\", id);\n        iriByColor.set(color, (iri = `url(#${id})`));\n      }\n      return iri;\n    };\n  }\n\n  if (markerStart) path.attr(\"marker-start\", applyMarker(markerStart));\n  if (markerMid) path.attr(\"marker-mid\", applyMarker(markerMid));\n  if (markerEnd) path.attr(\"marker-end\", applyMarker(markerEnd));\n}\n", "import {offset} from \"../style.js\";\n\nexport function maybeInsetX({inset, insetLeft, insetRight, ...options} = {}) {\n  [insetLeft, insetRight] = maybeInset(inset, insetLeft, insetRight);\n  return {inset, insetLeft, insetRight, ...options};\n}\n\nexport function maybeInsetY({inset, insetTop, insetBottom, ...options} = {}) {\n  [insetTop, insetBottom] = maybeInset(inset, insetTop, insetBottom);\n  return {inset, insetTop, insetBottom, ...options};\n}\n\nfunction maybeInset(inset, inset1, inset2) {\n  return inset === undefined && inset1 === undefined && inset2 === undefined\n    ? offset\n      ? [1, 0]\n      : [0.5, 0.5]\n    : [inset1, inset2];\n}\n", "import {isTemporal, labelof, map, maybeInterval, maybeValue, valueof} from \"../options.js\";\nimport {maybeInsetX, maybeInsetY} from \"./inset.js\";\n\n// The interval may be specified either as x: {value, interval} or as {x,\n// interval}. The former can be used to specify separate intervals for x and y,\n// for example with Plot.rect.\nfunction maybeIntervalValue(value, {interval}) {\n  value = {...maybeValue(value)};\n  value.interval = maybeInterval(value.interval === undefined ? interval : value.interval);\n  return value;\n}\n\nfunction maybeIntervalK(k, maybeInsetK, options, trivial) {\n  const {[k]: v, [`${k}1`]: v1, [`${k}2`]: v2} = options;\n  const {value, interval} = maybeIntervalValue(v, options);\n  if (value == null || (interval == null && !trivial)) return options;\n  const label = labelof(v);\n  if (interval == null) {\n    let V;\n    const kv = {transform: (data) => V || (V = valueof(data, value)), label};\n    return {\n      ...options,\n      [k]: undefined,\n      [`${k}1`]: v1 === undefined ? kv : v1,\n      [`${k}2`]: v2 === undefined ? kv : v2\n    };\n  }\n  let D1, V1;\n  function transform(data) {\n    if (V1 !== undefined && data === D1) return V1; // memoize\n    return (V1 = map(valueof((D1 = data), value), (v) => interval.floor(v)));\n  }\n  return maybeInsetK({\n    ...options,\n    [k]: undefined,\n    [`${k}1`]: v1 === undefined ? {transform, label} : v1,\n    [`${k}2`]: v2 === undefined ? {transform: (data) => transform(data).map((v) => interval.offset(v)), label} : v2\n  });\n}\n\nfunction maybeIntervalMidK(k, maybeInsetK, options) {\n  const {[k]: v} = options;\n  const {value, interval} = maybeIntervalValue(v, options);\n  if (value == null || interval == null) return options;\n  return maybeInsetK({\n    ...options,\n    [k]: {\n      label: labelof(v),\n      transform: (data) => {\n        const V1 = map(valueof(data, value), (v) => interval.floor(v));\n        const V2 = V1.map((v) => interval.offset(v));\n        return V1.map(\n          isTemporal(V1)\n            ? (v1, v2) =>\n                v1 == null || isNaN((v1 = +v1)) || ((v2 = V2[v2]), v2 == null) || isNaN((v2 = +v2))\n                  ? undefined\n                  : new Date((v1 + v2) / 2)\n            : (v1, v2) => (v1 == null || ((v2 = V2[v2]), v2 == null) ? NaN : (+v1 + +v2) / 2)\n        );\n      }\n    }\n  });\n}\n\nexport function maybeTrivialIntervalX(options = {}) {\n  return maybeIntervalK(\"x\", maybeInsetX, options, true);\n}\n\nexport function maybeTrivialIntervalY(options = {}) {\n  return maybeIntervalK(\"y\", maybeInsetY, options, true);\n}\n\nexport function maybeIntervalX(options = {}) {\n  return maybeIntervalK(\"x\", maybeInsetX, options);\n}\n\nexport function maybeIntervalY(options = {}) {\n  return maybeIntervalK(\"y\", maybeInsetY, options);\n}\n\nexport function maybeIntervalMidX(options = {}) {\n  return maybeIntervalMidK(\"x\", maybeInsetX, options);\n}\n\nexport function maybeIntervalMidY(options = {}) {\n  return maybeIntervalMidK(\"y\", maybeInsetY, options);\n}\n", "import {create} from \"../context.js\";\nimport {Mark, withTip} from \"../mark.js\";\nimport {applyMarkers, markers} from \"../marker.js\";\nimport {identity, number} from \"../options.js\";\nimport {isCollapsed} from \"../scales.js\";\nimport {applyChannelStyles, applyDirectStyles, applyIndirectStyles, applyTransform, offset} from \"../style.js\";\nimport {maybeIntervalX, maybeIntervalY} from \"../transforms/interval.js\";\n\nconst defaults = {\n  ariaLabel: \"rule\",\n  fill: null,\n  stroke: \"currentColor\"\n};\n\nexport class RuleX extends Mark {\n  constructor(data, options = {}) {\n    const {x, y1, y2, inset = 0, insetTop = inset, insetBottom = inset} = options;\n    super(\n      data,\n      {\n        x: {value: x, scale: \"x\", optional: true},\n        y1: {value: y1, scale: \"y\", optional: true},\n        y2: {value: y2, scale: \"y\", optional: true}\n      },\n      withTip(options, \"x\"),\n      defaults\n    );\n    this.insetTop = number(insetTop);\n    this.insetBottom = number(insetBottom);\n    markers(this, options);\n  }\n  render(index, scales, channels, dimensions, context) {\n    const {x, y} = scales;\n    const {x: X, y1: Y1, y2: Y2} = channels;\n    const {width, height, marginTop, marginRight, marginLeft, marginBottom} = dimensions;\n    const {insetTop, insetBottom} = this;\n    return create(\"svg:g\", context)\n      .call(applyIndirectStyles, this, dimensions, context)\n      .call(applyTransform, this, {x: X && x}, offset, 0)\n      .call((g) =>\n        g\n          .selectAll()\n          .data(index)\n          .enter()\n          .append(\"line\")\n          .call(applyDirectStyles, this)\n          .attr(\"x1\", X ? (i) => X[i] : (marginLeft + width - marginRight) / 2)\n          .attr(\"x2\", X ? (i) => X[i] : (marginLeft + width - marginRight) / 2)\n          .attr(\"y1\", Y1 && !isCollapsed(y) ? (i) => Y1[i] + insetTop : marginTop + insetTop)\n          .attr(\n            \"y2\",\n            Y2 && !isCollapsed(y)\n              ? y.bandwidth\n                ? (i) => Y2[i] + y.bandwidth() - insetBottom\n                : (i) => Y2[i] - insetBottom\n              : height - marginBottom - insetBottom\n          )\n          .call(applyChannelStyles, this, channels)\n          .call(applyMarkers, this, channels, context)\n      )\n      .node();\n  }\n}\n\nexport class RuleY extends Mark {\n  constructor(data, options = {}) {\n    const {x1, x2, y, inset = 0, insetRight = inset, insetLeft = inset} = options;\n    super(\n      data,\n      {\n        y: {value: y, scale: \"y\", optional: true},\n        x1: {value: x1, scale: \"x\", optional: true},\n        x2: {value: x2, scale: \"x\", optional: true}\n      },\n      withTip(options, \"y\"),\n      defaults\n    );\n    this.insetRight = number(insetRight);\n    this.insetLeft = number(insetLeft);\n    markers(this, options);\n  }\n  render(index, scales, channels, dimensions, context) {\n    const {x, y} = scales;\n    const {y: Y, x1: X1, x2: X2} = channels;\n    const {width, height, marginTop, marginRight, marginLeft, marginBottom} = dimensions;\n    const {insetLeft, insetRight} = this;\n    return create(\"svg:g\", context)\n      .call(applyIndirectStyles, this, dimensions, context)\n      .call(applyTransform, this, {y: Y && y}, 0, offset)\n      .call((g) =>\n        g\n          .selectAll()\n          .data(index)\n          .enter()\n          .append(\"line\")\n          .call(applyDirectStyles, this)\n          .attr(\"x1\", X1 && !isCollapsed(x) ? (i) => X1[i] + insetLeft : marginLeft + insetLeft)\n          .attr(\n            \"x2\",\n            X2 && !isCollapsed(x)\n              ? x.bandwidth\n                ? (i) => X2[i] + x.bandwidth() - insetRight\n                : (i) => X2[i] - insetRight\n              : width - marginRight - insetRight\n          )\n          .attr(\"y1\", Y ? (i) => Y[i] : (marginTop + height - marginBottom) / 2)\n          .attr(\"y2\", Y ? (i) => Y[i] : (marginTop + height - marginBottom) / 2)\n          .call(applyChannelStyles, this, channels)\n          .call(applyMarkers, this, channels, context)\n      )\n      .node();\n  }\n}\n\nexport function ruleX(data, options) {\n  let {x = identity, y, y1, y2, ...rest} = maybeIntervalY(options);\n  [y1, y2] = maybeOptionalZero(y, y1, y2);\n  return new RuleX(data, {...rest, x, y1, y2});\n}\n\nexport function ruleY(data, options) {\n  let {y = identity, x, x1, x2, ...rest} = maybeIntervalX(options);\n  [x1, x2] = maybeOptionalZero(x, x1, x2);\n  return new RuleY(data, {...rest, y, x1, x2});\n}\n\n// For marks specified either as [0, x] or [x1, x2], or nothing.\nfunction maybeOptionalZero(x, x1, x2) {\n  if (x == null) {\n    if (x1 === undefined) {\n      if (x2 !== undefined) return [0, x2];\n    } else {\n      if (x2 === undefined) return [0, x1];\n    }\n  } else if (x1 === undefined) {\n    return x2 === undefined ? [0, x] : [x, x2];\n  } else if (x2 === undefined) {\n    return [x, x1];\n  }\n  return [x1, x2];\n}\n", "export function template(strings, ...parts) {\n  let n = parts.length;\n\n  // If any of the interpolated parameters are strings rather than functions,\n  // bake them into the template to optimize performance during render.\n  for (let j = 0, copy = true; j < n; ++j) {\n    if (typeof parts[j] !== \"function\") {\n      if (copy) {\n        strings = strings.slice(); // copy before mutate\n        copy = false;\n      }\n      strings.splice(j, 2, strings[j] + parts[j] + strings[j + 1]);\n      parts.splice(j, 1);\n      --j, --n;\n    }\n  }\n\n  return (i) => {\n    let s = strings[0];\n    for (let j = 0; j < n; ++j) {\n      s += parts[j](i) + strings[j + 1];\n    }\n    return s;\n  };\n}\n", "import {namespaces} from \"d3\";\nimport {create} from \"../context.js\";\nimport {nonempty} from \"../defined.js\";\nimport {formatDefault} from \"../format.js\";\nimport {Mark} from \"../mark.js\";\nimport {\n  indexOf,\n  identity,\n  string,\n  maybeNumberChannel,\n  maybeTuple,\n  numberChannel,\n  isNumeric,\n  isTemporal,\n  keyword,\n  maybeFrameAnchor,\n  isTextual,\n  isIterable\n} from \"../options.js\";\nimport {\n  applyChannelStyles,\n  applyDirectStyles,\n  applyIndirectStyles,\n  applyAttr,\n  applyTransform,\n  impliedString,\n  applyFrameAnchor\n} from \"../style.js\";\nimport {template} from \"../template.js\";\nimport {maybeIntervalMidX, maybeIntervalMidY} from \"../transforms/interval.js\";\n\nconst defaults = {\n  ariaLabel: \"text\",\n  strokeLinejoin: \"round\",\n  strokeWidth: 3,\n  paintOrder: \"stroke\"\n};\n\nconst softHyphen = \"\\u00ad\";\n\nexport class Text extends Mark {\n  constructor(data, options = {}) {\n    const {\n      x,\n      y,\n      text = isIterable(data) && isTextual(data) ? identity : indexOf,\n      frameAnchor,\n      textAnchor = /right$/i.test(frameAnchor) ? \"end\" : /left$/i.test(frameAnchor) ? \"start\" : \"middle\",\n      lineAnchor = /^top/i.test(frameAnchor) ? \"top\" : /^bottom/i.test(frameAnchor) ? \"bottom\" : \"middle\",\n      lineHeight = 1,\n      lineWidth = Infinity,\n      textOverflow,\n      monospace,\n      fontFamily = monospace ? \"ui-monospace, monospace\" : undefined,\n      fontSize,\n      fontStyle,\n      fontVariant,\n      fontWeight,\n      rotate\n    } = options;\n    const [vrotate, crotate] = maybeNumberChannel(rotate, 0);\n    const [vfontSize, cfontSize] = maybeFontSizeChannel(fontSize);\n    super(\n      data,\n      {\n        x: {value: x, scale: \"x\", optional: true},\n        y: {value: y, scale: \"y\", optional: true},\n        fontSize: {value: vfontSize, optional: true},\n        rotate: {value: numberChannel(vrotate), optional: true},\n        text: {value: text, filter: nonempty, optional: true}\n      },\n      options,\n      defaults\n    );\n    this.rotate = crotate;\n    this.textAnchor = impliedString(textAnchor, \"middle\");\n    this.lineAnchor = keyword(lineAnchor, \"lineAnchor\", [\"top\", \"middle\", \"bottom\"]);\n    this.lineHeight = +lineHeight;\n    this.lineWidth = +lineWidth;\n    this.textOverflow = maybeTextOverflow(textOverflow);\n    this.monospace = !!monospace;\n    this.fontFamily = string(fontFamily);\n    this.fontSize = cfontSize;\n    this.fontStyle = string(fontStyle);\n    this.fontVariant = string(fontVariant);\n    this.fontWeight = string(fontWeight);\n    this.frameAnchor = maybeFrameAnchor(frameAnchor);\n    if (!(this.lineWidth >= 0)) throw new Error(`invalid lineWidth: ${lineWidth}`);\n    this.splitLines = splitter(this);\n    this.clipLine = clipper(this);\n  }\n  render(index, scales, channels, dimensions, context) {\n    const {x, y} = scales;\n    const {x: X, y: Y, rotate: R, text: T, title: TL, fontSize: FS} = channels;\n    const {rotate} = this;\n    const [cx, cy] = applyFrameAnchor(this, dimensions);\n    return create(\"svg:g\", context)\n      .call(applyIndirectStyles, this, dimensions, context)\n      .call(applyIndirectTextStyles, this, T, dimensions)\n      .call(applyTransform, this, {x: X && x, y: Y && y})\n      .call((g) =>\n        g\n          .selectAll()\n          .data(index)\n          .enter()\n          .append(\"text\")\n          .call(applyDirectStyles, this)\n          .call(applyMultilineText, this, T, TL)\n          .attr(\n            \"transform\",\n            template`translate(${X ? (i) => X[i] : cx},${Y ? (i) => Y[i] : cy})${\n              R ? (i) => ` rotate(${R[i]})` : rotate ? ` rotate(${rotate})` : ``\n            }`\n          )\n          .call(applyAttr, \"font-size\", FS && ((i) => FS[i]))\n          .call(applyChannelStyles, this, channels)\n      )\n      .node();\n  }\n}\n\nexport function maybeTextOverflow(textOverflow) {\n  return textOverflow == null\n    ? null\n    : keyword(textOverflow, \"textOverflow\", [\n        \"clip\", // shorthand for clip-end\n        \"ellipsis\", // \u2026 ellipsis-end\n        \"clip-start\",\n        \"clip-end\",\n        \"ellipsis-start\",\n        \"ellipsis-middle\",\n        \"ellipsis-end\"\n      ]).replace(/^(clip|ellipsis)$/, \"$1-end\");\n}\n\nfunction applyMultilineText(selection, mark, T, TL) {\n  if (!T) return;\n  const {lineAnchor, lineHeight, textOverflow, splitLines, clipLine} = mark;\n  selection.each(function (i) {\n    const lines = splitLines(formatDefault(T[i]) ?? \"\").map(clipLine);\n    const n = lines.length;\n    const y = lineAnchor === \"top\" ? 0.71 : lineAnchor === \"bottom\" ? 1 - n : (164 - n * 100) / 200;\n    if (n > 1) {\n      let m = 0;\n      for (let i = 0; i < n; ++i) {\n        ++m;\n        if (!lines[i]) continue;\n        const tspan = this.ownerDocument.createElementNS(namespaces.svg, \"tspan\");\n        tspan.setAttribute(\"x\", 0);\n        if (i === m - 1) tspan.setAttribute(\"y\", `${(y + i) * lineHeight}em`);\n        else tspan.setAttribute(\"dy\", `${m * lineHeight}em`);\n        tspan.textContent = lines[i];\n        this.appendChild(tspan);\n        m = 0;\n      }\n    } else {\n      if (y) this.setAttribute(\"y\", `${y * lineHeight}em`);\n      this.textContent = lines[0];\n    }\n    if (textOverflow && !TL && lines[0] !== T[i]) {\n      const title = this.ownerDocument.createElementNS(namespaces.svg, \"title\");\n      title.textContent = T[i];\n      this.appendChild(title);\n    }\n  });\n}\n\nexport function text(data, {x, y, ...options} = {}) {\n  if (options.frameAnchor === undefined) [x, y] = maybeTuple(x, y);\n  return new Text(data, {...options, x, y});\n}\n\nexport function textX(data, {x = identity, ...options} = {}) {\n  return new Text(data, maybeIntervalMidY({...options, x}));\n}\n\nexport function textY(data, {y = identity, ...options} = {}) {\n  return new Text(data, maybeIntervalMidX({...options, y}));\n}\n\nexport function applyIndirectTextStyles(selection, mark, T) {\n  applyAttr(selection, \"text-anchor\", mark.textAnchor);\n  applyAttr(selection, \"font-family\", mark.fontFamily);\n  applyAttr(selection, \"font-size\", mark.fontSize);\n  applyAttr(selection, \"font-style\", mark.fontStyle);\n  applyAttr(selection, \"font-variant\", mark.fontVariant === undefined ? inferFontVariant(T) : mark.fontVariant);\n  applyAttr(selection, \"font-weight\", mark.fontWeight);\n}\n\nfunction inferFontVariant(T) {\n  return T && (isNumeric(T) || isTemporal(T)) ? \"tabular-nums\" : undefined;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/font-size\nconst fontSizes = new Set([\n  // global keywords\n  \"inherit\",\n  \"initial\",\n  \"revert\",\n  \"unset\",\n  // absolute keywords\n  \"xx-small\",\n  \"x-small\",\n  \"small\",\n  \"medium\",\n  \"large\",\n  \"x-large\",\n  \"xx-large\",\n  \"xxx-large\",\n  // relative keywords\n  \"larger\",\n  \"smaller\"\n]);\n\n// The font size may be expressed as a constant in the following forms:\n// - number in pixels\n// - string keyword: see above\n// - string <length>: e.g., \"12px\"\n// - string <percentage>: e.g., \"80%\"\n// Anything else is assumed to be a channel definition.\nfunction maybeFontSizeChannel(fontSize) {\n  if (fontSize == null || typeof fontSize === \"number\") return [undefined, fontSize];\n  if (typeof fontSize !== \"string\") return [fontSize, undefined];\n  fontSize = fontSize.trim().toLowerCase();\n  return fontSizes.has(fontSize) || /^[+-]?\\d*\\.?\\d+(e[+-]?\\d+)?(\\w*|%)$/.test(fontSize)\n    ? [undefined, fontSize]\n    : [fontSize, undefined];\n}\n\n// This is a greedy algorithm for line wrapping. It would be better to use the\n// Knuth\u2013Plass line breaking algorithm (but that would be much more complex).\n// https://en.wikipedia.org/wiki/Line_wrap_and_word_wrap\nfunction lineWrap(input, maxWidth, widthof) {\n  const lines = [];\n  let lineStart,\n    lineEnd = 0;\n  for (const [wordStart, wordEnd, required] of lineBreaks(input)) {\n    // Record the start of a line. This isn\u2019t the same as the previous line\u2019s\n    // end because we often skip spaces between lines.\n    if (lineStart === undefined) lineStart = wordStart;\n\n    // If the current line is not empty, and if adding the current word would\n    // make the line longer than the allowed width, then break the line at the\n    // previous word end.\n    if (lineEnd > lineStart && widthof(input, lineStart, wordEnd) > maxWidth) {\n      lines.push(input.slice(lineStart, lineEnd) + (input[lineEnd - 1] === softHyphen ? \"-\" : \"\"));\n      lineStart = wordStart;\n    }\n\n    // If this is a required break (a newline), emit the line and reset.\n    if (required) {\n      lines.push(input.slice(lineStart, wordEnd));\n      lineStart = undefined;\n      continue;\n    }\n\n    // Extend the current line to include the new word.\n    lineEnd = wordEnd;\n  }\n  return lines;\n}\n\n// This is a rudimentary (and U.S.-centric) algorithm for finding opportunities\n// to break lines between words. A better and far more comprehensive approach\n// would be to use the official Unicode Line Breaking Algorithm.\n// https://unicode.org/reports/tr14/\nfunction* lineBreaks(input) {\n  let i = 0,\n    j = 0;\n  const n = input.length;\n  while (j < n) {\n    let k = 1;\n    switch (input[j]) {\n      case softHyphen:\n      case \"-\": // hyphen\n        ++j;\n        yield [i, j, false];\n        i = j;\n        break;\n      case \" \":\n        yield [i, j, false];\n        while (input[++j] === \" \"); // skip multiple spaces\n        i = j;\n        break;\n      case \"\\r\":\n        if (input[j + 1] === \"\\n\") ++k; // falls through\n      case \"\\n\":\n        yield [i, j, true];\n        j += k;\n        i = j;\n        break;\n      default:\n        ++j;\n        break;\n    }\n  }\n  yield [i, j, true];\n}\n\n// Computed as round(measureText(text).width * 10) at 10px system-ui. For\n// characters that are not represented in this map, we\u2019d ideally want to use a\n// weighted average of what we expect to see. But since we don\u2019t really know\n// what that is, using \u201Ce\u201D seems reasonable.\nconst defaultWidthMap = {\n  a: 56,\n  b: 63,\n  c: 57,\n  d: 63,\n  e: 58,\n  f: 37,\n  g: 62,\n  h: 60,\n  i: 26,\n  j: 26,\n  k: 55,\n  l: 26,\n  m: 88,\n  n: 60,\n  o: 60,\n  p: 62,\n  q: 62,\n  r: 39,\n  s: 54,\n  t: 38,\n  u: 60,\n  v: 55,\n  w: 79,\n  x: 54,\n  y: 55,\n  z: 55,\n  A: 69,\n  B: 67,\n  C: 73,\n  D: 74,\n  E: 61,\n  F: 58,\n  G: 76,\n  H: 75,\n  I: 28,\n  J: 55,\n  K: 67,\n  L: 58,\n  M: 89,\n  N: 75,\n  O: 78,\n  P: 65,\n  Q: 78,\n  R: 67,\n  S: 65,\n  T: 65,\n  U: 75,\n  V: 69,\n  W: 98,\n  X: 69,\n  Y: 67,\n  Z: 67,\n  0: 64,\n  1: 48,\n  2: 62,\n  3: 64,\n  4: 66,\n  5: 63,\n  6: 65,\n  7: 58,\n  8: 65,\n  9: 65,\n  \" \": 29,\n  \"!\": 32,\n  '\"': 49,\n  \"'\": 31,\n  \"(\": 39,\n  \")\": 39,\n  \",\": 31,\n  \"-\": 48,\n  \".\": 31,\n  \"/\": 32,\n  \":\": 31,\n  \";\": 31,\n  \"?\": 52,\n  \"\u2018\": 31,\n  \"\u2019\": 31,\n  \"\u201C\": 47,\n  \"\u201D\": 47,\n  \"\u2026\": 82\n};\n\n// This is a rudimentary (and U.S.-centric) algorithm for measuring the width of\n// a string based on a technique of Gregor Aisch; it assumes that individual\n// characters are laid out independently and does not implement the Unicode\n// grapheme cluster breaking algorithm. It does understand code points, though,\n// and so treats things like emoji as having the width of a lowercase e (and\n// should be equivalent to using for-of to iterate over code points, while also\n// being fast). TODO Optimize this by noting that we often re-measure characters\n// that were previously measured?\n// http://www.unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries\n// https://exploringjs.com/impatient-js/ch_strings.html#atoms-of-text\nexport function defaultWidth(text, start = 0, end = text.length) {\n  let sum = 0;\n  for (let i = start; i < end; i = readCharacter(text, i)) {\n    sum += defaultWidthMap[text[i]] ?? (isPictographic(text, i) ? 120 : defaultWidthMap.e);\n  }\n  return sum;\n}\n\n// Even for monospaced text, we can\u2019t assume that the number of UTF-16 code\n// points (i.e., the length of a string) corresponds to the number of visible\n// characters; we still have to count graphemes. And note that pictographic\n// characters such as emojis are typically not monospaced!\nexport function monospaceWidth(text, start = 0, end = text.length) {\n  let sum = 0;\n  for (let i = start; i < end; i = readCharacter(text, i)) {\n    sum += isPictographic(text, i) ? 200 : 100;\n  }\n  return sum;\n}\n\nexport function splitter({monospace, lineWidth, textOverflow}) {\n  if (textOverflow != null || lineWidth == Infinity) return (text) => text.split(/\\r\\n?|\\n/g);\n  const widthof = monospace ? monospaceWidth : defaultWidth;\n  const maxWidth = lineWidth * 100;\n  return (text) => lineWrap(text, maxWidth, widthof);\n}\n\nexport function clipper({monospace, lineWidth, textOverflow}) {\n  if (textOverflow == null || lineWidth == Infinity) return (text) => text;\n  const widthof = monospace ? monospaceWidth : defaultWidth;\n  const maxWidth = lineWidth * 100;\n  switch (textOverflow) {\n    case \"clip-start\":\n      return (text) => clipStart(text, maxWidth, widthof, \"\");\n    case \"clip-end\":\n      return (text) => clipEnd(text, maxWidth, widthof, \"\");\n    case \"ellipsis-start\":\n      return (text) => clipStart(text, maxWidth, widthof, ellipsis);\n    case \"ellipsis-middle\":\n      return (text) => clipMiddle(text, maxWidth, widthof, ellipsis);\n    case \"ellipsis-end\":\n      return (text) => clipEnd(text, maxWidth, widthof, ellipsis);\n  }\n}\n\nexport const ellipsis = \"\u2026\";\n\n// Cuts the given text to the given width, using the specified widthof function;\n// the returned [index, error] guarantees text.slice(0, index) fits within the\n// specified width with the given error. If the text fits naturally within the\n// given width, returns [-1, 0]. If the text needs cutting, the given inset\n// specifies how much space (in the same units as width and widthof) to reserve\n// for a possible ellipsis character.\nexport function cut(text, width, widthof, inset) {\n  const I = []; // indexes of read character boundaries\n  let w = 0; // current line width\n  for (let i = 0, j = 0, n = text.length; i < n; i = j) {\n    j = readCharacter(text, i); // read the next character\n    const l = widthof(text, i, j); // current character width\n    if (w + l > width) {\n      w += inset;\n      while (w > width && i > 0) (j = i), (i = I.pop()), (w -= widthof(text, i, j)); // remove excess\n      return [i, width - w];\n    }\n    w += l;\n    I.push(i);\n  }\n  return [-1, 0];\n}\n\nexport function clipEnd(text, width, widthof, ellipsis) {\n  text = text.trim(); // ignore leading and trailing whitespace\n  const e = widthof(ellipsis);\n  const [i] = cut(text, width, widthof, e);\n  return i < 0 ? text : text.slice(0, i).trimEnd() + ellipsis;\n}\n\nexport function clipMiddle(text, width, widthof, ellipsis) {\n  text = text.trim(); // ignore leading and trailing whitespace\n  const w = widthof(text);\n  if (w <= width) return text;\n  const e = widthof(ellipsis) / 2;\n  const [i, ei] = cut(text, width / 2, widthof, e);\n  const [j] = cut(text, w - width / 2 - ei + e, widthof, -e); // TODO read spaces?\n  return j < 0 ? ellipsis : text.slice(0, i).trimEnd() + ellipsis + text.slice(readCharacter(text, j)).trimStart();\n}\n\nexport function clipStart(text, width, widthof, ellipsis) {\n  text = text.trim(); // ignore leading and trailing whitespace\n  const w = widthof(text);\n  if (w <= width) return text;\n  const e = widthof(ellipsis);\n  const [j] = cut(text, w - width + e, widthof, -e); // TODO read spaces?\n  return j < 0 ? ellipsis : ellipsis + text.slice(readCharacter(text, j)).trimStart();\n}\n\nconst reCombiner = /[\\p{Combining_Mark}\\p{Emoji_Modifier}]+/uy;\nconst rePictographic = /\\p{Extended_Pictographic}/uy;\n\n// Reads a single \u201Ccharacter\u201D element from the given text starting at the given\n// index, returning the index after the read character. Ideally, this implements\n// the Unicode text segmentation algorithm and understands grapheme cluster\n// boundaries, etc., but in practice this is only smart enough to detect UTF-16\n// surrogate pairs, combining marks, and zero-width joiner (zwj) sequences such\n// as emoji skin color modifiers. https://unicode.org/reports/tr29/\nexport function readCharacter(text, i) {\n  i += isSurrogatePair(text, i) ? 2 : 1;\n  if (isCombiner(text, i)) i = reCombiner.lastIndex;\n  if (isZeroWidthJoiner(text, i)) return readCharacter(text, i + 1);\n  return i;\n}\n\n// We avoid more expensive regex tests involving Unicode property classes by\n// first checking for the common case of 7-bit ASCII characters.\nfunction isAscii(text, i) {\n  return text.charCodeAt(i) < 0x80;\n}\n\nfunction isSurrogatePair(text, i) {\n  const hi = text.charCodeAt(i);\n  if (hi >= 0xd800 && hi < 0xdc00) {\n    const lo = text.charCodeAt(i + 1);\n    return lo >= 0xdc00 && lo < 0xe000;\n  }\n  return false;\n}\n\nfunction isZeroWidthJoiner(text, i) {\n  return text.charCodeAt(i) === 0x200d;\n}\n\nfunction isCombiner(text, i) {\n  return isAscii(text, i) ? false : ((reCombiner.lastIndex = i), reCombiner.test(text));\n}\n\nfunction isPictographic(text, i) {\n  return isAscii(text, i) ? false : ((rePictographic.lastIndex = i), rePictographic.test(text));\n}\n", "import {pathRound as path} from \"d3\";\nimport {create} from \"../context.js\";\nimport {Mark} from \"../mark.js\";\nimport {maybeFrameAnchor, maybeNumberChannel, maybeTuple, keyword, identity} from \"../options.js\";\nimport {\n  applyChannelStyles,\n  applyDirectStyles,\n  applyFrameAnchor,\n  applyIndirectStyles,\n  applyTransform\n} from \"../style.js\";\nimport {template} from \"../template.js\";\n\nconst defaults = {\n  ariaLabel: \"vector\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  strokeWidth: 1.5,\n  strokeLinejoin: \"round\",\n  strokeLinecap: \"round\"\n};\n\nconst defaultRadius = 3.5;\n\n// The size of the arrowhead is proportional to its length, but we still allow\n// the relative size of the head to be controlled via the mark\u2019s width option;\n// doubling the default radius will produce an arrowhead that is twice as big.\n// That said, we\u2019ll probably want a arrow with a fixed head size, too.\nconst wingRatio = defaultRadius * 5;\n\nconst shapeArrow = {\n  draw(context, l, r) {\n    const wing = (l * r) / wingRatio;\n    context.moveTo(0, 0);\n    context.lineTo(0, -l);\n    context.moveTo(-wing, wing - l);\n    context.lineTo(0, -l);\n    context.lineTo(wing, wing - l);\n  }\n};\n\nconst shapeSpike = {\n  draw(context, l, r) {\n    context.moveTo(-r, 0);\n    context.lineTo(0, -l);\n    context.lineTo(r, 0);\n  }\n};\n\nconst shapes = new Map([\n  [\"arrow\", shapeArrow],\n  [\"spike\", shapeSpike]\n]);\n\nfunction isShapeObject(value) {\n  return value && typeof value.draw === \"function\";\n}\n\nfunction maybeShape(shape) {\n  if (isShapeObject(shape)) return shape;\n  const value = shapes.get(`${shape}`.toLowerCase());\n  if (value) return value;\n  throw new Error(`invalid shape: ${shape}`);\n}\n\nexport class Vector extends Mark {\n  constructor(data, options = {}) {\n    const {x, y, r = defaultRadius, length, rotate, shape = shapeArrow, anchor = \"middle\", frameAnchor} = options;\n    const [vl, cl] = maybeNumberChannel(length, 12);\n    const [vr, cr] = maybeNumberChannel(rotate, 0);\n    super(\n      data,\n      {\n        x: {value: x, scale: \"x\", optional: true},\n        y: {value: y, scale: \"y\", optional: true},\n        length: {value: vl, scale: \"length\", optional: true},\n        rotate: {value: vr, optional: true}\n      },\n      options,\n      defaults\n    );\n    this.r = +r;\n    this.length = cl;\n    this.rotate = cr;\n    this.shape = maybeShape(shape);\n    this.anchor = keyword(anchor, \"anchor\", [\"start\", \"middle\", \"end\"]);\n    this.frameAnchor = maybeFrameAnchor(frameAnchor);\n  }\n  render(index, scales, channels, dimensions, context) {\n    const {x, y} = scales;\n    const {x: X, y: Y, length: L, rotate: A} = channels;\n    const {length, rotate, anchor, shape, r} = this;\n    const [cx, cy] = applyFrameAnchor(this, dimensions);\n    return create(\"svg:g\", context)\n      .call(applyIndirectStyles, this, dimensions, context)\n      .call(applyTransform, this, {x: X && x, y: Y && y})\n      .call((g) =>\n        g\n          .selectAll()\n          .data(index)\n          .enter()\n          .append(\"path\")\n          .call(applyDirectStyles, this)\n          .attr(\n            \"transform\",\n            template`translate(${X ? (i) => X[i] : cx},${Y ? (i) => Y[i] : cy})${\n              A ? (i) => ` rotate(${A[i]})` : rotate ? ` rotate(${rotate})` : ``\n            }${\n              anchor === \"start\"\n                ? ``\n                : anchor === \"end\"\n                ? L\n                  ? (i) => ` translate(0,${L[i]})`\n                  : ` translate(0,${length})`\n                : L\n                ? (i) => ` translate(0,${L[i] / 2})`\n                : ` translate(0,${length / 2})`\n            }`\n          )\n          .attr(\n            \"d\",\n            L\n              ? (i) => {\n                  const p = path();\n                  shape.draw(p, L[i], r);\n                  return p;\n                }\n              : (() => {\n                  const p = path();\n                  shape.draw(p, length, r);\n                  return p;\n                })()\n          )\n          .call(applyChannelStyles, this, channels)\n      )\n      .node();\n  }\n}\n\nexport function vector(data, options = {}) {\n  let {x, y, ...rest} = options;\n  if (options.frameAnchor === undefined) [x, y] = maybeTuple(x, y);\n  return new Vector(data, {...rest, x, y});\n}\n\nexport function vectorX(data, options = {}) {\n  const {x = identity, ...rest} = options;\n  return new Vector(data, {...rest, x});\n}\n\nexport function vectorY(data, options = {}) {\n  const {y = identity, ...rest} = options;\n  return new Vector(data, {...rest, y});\n}\n\nexport function spike(data, options = {}) {\n  const {\n    shape = shapeSpike,\n    stroke = defaults.stroke,\n    strokeWidth = 1,\n    fill = stroke,\n    fillOpacity = 0.3,\n    anchor = \"start\",\n    ...rest\n  } = options;\n  return vector(data, {...rest, shape, stroke, strokeWidth, fill, fillOpacity, anchor});\n}\n", "import {extent, format, timeFormat, utcFormat} from \"d3\";\nimport {formatDefault} from \"../format.js\";\nimport {marks} from \"../mark.js\";\nimport {radians} from \"../math.js\";\nimport {arrayify, constant, identity, keyword, number, range, valueof} from \"../options.js\";\nimport {isIterable, isNoneish, isTemporal, orderof} from \"../options.js\";\nimport {maybeColorChannel, maybeNumberChannel, maybeRangeInterval} from \"../options.js\";\nimport {isTemporalScale} from \"../scales.js\";\nimport {offset} from \"../style.js\";\nimport {formatTimeTicks, isTimeYear, isUtcYear} from \"../time.js\";\nimport {initializer} from \"../transforms/basic.js\";\nimport {ruleX, ruleY} from \"./rule.js\";\nimport {text, textX, textY} from \"./text.js\";\nimport {vectorX, vectorY} from \"./vector.js\";\n\nfunction maybeData(data, options) {\n  if (arguments.length < 2 && !isIterable(data)) (options = data), (data = null);\n  if (options === undefined) options = {};\n  return [data, options];\n}\n\nfunction maybeAnchor({anchor} = {}, anchors) {\n  return anchor === undefined ? anchors[0] : keyword(anchor, \"anchor\", anchors);\n}\n\nfunction anchorY(options) {\n  return maybeAnchor(options, [\"left\", \"right\"]);\n}\n\nfunction anchorFy(options) {\n  return maybeAnchor(options, [\"right\", \"left\"]);\n}\n\nfunction anchorX(options) {\n  return maybeAnchor(options, [\"bottom\", \"top\"]);\n}\n\nfunction anchorFx(options) {\n  return maybeAnchor(options, [\"top\", \"bottom\"]);\n}\n\nexport function axisY() {\n  const [data, options] = maybeData(...arguments);\n  return axisKy(\"y\", anchorY(options), data, options);\n}\n\nexport function axisFy() {\n  const [data, options] = maybeData(...arguments);\n  return axisKy(\"fy\", anchorFy(options), data, options);\n}\n\nexport function axisX() {\n  const [data, options] = maybeData(...arguments);\n  return axisKx(\"x\", anchorX(options), data, options);\n}\n\nexport function axisFx() {\n  const [data, options] = maybeData(...arguments);\n  return axisKx(\"fx\", anchorFx(options), data, options);\n}\n\nfunction axisKy(\n  k,\n  anchor,\n  data,\n  {\n    color = \"currentColor\",\n    opacity = 1,\n    stroke = color,\n    strokeOpacity = opacity,\n    strokeWidth = 1,\n    fill = color,\n    fillOpacity = opacity,\n    textAnchor,\n    textStroke,\n    textStrokeOpacity,\n    textStrokeWidth,\n    tickSize = k === \"y\" ? 6 : 0,\n    tickPadding,\n    tickRotate,\n    x,\n    margin,\n    marginTop = margin === undefined ? 20 : margin,\n    marginRight = margin === undefined ? (anchor === \"right\" ? 40 : 0) : margin,\n    marginBottom = margin === undefined ? 20 : margin,\n    marginLeft = margin === undefined ? (anchor === \"left\" ? 40 : 0) : margin,\n    label,\n    labelAnchor,\n    labelArrow,\n    labelOffset,\n    ...options\n  }\n) {\n  tickSize = number(tickSize);\n  tickPadding = number(tickPadding);\n  tickRotate = number(tickRotate);\n  if (labelAnchor !== undefined) labelAnchor = keyword(labelAnchor, \"labelAnchor\", [\"center\", \"top\", \"bottom\"]);\n  labelArrow = maybeLabelArrow(labelArrow);\n  return marks(\n    tickSize && !isNoneish(stroke)\n      ? axisTickKy(k, anchor, data, {\n          stroke,\n          strokeOpacity,\n          strokeWidth,\n          tickSize,\n          tickPadding,\n          tickRotate,\n          x,\n          ...options\n        })\n      : null,\n    !isNoneish(fill)\n      ? axisTextKy(k, anchor, data, {\n          fill,\n          fillOpacity,\n          stroke: textStroke,\n          strokeOpacity: textStrokeOpacity,\n          strokeWidth: textStrokeWidth,\n          textAnchor,\n          tickSize,\n          tickPadding,\n          tickRotate,\n          x,\n          marginTop,\n          marginRight,\n          marginBottom,\n          marginLeft,\n          ...options\n        })\n      : null,\n    !isNoneish(fill) && label !== null\n      ? text(\n          [],\n          labelOptions({fill, fillOpacity, ...options}, function (data, facets, channels, scales, dimensions) {\n            const scale = scales[k];\n            const {marginTop, marginRight, marginBottom, marginLeft} = (k === \"y\" && dimensions.inset) || dimensions;\n            const cla = labelAnchor ?? (scale.bandwidth ? \"center\" : \"top\");\n            const clo = labelOffset ?? (anchor === \"right\" ? marginRight : marginLeft) - 3;\n            if (cla === \"center\") {\n              this.textAnchor = undefined; // middle\n              this.lineAnchor = anchor === \"right\" ? \"bottom\" : \"top\";\n              this.frameAnchor = anchor;\n              this.rotate = -90;\n            } else {\n              this.textAnchor = anchor === \"right\" ? \"end\" : \"start\";\n              this.lineAnchor = cla;\n              this.frameAnchor = `${cla}-${anchor}`;\n              this.rotate = 0;\n            }\n            this.dy = cla === \"top\" ? 3 - marginTop : cla === \"bottom\" ? marginBottom - 3 : 0;\n            this.dx = anchor === \"right\" ? clo : -clo;\n            this.ariaLabel = `${k}-axis label`;\n            return {\n              facets: [[0]],\n              channels: {text: {value: [formatAxisLabel(k, scale, {anchor, label, labelAnchor: cla, labelArrow})]}}\n            };\n          })\n        )\n      : null\n  );\n}\n\nfunction axisKx(\n  k,\n  anchor,\n  data,\n  {\n    color = \"currentColor\",\n    opacity = 1,\n    stroke = color,\n    strokeOpacity = opacity,\n    strokeWidth = 1,\n    fill = color,\n    fillOpacity = opacity,\n    textAnchor,\n    textStroke,\n    textStrokeOpacity,\n    textStrokeWidth,\n    tickSize = k === \"x\" ? 6 : 0,\n    tickPadding,\n    tickRotate,\n    y,\n    margin,\n    marginTop = margin === undefined ? (anchor === \"top\" ? 30 : 0) : margin,\n    marginRight = margin === undefined ? 20 : margin,\n    marginBottom = margin === undefined ? (anchor === \"bottom\" ? 30 : 0) : margin,\n    marginLeft = margin === undefined ? 20 : margin,\n    label,\n    labelAnchor,\n    labelArrow,\n    labelOffset,\n    ...options\n  }\n) {\n  tickSize = number(tickSize);\n  tickPadding = number(tickPadding);\n  tickRotate = number(tickRotate);\n  if (labelAnchor !== undefined) labelAnchor = keyword(labelAnchor, \"labelAnchor\", [\"center\", \"left\", \"right\"]);\n  labelArrow = maybeLabelArrow(labelArrow);\n  return marks(\n    tickSize && !isNoneish(stroke)\n      ? axisTickKx(k, anchor, data, {\n          stroke,\n          strokeOpacity,\n          strokeWidth,\n          tickSize,\n          tickPadding,\n          tickRotate,\n          y,\n          ...options\n        })\n      : null,\n    !isNoneish(fill)\n      ? axisTextKx(k, anchor, data, {\n          fill,\n          fillOpacity,\n          stroke: textStroke,\n          strokeOpacity: textStrokeOpacity,\n          strokeWidth: textStrokeWidth,\n          textAnchor,\n          tickSize,\n          tickPadding,\n          tickRotate,\n          y,\n          marginTop,\n          marginRight,\n          marginBottom,\n          marginLeft,\n          ...options\n        })\n      : null,\n    !isNoneish(fill) && label !== null\n      ? text(\n          [],\n          labelOptions({fill, fillOpacity, ...options}, function (data, facets, channels, scales, dimensions) {\n            const scale = scales[k];\n            const {marginTop, marginRight, marginBottom, marginLeft} = (k === \"x\" && dimensions.inset) || dimensions;\n            const cla = labelAnchor ?? (scale.bandwidth ? \"center\" : \"right\");\n            const clo = labelOffset ?? (anchor === \"top\" ? marginTop : marginBottom) - 3;\n            if (cla === \"center\") {\n              this.frameAnchor = anchor;\n              this.textAnchor = undefined; // middle\n            } else {\n              this.frameAnchor = `${anchor}-${cla}`;\n              this.textAnchor = cla === \"right\" ? \"end\" : \"start\";\n            }\n            this.lineAnchor = anchor;\n            this.dy = anchor === \"top\" ? -clo : clo;\n            this.dx = cla === \"right\" ? marginRight - 3 : cla === \"left\" ? 3 - marginLeft : 0;\n            this.ariaLabel = `${k}-axis label`;\n            return {\n              facets: [[0]],\n              channels: {text: {value: [formatAxisLabel(k, scale, {anchor, label, labelAnchor: cla, labelArrow})]}}\n            };\n          })\n        )\n      : null\n  );\n}\n\nfunction axisTickKy(\n  k,\n  anchor,\n  data,\n  {\n    strokeWidth = 1,\n    strokeLinecap = null,\n    strokeLinejoin = null,\n    facetAnchor = anchor + (k === \"y\" ? \"-empty\" : \"\"),\n    frameAnchor = anchor,\n    tickSize,\n    inset = 0,\n    insetLeft = inset,\n    insetRight = inset,\n    dx = 0,\n    y = k === \"y\" ? undefined : null,\n    ...options\n  }\n) {\n  return axisMark(vectorY, k, `${k}-axis tick`, data, {\n    strokeWidth,\n    strokeLinecap,\n    strokeLinejoin,\n    facetAnchor,\n    frameAnchor,\n    y,\n    ...options,\n    dx: anchor === \"left\" ? +dx - offset + +insetLeft : +dx + offset - insetRight,\n    anchor: \"start\",\n    length: tickSize,\n    shape: anchor === \"left\" ? shapeTickLeft : shapeTickRight\n  });\n}\n\nfunction axisTickKx(\n  k,\n  anchor,\n  data,\n  {\n    strokeWidth = 1,\n    strokeLinecap = null,\n    strokeLinejoin = null,\n    facetAnchor = anchor + (k === \"x\" ? \"-empty\" : \"\"),\n    frameAnchor = anchor,\n    tickSize,\n    inset = 0,\n    insetTop = inset,\n    insetBottom = inset,\n    dy = 0,\n    x = k === \"x\" ? undefined : null,\n    ...options\n  }\n) {\n  return axisMark(vectorX, k, `${k}-axis tick`, data, {\n    strokeWidth,\n    strokeLinejoin,\n    strokeLinecap,\n    facetAnchor,\n    frameAnchor,\n    x,\n    ...options,\n    dy: anchor === \"bottom\" ? +dy - offset - insetBottom : +dy + offset + +insetTop,\n    anchor: \"start\",\n    length: tickSize,\n    shape: anchor === \"bottom\" ? shapeTickBottom : shapeTickTop\n  });\n}\n\nfunction axisTextKy(\n  k,\n  anchor,\n  data,\n  {\n    facetAnchor = anchor + (k === \"y\" ? \"-empty\" : \"\"),\n    frameAnchor = anchor,\n    tickSize,\n    tickRotate = 0,\n    tickPadding = Math.max(3, 9 - tickSize) + (Math.abs(tickRotate) > 60 ? 4 * Math.cos(tickRotate * radians) : 0),\n    tickFormat,\n    text = typeof tickFormat === \"function\" ? tickFormat : undefined,\n    textAnchor = Math.abs(tickRotate) > 60 ? \"middle\" : anchor === \"left\" ? \"end\" : \"start\",\n    lineAnchor = tickRotate > 60 ? \"top\" : tickRotate < -60 ? \"bottom\" : \"middle\",\n    fontVariant,\n    inset = 0,\n    insetLeft = inset,\n    insetRight = inset,\n    dx = 0,\n    y = k === \"y\" ? undefined : null,\n    ...options\n  }\n) {\n  return axisMark(\n    textY,\n    k,\n    `${k}-axis tick label`,\n    data,\n    {\n      facetAnchor,\n      frameAnchor,\n      text: text === undefined ? null : text,\n      textAnchor,\n      lineAnchor,\n      fontVariant,\n      rotate: tickRotate,\n      y,\n      ...options,\n      dx: anchor === \"left\" ? +dx - tickSize - tickPadding + +insetLeft : +dx + +tickSize + +tickPadding - insetRight\n    },\n    function (scale, data, ticks, channels) {\n      if (fontVariant === undefined) this.fontVariant = inferFontVariant(scale);\n      if (text === undefined) channels.text = inferTextChannel(scale, data, ticks, tickFormat, anchor);\n    }\n  );\n}\n\nfunction axisTextKx(\n  k,\n  anchor,\n  data,\n  {\n    facetAnchor = anchor + (k === \"x\" ? \"-empty\" : \"\"),\n    frameAnchor = anchor,\n    tickSize,\n    tickRotate = 0,\n    tickPadding = Math.max(3, 9 - tickSize) + (Math.abs(tickRotate) >= 10 ? 4 * Math.cos(tickRotate * radians) : 0),\n    tickFormat,\n    text = typeof tickFormat === \"function\" ? tickFormat : undefined,\n    textAnchor = Math.abs(tickRotate) >= 10 ? ((tickRotate < 0) ^ (anchor === \"bottom\") ? \"start\" : \"end\") : \"middle\",\n    lineAnchor = Math.abs(tickRotate) >= 10 ? \"middle\" : anchor === \"bottom\" ? \"top\" : \"bottom\",\n    fontVariant,\n    inset = 0,\n    insetTop = inset,\n    insetBottom = inset,\n    dy = 0,\n    x = k === \"x\" ? undefined : null,\n    ...options\n  }\n) {\n  return axisMark(\n    textX,\n    k,\n    `${k}-axis tick label`,\n    data,\n    {\n      facetAnchor,\n      frameAnchor,\n      text: text === undefined ? null : text,\n      textAnchor,\n      lineAnchor,\n      fontVariant,\n      rotate: tickRotate,\n      x,\n      ...options,\n      dy: anchor === \"bottom\" ? +dy + +tickSize + +tickPadding - insetBottom : +dy - tickSize - tickPadding + +insetTop\n    },\n    function (scale, data, ticks, channels) {\n      if (fontVariant === undefined) this.fontVariant = inferFontVariant(scale);\n      if (text === undefined) channels.text = inferTextChannel(scale, data, ticks, tickFormat, anchor);\n    }\n  );\n}\n\nexport function gridY() {\n  const [data, options] = maybeData(...arguments);\n  return gridKy(\"y\", anchorY(options), data, options);\n}\n\nexport function gridFy() {\n  const [data, options] = maybeData(...arguments);\n  return gridKy(\"fy\", anchorFy(options), data, options);\n}\n\nexport function gridX() {\n  const [data, options] = maybeData(...arguments);\n  return gridKx(\"x\", anchorX(options), data, options);\n}\n\nexport function gridFx() {\n  const [data, options] = maybeData(...arguments);\n  return gridKx(\"fx\", anchorFx(options), data, options);\n}\n\nfunction gridKy(\n  k,\n  anchor,\n  data,\n  {\n    y = k === \"y\" ? undefined : null,\n    x = null,\n    x1 = anchor === \"left\" ? x : null,\n    x2 = anchor === \"right\" ? x : null,\n    ...options\n  }\n) {\n  return axisMark(ruleY, k, `${k}-grid`, data, {y, x1, x2, ...gridDefaults(options)});\n}\n\nfunction gridKx(\n  k,\n  anchor,\n  data,\n  {\n    x = k === \"x\" ? undefined : null,\n    y = null,\n    y1 = anchor === \"top\" ? y : null,\n    y2 = anchor === \"bottom\" ? y : null,\n    ...options\n  }\n) {\n  return axisMark(ruleX, k, `${k}-grid`, data, {x, y1, y2, ...gridDefaults(options)});\n}\n\nfunction gridDefaults({\n  color = \"currentColor\",\n  opacity = 0.1,\n  stroke = color,\n  strokeOpacity = opacity,\n  strokeWidth = 1,\n  ...options\n}) {\n  return {stroke, strokeOpacity, strokeWidth, ...options};\n}\n\nfunction labelOptions(\n  {fill, fillOpacity, fontFamily, fontSize, fontStyle, fontWeight, monospace, pointerEvents, shapeRendering},\n  initializer\n) {\n  // Only propagate these options if constant.\n  [, fill] = maybeColorChannel(fill);\n  [, fillOpacity] = maybeNumberChannel(fillOpacity);\n  return {\n    facet: \"super\",\n    x: null,\n    y: null,\n    fill,\n    fillOpacity,\n    fontFamily,\n    fontSize,\n    fontStyle,\n    fontWeight,\n    monospace,\n    pointerEvents,\n    shapeRendering,\n    initializer\n  };\n}\n\nfunction axisMark(mark, k, ariaLabel, data, options, initialize) {\n  let channels;\n\n  function axisInitializer(data, facets, _channels, scales, dimensions, context) {\n    const initializeFacets = data == null && (k === \"fx\" || k === \"fy\");\n    const {[k]: scale} = scales;\n    if (!scale) throw new Error(`missing scale: ${k}`);\n    let {ticks, tickSpacing, interval} = options;\n    if (isTemporalScale(scale) && typeof ticks === \"string\") (interval = ticks), (ticks = undefined);\n    if (data == null) {\n      if (isIterable(ticks)) {\n        data = arrayify(ticks);\n      } else if (scale.ticks) {\n        if (ticks !== undefined) {\n          data = scale.ticks(ticks);\n        } else {\n          interval = maybeRangeInterval(interval === undefined ? scale.interval : interval, scale.type);\n          if (interval !== undefined) {\n            // For time scales, we could pass the interval directly to\n            // scale.ticks because it\u2019s supported by d3.utcTicks; but\n            // quantitative scales and d3.ticks do not support numeric\n            // intervals for scale.ticks, so we compute them here.\n            const [min, max] = extent(scale.domain());\n            data = interval.range(min, interval.offset(interval.floor(max))); // inclusive max\n          } else {\n            const [min, max] = extent(scale.range());\n            ticks = (max - min) / (tickSpacing === undefined ? (k === \"x\" ? 80 : 35) : tickSpacing);\n            data = scale.ticks(ticks);\n          }\n        }\n      } else {\n        data = scale.domain();\n      }\n      if (k === \"y\" || k === \"x\") {\n        facets = [range(data)];\n      } else {\n        channels[k] = {scale: k, value: identity};\n      }\n    }\n    initialize?.call(this, scale, data, ticks, channels);\n    const initializedChannels = Object.fromEntries(\n      Object.entries(channels).map(([name, channel]) => {\n        return [name, {...channel, value: valueof(data, channel.value)}];\n      })\n    );\n    if (initializeFacets) facets = context.filterFacets(data, initializedChannels);\n    return {data, facets, channels: initializedChannels};\n  }\n\n  // Apply any basic initializers after the axis initializer computes the ticks.\n  const basicInitializer = initializer(options).initializer;\n  const m = mark(data, initializer({...options, initializer: axisInitializer}, basicInitializer));\n  if (data == null) {\n    channels = m.channels;\n    m.channels = {};\n  } else {\n    channels = {};\n  }\n  m.ariaLabel = ariaLabel;\n  return m;\n}\n\nfunction inferTextChannel(scale, data, ticks, tickFormat, anchor) {\n  return {value: inferTickFormat(scale, data, ticks, tickFormat, anchor)};\n}\n\n// D3\u2019s ordinal scales simply use toString by default, but if the ordinal scale\n// domain (or ticks) are numbers or dates (say because we\u2019re applying a time\n// interval to the ordinal scale), we want Plot\u2019s default formatter.\nexport function inferTickFormat(scale, data, ticks, tickFormat, anchor) {\n  return tickFormat === undefined && isTemporalScale(scale)\n    ? formatTimeTicks(scale, data, ticks, anchor)\n    : scale.tickFormat\n    ? scale.tickFormat(isIterable(ticks) ? null : ticks, tickFormat)\n    : tickFormat === undefined\n    ? isUtcYear(scale.interval)\n      ? utcFormat(\"%Y\")\n      : isTimeYear(scale.interval)\n      ? timeFormat(\"%Y\")\n      : formatDefault\n    : typeof tickFormat === \"string\"\n    ? (isTemporal(scale.domain()) ? utcFormat : format)(tickFormat)\n    : constant(tickFormat);\n}\n\nconst shapeTickBottom = {\n  draw(context, l) {\n    context.moveTo(0, 0);\n    context.lineTo(0, l);\n  }\n};\n\nconst shapeTickTop = {\n  draw(context, l) {\n    context.moveTo(0, 0);\n    context.lineTo(0, -l);\n  }\n};\n\nconst shapeTickLeft = {\n  draw(context, l) {\n    context.moveTo(0, 0);\n    context.lineTo(-l, 0);\n  }\n};\n\nconst shapeTickRight = {\n  draw(context, l) {\n    context.moveTo(0, 0);\n    context.lineTo(l, 0);\n  }\n};\n\n// TODO Unify this with the other inferFontVariant; here we only have a scale\n// function rather than a scale descriptor.\nfunction inferFontVariant(scale) {\n  return scale.bandwidth && !scale.interval ? undefined : \"tabular-nums\";\n}\n\n// Determines whether the scale points in the \u201Cpositive\u201D (right or down) or\n// \u201Cnegative\u201D (left or up) direction; if the scale order cannot be determined,\n// returns NaN; used to assign an appropriate label arrow.\nfunction inferScaleOrder(scale) {\n  return Math.sign(orderof(scale.domain())) * Math.sign(orderof(scale.range()));\n}\n\n// Takes the scale label, and if this is not an ordinal scale and the label was\n// inferred from an associated channel, adds an orientation-appropriate arrow.\nfunction formatAxisLabel(k, scale, {anchor, label = scale.label, labelAnchor, labelArrow} = {}) {\n  if (label == null || (label.inferred && isTemporalish(scale) && /^(date|time|year)$/i.test(label))) return;\n  label = String(label); // coerce to a string after checking if inferred\n  if (labelArrow === \"auto\") labelArrow = (!scale.bandwidth || scale.interval) && !/[\u2191\u2193\u2192\u2190]/.test(label);\n  if (!labelArrow) return label;\n  if (labelArrow === true) {\n    const order = inferScaleOrder(scale);\n    if (order)\n      labelArrow =\n        /x$/.test(k) || labelAnchor === \"center\"\n          ? /x$/.test(k) === order < 0\n            ? \"left\"\n            : \"right\"\n          : order < 0\n          ? \"up\"\n          : \"down\";\n  }\n  switch (labelArrow) {\n    case \"left\":\n      return `\u2190 ${label}`;\n    case \"right\":\n      return `${label} \u2192`;\n    case \"up\":\n      return anchor === \"right\" ? `${label} \u2191` : `\u2191 ${label}`;\n    case \"down\":\n      return anchor === \"right\" ? `${label} \u2193` : `\u2193 ${label}`;\n  }\n  return label;\n}\n\nfunction maybeLabelArrow(labelArrow = \"auto\") {\n  return isNoneish(labelArrow)\n    ? false\n    : typeof labelArrow === \"boolean\"\n    ? labelArrow\n    : keyword(labelArrow, \"labelArrow\", [\"auto\", \"up\", \"right\", \"down\", \"left\"]);\n}\n\nfunction isTemporalish(scale) {\n  return isTemporalScale(scale) || scale.interval != null;\n}\n", "import {pathRound as path} from \"d3\";\nimport {inferFontVariant} from \"../axes.js\";\nimport {create, createContext} from \"../context.js\";\nimport {isNoneish, maybeColorChannel, maybeNumberChannel} from \"../options.js\";\nimport {isOrdinalScale, isThresholdScale} from \"../scales.js\";\nimport {applyInlineStyles, impliedString, maybeClassName} from \"../style.js\";\nimport {inferTickFormat} from \"../marks/axis.js\";\n\nfunction maybeScale(scale, key) {\n  if (key == null) return key;\n  const s = scale(key);\n  if (!s) throw new Error(`scale not found: ${key}`);\n  return s;\n}\n\nexport function legendSwatches(color, {opacity, ...options} = {}) {\n  if (!isOrdinalScale(color) && !isThresholdScale(color))\n    throw new Error(`swatches legend requires ordinal or threshold color scale (not ${color.type})`);\n  return legendItems(color, options, (selection, scale, width, height) =>\n    selection\n      .append(\"svg\")\n      .attr(\"width\", width)\n      .attr(\"height\", height)\n      .attr(\"fill\", scale.scale)\n      .attr(\"fill-opacity\", maybeNumberChannel(opacity)[1])\n      .append(\"rect\")\n      .attr(\"width\", \"100%\")\n      .attr(\"height\", \"100%\")\n  );\n}\n\nexport function legendSymbols(\n  symbol,\n  {\n    fill = symbol.hint?.fill !== undefined ? symbol.hint.fill : \"none\",\n    fillOpacity = 1,\n    stroke = symbol.hint?.stroke !== undefined ? symbol.hint.stroke : isNoneish(fill) ? \"currentColor\" : \"none\",\n    strokeOpacity = 1,\n    strokeWidth = 1.5,\n    r = 4.5,\n    ...options\n  } = {},\n  scale\n) {\n  const [vf, cf] = maybeColorChannel(fill);\n  const [vs, cs] = maybeColorChannel(stroke);\n  const sf = maybeScale(scale, vf);\n  const ss = maybeScale(scale, vs);\n  const size = r * r * Math.PI;\n  fillOpacity = maybeNumberChannel(fillOpacity)[1];\n  strokeOpacity = maybeNumberChannel(strokeOpacity)[1];\n  strokeWidth = maybeNumberChannel(strokeWidth)[1];\n  return legendItems(symbol, options, (selection, scale, width, height) =>\n    selection\n      .append(\"svg\")\n      .attr(\"viewBox\", \"-8 -8 16 16\")\n      .attr(\"width\", width)\n      .attr(\"height\", height)\n      .attr(\"fill\", vf === \"color\" ? (d) => sf.scale(d) : cf)\n      .attr(\"fill-opacity\", fillOpacity)\n      .attr(\"stroke\", vs === \"color\" ? (d) => ss.scale(d) : cs)\n      .attr(\"stroke-opacity\", strokeOpacity)\n      .attr(\"stroke-width\", strokeWidth)\n      .append(\"path\")\n      .attr(\"d\", (d) => {\n        const p = path();\n        symbol.scale(d).draw(p, size);\n        return p;\n      })\n  );\n}\n\nfunction legendItems(scale, options = {}, swatch) {\n  let {\n    columns,\n    tickFormat,\n    fontVariant = inferFontVariant(scale),\n    // TODO label,\n    swatchSize = 15,\n    swatchWidth = swatchSize,\n    swatchHeight = swatchSize,\n    marginLeft = 0,\n    className,\n    style,\n    width\n  } = options;\n  const context = createContext(options);\n  className = maybeClassName(className);\n  if (typeof tickFormat !== \"function\") tickFormat = inferTickFormat(scale.scale, scale.domain, undefined, tickFormat);\n\n  const swatches = create(\"div\", context).attr(\n    \"class\",\n    `${className}-swatches ${className}-swatches-${columns != null ? \"columns\" : \"wrap\"}`\n  );\n\n  let extraStyle;\n\n  if (columns != null) {\n    extraStyle = `.${className}-swatches-columns .${className}-swatch {\n  display: flex;\n  align-items: center;\n  break-inside: avoid;\n  padding-bottom: 1px;\n}\n.${className}-swatches-columns .${className}-swatch::before {\n  flex-shrink: 0;\n}\n.${className}-swatches-columns .${className}-swatch-label {\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}`;\n\n    swatches\n      .style(\"columns\", columns)\n      .selectAll()\n      .data(scale.domain)\n      .enter()\n      .append(\"div\")\n      .attr(\"class\", `${className}-swatch`)\n      .call(swatch, scale, swatchWidth, swatchHeight)\n      .call((item) =>\n        item.append(\"div\").attr(\"class\", `${className}-swatch-label`).attr(\"title\", tickFormat).text(tickFormat)\n      );\n  } else {\n    extraStyle = `.${className}-swatches-wrap {\n  display: flex;\n  align-items: center;\n  min-height: 33px;\n  flex-wrap: wrap;\n}\n.${className}-swatches-wrap .${className}-swatch {\n  display: inline-flex;\n  align-items: center;\n  margin-right: 1em;\n}`;\n\n    swatches\n      .selectAll()\n      .data(scale.domain)\n      .enter()\n      .append(\"span\")\n      .attr(\"class\", `${className}-swatch`)\n      .call(swatch, scale, swatchWidth, swatchHeight)\n      .append(function () {\n        return this.ownerDocument.createTextNode(tickFormat.apply(this, arguments));\n      });\n  }\n\n  return swatches\n    .call((div) =>\n      div.insert(\"style\", \"*\").text(\n        `.${className}-swatches {\n  font-family: system-ui, sans-serif;\n  font-size: 10px;\n  margin-bottom: 0.5em;\n}\n.${className}-swatch > svg {\n  margin-right: 0.5em;\n  overflow: visible;\n}\n${extraStyle}`\n      )\n    )\n    .style(\"margin-left\", marginLeft ? `${+marginLeft}px` : null)\n    .style(\"width\", width === undefined ? null : `${+width}px`)\n    .style(\"font-variant\", impliedString(fontVariant, \"normal\"))\n    .call(applyInlineStyles, style)\n    .node();\n}\n", "import {rgb} from \"d3\";\nimport {createContext} from \"./context.js\";\nimport {legendRamp} from \"./legends/ramp.js\";\nimport {legendSwatches, legendSymbols} from \"./legends/swatches.js\";\nimport {inherit, isScaleOptions} from \"./options.js\";\nimport {normalizeScale} from \"./scales.js\";\n\nconst legendRegistry = new Map([\n  [\"symbol\", legendSymbols],\n  [\"color\", legendColor],\n  [\"opacity\", legendOpacity]\n]);\n\nexport function legend(options = {}) {\n  for (const [key, value] of legendRegistry) {\n    const scale = options[key];\n    if (isScaleOptions(scale)) {\n      // e.g., ignore {color: \"red\"}\n      const context = createContext(options);\n      let hint;\n      // For symbol legends, pass a hint to the symbol scale.\n      if (key === \"symbol\") {\n        const {fill, stroke = fill === undefined && isScaleOptions(options.color) ? \"color\" : undefined} = options;\n        hint = {fill, stroke};\n      }\n      return value(normalizeScale(key, scale, hint), legendOptions(context, scale, options), (key) =>\n        isScaleOptions(options[key]) ? normalizeScale(key, options[key]) : null\n      );\n    }\n  }\n  throw new Error(\"unknown legend type; no scale found\");\n}\n\nexport function exposeLegends(scales, context, defaults = {}) {\n  return (key, options) => {\n    if (!legendRegistry.has(key)) throw new Error(`unknown legend type: ${key}`);\n    if (!(key in scales)) return;\n    return legendRegistry.get(key)(scales[key], legendOptions(context, defaults[key], options), (key) => scales[key]);\n  };\n}\n\nfunction legendOptions({className, ...context}, {label, ticks, tickFormat} = {}, options) {\n  return inherit(options, {className, ...context}, {label, ticks, tickFormat});\n}\n\nfunction legendColor(color, {legend = true, ...options}) {\n  if (legend === true) legend = color.type === \"ordinal\" ? \"swatches\" : \"ramp\";\n  if (color.domain === undefined) return;\n  switch (`${legend}`.toLowerCase()) {\n    case \"swatches\":\n      return legendSwatches(color, options);\n    case \"ramp\":\n      return legendRamp(color, options);\n    default:\n      throw new Error(`unknown legend type: ${legend}`);\n  }\n}\n\nfunction legendOpacity({type, interpolate, ...scale}, {legend = true, color = rgb(0, 0, 0), ...options}) {\n  if (!interpolate) throw new Error(`${type} opacity scales are not supported`);\n  if (legend === true) legend = \"ramp\";\n  if (`${legend}`.toLowerCase() !== \"ramp\") throw new Error(`${legend} opacity legends are not supported`);\n  return legendColor({type, ...scale, interpolate: interpolateOpacity(color)}, {legend, ...options});\n}\n\nfunction interpolateOpacity(color) {\n  const {r, g, b} = rgb(color) || rgb(0, 0, 0); // treat invalid color as black\n  return (t) => `rgba(${r},${g},${b},${t})`;\n}\n\nexport function createLegends(scales, context, options) {\n  const legends = [];\n  for (const [key, value] of legendRegistry) {\n    const o = options[key];\n    if (o?.legend && key in scales) {\n      const legend = value(scales[key], legendOptions(context, scales[key], o), (key) => scales[key]);\n      if (legend != null) legends.push(legend);\n    }\n  }\n  return legends;\n}\n", "import {create} from \"../context.js\";\nimport {Mark} from \"../mark.js\";\nimport {maybeKeyword, number, singleton} from \"../options.js\";\nimport {applyChannelStyles, applyDirectStyles, applyIndirectStyles, applyTransform} from \"../style.js\";\n\nconst defaults = {\n  ariaLabel: \"frame\",\n  fill: \"none\",\n  stroke: \"currentColor\"\n};\n\nconst lineDefaults = {\n  ariaLabel: \"frame\",\n  fill: null,\n  stroke: \"currentColor\",\n  strokeLinecap: \"square\"\n};\n\nexport class Frame extends Mark {\n  constructor(options = {}) {\n    const {\n      anchor = null,\n      inset = 0,\n      insetTop = inset,\n      insetRight = inset,\n      insetBottom = inset,\n      insetLeft = inset,\n      rx,\n      ry\n    } = options;\n    super(singleton, undefined, options, anchor == null ? defaults : lineDefaults);\n    this.anchor = maybeKeyword(anchor, \"anchor\", [\"top\", \"right\", \"bottom\", \"left\"]);\n    this.insetTop = number(insetTop);\n    this.insetRight = number(insetRight);\n    this.insetBottom = number(insetBottom);\n    this.insetLeft = number(insetLeft);\n    this.rx = number(rx);\n    this.ry = number(ry);\n  }\n  render(index, scales, channels, dimensions, context) {\n    const {marginTop, marginRight, marginBottom, marginLeft, width, height} = dimensions;\n    const {anchor, insetTop, insetRight, insetBottom, insetLeft, rx, ry} = this;\n    const x1 = marginLeft + insetLeft;\n    const x2 = width - marginRight - insetRight;\n    const y1 = marginTop + insetTop;\n    const y2 = height - marginBottom - insetBottom;\n    return create(anchor ? \"svg:line\" : \"svg:rect\", context)\n      .datum(0)\n      .call(applyIndirectStyles, this, dimensions, context)\n      .call(applyDirectStyles, this)\n      .call(applyChannelStyles, this, channels)\n      .call(applyTransform, this, {})\n      .call(\n        anchor === \"left\"\n          ? (line) => line.attr(\"x1\", x1).attr(\"x2\", x1).attr(\"y1\", y1).attr(\"y2\", y2)\n          : anchor === \"right\"\n          ? (line) => line.attr(\"x1\", x2).attr(\"x2\", x2).attr(\"y1\", y1).attr(\"y2\", y2)\n          : anchor === \"top\"\n          ? (line) => line.attr(\"x1\", x1).attr(\"x2\", x2).attr(\"y1\", y1).attr(\"y2\", y1)\n          : anchor === \"bottom\"\n          ? (line) => line.attr(\"x1\", x1).attr(\"x2\", x2).attr(\"y1\", y2).attr(\"y2\", y2)\n          : (rect) =>\n              rect\n                .attr(\"x\", x1)\n                .attr(\"y\", y1)\n                .attr(\"width\", x2 - x1)\n                .attr(\"height\", y2 - y1)\n                .attr(\"rx\", rx)\n                .attr(\"ry\", ry)\n      )\n      .node();\n  }\n}\n\nexport function frame(options) {\n  return new Frame(options);\n}\n", "import {select} from \"d3\";\nimport {getSource} from \"../channel.js\";\nimport {create} from \"../context.js\";\nimport {defined} from \"../defined.js\";\nimport {formatDefault} from \"../format.js\";\nimport {anchorX, anchorY} from \"../interactions/pointer.js\";\nimport {Mark} from \"../mark.js\";\nimport {maybeAnchor, maybeFrameAnchor, maybeTuple, number, string} from \"../options.js\";\nimport {applyDirectStyles, applyFrameAnchor, applyIndirectStyles, applyTransform, impliedString} from \"../style.js\";\nimport {identity, isIterable, isTextual} from \"../options.js\";\nimport {inferTickFormat} from \"./axis.js\";\nimport {applyIndirectTextStyles, defaultWidth, ellipsis, monospaceWidth} from \"./text.js\";\nimport {cut, clipper, splitter, maybeTextOverflow} from \"./text.js\";\n\nconst defaults = {\n  ariaLabel: \"tip\",\n  fill: \"white\",\n  stroke: \"currentColor\"\n};\n\n// These channels are not displayed in the tip; TODO allow customization.\nconst ignoreChannels = new Set([\"geometry\", \"href\", \"src\", \"ariaLabel\"]);\n\nexport class Tip extends Mark {\n  constructor(data, options = {}) {\n    if (options.tip) options = {...options, tip: false};\n    if (options.title === undefined && isIterable(data) && isTextual(data)) options = {...options, title: identity};\n    const {\n      x,\n      y,\n      x1,\n      x2,\n      y1,\n      y2,\n      anchor,\n      monospace,\n      fontFamily = monospace ? \"ui-monospace, monospace\" : undefined,\n      fontSize,\n      fontStyle,\n      fontVariant,\n      fontWeight,\n      lineHeight = 1,\n      lineWidth = 20,\n      frameAnchor,\n      textAnchor = \"start\",\n      textOverflow,\n      textPadding = 8,\n      title,\n      pointerSize = 12,\n      pathFilter = \"drop-shadow(0 3px 4px rgba(0,0,0,0.2))\"\n    } = options;\n    super(\n      data,\n      {\n        x: {value: x1 != null && x2 != null ? null : x, scale: \"x\", optional: true}, // ignore midpoint\n        y: {value: y1 != null && y2 != null ? null : y, scale: \"y\", optional: true}, // ignore midpoint\n        x1: {value: x1, scale: \"x\", optional: x2 == null},\n        y1: {value: y1, scale: \"y\", optional: y2 == null},\n        x2: {value: x2, scale: \"x\", optional: x1 == null},\n        y2: {value: y2, scale: \"y\", optional: y1 == null},\n        title: {value: title, optional: true} // filter: defined\n      },\n      options,\n      defaults\n    );\n    this.anchor = maybeAnchor(anchor, \"anchor\");\n    this.previousAnchor = this.anchor ?? \"top-left\";\n    this.frameAnchor = maybeFrameAnchor(frameAnchor);\n    this.textAnchor = impliedString(textAnchor, \"middle\");\n    this.textPadding = +textPadding;\n    this.pointerSize = +pointerSize;\n    this.pathFilter = string(pathFilter);\n    this.lineHeight = +lineHeight;\n    this.lineWidth = +lineWidth;\n    this.textOverflow = maybeTextOverflow(textOverflow);\n    this.monospace = !!monospace;\n    this.fontFamily = string(fontFamily);\n    this.fontSize = number(fontSize);\n    this.fontStyle = string(fontStyle);\n    this.fontVariant = string(fontVariant);\n    this.fontWeight = string(fontWeight);\n    for (const key in defaults) if (key in this.channels) this[key] = defaults[key]; // apply default even if channel\n    this.splitLines = splitter(this);\n    this.clipLine = clipper(this);\n  }\n  render(index, scales, values, dimensions, context) {\n    const mark = this;\n    const {x, y, fx, fy} = scales;\n    const {ownerSVGElement: svg, document} = context;\n    const {anchor, monospace, lineHeight, lineWidth} = this;\n    const {textPadding: r, pointerSize: m, pathFilter} = this;\n    const {marginTop, marginLeft} = dimensions;\n    const sources = getSources(values);\n\n    // The anchor position is the middle of x1 & y1 and x2 & y2, if available,\n    // or x & y; the former is considered more specific because it\u2019s how we\n    // disable the implicit stack and interval transforms. If any dimension is\n    // unspecified, we fallback to the frame anchor. We also need to know the\n    // facet offsets to detect when the tip would draw outside the plot, and\n    // thus we need to change the orientation.\n    const {x1: X1, y1: Y1, x2: X2, y2: Y2, x: X = X1 ?? X2, y: Y = Y1 ?? Y2} = values;\n    const ox = fx ? fx(index.fx) - marginLeft : 0;\n    const oy = fy ? fy(index.fy) - marginTop : 0;\n\n    // The order of precedence for the anchor position is: the middle of x1 & y1\n    // and x2 & y2; or x1 & y1 (e.g., area); or lastly x & y. If a dimension is\n    // unspecified, the frame anchor is used.\n    const [cx, cy] = applyFrameAnchor(this, dimensions);\n    const px = anchorX(values, cx);\n    const py = anchorY(values, cy);\n\n    // Resolve the text metric implementation. We may need an ellipsis for text\n    // truncation, so we optimistically compute the ellipsis width.\n    const widthof = monospace ? monospaceWidth : defaultWidth;\n    const ee = widthof(ellipsis);\n\n    // We borrow the scale\u2019s tick format for facet channels; this is safe for\n    // ordinal scales (but not continuous scales where the display value may\n    // need higher precision), and generally better than the default format.\n    const formatFx = fx && inferTickFormat(fx);\n    const formatFy = fy && inferTickFormat(fy);\n\n    function* format(sources, i) {\n      if (\"title\" in sources) {\n        const text = sources.title.value[i];\n        for (const line of mark.splitLines(formatDefault(text))) {\n          yield {name: \"\", value: mark.clipLine(line)};\n        }\n        return;\n      }\n      for (const key in sources) {\n        if (key === \"x1\" && \"x2\" in sources) continue;\n        if (key === \"y1\" && \"y2\" in sources) continue;\n        const channel = sources[key];\n        const value = channel.value[i];\n        if (!defined(value) && channel.scale == null) continue;\n        if (key === \"x2\" && \"x1\" in sources) {\n          yield {name: formatLabel(scales, channel, \"x\"), value: formatPair(sources.x1, channel, i)};\n        } else if (key === \"y2\" && \"y1\" in sources) {\n          yield {name: formatLabel(scales, channel, \"y\"), value: formatPair(sources.y1, channel, i)};\n        } else {\n          const scale = channel.scale;\n          const line = {name: formatLabel(scales, channel, key), value: formatDefault(value)};\n          if (scale === \"color\" || scale === \"opacity\") line[scale] = values[key][i];\n          yield line;\n        }\n      }\n      if (index.fi != null && fx) yield {name: String(fx.label ?? \"fx\"), value: formatFx(index.fx)};\n      if (index.fi != null && fy) yield {name: String(fy.label ?? \"fy\"), value: formatFy(index.fy)};\n    }\n\n    // We don\u2019t call applyChannelStyles because we only use the channels to\n    // derive the content of the tip, not its aesthetics.\n    const g = create(\"svg:g\", context)\n      .call(applyIndirectStyles, this, dimensions, context)\n      .call(applyIndirectTextStyles, this)\n      .call(applyTransform, this, {x: X && x, y: Y && y})\n      .call((g) =>\n        g\n          .selectAll()\n          .data(index)\n          .enter()\n          .append(\"g\")\n          .attr(\"transform\", (i) => `translate(${Math.round(px(i))},${Math.round(py(i))})`) // crisp edges\n          .call(applyDirectStyles, this)\n          .call((g) => g.append(\"path\").attr(\"filter\", pathFilter))\n          .call((g) =>\n            g.append(\"text\").each(function (i) {\n              const that = select(this);\n              // prevent style inheritance (from path)\n              this.setAttribute(\"fill\", \"currentColor\");\n              this.setAttribute(\"fill-opacity\", 1);\n              this.setAttribute(\"stroke\", \"none\");\n              // iteratively render each channel value\n              const names = new Set();\n              for (const line of format(sources, i)) {\n                const name = line.name;\n                if (name && names.has(name)) continue;\n                else names.add(name);\n                renderLine(that, line);\n              }\n            })\n          )\n      );\n\n    // Renders a single line (a name-value pair) to the tip, truncating the text\n    // as needed, and adding a title if the text is truncated. Note that this is\n    // just the initial layout of the text; in postrender we will compute the\n    // exact text metrics and translate the text as needed once we know the\n    // tip\u2019s orientation (anchor).\n    function renderLine(selection, {name, value, color, opacity}) {\n      const swatch = color != null || opacity != null;\n      let title;\n      let w = lineWidth * 100;\n      const [j] = cut(name, w, widthof, ee);\n      if (j >= 0) {\n        // name is truncated\n        name = name.slice(0, j).trimEnd() + ellipsis;\n        title = value.trim();\n        value = \"\";\n      } else {\n        if (name || (!value && !swatch)) value = \" \" + value;\n        const [k] = cut(value, w - widthof(name), widthof, ee);\n        if (k >= 0) {\n          // value is truncated\n          value = value.slice(0, k).trimEnd() + ellipsis;\n          title = value.trim();\n        }\n      }\n      const line = selection.append(\"tspan\").attr(\"x\", 0).attr(\"dy\", `${lineHeight}em`).text(\"\\u200b\"); // zwsp for double-click\n      if (name) line.append(\"tspan\").attr(\"font-weight\", \"bold\").text(name);\n      if (value) line.append(() => document.createTextNode(value));\n      if (swatch) line.append(\"tspan\").text(\" \u25A0\").attr(\"fill\", color).attr(\"fill-opacity\", opacity).style(\"user-select\", \"none\"); // prettier-ignore\n      if (title) line.append(\"title\").text(title);\n    }\n\n    // Only after the plot is attached to the page can we compute the exact text\n    // metrics needed to determine the tip size and orientation (anchor).\n    function postrender() {\n      const {width, height} = dimensions.facet ?? dimensions;\n      g.selectChildren().each(function (i) {\n        let {x: tx, width: w, height: h} = this.getBBox();\n        (w = Math.round(w)), (h = Math.round(h)); // crisp edges\n        let a = anchor; // use the specified anchor, if any\n        if (a === undefined) {\n          a = mark.previousAnchor; // favor the previous anchor, if it fits\n          const x = px(i) + ox;\n          const y = py(i) + oy;\n          const fitLeft = x + w + r * 2 < width;\n          const fitRight = x - w - r * 2 > 0;\n          const fitTop = y + h + m + r * 2 + 7 < height;\n          const fitBottom = y - h - m - r * 2 > 0;\n          const ax = (/-left$/.test(a) ? fitLeft || !fitRight : fitLeft && !fitRight) ? \"left\" : \"right\";\n          const ay = (/^top-/.test(a) ? fitTop || !fitBottom : fitTop && !fitBottom) ? \"top\" : \"bottom\";\n          a = mark.previousAnchor = `${ay}-${ax}`;\n        }\n        const path = this.firstChild; // note: assumes exactly two children!\n        const text = this.lastChild; // note: assumes exactly two children!\n        path.setAttribute(\"d\", getPath(a, m, r, w, h));\n        if (tx) for (const t of text.childNodes) t.setAttribute(\"x\", -tx);\n        text.setAttribute(\"y\", `${+getLineOffset(a, text.childNodes.length, lineHeight).toFixed(6)}em`);\n        text.setAttribute(\"transform\", `translate(${getTextTranslate(a, m, r, w, h)})`);\n      });\n    }\n\n    // Wait until the plot is inserted into the page so that we can use getBBox\n    // to compute the exact text dimensions. If the SVG is already connected, as\n    // when the pointer interaction triggers the re-render, use a faster\n    // microtask instead of an animation frame; if this SSR (e.g., JSDOM), skip\n    // this step. Perhaps this could be done synchronously; getting the\n    // dimensions of the SVG is easy, and although accurate text metrics are\n    // hard, we could use approximate heuristics.\n    if (svg.isConnected) Promise.resolve().then(postrender);\n    else if (typeof requestAnimationFrame !== \"undefined\") requestAnimationFrame(postrender);\n\n    return g.node();\n  }\n}\n\nexport function tip(data, {x, y, ...options} = {}) {\n  if (options.frameAnchor === undefined) [x, y] = maybeTuple(x, y);\n  return new Tip(data, {...options, x, y});\n}\n\nfunction getLineOffset(anchor, length, lineHeight) {\n  return /^top(?:-|$)/.test(anchor)\n    ? 0.94 - lineHeight\n    : /^bottom(?:-|$)/\n    ? -0.29 - length * lineHeight\n    : (length / 2) * lineHeight;\n}\n\nfunction getTextTranslate(anchor, m, r, width, height) {\n  switch (anchor) {\n    case \"middle\":\n      return [-width / 2, height / 2];\n    case \"top-left\":\n      return [r, m + r];\n    case \"top\":\n      return [-width / 2, m / 2 + r];\n    case \"top-right\":\n      return [-width - r, m + r];\n    case \"right\":\n      return [-m / 2 - width - r, height / 2];\n    case \"bottom-left\":\n      return [r, -m - r];\n    case \"bottom\":\n      return [-width / 2, -m / 2 - r];\n    case \"bottom-right\":\n      return [-width - r, -m - r];\n    case \"left\":\n      return [r + m / 2, height / 2];\n  }\n}\n\nfunction getPath(anchor, m, r, width, height) {\n  const w = width + r * 2;\n  const h = height + r * 2;\n  switch (anchor) {\n    case \"middle\":\n      return `M${-w / 2},${-h / 2}h${w}v${h}h${-w}z`;\n    case \"top-left\":\n      return `M0,0l${m},${m}h${w - m}v${h}h${-w}z`;\n    case \"top\":\n      return `M0,0l${m / 2},${m / 2}h${(w - m) / 2}v${h}h${-w}v${-h}h${(w - m) / 2}z`;\n    case \"top-right\":\n      return `M0,0l${-m},${m}h${m - w}v${h}h${w}z`;\n    case \"right\":\n      return `M0,0l${-m / 2},${-m / 2}v${m / 2 - h / 2}h${-w}v${h}h${w}v${m / 2 - h / 2}z`;\n    case \"bottom-left\":\n      return `M0,0l${m},${-m}h${w - m}v${-h}h${-w}z`;\n    case \"bottom\":\n      return `M0,0l${m / 2},${-m / 2}h${(w - m) / 2}v${-h}h${-w}v${h}h${(w - m) / 2}z`;\n    case \"bottom-right\":\n      return `M0,0l${-m},${-m}h${m - w}v${-h}h${w}z`;\n    case \"left\":\n      return `M0,0l${m / 2},${-m / 2}v${m / 2 - h / 2}h${w}v${h}h${-w}v${m / 2 - h / 2}z`;\n  }\n}\n\nfunction getSources({channels}) {\n  const sources = {};\n  for (const key in channels) {\n    if (ignoreChannels.has(key)) continue;\n    const source = getSource(channels, key);\n    if (source) sources[key] = source;\n  }\n  return sources;\n}\n\nfunction formatPair(c1, c2, i) {\n  return c2.hint?.length // e.g., stackY\u2019s y1 and y2\n    ? `${formatDefault(c2.value[i] - c1.value[i])}`\n    : `${formatDefault(c1.value[i])}\u2013${formatDefault(c2.value[i])}`;\n}\n\nfunction formatLabel(scales, c, defaultLabel) {\n  return String(scales[c.scale]?.label ?? c?.label ?? defaultLabel);\n}\n", "import {creator, select} from \"d3\";\nimport {createChannel, inferChannelScale} from \"./channel.js\";\nimport {createContext} from \"./context.js\";\nimport {createDimensions} from \"./dimensions.js\";\nimport {createFacets, recreateFacets, facetExclude, facetGroups, facetTranslator, facetFilter} from \"./facet.js\";\nimport {pointer, pointerX, pointerY} from \"./interactions/pointer.js\";\nimport {createLegends, exposeLegends} from \"./legends.js\";\nimport {Mark} from \"./mark.js\";\nimport {axisFx, axisFy, axisX, axisY, gridFx, gridFy, gridX, gridY} from \"./marks/axis.js\";\nimport {frame} from \"./marks/frame.js\";\nimport {tip} from \"./marks/tip.js\";\nimport {isColor, isIterable, isNone, isScaleOptions} from \"./options.js\";\nimport {arrayify, map, yes, maybeIntervalTransform, subarray} from \"./options.js\";\nimport {createProjection, getGeometryChannels, hasProjection} from \"./projection.js\";\nimport {createScales, createScaleFunctions, autoScaleRange, exposeScales} from \"./scales.js\";\nimport {innerDimensions, outerDimensions} from \"./scales.js\";\nimport {position, registry as scaleRegistry} from \"./scales/index.js\";\nimport {applyInlineStyles, maybeClassName} from \"./style.js\";\nimport {initializer} from \"./transforms/basic.js\";\nimport {consumeWarnings, warn} from \"./warnings.js\";\n\nexport function plot(options = {}) {\n  const {facet, style, caption, ariaLabel, ariaDescription} = options;\n\n  // className for inline styles\n  const className = maybeClassName(options.className);\n\n  // Flatten any nested marks.\n  const marks = options.marks === undefined ? [] : flatMarks(options.marks);\n\n  // Add implicit tips.\n  marks.push(...inferTips(marks));\n\n  // Compute the top-level facet state. This has roughly the same structure as\n  // mark-specific facet state, except there isn\u2019t a facetsIndex, and there\u2019s a\n  // data and dataLength so we can warn the user if a different data of the same\n  // length is used in a mark.\n  const topFacetState = maybeTopFacet(facet, options);\n\n  // Construct a map from (faceted) Mark instance to facet state, including:\n  // channels - an {fx?, fy?} object to add to the fx and fy scale\n  // groups - a possibly-nested map from facet values to indexes in the data array\n  // facetsIndex - a sparse nested array of indices corresponding to the valid facets\n  const facetStateByMark = new Map();\n  for (const mark of marks) {\n    const facetState = maybeMarkFacet(mark, topFacetState, options);\n    if (facetState) facetStateByMark.set(mark, facetState);\n  }\n\n  // Compute a Map from scale name to an array of associated channels.\n  const channelsByScale = new Map();\n  if (topFacetState) addScaleChannels(channelsByScale, [topFacetState], options);\n  addScaleChannels(channelsByScale, facetStateByMark, options);\n\n  // Add implicit axis marks. Because this happens after faceting (because it\n  // depends on whether faceting is present), we must initialize the facet state\n  // of any implicit axes, too.\n  const axes = flatMarks(inferAxes(marks, channelsByScale, options));\n  for (const mark of axes) {\n    const facetState = maybeMarkFacet(mark, topFacetState, options);\n    if (facetState) facetStateByMark.set(mark, facetState);\n  }\n  marks.unshift(...axes);\n\n  // All the possible facets are given by the domains of the fx or fy scales, or\n  // the cross-product of these domains if we facet by both x and y. We sort\n  // them in order to apply the facet filters afterwards.\n  let facets = createFacets(channelsByScale, options);\n\n  if (facets !== undefined) {\n    const topFacetsIndex = topFacetState ? facetFilter(facets, topFacetState) : undefined;\n\n    // Compute a facet index for each mark, parallel to the facets array. For\n    // mark-level facets, compute an index for that mark\u2019s data and options.\n    // Otherwise, use the top-level facet index.\n    for (const mark of marks) {\n      if (mark.facet === null || mark.facet === \"super\") continue;\n      const facetState = facetStateByMark.get(mark);\n      if (facetState === undefined) continue;\n      facetState.facetsIndex = mark.fx != null || mark.fy != null ? facetFilter(facets, facetState) : topFacetsIndex;\n    }\n\n    // The cross product of the domains of fx and fy can include fx-fy\n    // combinations for which no mark has an instance associated with that\n    // combination, and therefore we don\u2019t want to render this facet (not even\n    // the frame). The same can occur if you specify the domain of fx and fy\n    // explicitly, but there is no mark instance associated with some values in\n    // the domain. Expunge empty facets, and clear the corresponding elements\n    // from the nested index in each mark.\n    const nonEmpty = new Set();\n    for (const {facetsIndex} of facetStateByMark.values()) {\n      facetsIndex?.forEach((index, i) => {\n        if (index?.length > 0) {\n          nonEmpty.add(i);\n        }\n      });\n    }\n\n    // If all the facets are empty (as when none of the marks are actually\n    // faceted), none of them are empty.\n    facets.forEach(\n      0 < nonEmpty.size && nonEmpty.size < facets.length\n        ? (f, i) => (f.empty = !nonEmpty.has(i))\n        : (f) => (f.empty = false)\n    );\n\n    // For any mark using the \u201Cexclude\u201D facet mode, invert the index.\n    for (const mark of marks) {\n      if (mark.facet === \"exclude\") {\n        const facetState = facetStateByMark.get(mark);\n        if (facetState !== undefined) facetState.facetsIndex = facetExclude(facetState.facetsIndex);\n      }\n    }\n  }\n\n  // If a scale is explicitly declared in options, initialize its associated\n  // channels to the empty array; this will guarantee that a corresponding scale\n  // will be created later (even if there are no other channels). Ignore facet\n  // scale declarations, which are handled above.\n  for (const key of scaleRegistry.keys()) {\n    if (isScaleOptions(options[key]) && key !== \"fx\" && key !== \"fy\") {\n      channelsByScale.set(key, []);\n    }\n  }\n\n  // A Map from Mark instance to its render state, including:\n  // index - the data index e.g. [0, 1, 2, 3, \u2026]\n  // channels - an array of materialized channels e.g. [[\"x\", {value}], \u2026]\n  // faceted - a boolean indicating whether this mark is faceted\n  // values - an object of scaled values e.g. {x: [40, 32, \u2026], \u2026}\n  const stateByMark = new Map();\n\n  // Initialize the marks\u2019 state.\n  for (const mark of marks) {\n    if (stateByMark.has(mark)) throw new Error(\"duplicate mark; each mark must be unique\");\n    const {facetsIndex, channels: facetChannels} = facetStateByMark.get(mark) ?? {};\n    const {data, facets, channels} = mark.initialize(facetsIndex, facetChannels, options);\n    applyScaleTransforms(channels, options);\n    stateByMark.set(mark, {data, facets, channels});\n  }\n\n  // Initalize the scales and dimensions.\n  const scaleDescriptors = createScales(addScaleChannels(channelsByScale, stateByMark, options), options);\n  const scales = createScaleFunctions(scaleDescriptors);\n  const dimensions = createDimensions(scaleDescriptors, marks, options);\n\n  autoScaleRange(scaleDescriptors, dimensions);\n\n  const {fx, fy} = scales;\n  const subdimensions = fx || fy ? innerDimensions(scaleDescriptors, dimensions) : dimensions;\n  const superdimensions = fx || fy ? actualDimensions(scales, dimensions) : dimensions;\n\n  // Initialize the context.\n  const context = createContext(options);\n  const document = context.document;\n  const svg = creator(\"svg\").call(document.documentElement);\n  let figure = svg; // replaced with the figure element, if any\n  context.ownerSVGElement = svg;\n  context.className = className;\n  context.projection = createProjection(options, subdimensions);\n\n  // Allows e.g. the axis mark to determine faceting lazily.\n  context.filterFacets = (data, channels) => {\n    return facetFilter(facets, {channels, groups: facetGroups(data, channels)});\n  };\n\n  // Allows e.g. the tip mark to reference channels and data on other marks.\n  context.getMarkState = (mark) => {\n    const state = stateByMark.get(mark);\n    const facetState = facetStateByMark.get(mark);\n    return {...state, channels: {...state.channels, ...facetState?.channels}};\n  };\n\n  // Allows e.g. the pointer transform to support viewof.\n  context.dispatchValue = (value) => {\n    if (figure.value === value) return;\n    figure.value = value;\n    figure.dispatchEvent(new Event(\"input\", {bubbles: true}));\n  };\n\n  // Reinitialize; for deriving channels dependent on other channels.\n  const newByScale = new Set();\n  for (const [mark, state] of stateByMark) {\n    if (mark.initializer != null) {\n      const dimensions = mark.facet === \"super\" ? superdimensions : subdimensions;\n      const update = mark.initializer(state.data, state.facets, state.channels, scales, dimensions, context);\n      if (update.data !== undefined) {\n        state.data = update.data;\n      }\n      if (update.facets !== undefined) {\n        state.facets = update.facets;\n      }\n      if (update.channels !== undefined) {\n        const {fx, fy, ...channels} = update.channels; // separate facet channels\n        inferChannelScales(channels);\n        Object.assign(state.channels, channels);\n        for (const channel of Object.values(channels)) {\n          const {scale} = channel;\n          // Initializers aren\u2019t allowed to redefine position scales as this\n          // would introduce a circular dependency; so simply scale these\n          // channels as-is rather than creating new scales, and assume that\n          // they already have the scale\u2019s transform applied, if any (e.g., when\n          // generating ticks for the axis mark).\n          if (scale != null && scaleRegistry.get(scale) !== position) {\n            applyScaleTransform(channel, options);\n            newByScale.add(scale);\n          }\n        }\n        // If the initializer returns new mark-level facet channels, we must\n        // record that the mark is now faceted. Note: we aren\u2019t actually\n        // populating the facet state, but subsequently we won\u2019t need it.\n        if (fx != null || fy != null) facetStateByMark.set(mark, true);\n      }\n    }\n  }\n\n  // Reconstruct scales if new scaled channels were created during\n  // reinitialization. Preserve existing scale labels, if any.\n  if (newByScale.size) {\n    const newChannelsByScale = new Map();\n    addScaleChannels(newChannelsByScale, stateByMark, options, (key) => newByScale.has(key));\n    addScaleChannels(channelsByScale, stateByMark, options, (key) => newByScale.has(key));\n    const newScaleDescriptors = inheritScaleLabels(createScales(newChannelsByScale, options), scaleDescriptors);\n    const newScales = createScaleFunctions(newScaleDescriptors);\n    Object.assign(scaleDescriptors, newScaleDescriptors);\n    Object.assign(scales, newScales);\n  }\n\n  // Sort and filter the facets to match the fx and fy domains; this is needed\n  // because the facets were constructed prior to the fx and fy scales.\n  let facetDomains, facetTranslate;\n  if (facets !== undefined) {\n    facetDomains = {x: fx?.domain(), y: fy?.domain()};\n    facets = recreateFacets(facets, facetDomains);\n    facetTranslate = facetTranslator(fx, fy, dimensions);\n  }\n\n  // Compute value objects, applying scales and projection as needed.\n  for (const [mark, state] of stateByMark) {\n    state.values = mark.scale(state.channels, scales, context);\n  }\n\n  const {width, height} = dimensions;\n\n  select(svg)\n    .attr(\"class\", className)\n    .attr(\"fill\", \"currentColor\")\n    .attr(\"font-family\", \"system-ui, sans-serif\")\n    .attr(\"font-size\", 10)\n    .attr(\"text-anchor\", \"middle\")\n    .attr(\"width\", width)\n    .attr(\"height\", height)\n    .attr(\"viewBox\", `0 0 ${width} ${height}`)\n    .attr(\"aria-label\", ariaLabel)\n    .attr(\"aria-description\", ariaDescription)\n    .call((svg) =>\n      // Warning: if you edit this, change defaultClassName.\n      svg.append(\"style\").text(\n        `.${className} {\n  display: block;\n  background: white;\n  height: auto;\n  height: intrinsic;\n  max-width: 100%;\n}\n.${className} text,\n.${className} tspan {\n  white-space: pre;\n}`\n      )\n    )\n    .call(applyInlineStyles, style);\n\n  // Render marks.\n  for (const mark of marks) {\n    const {channels, values, facets: indexes} = stateByMark.get(mark);\n\n    // Render a non-faceted mark.\n    if (facets === undefined || mark.facet === \"super\") {\n      let index = null;\n      if (indexes) {\n        index = indexes[0];\n        index = mark.filter(index, channels, values);\n        if (index.length === 0) continue;\n      }\n      const node = mark.render(index, scales, values, superdimensions, context);\n      if (node == null) continue;\n      svg.appendChild(node);\n    }\n\n    // Render a faceted mark.\n    else {\n      let g;\n      for (const f of facets) {\n        if (!(mark.facetAnchor?.(facets, facetDomains, f) ?? !f.empty)) continue;\n        let index = null;\n        if (indexes) {\n          const faceted = facetStateByMark.has(mark);\n          index = indexes[faceted ? f.i : 0];\n          index = mark.filter(index, channels, values);\n          if (index.length === 0) continue;\n          if (!faceted && index === indexes[0]) index = subarray(index); // copy before assigning fx, fy, fi\n          (index.fx = f.x), (index.fy = f.y), (index.fi = f.i);\n        }\n        const node = mark.render(index, scales, values, subdimensions, context);\n        if (node == null) continue;\n        // Lazily construct the shared group (to drop empty marks).\n        (g ??= select(svg).append(\"g\")).append(() => node).datum(f);\n        // Promote ARIA attributes and mark transform to avoid repetition on\n        // each facet; this assumes that these attributes are consistent across\n        // facets, but that should be the case!\n        for (const name of [\"aria-label\", \"aria-description\", \"aria-hidden\", \"transform\"]) {\n          if (node.hasAttribute(name)) {\n            g.attr(name, node.getAttribute(name));\n            node.removeAttribute(name);\n          }\n        }\n      }\n      g?.selectChildren().attr(\"transform\", facetTranslate);\n    }\n  }\n\n  // Wrap the plot in a figure with a caption, if desired.\n  const legends = createLegends(scaleDescriptors, context, options);\n  if (caption != null || legends.length > 0) {\n    figure = document.createElement(\"figure\");\n    figure.style.maxWidth = \"initial\";\n    for (const legend of legends) figure.appendChild(legend);\n    figure.appendChild(svg);\n    if (caption != null) {\n      const figcaption = document.createElement(\"figcaption\");\n      figcaption.appendChild(caption?.ownerDocument ? caption : document.createTextNode(caption));\n      figure.appendChild(figcaption);\n    }\n  }\n\n  figure.scale = exposeScales(scaleDescriptors);\n  figure.legend = exposeLegends(scaleDescriptors, context, options);\n\n  const w = consumeWarnings();\n  if (w > 0) {\n    select(svg)\n      .append(\"text\")\n      .attr(\"x\", width)\n      .attr(\"y\", 20)\n      .attr(\"dy\", \"-1em\")\n      .attr(\"text-anchor\", \"end\")\n      .attr(\"font-family\", \"initial\") // fix emoji rendering in Chrome\n      .text(\"\\u26a0\\ufe0f\") // emoji variation selector\n      .append(\"title\")\n      .text(`${w.toLocaleString(\"en-US\")} warning${w === 1 ? \"\" : \"s\"}. Please check the console.`);\n  }\n\n  return figure;\n}\n\nfunction plotThis({marks = [], ...options} = {}) {\n  return plot({...options, marks: [...marks, this]});\n}\n\n// Note: This side-effect avoids a circular dependency.\nMark.prototype.plot = plotThis;\n\nfunction flatMarks(marks) {\n  return marks\n    .flat(Infinity)\n    .filter((mark) => mark != null)\n    .map(markify);\n}\n\nfunction markify(mark) {\n  return typeof mark.render === \"function\" ? mark : new Render(mark);\n}\n\nclass Render extends Mark {\n  constructor(render) {\n    if (typeof render !== \"function\") throw new TypeError(\"invalid mark; missing render function\");\n    super();\n    this.render = render;\n  }\n  render() {}\n}\n\n// Note: mutates channel.value to apply the scale transform, if any.\nfunction applyScaleTransforms(channels, options) {\n  for (const name in channels) applyScaleTransform(channels[name], options);\n  return channels;\n}\n\n// Note: mutates channel.value to apply the scale transform, if any. Also sets\n// channel.transform to false to prevent duplicate transform application.\nfunction applyScaleTransform(channel, options) {\n  const {scale, transform: t = true} = channel;\n  if (scale == null || !t) return;\n  const {\n    type,\n    percent,\n    interval,\n    transform = percent ? (x) => x * 100 : maybeIntervalTransform(interval, type)\n  } = options[scale] ?? {};\n  if (transform == null) return;\n  channel.value = map(channel.value, transform);\n  channel.transform = false;\n}\n\n// An initializer may generate channels without knowing how the downstream mark\n// will use them. Marks are typically responsible associated scales with\n// channels, but here we assume common behavior across marks.\nfunction inferChannelScales(channels) {\n  for (const name in channels) {\n    inferChannelScale(name, channels[name]);\n  }\n}\n\nfunction addScaleChannels(channelsByScale, stateByMark, options, filter = yes) {\n  for (const {channels} of stateByMark.values()) {\n    for (const name in channels) {\n      const channel = channels[name];\n      const {scale} = channel;\n      if (scale != null && filter(scale)) {\n        // Geo marks affect the default x and y domains if there is no\n        // projection. Skip this (as an optimization) when a projection is\n        // specified, or when the domains for x and y are specified.\n        if (scale === \"projection\") {\n          if (!hasProjection(options)) {\n            const gx = options.x?.domain === undefined;\n            const gy = options.y?.domain === undefined;\n            if (gx || gy) {\n              const [x, y] = getGeometryChannels(channel);\n              if (gx) addScaleChannel(channelsByScale, \"x\", x);\n              if (gy) addScaleChannel(channelsByScale, \"y\", y);\n            }\n          }\n        } else {\n          addScaleChannel(channelsByScale, scale, channel);\n        }\n      }\n    }\n  }\n  return channelsByScale;\n}\n\nfunction addScaleChannel(channelsByScale, scale, channel) {\n  const scaleChannels = channelsByScale.get(scale);\n  if (scaleChannels !== undefined) scaleChannels.push(channel);\n  else channelsByScale.set(scale, [channel]);\n}\n\n// Returns the facet groups, and possibly fx and fy channels, associated with\n// the top-level facet option {data, x, y}.\nfunction maybeTopFacet(facet, options) {\n  if (facet == null) return;\n  const {x, y} = facet;\n  if (x == null && y == null) return;\n  const data = arrayify(facet.data);\n  if (data == null) throw new Error(\"missing facet data\");\n  const channels = {};\n  if (x != null) channels.fx = createChannel(data, {value: x, scale: \"fx\"});\n  if (y != null) channels.fy = createChannel(data, {value: y, scale: \"fy\"});\n  applyScaleTransforms(channels, options);\n  const groups = facetGroups(data, channels);\n  return {channels, groups, data: facet.data};\n}\n\n// Returns the facet groups, and possibly fx and fy channels, associated with a\n// mark, either through top-level faceting or mark-level facet options {fx, fy}.\nfunction maybeMarkFacet(mark, topFacetState, options) {\n  if (mark.facet === null || mark.facet === \"super\") return;\n\n  // This mark defines a mark-level facet. TODO There\u2019s some code duplication\n  // here with maybeTopFacet that we could reduce.\n  const {fx, fy} = mark;\n  if (fx != null || fy != null) {\n    const data = arrayify(mark.data ?? fx ?? fy);\n    if (data === undefined) throw new Error(`missing facet data in ${mark.ariaLabel}`);\n    if (data === null) return; // ignore channel definitions if no data is provided TODO this right?\n    const channels = {};\n    if (fx != null) channels.fx = createChannel(data, {value: fx, scale: \"fx\"});\n    if (fy != null) channels.fy = createChannel(data, {value: fy, scale: \"fy\"});\n    applyScaleTransforms(channels, options);\n    return {channels, groups: facetGroups(data, channels)};\n  }\n\n  // This mark links to a top-level facet, if present.\n  if (topFacetState === undefined) return;\n\n  // TODO Can we link the top-level facet channels here?\n  const {channels, groups, data} = topFacetState;\n  if (mark.facet !== \"auto\" || mark.data === data) return {channels, groups};\n\n  // Warn for the common pitfall of wanting to facet mapped data with the\n  // top-level facet option.\n  if (\n    data.length > 0 &&\n    (groups.size > 1 || (groups.size === 1 && channels.fx && channels.fy && [...groups][0][1].size > 1)) &&\n    arrayify(mark.data)?.length === data.length\n  ) {\n    warn(\n      `Warning: the ${mark.ariaLabel} mark appears to use faceted data, but isn\u2019t faceted. The mark data has the same length as the facet data and the mark facet option is \"auto\", but the mark data and facet data are distinct. If this mark should be faceted, set the mark facet option to true; otherwise, suppress this warning by setting the mark facet option to false.`\n    );\n  }\n}\n\nfunction derive(mark, options = {}) {\n  return initializer({...options, x: null, y: null}, (data, facets, channels, scales, dimensions, context) => {\n    return context.getMarkState(mark);\n  });\n}\n\nfunction inferTips(marks) {\n  const tips = [];\n  for (const mark of marks) {\n    const t = mark.tip;\n    if (t) {\n      const p = t === \"x\" ? pointerX : t === \"y\" ? pointerY : pointer;\n      const options = p(derive(mark)); // TODO tip options?\n      options.title = null; // prevent implicit title for primitive data\n      tips.push(tip(mark.data, options));\n    }\n  }\n  return tips;\n}\n\nfunction inferAxes(marks, channelsByScale, options) {\n  let {\n    projection,\n    x = {},\n    y = {},\n    fx = {},\n    fy = {},\n    axis,\n    grid,\n    facet = {},\n    facet: {axis: facetAxis = axis, grid: facetGrid} = facet,\n    x: {axis: xAxis = axis, grid: xGrid = xAxis === null ? null : grid} = x,\n    y: {axis: yAxis = axis, grid: yGrid = yAxis === null ? null : grid} = y,\n    fx: {axis: fxAxis = facetAxis, grid: fxGrid = fxAxis === null ? null : facetGrid} = fx,\n    fy: {axis: fyAxis = facetAxis, grid: fyGrid = fyAxis === null ? null : facetGrid} = fy\n  } = options;\n\n  // Disable axes if the corresponding scale is not present.\n  if (projection || (!isScaleOptions(x) && !hasPositionChannel(\"x\", marks))) xAxis = xGrid = null;\n  if (projection || (!isScaleOptions(y) && !hasPositionChannel(\"y\", marks))) yAxis = yGrid = null;\n  if (!channelsByScale.has(\"fx\")) fxAxis = fxGrid = null;\n  if (!channelsByScale.has(\"fy\")) fyAxis = fyGrid = null;\n\n  // Resolve the default implicit axes by checking for explicit ones.\n  if (xAxis === undefined) xAxis = !hasAxis(marks, \"x\");\n  if (yAxis === undefined) yAxis = !hasAxis(marks, \"y\");\n  if (fxAxis === undefined) fxAxis = !hasAxis(marks, \"fx\");\n  if (fyAxis === undefined) fyAxis = !hasAxis(marks, \"fy\");\n\n  // Resolve the default orientation of axes.\n  if (xAxis === true) xAxis = \"bottom\";\n  if (yAxis === true) yAxis = \"left\";\n  if (fxAxis === true) fxAxis = xAxis === \"top\" || xAxis === null ? \"bottom\" : \"top\";\n  if (fyAxis === true) fyAxis = yAxis === \"right\" || yAxis === null ? \"left\" : \"right\";\n\n  const axes = [];\n  maybeGrid(axes, fyGrid, gridFy, fy);\n  maybeAxis(axes, fyAxis, axisFy, \"right\", \"left\", facet, fy);\n  maybeGrid(axes, fxGrid, gridFx, fx);\n  maybeAxis(axes, fxAxis, axisFx, \"top\", \"bottom\", facet, fx);\n  maybeGrid(axes, yGrid, gridY, y);\n  maybeAxis(axes, yAxis, axisY, \"left\", \"right\", options, y);\n  maybeGrid(axes, xGrid, gridX, x);\n  maybeAxis(axes, xAxis, axisX, \"bottom\", \"top\", options, x);\n  return axes;\n}\n\nfunction maybeAxis(axes, axis, axisType, primary, secondary, defaults, options) {\n  if (!axis) return;\n  const both = isBoth(axis);\n  options = axisOptions(both ? primary : axis, defaults, options);\n  const {line} = options;\n  if ((axisType === axisY || axisType === axisX) && line && !isNone(line)) axes.push(frame(lineOptions(options)));\n  axes.push(axisType(options));\n  if (both) axes.push(axisType({...options, anchor: secondary, label: null}));\n}\n\nfunction maybeGrid(axes, grid, gridType, options) {\n  if (!grid || isNone(grid)) return;\n  axes.push(gridType(gridOptions(grid, options)));\n}\n\nfunction isBoth(value) {\n  return /^\\s*both\\s*$/i.test(value);\n}\n\nfunction axisOptions(\n  anchor,\n  defaults,\n  {\n    line = defaults.line,\n    ticks,\n    tickSize,\n    tickSpacing,\n    tickPadding,\n    tickFormat,\n    tickRotate,\n    fontVariant,\n    ariaLabel,\n    ariaDescription,\n    label = defaults.label,\n    labelAnchor,\n    labelArrow = defaults.labelArrow,\n    labelOffset\n  }\n) {\n  return {\n    anchor,\n    line,\n    ticks,\n    tickSize,\n    tickSpacing,\n    tickPadding,\n    tickFormat,\n    tickRotate,\n    fontVariant,\n    ariaLabel,\n    ariaDescription,\n    label,\n    labelAnchor,\n    labelArrow,\n    labelOffset\n  };\n}\n\nfunction lineOptions(options) {\n  const {anchor, line} = options;\n  return {anchor, facetAnchor: anchor + \"-empty\", stroke: line === true ? undefined : line};\n}\n\nfunction gridOptions(\n  grid,\n  {\n    stroke = isColor(grid) ? grid : undefined,\n    ticks = isGridTicks(grid) ? grid : undefined,\n    tickSpacing,\n    ariaLabel,\n    ariaDescription\n  }\n) {\n  return {\n    stroke,\n    ticks,\n    tickSpacing,\n    ariaLabel,\n    ariaDescription\n  };\n}\n\nfunction isGridTicks(grid) {\n  switch (typeof grid) {\n    case \"number\":\n      return true;\n    case \"string\":\n      return !isColor(grid);\n  }\n  return isIterable(grid) || typeof grid?.range === \"function\";\n}\n\n// Is there an explicit axis already present? TODO We probably want a more\n// explicit test than looking for the ARIA label, but it does afford some\n// flexibility in axis implementation which is nice.\nfunction hasAxis(marks, k) {\n  const prefix = `${k}-axis `;\n  return marks.some((m) => m.ariaLabel?.startsWith(prefix));\n}\n\nfunction hasPositionChannel(k, marks) {\n  for (const mark of marks) {\n    for (const key in mark.channels) {\n      const {scale} = mark.channels[key];\n      if (scale === k || scale === \"projection\") {\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\nfunction inheritScaleLabels(newScales, scales) {\n  for (const key in newScales) {\n    const newScale = newScales[key];\n    const scale = scales[key];\n    if (newScale.label === undefined && scale) {\n      newScale.label = scale.label;\n    }\n  }\n  return newScales;\n}\n\n// This differs from the other outerDimensions in that it accounts for rounding\n// and outer padding in the fact scales; we want the frame to align exactly with\n// the actual range, not the desired range.\nfunction actualDimensions({fx, fy}, dimensions) {\n  const {marginTop, marginRight, marginBottom, marginLeft, width, height} = outerDimensions(dimensions);\n  const fxr = fx && outerRange(fx);\n  const fyr = fy && outerRange(fy);\n  return {\n    marginTop: fy ? fyr[0] : marginTop,\n    marginRight: fx ? width - fxr[1] : marginRight,\n    marginBottom: fy ? height - fyr[1] : marginBottom,\n    marginLeft: fx ? fxr[0] : marginLeft,\n    // Some marks, namely the x- and y-axis labels, want to know what the\n    // desired (rather than actual) margins are for positioning.\n    inset: {\n      marginTop: dimensions.marginTop,\n      marginRight: dimensions.marginRight,\n      marginBottom: dimensions.marginBottom,\n      marginLeft: dimensions.marginLeft\n    },\n    width,\n    height\n  };\n}\n\nfunction outerRange(scale) {\n  const domain = scale.domain();\n  let x1 = scale(domain[0]);\n  let x2 = scale(domain[domain.length - 1]);\n  if (x2 < x1) [x1, x2] = [x2, x1];\n  return [x1, x2 + scale.bandwidth()];\n}\n", "import {\n  bisect,\n  extent,\n  thresholdFreedmanDiaconis,\n  thresholdScott,\n  thresholdSturges,\n  tickIncrement,\n  ticks,\n  utcTickInterval\n} from \"d3\";\nimport {withTip} from \"../mark.js\";\nimport {\n  coerceDate,\n  coerceNumbers,\n  identity,\n  isIterable,\n  isTemporal,\n  labelof,\n  map,\n  maybeApplyInterval,\n  maybeColorChannel,\n  maybeColumn,\n  maybeRangeInterval,\n  maybeTuple,\n  maybeValue,\n  mid,\n  valueof\n} from \"../options.js\";\nimport {maybeUtcInterval} from \"../time.js\";\nimport {basic} from \"./basic.js\";\nimport {\n  hasOutput,\n  maybeEvaluator,\n  maybeGroup,\n  maybeOutput,\n  maybeOutputs,\n  maybeReduce,\n  maybeSort,\n  maybeSubgroup,\n  reduceCount,\n  reduceFirst,\n  reduceIdentity\n} from \"./group.js\";\nimport {maybeInsetX, maybeInsetY} from \"./inset.js\";\n\n// Group on {z, fill, stroke}, then optionally on y, then bin x.\nexport function binX(outputs = {y: \"count\"}, options = {}) {\n  [outputs, options] = mergeOptions(outputs, options);\n  const {x, y} = options;\n  return binn(maybeBinValue(x, options, identity), null, null, y, outputs, maybeInsetX(options));\n}\n\n// Group on {z, fill, stroke}, then optionally on x, then bin y.\nexport function binY(outputs = {x: \"count\"}, options = {}) {\n  [outputs, options] = mergeOptions(outputs, options);\n  const {x, y} = options;\n  return binn(null, maybeBinValue(y, options, identity), x, null, outputs, maybeInsetY(options));\n}\n\n// Group on {z, fill, stroke}, then bin on x and y.\nexport function bin(outputs = {fill: \"count\"}, options = {}) {\n  [outputs, options] = mergeOptions(outputs, options);\n  const {x, y} = maybeBinValueTuple(options);\n  return binn(x, y, null, null, outputs, maybeInsetX(maybeInsetY(options)));\n}\n\nfunction maybeDenseInterval(bin, k, options = {}) {\n  return options?.interval == null\n    ? options\n    : bin({[k]: options?.reduce === undefined ? reduceFirst : options.reduce, filter: null}, options);\n}\n\nexport function maybeDenseIntervalX(options = {}) {\n  return maybeDenseInterval(binX, \"y\", withTip(options, \"x\"));\n}\n\nexport function maybeDenseIntervalY(options = {}) {\n  return maybeDenseInterval(binY, \"x\", withTip(options, \"y\"));\n}\n\nfunction binn(\n  bx, // optionally bin on x (exclusive with gx)\n  by, // optionally bin on y (exclusive with gy)\n  gx, // optionally group on x (exclusive with bx and gy)\n  gy, // optionally group on y (exclusive with by and gx)\n  {\n    data: reduceData = reduceIdentity, // TODO avoid materializing when unused?\n    filter = reduceCount, // return only non-empty bins by default\n    sort,\n    reverse,\n    ...outputs // output channel definitions\n  } = {},\n  inputs = {} // input channels and options\n) {\n  bx = maybeBin(bx);\n  by = maybeBin(by);\n\n  // Compute the outputs.\n  outputs = maybeBinOutputs(outputs, inputs);\n  reduceData = maybeBinReduce(reduceData, identity);\n  sort = sort == null ? undefined : maybeBinOutput(\"sort\", sort, inputs);\n  filter = filter == null ? undefined : maybeBinEvaluator(\"filter\", filter, inputs);\n\n  // Don\u2019t group on a channel if an output requires it as an input!\n  if (gx != null && hasOutput(outputs, \"x\", \"x1\", \"x2\")) gx = null;\n  if (gy != null && hasOutput(outputs, \"y\", \"y1\", \"y2\")) gy = null;\n\n  // Produce x1, x2, y1, and y2 output channels as appropriate (when binning).\n  const [BX1, setBX1] = maybeColumn(bx);\n  const [BX2, setBX2] = maybeColumn(bx);\n  const [BY1, setBY1] = maybeColumn(by);\n  const [BY2, setBY2] = maybeColumn(by);\n\n  // Produce x or y output channels as appropriate (when grouping).\n  const [k, gk] = gx != null ? [gx, \"x\"] : gy != null ? [gy, \"y\"] : [];\n  const [GK, setGK] = maybeColumn(k);\n\n  // Greedily materialize the z, fill, and stroke channels (if channels and not\n  // constants) so that we can reference them for subdividing groups without\n  // computing them more than once. We also want to consume options that should\n  // only apply to this transform rather than passing them through to the next.\n  const {\n    x,\n    y,\n    z,\n    fill,\n    stroke,\n    x1,\n    x2, // consumed if x is an output\n    y1,\n    y2, // consumed if y is an output\n    domain,\n    cumulative,\n    thresholds,\n    interval,\n    ...options\n  } = inputs;\n  const [GZ, setGZ] = maybeColumn(z);\n  const [vfill] = maybeColorChannel(fill);\n  const [vstroke] = maybeColorChannel(stroke);\n  const [GF, setGF] = maybeColumn(vfill);\n  const [GS, setGS] = maybeColumn(vstroke);\n\n  return {\n    ...(\"z\" in inputs && {z: GZ || z}),\n    ...(\"fill\" in inputs && {fill: GF || fill}),\n    ...(\"stroke\" in inputs && {stroke: GS || stroke}),\n    ...basic(options, (data, facets, plotOptions) => {\n      const K = maybeApplyInterval(valueof(data, k), plotOptions?.[gk]);\n      const Z = valueof(data, z);\n      const F = valueof(data, vfill);\n      const S = valueof(data, vstroke);\n      const G = maybeSubgroup(outputs, {z: Z, fill: F, stroke: S});\n      const groupFacets = [];\n      const groupData = [];\n      const GK = K && setGK([]);\n      const GZ = Z && setGZ([]);\n      const GF = F && setGF([]);\n      const GS = S && setGS([]);\n      const BX1 = bx && setBX1([]);\n      const BX2 = bx && setBX2([]);\n      const BY1 = by && setBY1([]);\n      const BY2 = by && setBY2([]);\n      const bin = bing(bx?.(data), by?.(data));\n      let i = 0;\n      for (const o of outputs) o.initialize(data);\n      if (sort) sort.initialize(data);\n      if (filter) filter.initialize(data);\n      for (const facet of facets) {\n        const groupFacet = [];\n        for (const o of outputs) o.scope(\"facet\", facet);\n        if (sort) sort.scope(\"facet\", facet);\n        if (filter) filter.scope(\"facet\", facet);\n        for (const [f, I] of maybeGroup(facet, G)) {\n          for (const [k, g] of maybeGroup(I, K)) {\n            for (const [b, extent] of bin(g)) {\n              if (filter && !filter.reduce(b, extent)) continue;\n              groupFacet.push(i++);\n              groupData.push(reduceData.reduceIndex(b, data, extent));\n              if (K) GK.push(k);\n              if (Z) GZ.push(G === Z ? f : Z[b[0]]);\n              if (F) GF.push(G === F ? f : F[b[0]]);\n              if (S) GS.push(G === S ? f : S[b[0]]);\n              if (BX1) BX1.push(extent.x1), BX2.push(extent.x2);\n              if (BY1) BY1.push(extent.y1), BY2.push(extent.y2);\n              for (const o of outputs) o.reduce(b, extent);\n              if (sort) sort.reduce(b);\n            }\n          }\n        }\n        groupFacets.push(groupFacet);\n      }\n      maybeSort(groupFacets, sort, reverse);\n      return {data: groupData, facets: groupFacets};\n    }),\n    ...(!hasOutput(outputs, \"x\") && (BX1 ? {x1: BX1, x2: BX2, x: mid(BX1, BX2)} : {x, x1, x2})),\n    ...(!hasOutput(outputs, \"y\") && (BY1 ? {y1: BY1, y2: BY2, y: mid(BY1, BY2)} : {y, y1, y2})),\n    ...(GK && {[gk]: GK}),\n    ...Object.fromEntries(outputs.map(({name, output}) => [name, output]))\n  };\n}\n\n// Allow bin options to be specified as part of outputs; merge them into options.\nfunction mergeOptions({cumulative, domain, thresholds, interval, ...outputs}, options) {\n  return [outputs, {cumulative, domain, thresholds, interval, ...options}];\n}\n\nfunction maybeBinValue(value, {cumulative, domain, thresholds, interval}, defaultValue) {\n  value = {...maybeValue(value)};\n  if (value.domain === undefined) value.domain = domain;\n  if (value.cumulative === undefined) value.cumulative = cumulative;\n  if (value.thresholds === undefined) value.thresholds = thresholds;\n  if (value.interval === undefined) value.interval = interval;\n  if (value.value === undefined) value.value = defaultValue;\n  value.thresholds = maybeThresholds(value.thresholds, value.interval);\n  return value;\n}\n\nfunction maybeBinValueTuple(options) {\n  let {x, y} = options;\n  x = maybeBinValue(x, options);\n  y = maybeBinValue(y, options);\n  [x.value, y.value] = maybeTuple(x.value, y.value);\n  return {x, y};\n}\n\nfunction maybeBin(options) {\n  if (options == null) return;\n  const {value, cumulative, domain = extent, thresholds} = options;\n  const bin = (data) => {\n    let V = valueof(data, value);\n    let T; // bin thresholds\n    if (isTemporal(V) || isTimeThresholds(thresholds)) {\n      V = map(V, coerceDate, Float64Array); // like coerceDates, but faster\n      let [min, max] = typeof domain === \"function\" ? domain(V) : domain;\n      let t = typeof thresholds === \"function\" && !isInterval(thresholds) ? thresholds(V, min, max) : thresholds;\n      if (typeof t === \"number\") t = utcTickInterval(min, max, t);\n      if (isInterval(t)) {\n        if (domain === extent) {\n          min = t.floor(min);\n          max = t.offset(t.floor(max));\n        }\n        t = t.range(min, t.offset(max));\n      }\n      T = t;\n    } else {\n      V = coerceNumbers(V);\n      let [min, max] = typeof domain === \"function\" ? domain(V) : domain;\n      let t = typeof thresholds === \"function\" && !isInterval(thresholds) ? thresholds(V, min, max) : thresholds;\n      if (typeof t === \"number\") {\n        // This differs from d3.ticks with regard to exclusive bounds: we want a\n        // first threshold less than or equal to the minimum, and a last\n        // threshold (strictly) greater than the maximum.\n        if (domain === extent) {\n          let step = tickIncrement(min, max, t);\n          if (isFinite(step)) {\n            if (step > 0) {\n              let r0 = Math.round(min / step);\n              let r1 = Math.round(max / step);\n              if (!(r0 * step <= min)) --r0;\n              if (!(r1 * step > max)) ++r1;\n              let n = r1 - r0 + 1;\n              t = new Float64Array(n);\n              for (let i = 0; i < n; ++i) t[i] = (r0 + i) * step;\n            } else if (step < 0) {\n              step = -step;\n              let r0 = Math.round(min * step);\n              let r1 = Math.round(max * step);\n              if (!(r0 / step <= min)) --r0;\n              if (!(r1 / step > max)) ++r1;\n              let n = r1 - r0 + 1;\n              t = new Float64Array(n);\n              for (let i = 0; i < n; ++i) t[i] = (r0 + i) / step;\n            } else {\n              t = [min];\n            }\n          } else {\n            t = [min];\n          }\n        } else {\n          t = ticks(min, max, t);\n        }\n      } else if (isInterval(t)) {\n        if (domain === extent) {\n          min = t.floor(min);\n          max = t.offset(t.floor(max));\n        }\n        t = t.range(min, t.offset(max));\n      }\n      T = t;\n    }\n    const E = [];\n    if (T.length === 1) E.push([T[0], T[0]]); // collapsed domain\n    else for (let i = 1; i < T.length; ++i) E.push([T[i - 1], T[i]]);\n    E.bin = (cumulative < 0 ? bin1cn : cumulative > 0 ? bin1cp : bin1)(E, T, V);\n    return E;\n  };\n  bin.label = labelof(value);\n  return bin;\n}\n\nexport function maybeThresholds(thresholds, interval, defaultThresholds = thresholdAuto) {\n  if (thresholds === undefined) {\n    return interval === undefined ? defaultThresholds : maybeRangeInterval(interval);\n  }\n  if (typeof thresholds === \"string\") {\n    switch (thresholds.toLowerCase()) {\n      case \"freedman-diaconis\":\n        return thresholdFreedmanDiaconis;\n      case \"scott\":\n        return thresholdScott;\n      case \"sturges\":\n        return thresholdSturges;\n      case \"auto\":\n        return thresholdAuto;\n    }\n    return maybeUtcInterval(thresholds);\n  }\n  return thresholds; // pass array, count, or function to bin.thresholds\n}\n\nfunction maybeBinOutputs(outputs, inputs) {\n  return maybeOutputs(outputs, inputs, maybeBinOutput);\n}\n\nfunction maybeBinOutput(name, reduce, inputs) {\n  return maybeOutput(name, reduce, inputs, maybeBinEvaluator);\n}\n\nfunction maybeBinEvaluator(name, reduce, inputs) {\n  return maybeEvaluator(name, reduce, inputs, maybeBinReduce);\n}\n\nfunction maybeBinReduce(reduce, value) {\n  return maybeReduce(reduce, value, maybeBinReduceFallback);\n}\n\nfunction maybeBinReduceFallback(reduce) {\n  switch (`${reduce}`.toLowerCase()) {\n    case \"x\":\n      return reduceX;\n    case \"x1\":\n      return reduceX1;\n    case \"x2\":\n      return reduceX2;\n    case \"y\":\n      return reduceY;\n    case \"y1\":\n      return reduceY1;\n    case \"y2\":\n      return reduceY2;\n  }\n  throw new Error(`invalid bin reduce: ${reduce}`);\n}\n\nfunction thresholdAuto(values, min, max) {\n  return Math.min(200, thresholdScott(values, min, max));\n}\n\nfunction isTimeThresholds(t) {\n  return isTimeInterval(t) || (isIterable(t) && isTemporal(t));\n}\n\nfunction isTimeInterval(t) {\n  return isInterval(t) && typeof t === \"function\" && t() instanceof Date;\n}\n\nfunction isInterval(t) {\n  return typeof t?.range === \"function\";\n}\n\nfunction bing(EX, EY) {\n  return EX && EY\n    ? function* (I) {\n        const X = EX.bin(I); // first bin on x\n        for (const [ix, [x1, x2]] of EX.entries()) {\n          const Y = EY.bin(X[ix]); // then bin on y\n          for (const [iy, [y1, y2]] of EY.entries()) {\n            yield [Y[iy], {x1, y1, x2, y2}];\n          }\n        }\n      }\n    : EX\n    ? function* (I) {\n        const X = EX.bin(I);\n        for (const [i, [x1, x2]] of EX.entries()) {\n          yield [X[i], {x1, x2}];\n        }\n      }\n    : function* (I) {\n        const Y = EY.bin(I);\n        for (const [i, [y1, y2]] of EY.entries()) {\n          yield [Y[i], {y1, y2}];\n        }\n      };\n}\n\n// non-cumulative distribution\nfunction bin1(E, T, V) {\n  T = coerceNumbers(T); // for faster bisection\n  return (I) => {\n    const B = E.map(() => []);\n    for (const i of I) B[bisect(T, V[i]) - 1]?.push(i); // TODO quantization?\n    return B;\n  };\n}\n\n// cumulative distribution\nfunction bin1cp(E, T, V) {\n  const bin = bin1(E, T, V);\n  return (I) => {\n    const B = bin(I);\n    for (let i = 1, n = B.length; i < n; ++i) {\n      const C = B[i - 1];\n      const b = B[i];\n      for (const j of C) b.push(j);\n    }\n    return B;\n  };\n}\n\n// complementary cumulative distribution\nfunction bin1cn(E, T, V) {\n  const bin = bin1(E, T, V);\n  return (I) => {\n    const B = bin(I);\n    for (let i = B.length - 2; i >= 0; --i) {\n      const C = B[i + 1];\n      const b = B[i];\n      for (const j of C) b.push(j);\n    }\n    return B;\n  };\n}\n\nfunction mid1(x1, x2) {\n  const m = (+x1 + +x2) / 2;\n  return x1 instanceof Date ? new Date(m) : m;\n}\n\nconst reduceX = {\n  reduceIndex(I, X, {x1, x2}) {\n    return mid1(x1, x2);\n  }\n};\n\nconst reduceY = {\n  reduceIndex(I, X, {y1, y2}) {\n    return mid1(y1, y2);\n  }\n};\n\nconst reduceX1 = {\n  reduceIndex(I, X, {x1}) {\n    return x1;\n  }\n};\n\nconst reduceX2 = {\n  reduceIndex(I, X, {x2}) {\n    return x2;\n  }\n};\n\nconst reduceY1 = {\n  reduceIndex(I, X, {y1}) {\n    return y1;\n  }\n};\n\nconst reduceY2 = {\n  reduceIndex(I, X, {y2}) {\n    return y2;\n  }\n};\n", "import {hasX, hasY, identity} from \"../options.js\";\n\nexport function maybeIdentityX(options = {}) {\n  return hasX(options) ? options : {...options, x: identity};\n}\n\nexport function maybeIdentityY(options = {}) {\n  return hasY(options) ? options : {...options, y: identity};\n}\n", "import {InternMap, cumsum, greatest, group, groupSort, max, min, rollup, sum} from \"d3\";\nimport {ascendingDefined, descendingDefined} from \"../defined.js\";\nimport {withTip} from \"../mark.js\";\nimport {maybeApplyInterval, maybeColumn, maybeZ, maybeZero} from \"../options.js\";\nimport {column, field, mid, one, range, valueof} from \"../options.js\";\nimport {basic} from \"./basic.js\";\n\nexport function stackX(stackOptions = {}, options = {}) {\n  if (arguments.length === 1) [stackOptions, options] = mergeOptions(stackOptions);\n  const {y1, y = y1, x, ...rest} = options; // note: consumes x!\n  const [transform, Y, x1, x2] = stack(y, x, \"y\", \"x\", stackOptions, rest);\n  return {...transform, y1, y: Y, x1, x2, x: mid(x1, x2)};\n}\n\nexport function stackX1(stackOptions = {}, options = {}) {\n  if (arguments.length === 1) [stackOptions, options] = mergeOptions(stackOptions);\n  const {y1, y = y1, x} = options;\n  const [transform, Y, X] = stack(y, x, \"y\", \"x\", stackOptions, options);\n  return {...transform, y1, y: Y, x: X};\n}\n\nexport function stackX2(stackOptions = {}, options = {}) {\n  if (arguments.length === 1) [stackOptions, options] = mergeOptions(stackOptions);\n  const {y1, y = y1, x} = options;\n  const [transform, Y, , X] = stack(y, x, \"y\", \"x\", stackOptions, options);\n  return {...transform, y1, y: Y, x: X};\n}\n\nexport function stackY(stackOptions = {}, options = {}) {\n  if (arguments.length === 1) [stackOptions, options] = mergeOptions(stackOptions);\n  const {x1, x = x1, y, ...rest} = options; // note: consumes y!\n  const [transform, X, y1, y2] = stack(x, y, \"x\", \"y\", stackOptions, rest);\n  return {...transform, x1, x: X, y1, y2, y: mid(y1, y2)};\n}\n\nexport function stackY1(stackOptions = {}, options = {}) {\n  if (arguments.length === 1) [stackOptions, options] = mergeOptions(stackOptions);\n  const {x1, x = x1, y} = options;\n  const [transform, X, Y] = stack(x, y, \"x\", \"y\", stackOptions, options);\n  return {...transform, x1, x: X, y: Y};\n}\n\nexport function stackY2(stackOptions = {}, options = {}) {\n  if (arguments.length === 1) [stackOptions, options] = mergeOptions(stackOptions);\n  const {x1, x = x1, y} = options;\n  const [transform, X, , Y] = stack(x, y, \"x\", \"y\", stackOptions, options);\n  return {...transform, x1, x: X, y: Y};\n}\n\nexport function maybeStackX({x, x1, x2, ...options} = {}) {\n  options = withTip(options, \"y\");\n  if (x1 === undefined && x2 === undefined) return stackX({x, ...options});\n  [x1, x2] = maybeZero(x, x1, x2);\n  return {...options, x1, x2};\n}\n\nexport function maybeStackY({y, y1, y2, ...options} = {}) {\n  options = withTip(options, \"x\");\n  if (y1 === undefined && y2 === undefined) return stackY({y, ...options});\n  [y1, y2] = maybeZero(y, y1, y2);\n  return {...options, y1, y2};\n}\n\n// The reverse option is ambiguous: it is both a stack option and a basic\n// transform. If only one options object is specified, we interpret it as a\n// stack option, and therefore must remove it from the propagated options.\nfunction mergeOptions(options) {\n  const {offset, order, reverse, ...rest} = options;\n  return [{offset, order, reverse}, rest];\n}\n\n// This is a hint to the tooltip mark that the y1 and y2 channels (for stackY,\n// or conversely x1 and x2 for stackX) represent a stacked length, and that the\n// tooltip should therefore show y2-y1 instead of an extent.\nconst lengthy = {length: true};\n\nfunction stack(x, y = one, kx, ky, {offset, order, reverse}, options) {\n  const z = maybeZ(options);\n  const [X, setX] = maybeColumn(x);\n  const [Y1, setY1] = column(y);\n  const [Y2, setY2] = column(y);\n  Y1.hint = Y2.hint = lengthy;\n  offset = maybeOffset(offset);\n  order = maybeOrder(order, offset, ky);\n  return [\n    basic(options, (data, facets, plotOptions) => {\n      const X = x == null ? undefined : setX(maybeApplyInterval(valueof(data, x), plotOptions?.[kx]));\n      const Y = valueof(data, y, Float64Array);\n      const Z = valueof(data, z);\n      const compare = order && order(data, X, Y, Z);\n      const n = data.length;\n      const Y1 = setY1(new Float64Array(n));\n      const Y2 = setY2(new Float64Array(n));\n      const facetstacks = [];\n      for (const facet of facets) {\n        const stacks = X ? Array.from(group(facet, (i) => X[i]).values()) : [facet];\n        if (compare) for (const stack of stacks) stack.sort(compare);\n        for (const stack of stacks) {\n          let yn = 0;\n          let yp = 0;\n          if (reverse) stack.reverse();\n          for (const i of stack) {\n            const y = Y[i];\n            if (y < 0) yn = Y2[i] = (Y1[i] = yn) + y;\n            else if (y > 0) yp = Y2[i] = (Y1[i] = yp) + y;\n            else Y2[i] = Y1[i] = yp; // NaN or zero\n          }\n        }\n        facetstacks.push(stacks);\n      }\n      if (offset) offset(facetstacks, Y1, Y2, Z);\n      return {data, facets};\n    }),\n    X,\n    Y1,\n    Y2\n  ];\n}\n\nfunction maybeOffset(offset) {\n  if (offset == null) return;\n  if (typeof offset === \"function\") return offset;\n  switch (`${offset}`.toLowerCase()) {\n    case \"expand\":\n    case \"normalize\":\n      return offsetExpand;\n    case \"center\":\n    case \"silhouette\":\n      return offsetCenter;\n    case \"wiggle\":\n      return offsetWiggle;\n  }\n  throw new Error(`unknown offset: ${offset}`);\n}\n\n// Given a single stack, returns the minimum and maximum values from the given\n// Y2 column. Note that this relies on Y2 always being the outer column for\n// diverging values.\nfunction extent(stack, Y2) {\n  let min = 0,\n    max = 0;\n  for (const i of stack) {\n    const y = Y2[i];\n    if (y < min) min = y;\n    if (y > max) max = y;\n  }\n  return [min, max];\n}\n\nfunction offsetExpand(facetstacks, Y1, Y2) {\n  for (const stacks of facetstacks) {\n    for (const stack of stacks) {\n      const [yn, yp] = extent(stack, Y2);\n      for (const i of stack) {\n        const m = 1 / (yp - yn || 1);\n        Y1[i] = m * (Y1[i] - yn);\n        Y2[i] = m * (Y2[i] - yn);\n      }\n    }\n  }\n}\n\nfunction offsetCenter(facetstacks, Y1, Y2) {\n  for (const stacks of facetstacks) {\n    for (const stack of stacks) {\n      const [yn, yp] = extent(stack, Y2);\n      for (const i of stack) {\n        const m = (yp + yn) / 2;\n        Y1[i] -= m;\n        Y2[i] -= m;\n      }\n    }\n    offsetZero(stacks, Y1, Y2);\n  }\n  offsetCenterFacets(facetstacks, Y1, Y2);\n}\n\nfunction offsetWiggle(facetstacks, Y1, Y2, Z) {\n  for (const stacks of facetstacks) {\n    const prev = new InternMap();\n    let y = 0;\n    for (const stack of stacks) {\n      let j = -1;\n      const Fi = stack.map((i) => Math.abs(Y2[i] - Y1[i]));\n      const Df = stack.map((i) => {\n        j = Z ? Z[i] : ++j;\n        const value = Y2[i] - Y1[i];\n        const diff = prev.has(j) ? value - prev.get(j) : 0;\n        prev.set(j, value);\n        return diff;\n      });\n      const Cf1 = [0, ...cumsum(Df)];\n      for (const i of stack) {\n        Y1[i] += y;\n        Y2[i] += y;\n      }\n      const s1 = sum(Fi);\n      if (s1) y -= sum(Fi, (d, i) => (Df[i] / 2 + Cf1[i]) * d) / s1;\n    }\n    offsetZero(stacks, Y1, Y2);\n  }\n  offsetCenterFacets(facetstacks, Y1, Y2);\n}\n\nfunction offsetZero(stacks, Y1, Y2) {\n  const m = min(stacks, (stack) => min(stack, (i) => Y1[i]));\n  for (const stack of stacks) {\n    for (const i of stack) {\n      Y1[i] -= m;\n      Y2[i] -= m;\n    }\n  }\n}\n\nfunction offsetCenterFacets(facetstacks, Y1, Y2) {\n  const n = facetstacks.length;\n  if (n === 1) return;\n  const facets = facetstacks.map((stacks) => stacks.flat());\n  const m = facets.map((I) => (min(I, (i) => Y1[i]) + max(I, (i) => Y2[i])) / 2);\n  const m0 = min(m);\n  for (let j = 0; j < n; j++) {\n    const p = m0 - m[j];\n    for (const i of facets[j]) {\n      Y1[i] += p;\n      Y2[i] += p;\n    }\n  }\n}\n\nfunction maybeOrder(order, offset, ky) {\n  if (order === undefined && offset === offsetWiggle) return orderInsideOut(ascendingDefined);\n  if (order == null) return;\n  if (typeof order === \"string\") {\n    const negate = order.startsWith(\"-\");\n    const compare = negate ? descendingDefined : ascendingDefined;\n    switch ((negate ? order.slice(1) : order).toLowerCase()) {\n      case \"value\":\n      case ky:\n        return orderY(compare);\n      case \"z\":\n        return orderZ(compare);\n      case \"sum\":\n        return orderSum(compare);\n      case \"appearance\":\n        return orderAppearance(compare);\n      case \"inside-out\":\n        return orderInsideOut(compare);\n    }\n    return orderAccessor(field(order));\n  }\n  if (typeof order === \"function\") return (order.length === 1 ? orderAccessor : orderComparator)(order);\n  if (Array.isArray(order)) return orderGiven(order);\n  throw new Error(`invalid order: ${order}`);\n}\n\n// by value\nfunction orderY(compare) {\n  return (data, X, Y) => (i, j) => compare(Y[i], Y[j]);\n}\n\n// by location\nfunction orderZ(compare) {\n  return (data, X, Y, Z) => (i, j) => compare(Z[i], Z[j]);\n}\n\n// by sum of value (a.k.a. \u201Cascending\u201D)\nfunction orderSum(compare) {\n  return orderZDomain(compare, (data, X, Y, Z) =>\n    groupSort(\n      range(data),\n      (I) => sum(I, (i) => Y[i]),\n      (i) => Z[i]\n    )\n  );\n}\n\n// by x = argmax of value\nfunction orderAppearance(compare) {\n  return orderZDomain(compare, (data, X, Y, Z) =>\n    groupSort(\n      range(data),\n      (I) => X[greatest(I, (i) => Y[i])],\n      (i) => Z[i]\n    )\n  );\n}\n\n// by x = argmax of value, but rearranged inside-out by alternating series\n// according to the sign of a running divergence of sums\nfunction orderInsideOut(compare) {\n  return orderZDomain(compare, (data, X, Y, Z) => {\n    const I = range(data);\n    const K = groupSort(\n      I,\n      (I) => X[greatest(I, (i) => Y[i])],\n      (i) => Z[i]\n    );\n    const sums = rollup(\n      I,\n      (I) => sum(I, (i) => Y[i]),\n      (i) => Z[i]\n    );\n    const Kp = [],\n      Kn = [];\n    let s = 0;\n    for (const k of K) {\n      if (s < 0) {\n        s += sums.get(k);\n        Kp.push(k);\n      } else {\n        s -= sums.get(k);\n        Kn.push(k);\n      }\n    }\n    return Kn.reverse().concat(Kp);\n  });\n}\n\nfunction orderAccessor(f) {\n  return (data) => {\n    const O = valueof(data, f);\n    return (i, j) => ascendingDefined(O[i], O[j]);\n  };\n}\n\nfunction orderComparator(f) {\n  return (data) => (i, j) => f(data[i], data[j]);\n}\n\nfunction orderGiven(domain) {\n  return orderZDomain(ascendingDefined, () => domain);\n}\n\n// Given an ordering (domain) of distinct values in z that can be derived from\n// the data, returns a comparator that can be used to sort stacks. Note that\n// this is a series order: it will be consistent across stacks.\nfunction orderZDomain(compare, domain) {\n  return (data, X, Y, Z) => {\n    if (!Z) throw new Error(\"missing channel: z\");\n    const map = new InternMap(domain(data, X, Y, Z).map((d, i) => [d, i]));\n    return (i, j) => compare(map.get(Z[i]), map.get(Z[j]));\n  };\n}\n", "import {create} from \"../context.js\";\nimport {Mark} from \"../mark.js\";\nimport {hasXY, identity, indexOf, number} from \"../options.js\";\nimport {isCollapsed} from \"../scales.js\";\nimport {applyAttr, applyChannelStyles, applyDirectStyles, applyIndirectStyles, applyTransform} from \"../style.js\";\nimport {impliedString} from \"../style.js\";\nimport {maybeIdentityX, maybeIdentityY} from \"../transforms/identity.js\";\nimport {maybeIntervalX, maybeIntervalY} from \"../transforms/interval.js\";\nimport {maybeStackX, maybeStackY} from \"../transforms/stack.js\";\n\nexport class AbstractBar extends Mark {\n  constructor(data, channels, options = {}, defaults) {\n    super(data, channels, options, defaults);\n    const {inset = 0, insetTop = inset, insetRight = inset, insetBottom = inset, insetLeft = inset, rx, ry} = options;\n    this.insetTop = number(insetTop);\n    this.insetRight = number(insetRight);\n    this.insetBottom = number(insetBottom);\n    this.insetLeft = number(insetLeft);\n    this.rx = impliedString(rx, \"auto\"); // number or percentage\n    this.ry = impliedString(ry, \"auto\");\n  }\n  render(index, scales, channels, dimensions, context) {\n    const {rx, ry} = this;\n    return create(\"svg:g\", context)\n      .call(applyIndirectStyles, this, dimensions, context)\n      .call(this._transform, this, scales)\n      .call((g) =>\n        g\n          .selectAll()\n          .data(index)\n          .enter()\n          .append(\"rect\")\n          .call(applyDirectStyles, this)\n          .attr(\"x\", this._x(scales, channels, dimensions))\n          .attr(\"width\", this._width(scales, channels, dimensions))\n          .attr(\"y\", this._y(scales, channels, dimensions))\n          .attr(\"height\", this._height(scales, channels, dimensions))\n          .call(applyAttr, \"rx\", rx)\n          .call(applyAttr, \"ry\", ry)\n          .call(applyChannelStyles, this, channels)\n      )\n      .node();\n  }\n  _x(scales, {x: X}, {marginLeft}) {\n    const {insetLeft} = this;\n    return X ? (i) => X[i] + insetLeft : marginLeft + insetLeft;\n  }\n  _y(scales, {y: Y}, {marginTop}) {\n    const {insetTop} = this;\n    return Y ? (i) => Y[i] + insetTop : marginTop + insetTop;\n  }\n  _width({x}, {x: X}, {marginRight, marginLeft, width}) {\n    const {insetLeft, insetRight} = this;\n    const bandwidth = X && x ? x.bandwidth() : width - marginRight - marginLeft;\n    return Math.max(0, bandwidth - insetLeft - insetRight);\n  }\n  _height({y}, {y: Y}, {marginTop, marginBottom, height}) {\n    const {insetTop, insetBottom} = this;\n    const bandwidth = Y && y ? y.bandwidth() : height - marginTop - marginBottom;\n    return Math.max(0, bandwidth - insetTop - insetBottom);\n  }\n}\n\nconst defaults = {\n  ariaLabel: \"bar\"\n};\n\nexport class BarX extends AbstractBar {\n  constructor(data, options = {}) {\n    const {x1, x2, y} = options;\n    super(\n      data,\n      {\n        x1: {value: x1, scale: \"x\"},\n        x2: {value: x2, scale: \"x\"},\n        y: {value: y, scale: \"y\", type: \"band\", optional: true}\n      },\n      options,\n      defaults\n    );\n  }\n  _transform(selection, mark, {x}) {\n    selection.call(applyTransform, mark, {x}, 0, 0);\n  }\n  _x({x}, {x1: X1, x2: X2}, {marginLeft}) {\n    const {insetLeft} = this;\n    return isCollapsed(x) ? marginLeft + insetLeft : (i) => Math.min(X1[i], X2[i]) + insetLeft;\n  }\n  _width({x}, {x1: X1, x2: X2}, {marginRight, marginLeft, width}) {\n    const {insetLeft, insetRight} = this;\n    return isCollapsed(x)\n      ? width - marginRight - marginLeft - insetLeft - insetRight\n      : (i) => Math.max(0, Math.abs(X2[i] - X1[i]) - insetLeft - insetRight);\n  }\n}\n\nexport class BarY extends AbstractBar {\n  constructor(data, options = {}) {\n    const {x, y1, y2} = options;\n    super(\n      data,\n      {\n        y1: {value: y1, scale: \"y\"},\n        y2: {value: y2, scale: \"y\"},\n        x: {value: x, scale: \"x\", type: \"band\", optional: true}\n      },\n      options,\n      defaults\n    );\n  }\n  _transform(selection, mark, {y}) {\n    selection.call(applyTransform, mark, {y}, 0, 0);\n  }\n  _y({y}, {y1: Y1, y2: Y2}, {marginTop}) {\n    const {insetTop} = this;\n    return isCollapsed(y) ? marginTop + insetTop : (i) => Math.min(Y1[i], Y2[i]) + insetTop;\n  }\n  _height({y}, {y1: Y1, y2: Y2}, {marginTop, marginBottom, height}) {\n    const {insetTop, insetBottom} = this;\n    return isCollapsed(y)\n      ? height - marginTop - marginBottom - insetTop - insetBottom\n      : (i) => Math.max(0, Math.abs(Y2[i] - Y1[i]) - insetTop - insetBottom);\n  }\n}\n\nexport function barX(data, options = {}) {\n  if (!hasXY(options)) options = {...options, y: indexOf, x2: identity};\n  return new BarX(data, maybeStackX(maybeIntervalX(maybeIdentityX(options))));\n}\n\nexport function barY(data, options = {}) {\n  if (!hasXY(options)) options = {...options, x: indexOf, y2: identity};\n  return new BarY(data, maybeStackY(maybeIntervalY(maybeIdentityY(options))));\n}\n", "/**\n * @license\n * Copyright 2023 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\ninterface Page {\n  Charts: ChartData;\n}\n\ninterface ChartData {\n  Programs: Program[];\n}\n\ninterface Program {\n  ID: string;\n  Name: string;\n  Charts: Chart[];\n}\n\ninterface Chart {\n  ID: string;\n  Name: string;\n  Type: string;\n  Data: Datum[] | null;\n}\n\ninterface Datum {\n  Key: string;\n  Value: number;\n}\n\ndeclare const Page: Page;\n\nimport * as d3 from \"d3\";\nimport * as Plot from \"@observablehq/plot\";\n\nfor (const program of Page.Charts.Programs) {\n  for (const counter of program.Charts) {\n    if (!counter) {\n      continue;\n    }\n    switch (counter.Type) {\n      case \"partition\":\n        document\n          .querySelector(`[data-chart-id=\"${counter.ID}\"]`)\n          ?.append(partition(counter));\n\n        break;\n      case \"histogram\":\n        document\n          .querySelector(`[data-chart-id=\"${counter.ID}\"]`)\n          ?.append(histogram(counter));\n\n        break;\n      default:\n        console.error(\"unknown chart type\");\n        break;\n    }\n  }\n}\n\nfunction partition({ Data, Name }: Chart) {\n  Data ??= [];\n  return Plot.plot({\n    color: {\n      type: \"ordinal\",\n      scheme: \"Spectral\",\n    },\n    nice: true,\n    x: {\n      label: Name,\n      labelOffset: Number.MAX_SAFE_INTEGER,\n      tickRotate: 45,\n      domain: Data.map((d) => d.Key),\n    },\n    y: {\n      label: \"Frequency\",\n      domain: [0, 1],\n    },\n    width: 1024,\n    style: \"overflow:visible;background:transparent;margin-bottom:3rem;\",\n    marks: [\n      Plot.barY(Data, {\n        tip: true,\n        fill: (d) => (isNaN(Number(d.Key)) ? d.Key : Number(d.Key)),\n        x: (d) => d.Key,\n        y: (d) => d.Value,\n      }),\n      Plot.frame(),\n    ],\n  });\n}\n\nfunction histogram({ Data }: Chart) {\n  Data ??= [];\n  const n = 3; // number of facet columns\n  const fixKey = (k: string) => (isNaN(Number(k)) ? k : Number(k));\n  const keys = Array.from(d3.union(Data.map((d) => fixKey(d.Key))));\n  const index = new Map(keys.map((key, i) => [key, i]));\n  const fx = (key: string | number) => (index.get(key) ?? 0) % n;\n  const fy = (key: string | number) => Math.floor((index.get(key) ?? 0) / n);\n\n  return Plot.plot({\n    marginLeft: 60,\n    width: 1024,\n    grid: true,\n    nice: true,\n    x: {\n      label: \"Distribution\",\n    },\n    color: {\n      type: \"ordinal\",\n      legend: true,\n      scheme: \"Spectral\",\n      label: \"Counter\",\n    },\n    y: {\n      insetTop: 16,\n      domain: [0, 1],\n    },\n    fx: {\n      ticks: [],\n    },\n    fy: {\n      ticks: [],\n    },\n    style: \"background:transparent;\",\n    marks: [\n      Plot.barY(\n        Data,\n        Plot.binX(\n          { y: \"proportion-facet\", x: \"x1\", interval: 0.1, cumulative: 1 },\n          {\n            tip: true,\n            fill: (d: Datum) => fixKey(d.Key),\n            x: (d: Datum) => d.Value,\n            fx: (d: Datum) => fx(fixKey(d.Key)),\n            fy: (d: Datum) => fy(fixKey(d.Key)),\n          }\n        )\n      ),\n      Plot.text(keys, {\n        frameAnchor: \"top\",\n        dy: 3,\n        fx,\n        fy,\n      }),\n      Plot.axisX({ anchor: \"bottom\", tickSpacing: 35 }),\n      Plot.axisX({ anchor: \"top\", tickSpacing: 35 }),\n      Plot.frame(),\n    ],\n  });\n}\n\nexport {};\n"],
+  "mappings": "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",
   "names": ["ascending", "a", "b", "descending", "a", "b", "bisector", "f", "compare1", "compare2", "delta", "ascending", "d", "x", "descending", "zero", "left", "a", "lo", "hi", "mid", "right", "center", "i", "number", "x", "numbers", "values", "valueof", "value", "index", "ascendingBisect", "bisector", "ascending", "bisectRight", "bisectLeft", "bisectCenter", "number", "bisect_default", "count", "values", "valueof", "value", "index", "length", "array", "empty", "arrayify", "values", "reducer", "reduce", "cross", "lengths", "j", "index", "product", "i", "cumsum", "values", "valueof", "sum", "index", "v", "variance", "values", "valueof", "count", "delta", "mean", "sum", "value", "index", "deviation", "values", "valueof", "v", "variance", "extent", "values", "valueof", "min", "max", "value", "index", "Adder", "x", "p", "i", "j", "y", "hi", "lo", "InternMap", "entries", "key", "keyof", "value", "intern_get", "intern_set", "intern_delete", "InternSet", "values", "_intern", "_key", "identity", "x", "group", "values", "keys", "nest", "identity", "rollup", "values", "reduce", "keys", "nest", "identity", "rollups", "nest", "values", "map", "reduce", "keys", "regroup", "i", "groups", "InternMap", "keyof", "index", "value", "key", "group", "permute", "source", "keys", "key", "sort", "values", "F", "f", "index", "d", "i", "j", "c", "ascendingDefined", "permute", "compareDefined", "compare", "ascending", "a", "b", "x", "groupSort", "values", "reduce", "key", "sort", "rollup", "ak", "av", "bk", "bv", "ascending", "group", "e10", "e5", "e2", "tickSpec", "start", "stop", "count", "step", "power", "error", "factor", "i1", "i2", "inc", "ticks", "reverse", "n", "i", "tickIncrement", "tickStep", "thresholdSturges", "values", "count", "max", "values", "valueof", "value", "index", "maxIndex", "values", "valueof", "max", "index", "value", "min", "values", "valueof", "value", "index", "minIndex", "values", "valueof", "min", "index", "value", "quickselect", "array", "k", "left", "right", "compare", "ascendingDefined", "compareDefined", "n", "m", "z", "s", "sd", "newLeft", "newRight", "t", "i", "j", "swap", "greatest", "values", "compare", "ascending", "max", "defined", "maxValue", "element", "value", "quantile", "values", "p", "valueof", "numbers", "n", "min", "max", "i", "i0", "value0", "quickselect", "value1", "quantileSorted", "number", "thresholdFreedmanDiaconis", "values", "min", "max", "c", "count", "d", "quantile", "thresholdScott", "values", "min", "max", "c", "count", "d", "deviation", "mean", "values", "valueof", "count", "sum", "value", "index", "median", "values", "valueof", "quantile", "flatten", "arrays", "array", "merge", "mode", "values", "valueof", "counts", "InternMap", "value", "index", "modeValue", "modeCount", "count", "pairs", "values", "pairof", "pair", "previous", "first", "value", "a", "b", "range", "start", "stop", "step", "n", "i", "sum", "values", "valueof", "value", "index", "reverse", "values", "union", "others", "set", "InternSet", "other", "o", "identity_default", "x", "top", "right", "bottom", "left", "epsilon", "translateX", "x", "translateY", "y", "number", "scale", "d", "center", "offset", "entering", "axis", "orient", "tickArguments", "tickValues", "tickFormat", "tickSizeInner", "tickSizeOuter", "tickPadding", "k", "transform", "context", "values", "format", "identity_default", "spacing", "range", "range0", "range1", "position", "selection", "path", "tick", "tickExit", "tickEnter", "line", "text", "p", "_", "axisBottom", "scale", "axis", "bottom", "noop", "dispatch", "i", "n", "_", "t", "Dispatch", "parseTypenames", "typenames", "types", "name", "typename", "callback", "T", "get", "set", "copy", "type", "that", "args", "c", "dispatch_default", "xhtml", "namespaces_default", "namespace_default", "name", "prefix", "i", "namespaces_default", "creatorInherit", "name", "document", "uri", "xhtml", "creatorFixed", "fullname", "creator_default", "namespace_default", "none", "selector_default", "selector", "select_default", "select", "selector_default", "groups", "m", "subgroups", "j", "group", "n", "subgroup", "node", "subnode", "i", "Selection", "array", "x", "empty", "selectorAll_default", "selector", "arrayAll", "select", "array", "selectAll_default", "selectorAll_default", "groups", "m", "subgroups", "parents", "j", "group", "n", "node", "i", "Selection", "matcher_default", "selector", "childMatcher", "node", "find", "childFind", "match", "childFirst", "selectChild_default", "childMatcher", "filter", "children", "childrenFilter", "match", "selectChildren_default", "childMatcher", "filter_default", "match", "matcher_default", "groups", "m", "subgroups", "j", "group", "n", "subgroup", "node", "i", "Selection", "sparse_default", "update", "enter_default", "Selection", "sparse_default", "EnterNode", "parent", "datum", "child", "next", "selector", "constant_default", "x", "bindIndex", "parent", "group", "enter", "update", "exit", "data", "i", "node", "groupLength", "dataLength", "EnterNode", "bindKey", "key", "nodeByKeyValue", "keyValues", "keyValue", "datum", "data_default", "value", "bind", "parents", "groups", "constant_default", "m", "j", "arraylike", "enterGroup", "updateGroup", "exitGroup", "i0", "i1", "previous", "next", "Selection", "exit_default", "Selection", "sparse_default", "join_default", "onenter", "onupdate", "onexit", "enter", "update", "exit", "merge_default", "context", "selection", "groups0", "groups1", "m0", "m1", "m", "merges", "j", "group0", "group1", "n", "merge", "node", "i", "Selection", "order_default", "groups", "j", "m", "group", "i", "next", "node", "sort_default", "compare", "ascending", "compareNode", "a", "b", "groups", "m", "sortgroups", "j", "group", "n", "sortgroup", "node", "i", "Selection", "call_default", "callback", "nodes_default", "node_default", "groups", "j", "m", "group", "i", "n", "node", "size_default", "size", "node", "empty_default", "each_default", "callback", "groups", "j", "m", "group", "n", "node", "attrRemove", "name", "attrRemoveNS", "fullname", "attrConstant", "value", "attrConstantNS", "attrFunction", "v", "attrFunctionNS", "attr_default", "namespace_default", "node", "window_default", "node", "styleRemove", "name", "styleConstant", "value", "priority", "styleFunction", "v", "style_default", "styleValue", "node", "window_default", "propertyRemove", "name", "propertyConstant", "value", "propertyFunction", "v", "property_default", "classArray", "string", "classList", "node", "ClassList", "name", "i", "classedAdd", "names", "list", "n", "classedRemove", "classedTrue", "classedFalse", "classedFunction", "value", "classed_default", "textRemove", "textConstant", "value", "textFunction", "v", "text_default", "htmlRemove", "htmlConstant", "value", "htmlFunction", "v", "html_default", "raise", "raise_default", "lower", "lower_default", "append_default", "name", "create", "creator_default", "constantNull", "insert_default", "name", "before", "create", "creator_default", "select", "selector_default", "remove", "parent", "remove_default", "selection_cloneShallow", "clone", "parent", "selection_cloneDeep", "clone_default", "deep", "datum_default", "value", "contextListener", "listener", "event", "parseTypenames", "typenames", "t", "name", "i", "onRemove", "typename", "on", "j", "m", "o", "onAdd", "value", "options", "on_default", "n", "dispatchEvent", "node", "type", "params", "window", "window_default", "event", "dispatchConstant", "dispatchFunction", "dispatch_default", "iterator_default", "groups", "j", "m", "group", "i", "n", "node", "root", "Selection", "groups", "parents", "selection", "selection_selection", "select_default", "selectAll_default", "selectChild_default", "selectChildren_default", "filter_default", "data_default", "enter_default", "exit_default", "join_default", "merge_default", "order_default", "sort_default", "call_default", "nodes_default", "node_default", "size_default", "empty_default", "each_default", "attr_default", "style_default", "property_default", "classed_default", "text_default", "html_default", "raise_default", "lower_default", "append_default", "insert_default", "remove_default", "clone_default", "datum_default", "on_default", "dispatch_default", "iterator_default", "selection_default", "select_default", "selector", "Selection", "root", "sourceEvent_default", "event", "sourceEvent", "pointer_default", "event", "node", "sourceEvent_default", "svg", "point", "rect", "define_default", "constructor", "factory", "prototype", "extend", "parent", "definition", "key", "Color", "darker", "brighter", "reI", "reN", "reP", "reHex", "reRgbInteger", "reRgbPercent", "reRgbaInteger", "reRgbaPercent", "reHslPercent", "reHslaPercent", "named", "define_default", "color", "channels", "color_formatHex", "color_formatHex8", "color_formatHsl", "color_formatRgb", "hslConvert", "format", "m", "l", "rgbn", "Rgb", "rgba", "hsla", "n", "r", "g", "b", "a", "rgbConvert", "o", "rgb", "opacity", "extend", "k", "clampi", "clampa", "rgb_formatHex", "rgb_formatHex8", "rgb_formatRgb", "hex", "value", "h", "s", "Hsl", "min", "max", "hsl", "m2", "m1", "hsl2rgb", "clamph", "clampt", "radians", "degrees", "K", "Xn", "Yn", "Zn", "t0", "t1", "t2", "t3", "labConvert", "o", "Lab", "Hcl", "hcl2lab", "Rgb", "rgbConvert", "r", "rgb2lrgb", "g", "b", "y", "xyz2lab", "x", "z", "lab", "l", "a", "b", "opacity", "labConvert", "Lab", "define_default", "extend", "Color", "k", "K", "y", "x", "z", "Xn", "lab2xyz", "Yn", "Zn", "Rgb", "lrgb2rgb", "xyz2lab", "t3", "t2", "t0", "t1", "rgb2lrgb", "hclConvert", "o", "Hcl", "h", "degrees", "hcl", "h", "c", "l", "opacity", "hclConvert", "Hcl", "hcl2lab", "o", "Lab", "radians", "define_default", "extend", "Color", "k", "K", "A", "B", "C", "D", "E", "ED", "EB", "BC_DA", "cubehelixConvert", "o", "Cubehelix", "Rgb", "rgbConvert", "r", "g", "b", "l", "bl", "k", "s", "h", "degrees", "cubehelix", "opacity", "define_default", "extend", "Color", "brighter", "darker", "radians", "a", "cosh", "sinh", "basis", "t1", "v0", "v1", "v2", "v3", "t2", "t3", "basis_default", "values", "n", "t", "i", "basisClosed_default", "values", "n", "t", "i", "v0", "v1", "v2", "v3", "basis", "constant_default", "x", "linear", "a", "d", "t", "exponential", "b", "y", "hue", "constant_default", "gamma", "nogamma", "rgb_default", "rgbGamma", "y", "color", "gamma", "rgb", "start", "end", "r", "g", "b", "opacity", "nogamma", "t", "rgbSpline", "spline", "colors", "i", "rgbBasis", "basis_default", "rgbBasisClosed", "basisClosed_default", "numberArray_default", "a", "b", "c", "i", "t", "isNumberArray", "x", "genericArray", "a", "b", "nb", "na", "x", "c", "i", "value_default", "t", "date_default", "a", "b", "d", "t", "number_default", "a", "b", "t", "object_default", "a", "b", "i", "c", "k", "value_default", "t", "reA", "reB", "zero", "b", "one", "t", "string_default", "a", "bi", "am", "bm", "bs", "i", "s", "q", "number_default", "o", "value_default", "a", "b", "t", "c", "constant_default", "number_default", "color", "rgb_default", "string_default", "date_default", "isNumberArray", "numberArray_default", "genericArray", "object_default", "round_default", "a", "b", "t", "degrees", "identity", "decompose_default", "a", "b", "c", "d", "e", "f", "scaleX", "scaleY", "skewX", "svgNode", "parseCss", "value", "m", "identity", "decompose_default", "parseSvg", "interpolateTransform", "parse", "pxComma", "pxParen", "degParen", "pop", "s", "translate", "xa", "ya", "xb", "yb", "q", "i", "number_default", "rotate", "a", "b", "skewX", "scale", "t", "n", "o", "interpolateTransformCss", "parseCss", "interpolateTransformSvg", "parseSvg", "hsl", "hue", "start", "end", "h", "s", "nogamma", "l", "opacity", "t", "hsl_default", "hslLong", "lab", "start", "end", "l", "nogamma", "a", "b", "opacity", "t", "hcl", "hue", "start", "end", "h", "c", "nogamma", "l", "opacity", "t", "hcl_default", "hclLong", "cubehelix", "hue", "cubehelixGamma", "y", "start", "end", "h", "s", "nogamma", "l", "opacity", "t", "cubehelix_default", "cubehelixLong", "piecewise", "interpolate", "values", "value_default", "i", "n", "v", "I", "t", "quantize_default", "interpolator", "n", "samples", "i", "frame", "timeout", "interval", "pokeDelay", "taskHead", "taskTail", "clockLast", "clockNow", "clockSkew", "clock", "setFrame", "f", "now", "clearNow", "Timer", "timer", "callback", "delay", "time", "sleep", "t", "timerFlush", "wake", "nap", "poke", "t0", "t1", "t2", "timeout_default", "callback", "delay", "time", "t", "Timer", "elapsed", "emptyOn", "dispatch_default", "emptyTween", "CREATED", "SCHEDULED", "STARTING", "STARTED", "RUNNING", "ENDING", "ENDED", "schedule_default", "node", "name", "id", "index", "group", "timing", "schedules", "create", "init", "schedule", "get", "set", "self", "tween", "timer", "elapsed", "start", "i", "j", "n", "o", "stop", "timeout_default", "tick", "t", "interrupt_default", "node", "name", "schedules", "schedule", "active", "empty", "i", "STARTING", "ENDING", "ENDED", "interrupt_default", "name", "tweenRemove", "id", "name", "tween0", "tween1", "schedule", "set", "tween", "i", "n", "tweenFunction", "value", "t", "tween_default", "get", "tweenValue", "transition", "node", "interpolate_default", "a", "b", "c", "number_default", "color", "rgb_default", "string_default", "attrRemove", "name", "attrRemoveNS", "fullname", "attrConstant", "interpolate", "value1", "string00", "string1", "interpolate0", "string0", "attrConstantNS", "attrFunction", "value", "string10", "attrFunctionNS", "attr_default", "namespace_default", "i", "interpolateTransformSvg", "interpolate_default", "tweenValue", "attrInterpolate", "name", "i", "t", "attrInterpolateNS", "fullname", "attrTweenNS", "value", "t0", "i0", "tween", "attrTween", "attrTween_default", "key", "namespace_default", "delayFunction", "id", "value", "init", "delayConstant", "delay_default", "get", "durationFunction", "id", "value", "set", "durationConstant", "duration_default", "get", "easeConstant", "id", "value", "set", "ease_default", "get", "easeVarying", "id", "value", "v", "set", "easeVarying_default", "filter_default", "match", "matcher_default", "groups", "m", "subgroups", "j", "group", "n", "subgroup", "node", "i", "Transition", "merge_default", "transition", "groups0", "groups1", "m0", "m1", "m", "merges", "j", "group0", "group1", "n", "merge", "node", "i", "Transition", "start", "name", "t", "i", "onFunction", "id", "listener", "on0", "on1", "sit", "init", "set", "schedule", "on", "on_default", "get", "removeFunction", "id", "parent", "i", "remove_default", "select_default", "select", "name", "id", "selector_default", "groups", "m", "subgroups", "j", "group", "n", "subgroup", "node", "subnode", "i", "schedule_default", "get", "Transition", "selectAll_default", "select", "name", "id", "selectorAll_default", "groups", "m", "subgroups", "parents", "j", "group", "n", "node", "i", "children", "child", "inherit", "get", "k", "l", "schedule_default", "Transition", "Selection", "selection_default", "styleNull", "name", "interpolate", "string00", "string10", "interpolate0", "string0", "styleValue", "string1", "styleRemove", "styleConstant", "value1", "styleFunction", "value", "styleMaybeRemove", "id", "on0", "on1", "listener0", "key", "event", "remove", "schedule", "set", "on", "listener", "style_default", "priority", "i", "interpolateTransformCss", "interpolate_default", "tweenValue", "styleInterpolate", "name", "i", "priority", "t", "styleTween", "value", "i0", "tween", "styleTween_default", "key", "textConstant", "value", "textFunction", "value1", "text_default", "tweenValue", "textInterpolate", "i", "t", "textTween", "value", "t0", "i0", "tween", "textTween_default", "key", "transition_default", "name", "id0", "id1", "newId", "groups", "m", "j", "group", "n", "node", "i", "inherit", "get", "schedule_default", "Transition", "end_default", "on0", "on1", "that", "id", "size", "resolve", "reject", "cancel", "end", "schedule", "set", "on", "id", "Transition", "groups", "parents", "name", "transition", "selection_default", "newId", "selection_prototype", "select_default", "selectAll_default", "filter_default", "merge_default", "transition_default", "on_default", "attr_default", "attrTween_default", "style_default", "styleTween_default", "text_default", "textTween_default", "remove_default", "tween_default", "delay_default", "duration_default", "ease_default", "easeVarying_default", "end_default", "cubicInOut", "defaultTiming", "cubicInOut", "inherit", "node", "id", "timing", "transition_default", "name", "Transition", "newId", "now", "groups", "m", "j", "group", "n", "i", "schedule_default", "selection_default", "interrupt_default", "transition_default", "abs", "max", "min", "number1", "e", "number2", "X", "type", "x", "xy", "Y", "y", "XY", "type", "pi", "tau", "epsilon", "tauEpsilon", "append", "strings", "i", "appendRound", "digits", "d", "k", "n", "Path", "x", "y", "x1", "y1", "x2", "y2", "r", "x0", "y0", "x21", "y21", "x01", "y01", "l01_2", "x20", "y20", "l21_2", "l20_2", "l21", "l01", "l", "t01", "t21", "a0", "a1", "ccw", "dx", "dy", "cw", "da", "w", "h", "path", "pathRound", "formatDecimal_default", "x", "formatDecimalParts", "p", "i", "coefficient", "exponent_default", "x", "formatDecimalParts", "formatGroup_default", "grouping", "thousands", "value", "width", "i", "t", "j", "g", "length", "formatNumerals_default", "numerals", "value", "i", "re", "formatSpecifier", "specifier", "match", "FormatSpecifier", "formatTrim_default", "s", "out", "n", "i", "i0", "i1", "prefixExponent", "formatPrefixAuto_default", "x", "p", "d", "formatDecimalParts", "coefficient", "exponent", "n", "formatRounded_default", "x", "p", "d", "formatDecimalParts", "coefficient", "exponent", "formatTypes_default", "x", "p", "formatDecimal_default", "formatRounded_default", "formatPrefixAuto_default", "identity_default", "x", "map", "prefixes", "locale_default", "locale", "group", "identity_default", "formatGroup_default", "currencyPrefix", "currencySuffix", "decimal", "numerals", "formatNumerals_default", "percent", "minus", "nan", "newFormat", "specifier", "formatSpecifier", "fill", "align", "sign", "symbol", "zero", "width", "comma", "precision", "trim", "type", "formatTypes_default", "prefix", "suffix", "formatType", "maybeSuffix", "format", "value", "valuePrefix", "valueSuffix", "i", "n", "c", "valueNegative", "formatTrim_default", "prefixExponent", "length", "padding", "formatPrefix", "f", "e", "exponent_default", "k", "locale", "format", "formatPrefix", "defaultLocale", "definition", "locale_default", "precisionFixed_default", "step", "exponent_default", "precisionPrefix_default", "step", "value", "exponent_default", "precisionRound_default", "step", "max", "exponent_default", "epsilon", "epsilon2", "pi", "halfPi", "quarterPi", "tau", "degrees", "radians", "abs", "atan", "atan2", "cos", "exp", "log", "pow", "sin", "sign", "x", "sqrt", "tan", "acos", "pi", "asin", "halfPi", "noop", "streamGeometry", "geometry", "stream", "streamGeometryType", "streamObjectType", "object", "features", "i", "n", "coordinates", "streamLine", "streamPolygon", "geometries", "closed", "coordinate", "stream_default", "spherical", "cartesian", "atan2", "asin", "lambda", "phi", "cosPhi", "cos", "sin", "cartesianDot", "a", "b", "cartesianCross", "cartesianAddInPlace", "cartesianScale", "vector", "k", "cartesianNormalizeInPlace", "d", "l", "sqrt", "compose_default", "a", "b", "compose", "x", "y", "rotationIdentity", "lambda", "phi", "abs", "pi", "tau", "rotateRadians", "deltaLambda", "deltaPhi", "deltaGamma", "compose_default", "rotationLambda", "rotationPhiGamma", "forwardRotationLambda", "rotation", "cosDeltaPhi", "cos", "sinDeltaPhi", "sin", "cosDeltaGamma", "sinDeltaGamma", "cosPhi", "x", "y", "z", "k", "atan2", "asin", "rotation_default", "rotate", "radians", "forward", "coordinates", "degrees", "circleStream", "stream", "radius", "delta", "direction", "t0", "t1", "cosRadius", "cos", "sinRadius", "sin", "step", "tau", "circleRadius", "point", "t", "spherical", "cartesian", "cartesianNormalizeInPlace", "acos", "epsilon", "buffer_default", "lines", "line", "x", "y", "m", "noop", "result", "pointEqual_default", "a", "b", "abs", "epsilon", "Intersection", "point", "points", "other", "entry", "rejoin_default", "segments", "compareIntersection", "startInside", "interpolate", "stream", "subject", "clip", "i", "n", "segment", "p0", "p1", "pointEqual_default", "epsilon", "link", "start", "current", "isSubject", "array", "a", "b", "longitude", "point", "abs", "pi", "sign", "tau", "polygonContains_default", "polygon", "lambda", "phi", "sinPhi", "sin", "normal", "cos", "angle", "winding", "sum", "Adder", "halfPi", "epsilon", "i", "n", "m", "ring", "point0", "lambda0", "phi0", "quarterPi", "sinPhi0", "cosPhi0", "j", "lambda1", "sinPhi1", "cosPhi1", "point1", "phi1", "delta", "absDelta", "antimeridian", "k", "atan2", "arc", "cartesianCross", "cartesian", "cartesianNormalizeInPlace", "intersection", "phiArc", "asin", "epsilon2", "clip_default", "pointVisible", "clipLine", "interpolate", "start", "sink", "line", "ringBuffer", "buffer_default", "ringSink", "polygonStarted", "polygon", "segments", "ring", "clip", "point", "lineStart", "lineEnd", "pointRing", "ringStart", "ringEnd", "merge", "startInside", "polygonContains_default", "rejoin_default", "compareIntersection", "lambda", "phi", "pointLine", "clean", "ringSegments", "i", "n", "m", "segment", "validSegment", "a", "b", "halfPi", "epsilon", "antimeridian_default", "clip_default", "clipAntimeridianLine", "clipAntimeridianInterpolate", "pi", "halfPi", "stream", "lambda0", "phi0", "sign0", "clean", "lambda1", "phi1", "sign1", "delta", "abs", "epsilon", "clipAntimeridianIntersect", "cosPhi0", "cosPhi1", "sinLambda0Lambda1", "sin", "atan", "cos", "from", "to", "direction", "phi", "lambda", "circle_default", "radius", "cr", "cos", "delta", "radians", "smallRadius", "notHemisphere", "abs", "epsilon", "interpolate", "from", "to", "direction", "stream", "circleStream", "visible", "lambda", "phi", "clipLine", "point0", "c0", "v0", "v00", "clean", "point1", "point2", "v", "c", "code", "pi", "intersect", "pointEqual_default", "t", "a", "b", "two", "pa", "cartesian", "pb", "n1", "n2", "cartesianCross", "n2n2", "cartesianDot", "n1n2", "determinant", "c1", "c2", "n1xn2", "A", "cartesianScale", "B", "cartesianAddInPlace", "u", "w", "uu", "t2", "sqrt", "q", "spherical", "lambda0", "lambda1", "phi0", "phi1", "z", "polar", "meridian", "q1", "r", "clip_default", "line_default", "a", "b", "x0", "y0", "x1", "y1", "ax", "ay", "bx", "by", "t0", "t1", "dx", "dy", "r", "clipMax", "clipMin", "clipRectangle", "x0", "y0", "x1", "y1", "visible", "x", "y", "interpolate", "from", "to", "direction", "stream", "a", "a1", "corner", "comparePoint", "p", "abs", "epsilon", "compareIntersection", "b", "ca", "cb", "activeStream", "bufferStream", "buffer_default", "segments", "polygon", "ring", "x__", "y__", "v__", "x_", "y_", "v_", "first", "clean", "clipStream", "point", "lineStart", "lineEnd", "polygonStart", "polygonEnd", "polygonInside", "winding", "i", "n", "j", "m", "a0", "b0", "b1", "startInside", "cleanInside", "merge", "rejoin_default", "linePoint", "v", "line_default", "identity_default", "x", "areaSum", "Adder", "areaRingSum", "x00", "y00", "x0", "y0", "areaStream", "noop", "areaRingStart", "areaRingEnd", "abs", "area", "areaPointFirst", "x", "y", "areaPoint", "area_default", "x0", "y0", "x1", "y1", "boundsStream", "boundsPoint", "noop", "bounds", "x", "y", "bounds_default", "X0", "Y0", "Z0", "X1", "Y1", "Z1", "X2", "Y2", "Z2", "x00", "y00", "x0", "y0", "centroidStream", "centroidPoint", "centroidLineStart", "centroidLineEnd", "centroidRingStart", "centroidRingEnd", "centroid", "x", "y", "centroidPointFirstLine", "centroidPointLine", "dx", "dy", "z", "sqrt", "centroidPointFirstRing", "centroidPointRing", "centroid_default", "PathContext", "context", "_", "x", "y", "tau", "noop", "lengthSum", "Adder", "lengthRing", "x00", "y00", "x0", "y0", "lengthStream", "noop", "lengthPointFirst", "lengthPoint", "length", "x", "y", "sqrt", "measure_default", "cacheDigits", "cacheAppend", "cacheRadius", "cacheCircle", "PathString", "digits", "append", "appendRound", "_", "x", "y", "s", "result", "strings", "i", "j", "d", "k", "path_default", "projection", "context", "digits", "pointRadius", "projectionStream", "contextStream", "path", "object", "stream_default", "area_default", "measure_default", "bounds_default", "centroid_default", "_", "identity_default", "PathString", "PathContext", "d", "transform_default", "methods", "transformer", "stream", "s", "TransformStream", "key", "x", "y", "fit", "projection", "fitBounds", "object", "clip", "stream_default", "bounds_default", "fitExtent", "extent", "b", "w", "h", "k", "x", "y", "fitSize", "size", "fitWidth", "width", "fitHeight", "height", "maxDepth", "cosMinDistance", "cos", "radians", "resample_default", "project", "delta2", "resample", "resampleNone", "transformer", "x", "y", "resampleLineTo", "x0", "y0", "lambda0", "a0", "b0", "c0", "x1", "y1", "lambda1", "a1", "b1", "c1", "depth", "stream", "dx", "dy", "d2", "a", "b", "c", "m", "sqrt", "phi2", "asin", "lambda2", "abs", "epsilon", "atan2", "p", "x2", "y2", "dx2", "dy2", "dz", "lambda00", "x00", "y00", "a00", "b00", "c00", "resampleStream", "point", "lineStart", "lineEnd", "ringStart", "linePoint", "lambda", "phi", "cartesian", "ringPoint", "ringEnd", "transformRadians", "transformer", "x", "y", "radians", "transformRotate", "rotate", "scaleTranslate", "k", "dx", "dy", "sx", "sy", "transform", "scaleTranslateRotate", "alpha", "cosAlpha", "cos", "sinAlpha", "sin", "a", "b", "ai", "bi", "ci", "fi", "projection", "project", "projectionMutator", "projectAt", "lambda", "phi", "deltaLambda", "deltaPhi", "deltaGamma", "theta", "preclip", "antimeridian_default", "x0", "y0", "x1", "y1", "postclip", "identity_default", "delta2", "projectResample", "projectTransform", "projectRotateTransform", "cache", "cacheStream", "point", "invert", "degrees", "stream", "_", "reset", "circle_default", "clipRectangle", "recenter", "resample_default", "sqrt", "extent", "object", "fitExtent", "size", "fitSize", "width", "fitWidth", "height", "fitHeight", "center", "rotateRadians", "compose_default", "conicProjection", "projectAt", "phi0", "phi1", "pi", "m", "projectionMutator", "p", "_", "radians", "degrees", "cylindricalEqualAreaRaw", "phi0", "cosPhi0", "cos", "forward", "lambda", "phi", "sin", "x", "y", "asin", "conicEqualAreaRaw", "y0", "y1", "sy0", "sin", "n", "abs", "epsilon", "cylindricalEqualAreaRaw", "c", "r0", "sqrt", "project", "x", "y", "r", "cos", "r0y", "l", "atan2", "sign", "pi", "asin", "conicEqualArea_default", "conicProjection", "albers_default", "conicEqualArea_default", "multiplex", "streams", "n", "x", "y", "i", "albersUsa_default", "cache", "cacheStream", "lower48", "albers_default", "lower48Point", "alaska", "conicEqualArea_default", "alaskaPoint", "hawaii", "hawaiiPoint", "point", "pointStream", "albersUsa", "coordinates", "k", "t", "stream", "_", "reset", "epsilon", "extent", "object", "fitExtent", "size", "fitSize", "width", "fitWidth", "height", "fitHeight", "azimuthalRaw", "scale", "x", "y", "cx", "cos", "cy", "k", "sin", "azimuthalInvert", "angle", "z", "sqrt", "c", "sc", "cc", "atan2", "asin", "azimuthalEqualAreaRaw", "azimuthalRaw", "cxcy", "sqrt", "azimuthalInvert", "z", "asin", "azimuthalEqualArea_default", "projection", "azimuthalEquidistantRaw", "azimuthalRaw", "c", "acos", "sin", "azimuthalInvert", "z", "azimuthalEquidistant_default", "projection", "mercatorRaw", "lambda", "phi", "log", "tan", "halfPi", "x", "y", "atan", "exp", "mercator_default", "mercatorProjection", "tau", "project", "m", "projection", "center", "scale", "translate", "clipExtent", "x0", "y0", "x1", "y1", "_", "reclip", "k", "pi", "t", "rotation_default", "tany", "y", "tan", "halfPi", "conicConformalRaw", "y0", "y1", "cy0", "cos", "n", "sin", "log", "f", "pow", "mercatorRaw", "project", "x", "epsilon", "r", "fy", "sign", "sqrt", "l", "atan2", "abs", "pi", "atan", "conicConformal_default", "conicProjection", "equirectangularRaw", "lambda", "phi", "equirectangular_default", "projection", "conicEquidistantRaw", "y0", "y1", "cy0", "cos", "n", "sin", "g", "abs", "epsilon", "equirectangularRaw", "project", "x", "y", "gy", "nx", "l", "atan2", "sign", "pi", "sqrt", "conicEquidistant_default", "conicProjection", "A1", "A2", "A3", "A4", "M", "sqrt", "iterations", "equalEarthRaw", "lambda", "phi", "l", "asin", "sin", "l2", "l6", "cos", "x", "y", "delta", "fy", "fpy", "abs", "epsilon2", "equalEarth_default", "projection", "gnomonicRaw", "x", "y", "cy", "cos", "k", "sin", "azimuthalInvert", "atan", "gnomonic_default", "projection", "orthographicRaw", "x", "y", "cos", "sin", "azimuthalInvert", "asin", "orthographic_default", "projection", "epsilon", "stereographicRaw", "x", "y", "cy", "cos", "k", "sin", "azimuthalInvert", "z", "atan", "stereographic_default", "projection", "transverseMercatorRaw", "lambda", "phi", "log", "tan", "halfPi", "x", "y", "atan", "exp", "transverseMercator_default", "m", "mercatorProjection", "center", "rotate", "_", "initRange", "domain", "range", "initInterpolator", "interpolator", "implicit", "ordinal", "index", "InternMap", "domain", "range", "unknown", "scale", "d", "i", "_", "value", "initRange", "band", "scale", "ordinal", "domain", "ordinalRange", "r0", "r1", "step", "bandwidth", "round", "paddingInner", "paddingOuter", "align", "rescale", "n", "reverse", "start", "stop", "values", "range", "i", "_", "initRange", "pointish", "copy", "point", "constants", "x", "number", "x", "unit", "identity", "x", "normalize", "a", "b", "constants", "clamper", "t", "bimap", "domain", "range", "interpolate", "d0", "d1", "r0", "r1", "polymap", "j", "d", "r", "i", "bisect_default", "copy", "source", "target", "transformer", "value_default", "transform", "untransform", "unknown", "clamp", "piecewise", "output", "input", "rescale", "n", "scale", "y", "number_default", "_", "number", "round_default", "u", "continuous", "tickFormat", "start", "stop", "count", "specifier", "step", "tickStep", "precision", "formatSpecifier", "value", "precisionPrefix_default", "formatPrefix", "precisionRound_default", "precisionFixed_default", "format", "linearish", "scale", "domain", "count", "d", "ticks", "specifier", "tickFormat", "i0", "i1", "start", "stop", "prestep", "step", "maxIter", "tickIncrement", "linear", "continuous", "copy", "initRange", "identity", "domain", "unknown", "scale", "x", "_", "number", "linearish", "nice", "domain", "interval", "i0", "i1", "x0", "x1", "t", "transformLog", "x", "transformExp", "transformLogn", "transformExpn", "pow10", "powp", "base", "logp", "reflect", "f", "k", "loggish", "transform", "scale", "domain", "logs", "pows", "rescale", "_", "count", "d", "u", "v", "r", "i", "j", "t", "n", "z", "ticks", "specifier", "formatSpecifier", "format", "nice", "log", "transformer", "copy", "initRange", "transformSymlog", "c", "x", "transformSymexp", "symlogish", "transform", "scale", "_", "linearish", "symlog", "transformer", "copy", "initRange", "transformPow", "exponent", "x", "transformSqrt", "transformSquare", "powish", "transform", "scale", "identity", "rescale", "_", "linearish", "pow", "transformer", "copy", "initRange", "quantile", "domain", "range", "thresholds", "unknown", "rescale", "i", "n", "quantileSorted", "scale", "x", "bisect_default", "y", "_", "d", "ascending", "initRange", "threshold", "domain", "range", "unknown", "n", "scale", "x", "bisect_default", "_", "y", "i", "initRange", "t0", "t1", "timeInterval", "floori", "offseti", "count", "field", "interval", "date", "d0", "d1", "step", "start", "stop", "range", "previous", "test", "end", "d", "millisecond", "timeInterval", "date", "step", "start", "end", "k", "milliseconds", "second", "timeInterval", "date", "step", "start", "end", "seconds", "timeMinute", "timeInterval", "date", "step", "start", "end", "timeMinutes", "utcMinute", "utcMinutes", "timeHour", "timeInterval", "date", "step", "start", "end", "timeHours", "utcHour", "utcHours", "timeDay", "timeInterval", "date", "step", "start", "end", "timeDays", "utcDay", "utcDays", "unixDay", "unixDays", "timeWeekday", "i", "timeInterval", "date", "step", "start", "end", "timeSunday", "timeMonday", "timeTuesday", "timeWednesday", "timeThursday", "timeFriday", "timeSaturday", "timeSundays", "timeMondays", "timeTuesdays", "timeWednesdays", "timeThursdays", "timeFridays", "timeSaturdays", "utcWeekday", "utcSunday", "utcMonday", "utcTuesday", "utcWednesday", "utcThursday", "utcFriday", "utcSaturday", "utcSundays", "utcMondays", "utcTuesdays", "utcWednesdays", "utcThursdays", "utcFridays", "utcSaturdays", "timeMonth", "timeInterval", "date", "step", "start", "end", "timeMonths", "utcMonth", "utcMonths", "timeYear", "timeInterval", "date", "step", "start", "end", "k", "timeYears", "utcYear", "utcYears", "ticker", "year", "month", "week", "day", "hour", "minute", "tickIntervals", "second", "ticks", "start", "stop", "count", "reverse", "interval", "tickInterval", "target", "i", "bisector", "step", "tickStep", "millisecond", "t", "utcTicks", "utcTickInterval", "utcYear", "utcMonth", "utcSunday", "unixDay", "utcHour", "utcMinute", "timeTicks", "timeTickInterval", "timeYear", "timeMonth", "timeSunday", "timeDay", "timeHour", "timeMinute", "localDate", "d", "date", "utcDate", "newDate", "y", "m", "formatLocale", "locale", "locale_dateTime", "locale_date", "locale_time", "locale_periods", "locale_weekdays", "locale_shortWeekdays", "locale_months", "locale_shortMonths", "periodRe", "formatRe", "periodLookup", "formatLookup", "weekdayRe", "weekdayLookup", "shortWeekdayRe", "shortWeekdayLookup", "monthRe", "monthLookup", "shortMonthRe", "shortMonthLookup", "formats", "formatShortWeekday", "formatWeekday", "formatShortMonth", "formatMonth", "formatDayOfMonth", "formatMicroseconds", "formatYearISO", "formatFullYearISO", "formatHour24", "formatHour12", "formatDayOfYear", "formatMilliseconds", "formatMonthNumber", "formatMinutes", "formatPeriod", "formatQuarter", "formatUnixTimestamp", "formatUnixTimestampSeconds", "formatSeconds", "formatWeekdayNumberMonday", "formatWeekNumberSunday", "formatWeekNumberISO", "formatWeekdayNumberSunday", "formatWeekNumberMonday", "formatYear", "formatFullYear", "formatZone", "formatLiteralPercent", "utcFormats", "formatUTCShortWeekday", "formatUTCWeekday", "formatUTCShortMonth", "formatUTCMonth", "formatUTCDayOfMonth", "formatUTCMicroseconds", "formatUTCYearISO", "formatUTCFullYearISO", "formatUTCHour24", "formatUTCHour12", "formatUTCDayOfYear", "formatUTCMilliseconds", "formatUTCMonthNumber", "formatUTCMinutes", "formatUTCPeriod", "formatUTCQuarter", "formatUTCSeconds", "formatUTCWeekdayNumberMonday", "formatUTCWeekNumberSunday", "formatUTCWeekNumberISO", "formatUTCWeekdayNumberSunday", "formatUTCWeekNumberMonday", "formatUTCYear", "formatUTCFullYear", "formatUTCZone", "parses", "parseShortWeekday", "parseWeekday", "parseShortMonth", "parseMonth", "parseLocaleDateTime", "parseDayOfMonth", "parseMicroseconds", "parseYear", "parseFullYear", "parseHour24", "parseDayOfYear", "parseMilliseconds", "parseMonthNumber", "parseMinutes", "parsePeriod", "parseQuarter", "parseUnixTimestamp", "parseUnixTimestampSeconds", "parseSeconds", "parseWeekdayNumberMonday", "parseWeekNumberSunday", "parseWeekNumberISO", "parseWeekdayNumberSunday", "parseWeekNumberMonday", "parseLocaleDate", "parseLocaleTime", "parseZone", "parseLiteralPercent", "newFormat", "specifier", "string", "i", "j", "n", "c", "pad", "format", "pads", "newParse", "Z", "parseSpecifier", "week", "day", "utcMonday", "utcDay", "timeMonday", "timeDay", "parse", "f", "p", "numberRe", "percentRe", "requoteRe", "value", "fill", "width", "sign", "length", "requote", "s", "names", "name", "timeYear", "timeSunday", "dISO", "timeThursday", "z", "utcYear", "dow", "utcSunday", "UTCdISO", "utcThursday", "locale", "timeFormat", "timeParse", "utcFormat", "utcParse", "defaultLocale", "definition", "formatLocale", "date", "number", "calendar", "ticks", "tickInterval", "year", "month", "week", "day", "hour", "minute", "second", "format", "scale", "continuous", "invert", "domain", "formatMillisecond", "formatSecond", "formatMinute", "formatHour", "formatDay", "formatWeek", "formatMonth", "formatYear", "tickFormat", "y", "_", "interval", "d", "count", "specifier", "nice", "copy", "time", "initRange", "timeTicks", "timeTickInterval", "timeYear", "timeMonth", "timeSunday", "timeDay", "timeHour", "timeMinute", "timeFormat", "utcTime", "initRange", "calendar", "utcTicks", "utcTickInterval", "utcYear", "utcMonth", "utcSunday", "utcDay", "utcHour", "utcMinute", "second", "utcFormat", "copy", "source", "target", "transformer", "x0", "x1", "x2", "s", "t0", "t1", "t2", "k10", "k21", "interpolator", "identity", "transform", "clamp", "unknown", "scale", "x", "_", "range", "interpolate", "r0", "r1", "r2", "piecewise", "value_default", "round_default", "t", "diverging", "linearish", "copy", "initInterpolator", "divergingLog", "loggish", "divergingSymlog", "symlogish", "divergingPow", "powish", "colors_default", "specifier", "n", "colors", "i", "category10_default", "colors_default", "Accent_default", "colors_default", "Dark2_default", "colors_default", "Paired_default", "colors_default", "Pastel1_default", "colors_default", "Pastel2_default", "colors_default", "Set1_default", "colors_default", "Set2_default", "colors_default", "Set3_default", "colors_default", "Tableau10_default", "colors_default", "ramp_default", "scheme", "rgbBasis", "scheme", "colors_default", "BrBG_default", "ramp_default", "scheme", "colors_default", "PRGn_default", "ramp_default", "scheme", "colors_default", "PiYG_default", "ramp_default", "scheme", "colors_default", "PuOr_default", "ramp_default", "scheme", "colors_default", "RdBu_default", "ramp_default", "scheme", "colors_default", "RdGy_default", "ramp_default", "scheme", "colors_default", "RdYlBu_default", "ramp_default", "scheme", "colors_default", "RdYlGn_default", "ramp_default", "scheme", "colors_default", "Spectral_default", "ramp_default", "scheme", "colors_default", "BuGn_default", "ramp_default", "scheme", "colors_default", "BuPu_default", "ramp_default", "scheme", "colors_default", "GnBu_default", "ramp_default", "scheme", "colors_default", "OrRd_default", "ramp_default", "scheme", "colors_default", "PuBuGn_default", "ramp_default", "scheme", "colors_default", "PuBu_default", "ramp_default", "scheme", "colors_default", "PuRd_default", "ramp_default", "scheme", "colors_default", "RdPu_default", "ramp_default", "scheme", "colors_default", "YlGnBu_default", "ramp_default", "scheme", "colors_default", "YlGn_default", "ramp_default", "scheme", "colors_default", "YlOrBr_default", "ramp_default", "scheme", "colors_default", "YlOrRd_default", "ramp_default", "scheme", "colors_default", "Blues_default", "ramp_default", "scheme", "colors_default", "Greens_default", "ramp_default", "scheme", "colors_default", "Greys_default", "ramp_default", "scheme", "colors_default", "Purples_default", "ramp_default", "scheme", "colors_default", "Reds_default", "ramp_default", "scheme", "colors_default", "Oranges_default", "ramp_default", "cividis_default", "cubehelix_default", "cubehelixLong", "cubehelix", "warm", "cubehelixLong", "cubehelix", "cool", "c", "rainbow_default", "ts", "c", "rgb", "pi_1_3", "pi_2_3", "sinebow_default", "x", "turbo_default", "ramp", "range", "n", "t", "viridis_default", "colors_default", "magma", "inferno", "plasma", "cos", "min", "sin", "sqrt", "pi", "halfPi", "tau", "sqrt3", "sqrt", "asterisk_default", "context", "size", "r", "min", "t", "u", "circle_default", "context", "size", "r", "sqrt", "pi", "tau", "cross_default", "context", "size", "r", "sqrt", "tan30", "sqrt", "tan30_2", "diamond_default", "context", "size", "y", "x", "diamond2_default", "context", "size", "r", "sqrt", "plus_default", "context", "size", "r", "sqrt", "min", "square_default", "context", "size", "w", "sqrt", "x", "square2_default", "context", "size", "r", "sqrt", "ka", "kr", "sin", "pi", "kx", "tau", "ky", "cos", "star_default", "context", "size", "r", "sqrt", "x", "y", "c", "s", "sqrt3", "sqrt", "triangle_default", "context", "size", "y", "sqrt3", "sqrt", "triangle2_default", "context", "size", "s", "t", "u", "c", "s", "sqrt", "k", "a", "wye_default", "context", "size", "r", "x0", "y0", "x1", "y1", "x2", "y2", "times_default", "context", "size", "r", "sqrt", "min", "symbolsFill", "circle_default", "cross_default", "diamond_default", "square_default", "star_default", "triangle_default", "wye_default", "symbolsStroke", "plus_default", "times_default", "triangle2_default", "asterisk_default", "square2_default", "diamond2_default", "Transform", "k", "x", "y", "point", "location", "identity", "transform", "node", "defined", "x", "ascendingDefined", "a", "b", "ascending", "descendingDefined", "descending", "nonempty", "finite", "positive", "negative", "format", "date", "fallback", "hours", "minutes", "seconds", "milliseconds", "formatYear", "pad", "year", "value", "width", "re", "parse", "string", "fallback", "durationSecond", "durationMinute", "durationHour", "durationDay", "durationWeek", "durationMonth", "durationYear", "formats", "timeIntervals", "second", "timeMinute", "timeHour", "timeDay", "timeSunday", "timeMonth", "timeYear", "timeMonday", "timeTuesday", "timeWednesday", "timeThursday", "timeFriday", "timeSaturday", "utcIntervals", "utcMinute", "utcHour", "unixDay", "utcSunday", "utcMonth", "utcYear", "utcMonday", "utcTuesday", "utcWednesday", "utcThursday", "utcFriday", "utcSaturday", "parseInterval", "input", "intervals", "name", "period", "match", "interval", "maybeTimeInterval", "maybeUtcInterval", "isUtcYear", "i", "date", "isTimeYear", "formatTimeTicks", "scale", "data", "ticks", "anchor", "format", "timeFormat", "utcFormat", "template", "f1", "f2", "getTimeTicksInterval", "formatConditional", "medianStep", "median", "pairs", "a", "b", "bisector", "step", "start", "stop", "extent", "count", "format1", "format2", "x", "X", "j", "orderof", "TypedArray", "objectToString", "valueof", "data", "value", "type", "valueType", "maybeTypedMap", "field", "map", "constant", "maybeTypedArrayify", "f", "floater", "arrayify", "coerceNumber", "d", "i", "singleton", "name", "indexOf", "range", "identity", "one", "yes", "string", "x", "number", "first", "x", "second", "constant", "x", "percentile", "reduce", "p", "I", "f", "quantile", "coerceNumbers", "values", "TypedArray", "map", "coerceNumber", "coerceDates", "coerceDate", "parse", "maybeColorChannel", "value", "defaultValue", "isColor", "maybeNumberChannel", "maybeKeyword", "input", "name", "allowed", "keyword", "i", "arrayify", "data", "type", "slice", "hasX", "x1", "x2", "hasY", "y", "y1", "y2", "hasXY", "options", "isObject", "option", "objectToString", "isScaleOptions", "isOptions", "isDomainSort", "sort", "maybeZero", "x3", "identity", "maybeTuple", "first", "second", "maybeZ", "z", "fill", "stroke", "range", "n", "r", "take", "values", "index", "map", "i", "subarray", "I", "i", "j", "keyof", "value", "maybeInput", "key", "options", "column", "source", "labelof", "v", "maybeColumn", "defaultValue", "mid", "x1", "x2", "data", "X1", "X2", "isTemporal", "map", "_", "maybeApplyInterval", "V", "scale", "t", "maybeIntervalTransform", "interval", "type", "maybeInterval", "defined", "d", "lo", "hi", "range", "x", "maybeTimeInterval", "maybeUtcInterval", "maybeRangeInterval", "maybeNiceInterval", "maybeValue", "isOptions", "numberChannel", "valueof", "isIterable", "value", "isTextual", "values", "isOrdinal", "type", "isTemporal", "isTemporalString", "parse", "isNumericString", "isNumeric", "isEvery", "is", "every", "isColor", "color", "isOpacity", "isNoneish", "isNone", "isRound", "maybeAnchor", "name", "maybeKeyword", "maybeFrameAnchor", "orderof", "first", "last", "descending", "inherit", "options", "rest", "o", "defaults", "key", "named", "things", "names", "thing", "maybeNamed", "position", "color", "radius", "length", "opacity", "symbol", "projection", "registry", "sqrt3", "sqrt4_3", "symbolHexagon", "context", "size", "rx", "ry", "hy", "symbols", "asterisk_default", "circle_default", "cross_default", "diamond_default", "diamond2_default", "plus_default", "square_default", "square2_default", "star_default", "times_default", "triangle_default", "triangle2_default", "wye_default", "isSymbolObject", "value", "isSymbol", "maybeSymbol", "symbol", "basic", "f1", "s1", "r1", "t1", "i1", "options", "transform", "filterTransform", "isDomainSort", "composeTransform", "sortTransform", "reverseTransform", "initializer", "composeInitializer", "t2", "data", "facets", "plotOptions", "arrayify", "i2", "channels", "args", "c1", "d1", "c2", "d2", "f2", "filterTransform", "value", "data", "facets", "V", "valueof", "I", "reverseTransform", "data", "facets", "I", "sortTransform", "value", "sortData", "sortValue", "compare", "data", "facets", "compareData", "i", "j", "I", "channel", "order", "maybeValue", "negate", "descendingDefined", "ascendingDefined", "channels", "V", "valueof", "compareValue", "hasOutput", "outputs", "names", "name", "maybeOutputs", "inputs", "asOutput", "maybeOutput", "entries", "reduceTitle", "reduceFirst", "reduce", "nullOutput", "asEvaluator", "maybeEvaluator", "scale", "isObject", "evaluator", "output", "setOutput", "column", "O", "data", "scope", "I", "extent", "asReduce", "maybeReduce", "input", "maybeInput", "reducer", "V", "context", "labelof", "reduceCount", "valueof", "range", "maybeGroup", "X", "sort", "group", "i", "first", "value", "fallback", "invalidReduce", "reduceReduce", "reduceFunction", "reduceAccessor", "percentile", "reduceLast", "reduceIdentity", "reduceDistinct", "reduceSum", "reduceProportion", "deviation", "min", "minIndex", "max", "maxIndex", "reduceMaybeTemporalAccessor", "mean", "median", "variance", "mode", "maybeSubgroup", "maybeSort", "facets", "reverse", "S", "compare", "j", "ascendingDefined", "f", "take", "x", "isTemporal", "groups", "rollup", "second", "top", "bottom", "sum", "key", "s", "InternSet", "basis", "createChannel", "data", "scale", "type", "value", "filter", "hint", "name", "inferChannelScale", "valueof", "labelof", "createChannels", "channels", "channel", "valueObject", "scales", "values", "scaleName", "map", "isEvery", "isColor", "isOpacity", "isSymbol", "maybeSymbol", "registry", "channelDomain", "facets", "facetChannels", "options", "defaultOrder", "defaultReverse", "defaultReduce", "defaultLimit", "x", "y", "order", "reverse", "reduce", "limit", "maybeValue", "negate", "descendingGroup", "ascendingGroup", "maybeOrder", "X", "reindexFacetChannel", "findScaleChannel", "XV", "lo", "hi", "isIterable", "domain", "InternSet", "YV", "difference", "reducer", "maybeReduce", "rollups", "range", "I", "i", "first", "originalFacets", "V1", "V2", "vi", "j", "k1", "k2", "X1", "X2", "x2", "alias", "ak", "av", "bk", "bv", "ascendingDefined", "descendingDefined", "getSource", "key", "createContext", "options", "document", "create", "name", "select_default", "creator_default", "warnings", "consumeWarnings", "w", "warn", "message", "pi", "tau", "defaultAspectRatio", "createProjection", "projection", "globalInset", "insetTop", "insetRight", "insetBottom", "insetLeft", "dimensions", "options", "domain", "clip", "isObject", "inset", "namedProjection", "width", "height", "marginLeft", "marginRight", "marginTop", "marginBottom", "dx", "dy", "maybePostClip", "tx", "ty", "transform", "x0", "y0", "x1", "y1", "path_default", "k", "transform_default", "x", "y", "warn", "identity", "s", "scaleProjection", "albersUsa_default", "conicProjection", "albers_default", "azimuthalEqualArea_default", "azimuthalEquidistant_default", "conicConformal_default", "conicEqualArea_default", "conicEquidistant_default", "equalEarth_default", "equirectangular_default", "gnomonic_default", "reflectY", "mercator_default", "orthographic_default", "stereographic_default", "transverseMercator_default", "x2", "y2", "clipRectangle", "kx", "ky", "rotate", "precision", "type", "aspectRatio", "parallels", "constant", "stream", "project", "cx", "cy", "values", "n", "X", "Y", "i", "hasProjection", "projectionAspectRatio", "getGeometryChannels", "channel", "X", "Y", "x", "y", "sink", "object", "stream_default", "categoricalSchemes", "Accent_default", "category10_default", "Dark2_default", "Paired_default", "Pastel1_default", "Pastel2_default", "Set1_default", "Set2_default", "Set3_default", "Tableau10_default", "isCategoricalScheme", "scheme", "ordinalSchemes", "scheme11", "BrBG_default", "PRGn_default", "PiYG_default", "PuOr_default", "RdBu_default", "RdGy_default", "RdYlBu_default", "RdYlGn_default", "Spectral_default", "scheme11r", "scheme9", "Blues_default", "Greens_default", "Greys_default", "Oranges_default", "Purples_default", "Reds_default", "schemei", "turbo_default", "viridis_default", "magma", "inferno", "plasma", "cividis_default", "cubehelix_default", "warm", "cool", "BuGn_default", "BuPu_default", "GnBu_default", "OrRd_default", "PuBu_default", "PuBuGn_default", "PuRd_default", "RdPu_default", "YlGn_default", "YlGnBu_default", "YlOrBr_default", "YlOrRd_default", "schemeicyclical", "rainbow_default", "sinebow_default", "interpolate", "quantize_default", "t", "n", "ordinalScheme", "s", "ordinalRange", "length", "maybeBooleanRange", "domain", "range", "f", "value", "quantitativeSchemes", "quantitativeScheme", "divergingSchemes", "isDivergingScheme", "flip", "i", "t", "unit", "interpolators", "number_default", "rgb_default", "hsl_default", "hcl_default", "lab", "maybeInterpolator", "interpolate", "createScaleQ", "key", "scale", "channels", "type", "nice", "clamp", "zero", "domain", "inferAutoDomain", "unknown", "round", "scheme", "interval", "range", "registry", "radius", "inferRadialRange", "length", "inferLengthRange", "opacity", "color", "quantitativeScheme", "round_default", "reverse", "maybeRangeInterval", "n", "arrayify", "m", "piecewise", "_", "constant", "interpolatePiecewise", "min", "max", "extent", "slice", "orderof", "maybeNice", "maybeNiceInterval", "createScaleLinear", "options", "linear", "createScaleSqrt", "createScalePow", "exponent", "pow", "createScaleLog", "base", "inferLogDomain", "log", "createScaleSymlog", "symlog", "createScaleQuantile", "quantiles", "inferQuantileDomain", "quantize_default", "ordinalRange", "quantile", "createScaleThreshold", "createScaleQuantize", "thresholds", "ticks", "x", "sign", "isOrdered", "threshold", "d", "s", "descending", "createScaleIdentity", "identity", "inferDomain", "f", "finite", "value", "inferZeroDomain", "hint", "h25", "positive", "k", "r", "h50", "median", "v", "negative", "j", "createScaleD", "key", "scale", "transform", "channels", "type", "nice", "clamp", "domain", "inferDomain", "unknown", "pivot", "scheme", "range", "symmetric", "interpolate", "registry", "color", "rgb_default", "quantitativeScheme", "number_default", "reverse", "arrayify", "min", "max", "warn", "descending", "maybeInterpolator", "interpolatePiecewise", "piecewise", "flip", "mid", "mindelta", "maxdelta", "createScaleDiverging", "options", "diverging", "transformIdentity", "createScaleDivergingSqrt", "createScaleDivergingPow", "exponent", "divergingPow", "transformPow", "createScaleDivergingLog", "base", "negative", "positive", "divergingLog", "transformLog", "createScaleDivergingSymlog", "constant", "divergingSymlog", "transformSymlog", "x", "transformSqrt", "createScaleT", "key", "scale", "channels", "options", "createScaleQ", "createScaleTime", "time", "createScaleUtc", "utcTime", "ordinalImplicit", "createScaleO", "key", "scale", "channels", "type", "interval", "domain", "range", "reverse", "hint", "maybeRangeInterval", "inferDomain", "createScaleOrdinal", "scheme", "unknown", "options", "registry", "symbol", "inferSymbolHint", "inferSymbolRange", "map", "maybeSymbol", "color", "maybeBooleanRange", "interpolate", "quantitativeScheme", "t0", "d", "n", "quantize_default", "t", "ordinalScheme", "implicit", "ordinal", "createScalePoint", "align", "padding", "maybeRound", "point", "createScaleBand", "paddingInner", "paddingOuter", "band", "round", "values", "InternSet", "value", "v", "min", "max", "extent", "position", "sort", "ascendingDefined", "inferHint", "candidate", "isNoneish", "symbolsStroke", "symbolsFill", "createScales", "channelsByScale", "globalLabel", "globalInset", "globalInsetTop", "globalInsetRight", "globalInsetBottom", "globalInsetLeft", "round", "nice", "clamp", "zero", "align", "padding", "projection", "facetLabel", "options", "scales", "key", "channels", "scaleOptions", "scale", "createScale", "registry", "position", "label", "percent", "transform", "inset", "insetTop", "insetRight", "insetBottom", "insetLeft", "inferScaleLabel", "createScaleFunctions", "name", "type", "interval", "autoScaleRange", "dimensions", "x", "y", "fx", "fy", "superdimensions", "outerDimensions", "autoScaleRangeX", "autoScaleRangeY", "subdimensions", "innerDimensions", "l", "isOrdinalScale", "marginTop", "marginRight", "marginBottom", "marginLeft", "width", "height", "facetMarginTop", "facetMarginRight", "facetMarginBottom", "facetMarginLeft", "left", "right", "piecewiseRange", "autoScaleRound", "top", "bottom", "isBandScale", "roundError", "n", "start", "stop", "paddingInner", "paddingOuter", "m", "step", "length", "isThresholdScale", "end", "_", "createScale", "key", "channels", "options", "type", "inferScaleType", "isOrdinalScale", "values", "value", "isTemporal", "warn", "formatScaleType", "isTemporalString", "isNumericString", "coerceType", "coerceNumbers", "registry", "position", "symbol", "coerceSymbols", "coerceDates", "createScaleDiverging", "createScaleDivergingSqrt", "createScaleDivergingPow", "createScaleDivergingLog", "createScaleDivergingSymlog", "ordinalImplicit", "createScaleOrdinal", "createScaleLinear", "createScaleSqrt", "createScaleThreshold", "createScaleQuantile", "createScaleQuantize", "createScalePow", "createScaleLog", "createScaleSymlog", "createScaleUtc", "createScaleTime", "createScalePoint", "createScaleBand", "createScaleIdentity", "typeProjection", "domain", "range", "scheme", "pivot", "projection", "t", "kind", "radius", "opacity", "length", "asOrdinalType", "isOrdinal", "color", "isDivergingScheme", "isCategoricalScheme", "isTemporalScale", "isThresholdScale", "isBandScale", "isCollapsed", "scale", "domain", "value", "i", "n", "coerceType", "channels", "options", "coerceValues", "c", "coerceSymbols", "values", "map", "maybeSymbol", "exposeScales", "scaleDescriptors", "key", "registry", "exposeScale", "scale", "type", "domain", "range", "interpolate", "interval", "transform", "percent", "pivot", "d", "unknown", "slice", "t", "memoize1", "compute", "cacheValue", "cacheKeys", "keys", "k", "numberFormat", "memoize1", "locale", "monthFormat", "month", "weekdayFormat", "weekday", "formatNumber", "format", "i", "formatIsoDate", "date", "format", "formatAuto", "locale", "number", "formatNumber", "v", "string", "formatDefault", "offset", "nextClipId", "getClipId", "styles", "mark", "title", "href", "variaLabel", "ariaDescription", "ariaHidden", "target", "fill", "fillOpacity", "stroke", "strokeWidth", "strokeOpacity", "strokeLinejoin", "strokeLinecap", "strokeMiterlimit", "strokeDasharray", "strokeDashoffset", "opacity", "mixBlendMode", "imageFilter", "paintOrder", "pointerEvents", "shapeRendering", "channels", "cariaLabel", "defaultFill", "defaultFillOpacity", "defaultStroke", "defaultStrokeOpacity", "defaultStrokeWidth", "defaultStrokeLinecap", "defaultStrokeLinejoin", "defaultStrokeMiterlimit", "defaultPaintOrder", "isNoneish", "vfill", "cfill", "maybeColorChannel", "vfillOpacity", "cfillOpacity", "maybeNumberChannel", "vstroke", "cstroke", "vstrokeOpacity", "cstrokeOpacity", "vopacity", "copacity", "isNone", "isRound", "vstrokeWidth", "cstrokeWidth", "impliedString", "impliedNumber", "string", "applyTitle", "selection", "L", "i", "nonempty", "applyText", "applyText", "selection", "T", "i", "formatDefault", "applyChannelStyles", "selection", "target", "tip", "AL", "T", "F", "FO", "S", "SO", "SW", "O", "H", "applyAttr", "i", "applyHref", "applyTitle", "maybeClip", "clip", "maybeKeyword", "applyClip", "selection", "mark", "dimensions", "context", "clipUrl", "width", "height", "marginLeft", "marginRight", "marginTop", "marginBottom", "id", "getClipId", "create", "g", "projection", "path_default", "applyAttr", "applyIndirectStyles", "pointerEvents", "applyDirectStyles", "applyStyle", "applyHref", "href", "target", "i", "h", "a", "namespaces_default", "name", "value", "applyTransform", "x", "y", "tx", "offset", "ty", "impliedString", "impliedValue", "string", "impliedNumber", "number", "validClassName", "maybeClassName", "applyInlineStyles", "style", "element", "applyFrameAnchor", "frameAnchor", "createDimensions", "scales", "marks", "options", "marginTopDefault", "offset", "marginRightDefault", "marginBottomDefault", "marginLeftDefault", "marginTop", "marginRight", "marginBottom", "marginLeft", "margin", "width", "height", "autoHeight", "dimensions", "facetMargin", "facetMarginTop", "facetMarginRight", "facetMarginBottom", "facetMarginLeft", "x", "y", "fy", "fx", "projection", "aspectRatio", "nfy", "ar", "projectionAspectRatio", "nfx", "far", "lar", "ny", "isOrdinalScale", "ratio", "aspectRatioLength", "fxb", "fyb", "w", "k", "scale", "type", "domain", "transform", "exponent", "min", "max", "extent", "createFacets", "channelsByScale", "options", "fx", "fy", "createScales", "fxDomain", "fyDomain", "cross", "x", "y", "i", "recreateFacets", "facets", "X", "Y", "facetIndex", "f", "a", "b", "facetGroups", "data", "I", "range", "FX", "FY", "rollup", "G", "facetTranslator", "marginTop", "marginLeft", "facetExclude", "index", "ex", "e", "sum", "d", "n", "j", "facetAnchors", "facetAnchorTop", "facetAnchorRight", "facetAnchorBottom", "facetAnchorLeft", "and", "facetAnchorTopEmpty", "facetAnchorRightEmpty", "facetAnchorBottomEmpty", "facetAnchorLeftEmpty", "facetAnchorEmpty", "maybeFacetAnchor", "facetAnchor", "anchor", "indexCache", "V", "InternMap", "map", "v", "facetIndexOf", "facetFind", "keyof", "facetEmpty", "empty", "channels", "facetFilter", "groups", "Mark", "data", "channels", "options", "defaults", "facet", "facetAnchor", "fx", "fy", "sort", "dx", "dy", "margin", "marginTop", "marginRight", "marginBottom", "marginLeft", "clip", "extraChannels", "tip", "render", "isDomainSort", "initializer", "basic", "keyword", "singleton", "maybeFacetAnchor", "maybeNamed", "maybeChannels", "styles", "name", "channel", "isOptions", "value", "scale", "optional", "maybeClip", "maybeTip", "composeRender", "facets", "facetChannels", "plotOptions", "arrayify", "range", "originalFacets", "createChannels", "channelDomain", "index", "values", "filter", "defined", "i", "context", "cx", "cy", "project", "scales", "valueObject", "marks", "r1", "r2", "s", "v", "d", "c", "next", "maybeValue", "maybeKeyword", "withTip", "states", "pointerK", "kx", "ky", "x", "y", "px", "py", "maxRadius", "channels", "render", "options", "composeRender", "index", "scales", "values", "dimensions", "context", "next", "svg", "data", "state", "renderIndex", "fx", "fy", "tx", "ty", "faceted", "facetState", "facetStates", "cx", "cy", "applyFrameAnchor", "PX", "PY", "i", "anchorX", "anchorY", "g", "s", "f", "update", "ii", "ri", "r", "I", "p", "ft", "mt", "pointermove", "event", "xp", "yp", "pointer_default", "j", "dx", "dy", "rj", "pointerdown", "pointerleave", "pointer", "pointerX", "pointerY", "X1", "X2", "X", "Y1", "Y2", "Y", "inferFontVariant", "scale", "isOrdinalScale", "legendRamp", "color", "options", "label", "tickSize", "width", "height", "marginTop", "marginRight", "marginBottom", "marginLeft", "style", "ticks", "tickFormat", "fontVariant", "inferFontVariant", "round", "opacity", "className", "context", "createContext", "maybeClassName", "maybeNumberChannel", "svg", "create", "applyInlineStyles", "tickAdjust", "g", "x", "applyRange", "range", "type", "domain", "interpolate", "scale", "pivot", "interpolator", "piecewise", "interpolatePiecewise", "quantize_default", "number_default", "n", "canvas", "context2", "i", "j", "thresholds", "thresholdFormat", "d", "format", "linear", "map", "_", "band", "axisBottom", "impliedString", "radians", "markers", "mark", "marker", "markerStart", "markerMid", "markerEnd", "maybeMarker", "markerCircleFill", "markerArrow", "markerDot", "markerCircleStroke", "orient", "color", "context", "create", "nextMarkerId", "applyMarkers", "path", "S", "applyMarkersColor", "i", "applyMarkersColor", "path", "markerStart", "markerMid", "markerEnd", "stroke", "strokeof", "context", "iriByMarkerColor", "applyMarker", "marker", "i", "color", "iriByColor", "iri", "node", "id", "nextMarkerId", "maybeInsetX", "inset", "insetLeft", "insetRight", "options", "maybeInset", "maybeInsetY", "insetTop", "insetBottom", "inset1", "inset2", "offset", "maybeIntervalValue", "value", "interval", "maybeValue", "maybeInterval", "maybeIntervalK", "k", "maybeInsetK", "options", "trivial", "v", "v1", "v2", "label", "labelof", "V", "kv", "data", "valueof", "D1", "V1", "transform", "map", "maybeIntervalMidK", "V2", "isTemporal", "maybeIntervalX", "options", "maybeIntervalK", "maybeInsetX", "maybeIntervalY", "maybeInsetY", "maybeIntervalMidX", "maybeIntervalMidK", "maybeIntervalMidY", "defaults", "RuleX", "Mark", "data", "options", "x", "y1", "y2", "inset", "insetTop", "insetBottom", "withTip", "number", "markers", "index", "scales", "channels", "dimensions", "context", "y", "X", "Y1", "Y2", "width", "height", "marginTop", "marginRight", "marginLeft", "marginBottom", "create", "applyIndirectStyles", "applyTransform", "offset", "g", "applyDirectStyles", "i", "isCollapsed", "applyChannelStyles", "applyMarkers", "RuleY", "x1", "x2", "insetRight", "insetLeft", "Y", "X1", "X2", "ruleX", "identity", "rest", "maybeIntervalY", "maybeOptionalZero", "ruleY", "maybeIntervalX", "template", "strings", "parts", "j", "copy", "i", "s", "defaults", "softHyphen", "Text", "Mark", "data", "options", "x", "y", "text", "isIterable", "isTextual", "identity", "indexOf", "frameAnchor", "textAnchor", "lineAnchor", "lineHeight", "lineWidth", "textOverflow", "monospace", "fontFamily", "fontSize", "fontStyle", "fontVariant", "fontWeight", "rotate", "vrotate", "crotate", "maybeNumberChannel", "vfontSize", "cfontSize", "maybeFontSizeChannel", "numberChannel", "nonempty", "impliedString", "keyword", "maybeTextOverflow", "string", "maybeFrameAnchor", "splitter", "clipper", "index", "scales", "channels", "dimensions", "context", "X", "Y", "R", "T", "TL", "FS", "cx", "cy", "applyFrameAnchor", "create", "applyIndirectStyles", "applyIndirectTextStyles", "applyTransform", "g", "applyDirectStyles", "applyMultilineText", "template", "i", "applyAttr", "applyChannelStyles", "selection", "mark", "splitLines", "clipLine", "lines", "formatDefault", "n", "m", "tspan", "namespaces_default", "title", "maybeTuple", "textX", "maybeIntervalMidY", "textY", "maybeIntervalMidX", "inferFontVariant", "isNumeric", "isTemporal", "fontSizes", "lineWrap", "input", "maxWidth", "widthof", "lineStart", "lineEnd", "wordStart", "wordEnd", "required", "lineBreaks", "j", "k", "defaultWidthMap", "defaultWidth", "start", "end", "sum", "readCharacter", "isPictographic", "monospaceWidth", "clipStart", "clipEnd", "ellipsis", "clipMiddle", "cut", "width", "inset", "I", "w", "l", "e", "ei", "reCombiner", "rePictographic", "isSurrogatePair", "isCombiner", "isZeroWidthJoiner", "isAscii", "hi", "lo", "defaults", "defaultRadius", "wingRatio", "shapeArrow", "context", "l", "r", "wing", "shapeSpike", "shapes", "isShapeObject", "value", "maybeShape", "shape", "Vector", "Mark", "data", "options", "x", "y", "length", "rotate", "anchor", "frameAnchor", "vl", "cl", "maybeNumberChannel", "vr", "cr", "keyword", "maybeFrameAnchor", "index", "scales", "channels", "dimensions", "X", "Y", "L", "A", "cx", "cy", "applyFrameAnchor", "create", "applyIndirectStyles", "applyTransform", "g", "applyDirectStyles", "template", "i", "p", "pathRound", "applyChannelStyles", "vectorX", "data", "options", "x", "identity", "rest", "Vector", "vectorY", "y", "maybeData", "data", "options", "isIterable", "maybeAnchor", "anchor", "anchors", "keyword", "anchorY", "anchorFy", "anchorX", "anchorFx", "axisY", "axisKy", "axisFy", "axisX", "axisKx", "axisFx", "k", "color", "opacity", "stroke", "strokeOpacity", "strokeWidth", "fill", "fillOpacity", "textAnchor", "textStroke", "textStrokeOpacity", "textStrokeWidth", "tickSize", "tickPadding", "tickRotate", "x", "margin", "marginTop", "marginRight", "marginBottom", "marginLeft", "label", "labelAnchor", "labelArrow", "labelOffset", "number", "maybeLabelArrow", "marks", "isNoneish", "axisTickKy", "axisTextKy", "text", "labelOptions", "facets", "channels", "scales", "dimensions", "scale", "cla", "clo", "formatAxisLabel", "y", "axisTickKx", "axisTextKx", "strokeLinecap", "strokeLinejoin", "facetAnchor", "frameAnchor", "inset", "insetLeft", "insetRight", "dx", "axisMark", "vectorY", "offset", "shapeTickLeft", "shapeTickRight", "insetTop", "insetBottom", "dy", "vectorX", "shapeTickBottom", "shapeTickTop", "radians", "tickFormat", "lineAnchor", "fontVariant", "textY", "ticks", "inferFontVariant", "inferTextChannel", "textX", "gridY", "gridKy", "gridFy", "gridX", "gridKx", "gridFx", "x1", "x2", "ruleY", "gridDefaults", "y1", "y2", "ruleX", "fontFamily", "fontSize", "fontStyle", "fontWeight", "monospace", "pointerEvents", "shapeRendering", "initializer", "maybeColorChannel", "maybeNumberChannel", "mark", "ariaLabel", "initialize", "axisInitializer", "_channels", "context", "initializeFacets", "tickSpacing", "interval", "isTemporalScale", "arrayify", "maybeRangeInterval", "min", "max", "extent", "range", "identity", "initializedChannels", "name", "channel", "valueof", "basicInitializer", "m", "inferTickFormat", "formatTimeTicks", "isUtcYear", "utcFormat", "isTimeYear", "timeFormat", "formatDefault", "isTemporal", "format", "constant", "l", "inferScaleOrder", "orderof", "isTemporalish", "order", "maybeScale", "scale", "key", "s", "legendSwatches", "color", "opacity", "options", "isOrdinalScale", "isThresholdScale", "legendItems", "selection", "width", "height", "maybeNumberChannel", "legendSymbols", "symbol", "fill", "fillOpacity", "stroke", "isNoneish", "strokeOpacity", "strokeWidth", "r", "vf", "cf", "maybeColorChannel", "vs", "cs", "sf", "ss", "size", "d", "p", "pathRound", "swatch", "columns", "tickFormat", "fontVariant", "inferFontVariant", "swatchSize", "swatchWidth", "swatchHeight", "marginLeft", "className", "style", "context", "createContext", "maybeClassName", "inferTickFormat", "swatches", "create", "extraStyle", "item", "div", "impliedString", "applyInlineStyles", "legendRegistry", "legendSymbols", "legendColor", "legendOpacity", "exposeLegends", "scales", "context", "defaults", "key", "options", "legendRegistry", "legendOptions", "className", "label", "ticks", "tickFormat", "inherit", "legendColor", "color", "legend", "legendSwatches", "legendRamp", "legendOpacity", "type", "interpolate", "scale", "rgb", "interpolateOpacity", "r", "g", "b", "t", "createLegends", "legends", "value", "o", "defaults", "lineDefaults", "Frame", "Mark", "options", "anchor", "inset", "insetTop", "insetRight", "insetBottom", "insetLeft", "rx", "ry", "singleton", "maybeKeyword", "number", "index", "scales", "channels", "dimensions", "context", "marginTop", "marginRight", "marginBottom", "marginLeft", "width", "height", "x1", "x2", "y1", "y2", "create", "applyIndirectStyles", "applyDirectStyles", "applyChannelStyles", "applyTransform", "line", "rect", "frame", "defaults", "ignoreChannels", "Tip", "Mark", "data", "options", "isIterable", "isTextual", "identity", "x", "y", "x1", "x2", "y1", "y2", "anchor", "monospace", "fontFamily", "fontSize", "fontStyle", "fontVariant", "fontWeight", "lineHeight", "lineWidth", "frameAnchor", "textAnchor", "textOverflow", "textPadding", "title", "pointerSize", "pathFilter", "maybeAnchor", "maybeFrameAnchor", "impliedString", "string", "maybeTextOverflow", "number", "key", "splitter", "clipper", "index", "scales", "values", "dimensions", "context", "mark", "fx", "fy", "svg", "document", "r", "m", "marginTop", "marginLeft", "sources", "getSources", "X1", "Y1", "X2", "Y2", "X", "Y", "ox", "oy", "cx", "cy", "applyFrameAnchor", "px", "anchorX", "py", "anchorY", "widthof", "monospaceWidth", "defaultWidth", "ee", "ellipsis", "formatFx", "inferTickFormat", "formatFy", "format", "i", "text", "line", "formatDefault", "channel", "value", "defined", "formatLabel", "formatPair", "scale", "g", "create", "applyIndirectStyles", "applyIndirectTextStyles", "applyTransform", "applyDirectStyles", "that", "select_default", "names", "name", "renderLine", "selection", "color", "opacity", "swatch", "w", "j", "cut", "k", "postrender", "width", "height", "tx", "h", "a", "fitLeft", "fitRight", "fitTop", "fitBottom", "ax", "ay", "path", "getPath", "t", "getLineOffset", "getTextTranslate", "tip", "maybeTuple", "length", "channels", "source", "getSource", "c1", "c2", "c", "defaultLabel", "plot", "options", "facet", "style", "caption", "ariaLabel", "ariaDescription", "className", "maybeClassName", "marks", "flatMarks", "inferTips", "topFacetState", "maybeTopFacet", "facetStateByMark", "mark", "facetState", "maybeMarkFacet", "channelsByScale", "addScaleChannels", "axes", "inferAxes", "facets", "createFacets", "topFacetsIndex", "facetFilter", "nonEmpty", "facetsIndex", "index", "i", "f", "facetExclude", "key", "registry", "isScaleOptions", "stateByMark", "facetChannels", "data", "channels", "applyScaleTransforms", "scaleDescriptors", "createScales", "scales", "createScaleFunctions", "dimensions", "createDimensions", "autoScaleRange", "fx", "fy", "subdimensions", "innerDimensions", "superdimensions", "actualDimensions", "context", "createContext", "document", "svg", "creator_default", "figure", "createProjection", "facetGroups", "state", "value", "newByScale", "update", "inferChannelScales", "channel", "scale", "position", "applyScaleTransform", "newChannelsByScale", "newScaleDescriptors", "inheritScaleLabels", "newScales", "facetDomains", "facetTranslate", "recreateFacets", "facetTranslator", "width", "height", "select_default", "applyInlineStyles", "values", "indexes", "node", "g", "faceted", "subarray", "name", "legends", "createLegends", "legend", "figcaption", "exposeScales", "exposeLegends", "w", "consumeWarnings", "plotThis", "Mark", "markify", "Render", "render", "t", "type", "percent", "interval", "transform", "x", "maybeIntervalTransform", "map", "inferChannelScale", "filter", "yes", "hasProjection", "gx", "gy", "y", "getGeometryChannels", "addScaleChannel", "scaleChannels", "arrayify", "createChannel", "groups", "warn", "derive", "initializer", "tips", "pointerX", "pointerY", "pointer", "tip", "projection", "axis", "grid", "facetAxis", "facetGrid", "xAxis", "xGrid", "yAxis", "yGrid", "fxAxis", "fxGrid", "fyAxis", "fyGrid", "hasPositionChannel", "hasAxis", "maybeGrid", "gridFy", "maybeAxis", "axisFy", "gridFx", "axisFx", "gridY", "axisY", "gridX", "axisX", "axisType", "primary", "secondary", "defaults", "both", "isBoth", "axisOptions", "line", "isNone", "frame", "lineOptions", "gridType", "gridOptions", "anchor", "ticks", "tickSize", "tickSpacing", "tickPadding", "tickFormat", "tickRotate", "fontVariant", "label", "labelAnchor", "labelArrow", "labelOffset", "stroke", "isColor", "isGridTicks", "isIterable", "k", "prefix", "m", "newScale", "marginTop", "marginRight", "marginBottom", "marginLeft", "outerDimensions", "fxr", "outerRange", "fyr", "domain", "x1", "x2", "binX", "outputs", "options", "mergeOptions", "x", "y", "binn", "maybeBinValue", "identity", "maybeInsetX", "binn", "bx", "by", "gx", "gy", "reduceData", "reduceIdentity", "filter", "reduceCount", "sort", "reverse", "outputs", "inputs", "maybeBin", "maybeBinOutputs", "maybeBinReduce", "identity", "maybeBinOutput", "maybeBinEvaluator", "hasOutput", "BX1", "setBX1", "maybeColumn", "BX2", "setBX2", "BY1", "setBY1", "BY2", "setBY2", "k", "gk", "GK", "setGK", "x", "y", "z", "fill", "stroke", "x1", "x2", "y1", "y2", "domain", "cumulative", "thresholds", "interval", "options", "GZ", "setGZ", "vfill", "maybeColorChannel", "vstroke", "GF", "setGF", "GS", "setGS", "basic", "data", "facets", "plotOptions", "K", "maybeApplyInterval", "valueof", "Z", "F", "S", "G", "maybeSubgroup", "groupFacets", "groupData", "bin", "bing", "i", "o", "facet", "groupFacet", "f", "I", "maybeGroup", "g", "b", "extent", "maybeSort", "mid", "name", "output", "mergeOptions", "maybeBinValue", "value", "defaultValue", "maybeValue", "maybeThresholds", "maybeBin", "options", "value", "cumulative", "domain", "extent", "thresholds", "bin", "data", "V", "valueof", "T", "isTemporal", "isTimeThresholds", "map", "coerceDate", "min", "max", "t", "isInterval", "utcTickInterval", "coerceNumbers", "step", "tickIncrement", "r0", "r1", "n", "i", "ticks", "E", "bin1cn", "bin1cp", "bin1", "labelof", "maybeThresholds", "interval", "defaultThresholds", "thresholdAuto", "maybeRangeInterval", "thresholdFreedmanDiaconis", "thresholdScott", "thresholdSturges", "maybeUtcInterval", "maybeBinOutputs", "outputs", "inputs", "maybeOutputs", "maybeBinOutput", "name", "reduce", "maybeOutput", "maybeBinEvaluator", "maybeEvaluator", "maybeBinReduce", "maybeReduce", "maybeBinReduceFallback", "reduceX", "reduceX1", "reduceX2", "reduceY", "reduceY1", "reduceY2", "values", "isTimeInterval", "isIterable", "bing", "EX", "EY", "I", "X", "ix", "x1", "x2", "Y", "iy", "y1", "y2", "B", "bisect_default", "C", "b", "j", "mid1", "m", "maybeIdentityY", "options", "hasY", "identity", "stackY", "stackOptions", "options", "mergeOptions", "x1", "x", "y", "rest", "transform", "X", "y1", "y2", "stack", "mid", "maybeStackY", "y", "y1", "y2", "options", "withTip", "stackY", "maybeZero", "mergeOptions", "offset", "order", "reverse", "rest", "lengthy", "stack", "x", "one", "kx", "ky", "z", "maybeZ", "X", "setX", "maybeColumn", "Y1", "setY1", "column", "Y2", "setY2", "maybeOffset", "maybeOrder", "basic", "data", "facets", "plotOptions", "maybeApplyInterval", "valueof", "Y", "Z", "compare", "n", "facetstacks", "facet", "stacks", "group", "i", "yn", "yp", "offsetExpand", "offsetCenter", "offsetWiggle", "extent", "min", "max", "m", "offsetZero", "offsetCenterFacets", "prev", "InternMap", "j", "Fi", "Df", "value", "diff", "Cf1", "cumsum", "s1", "sum", "d", "I", "m0", "p", "orderInsideOut", "ascendingDefined", "negate", "descendingDefined", "orderY", "orderZ", "orderSum", "orderAppearance", "orderAccessor", "field", "orderComparator", "orderGiven", "orderZDomain", "groupSort", "range", "greatest", "K", "sums", "rollup", "Kp", "Kn", "k", "f", "O", "domain", "map", "AbstractBar", "Mark", "data", "channels", "options", "defaults", "inset", "insetTop", "insetRight", "insetBottom", "insetLeft", "rx", "ry", "number", "impliedString", "index", "scales", "dimensions", "context", "create", "applyIndirectStyles", "g", "applyDirectStyles", "applyAttr", "applyChannelStyles", "X", "marginLeft", "Y", "marginTop", "x", "marginRight", "width", "bandwidth", "y", "marginBottom", "height", "BarY", "AbstractBar", "data", "options", "x", "y1", "y2", "defaults", "selection", "mark", "y", "applyTransform", "Y1", "Y2", "marginTop", "insetTop", "isCollapsed", "i", "marginBottom", "height", "insetBottom", "barY", "data", "options", "hasXY", "indexOf", "identity", "BarY", "maybeStackY", "maybeIntervalY", "maybeIdentityY", "program", "counter", "partition", "histogram", "Data", "Name", "plot", "d", "barY", "frame", "n", "fixKey", "k", "keys", "union", "index", "key", "i", "fx", "fy", "binX", "text", "axisX"]
 }