UNPKG

vega-lite

Version:

Vega-Lite is a concise high-level language for interactive visualization.

1 lines 251 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("vega")):"function"==typeof define&&define.amd?define(["exports","vega"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).vegaLite={},e.vega)}(this,function(e,t){"use strict";var n="6.4.3";function i(e){return Z(e,"or")}function r(e){return Z(e,"and")}function o(e){return Z(e,"not")}function a(e,t){if(o(e))a(e.not,t);else if(r(e))for(const n of e.and)a(n,t);else if(i(e))for(const n of e.or)a(n,t);else t(e)}function s(e,t){return o(e)?{not:s(e.not,t)}:r(e)?{and:e.and.map(e=>s(e,t))}:i(e)?{or:e.or.map(e=>s(e,t))}:t(e)}const c=structuredClone;function l(e){throw new Error(e)}function u(e,n){const i={};for(const r of n)t.hasOwnProperty(e,r)&&(i[r]=e[r]);return i}function f(e,t){const n={...e};for(const e of t)delete n[e];return n}function d(e){if(t.isNumber(e))return e;const n=t.isString(e)?e:K(e);if(n.length<250)return n;let i=0;for(let e=0;e<n.length;e++){i=(i<<5)-i+n.charCodeAt(e),i&=i}return i}function m(e){return!1===e||null===e}function p(e,t){return e.includes(t)}function g(e,t){let n=0;for(const[i,r]of e.entries())if(t(r,i,n++))return!0;return!1}function h(e,t){let n=0;for(const[i,r]of e.entries())if(!t(r,i,n++))return!1;return!0}function y(e,...t){for(const n of t)v(e,n??{});return e}function v(e,n){for(const i of D(n))t.writeConfig(e,i,n[i],!0)}function b(e,t){const n=[],i={};let r;for(const o of e)r=t(o),r in i||(i[r]=1,n.push(o));return n}function x(e,t){if(e.size!==t.size)return!1;for(const n of e)if(!t.has(n))return!1;return!0}function $(e,t){for(const n of e)if(t.has(n))return!0;return!1}function w(e){const n=new Set;for(const i of e){const e=t.splitAccessPath(i).map((e,t)=>0===t?e:`[${e}]`),r=e.map((t,n)=>e.slice(0,n+1).join(""));for(const e of r)n.add(e)}return n}function k(e,t){return void 0===e||void 0===t||$(w(e),w(t))}function S(e){return 0===D(e).length}Set.prototype.toJSON=function(){return`Set(${[...this].map(e=>K(e)).join(",")})`};const D=Object.keys,F=Object.values,O=Object.entries;function z(e){return!0===e||!1===e}function _(e){return t.isString(e)||t.isNumber(e)||z(e)}function C(e){const t=e.replace(/\W/g,"_");return(e.match(/^\d+/)?"_":"")+t}function P(e,t){return o(e)?`!(${P(e.not,t)})`:r(e)?`(${e.and.map(e=>P(e,t)).join(") && (")})`:i(e)?`(${e.or.map(e=>P(e,t)).join(") || (")})`:t(e)}function N(e,t){if(0===t.length)return!0;const n=t.shift();return n in e&&N(e[n],t)&&delete e[n],S(e)}function A(e){return e.charAt(0).toUpperCase()+e.substr(1)}function j(e,n="datum"){const i=t.splitAccessPath(e),r=[];for(let e=1;e<=i.length;e++){const o=`[${i.slice(0,e).map(t.stringValue).join("][")}]`;r.push(`${n}${o}`)}return r.join(" && ")}function T(e,n="datum"){return`${n}[${t.stringValue(t.splitAccessPath(e).join("."))}]`}function E(e){return`datum['${e.replaceAll("'","\\'")}']`}function M(e){return e.replaceAll("\\'","'").replaceAll("\\.",".")}function q(e){return e.replace(/(\[|\]|\.|'|")/g,"\\$1")}function R(e){return`${t.splitAccessPath(e).map(q).join("\\.")}`}function L(e,t,n){return e.replace(new RegExp(t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"g"),n)}function W(e){return`${t.splitAccessPath(e).join(".")}`}function U(e){return e?t.splitAccessPath(e).length:0}function I(...e){return e.find(e=>void 0!==e)}let B=42;function V(e){const t=++B;return e?String(e)+t:t}function H(e){return G(e)?e:`__${e}`}function G(e){return e.startsWith("__")}function Y(e){if(void 0!==e)return(e%360+360)%360}function X(e){return!!t.isNumber(e)||!isNaN(e)&&!isNaN(parseFloat(e))}const J=Object.getPrototypeOf(structuredClone({}));function Q(e,t){if(e===t)return!0;if(e&&t&&"object"==typeof e&&"object"==typeof t){if(e.constructor.name!==t.constructor.name)return!1;let n,i;if(Array.isArray(e)){if(n=e.length,n!=t.length)return!1;for(i=n;0!==i--;)if(!Q(e[i],t[i]))return!1;return!0}if(e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(const n of e.entries())if(!t.has(n[0]))return!1;for(const n of e.entries())if(!Q(n[1],t.get(n[0])))return!1;return!0}if(e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(const n of e.entries())if(!t.has(n[0]))return!1;return!0}if(ArrayBuffer.isView(e)&&ArrayBuffer.isView(t)){if(n=e.length,n!=t.length)return!1;for(i=n;0!==i--;)if(e[i]!==t[i])return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf&&e.valueOf!==J.valueOf)return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString&&e.toString!==J.toString)return e.toString()===t.toString();const r=Object.keys(e);if(n=r.length,n!==Object.keys(t).length)return!1;for(i=n;0!==i--;)if(!Object.prototype.hasOwnProperty.call(t,r[i]))return!1;for(i=n;0!==i--;){const n=r[i];if(!Q(e[n],t[n]))return!1}return!0}return e!=e&&t!=t}function K(e){const t=[];return function e(n){if(n?.toJSON&&"function"==typeof n.toJSON&&(n=n.toJSON()),void 0===n)return;if("number"==typeof n)return isFinite(n)?`${n}`:"null";if("object"!=typeof n)return JSON.stringify(n);let i,r;if(Array.isArray(n)){for(r="[",i=0;i<n.length;i++)i&&(r+=","),r+=e(n[i])||"null";return`${r}]`}if(null===n)return"null";if(t.includes(n))throw new TypeError("Converting circular structure to JSON");const o=t.push(n)-1,a=Object.keys(n).sort();for(r="",i=0;i<a.length;i++){const t=a[i],o=e(n[t]);o&&(r&&(r+=","),r+=`${JSON.stringify(t)}:${o}`)}return t.splice(o,1),`{${r}}`}(e)}function Z(e,n){return t.isObject(e)&&t.hasOwnProperty(e,n)&&void 0!==e[n]}const ee="row",te="column",ne="facet",ie="x",re="y",oe="x2",ae="y2",se="xOffset",ce="yOffset",le="radius",ue="radius2",fe="theta",de="theta2",me="latitude",pe="longitude",ge="latitude2",he="longitude2",ye="time",ve="color",be="fill",xe="stroke",$e="shape",we="size",ke="angle",Se="opacity",De="fillOpacity",Fe="strokeOpacity",Oe="strokeWidth",ze="strokeDash",_e="text",Ce="order",Pe="detail",Ne="key",Ae="tooltip",je="href",Te="url",Ee="description",Me={theta:1,theta2:1,radius:1,radius2:1};function qe(e){return t.hasOwnProperty(Me,e)}const Re={longitude:1,longitude2:1,latitude:1,latitude2:1};function Le(e){switch(e){case me:return"y";case ge:return"y2";case pe:return"x";case he:return"x2"}}function We(e){return t.hasOwnProperty(Re,e)}const Ue=D(Re),Ie={x:1,y:1,x2:1,y2:1,...Me,...Re,xOffset:1,yOffset:1,color:1,fill:1,stroke:1,time:1,opacity:1,fillOpacity:1,strokeOpacity:1,strokeWidth:1,strokeDash:1,size:1,angle:1,shape:1,order:1,text:1,detail:1,key:1,tooltip:1,href:1,url:1,description:1};function Be(e){return e===ve||e===be||e===xe}const Ve={row:1,column:1,facet:1},He=D(Ve),Ge={...Ie,...Ve},Ye=D(Ge),{order:Xe,detail:Je,tooltip:Qe,...Ke}=Ge,{row:Ze,column:et,facet:tt,...nt}=Ke;function it(e){return t.hasOwnProperty(nt,e)}function rt(e){return t.hasOwnProperty(Ge,e)}const ot=[oe,ae,ge,he,de,ue];function at(e){return st(e)!==e}function st(e){switch(e){case oe:return ie;case ae:return re;case ge:return me;case he:return pe;case de:return fe;case ue:return le}return e}function ct(e){if(qe(e))switch(e){case fe:return"startAngle";case de:return"endAngle";case le:return"outerRadius";case ue:return"innerRadius"}return e}function lt(e){switch(e){case ie:return oe;case re:return ae;case me:return ge;case pe:return he;case fe:return de;case le:return ue}}function ut(e){switch(e){case ie:case oe:return"width";case re:case ae:return"height"}}function ft(e){switch(e){case ie:return"xOffset";case re:return"yOffset";case oe:return"x2Offset";case ae:return"y2Offset";case fe:return"thetaOffset";case le:return"radiusOffset";case de:return"theta2Offset";case ue:return"radius2Offset"}}function dt(e){switch(e){case ie:return"xOffset";case re:return"yOffset"}}function mt(e){switch(e){case"xOffset":return"x";case"yOffset":return"y"}}const pt=D(Ie),{x:gt,y:ht,x2:yt,y2:vt,xOffset:bt,yOffset:xt,latitude:$t,longitude:wt,latitude2:kt,longitude2:St,theta:Dt,theta2:Ft,radius:Ot,radius2:zt,..._t}=Ie,Ct=D(_t),Pt={x:1,y:1},Nt=D(Pt);function At(e){return t.hasOwnProperty(Pt,e)}const jt={theta:1,radius:1},Tt=D(jt);function Et(e){return"width"===e?ie:re}const Mt={xOffset:1,yOffset:1};function qt(e){return t.hasOwnProperty(Mt,e)}const Rt={time:1};function Lt(e){return e in Rt}const{text:Wt,tooltip:Ut,href:It,url:Bt,description:Vt,detail:Ht,key:Gt,order:Yt,...Xt}=_t,Jt=D(Xt);const Qt={...Pt,...jt,...Mt,...Xt},Kt=D(Qt);function Zt(e){return t.hasOwnProperty(Qt,e)}function en(e,t){return function(e){switch(e){case ve:case be:case xe:case Ee:case Pe:case Ne:case Ae:case je:case Ce:case Se:case De:case Fe:case Oe:case ne:case ee:case te:return tn;case ie:case re:case se:case ce:case me:case pe:case ye:return rn;case oe:case ae:case ge:case he:return{area:"always",bar:"always",image:"always",rect:"always",rule:"always",circle:"binned",point:"binned",square:"binned",tick:"binned",line:"binned",trail:"binned"};case we:return{point:"always",tick:"always",rule:"always",circle:"always",square:"always",bar:"always",text:"always",line:"always",trail:"always"};case ze:return{line:"always",point:"always",tick:"always",rule:"always",circle:"always",square:"always",bar:"always",geoshape:"always"};case $e:return{point:"always",geoshape:"always"};case _e:return{text:"always"};case ke:return{point:"always",square:"always",text:"always"};case Te:return{image:"always"};case fe:case le:return{text:"always",arc:"always"};case de:case ue:return{arc:"always"}}}(e)[t]}const tn={arc:"always",area:"always",bar:"always",circle:"always",geoshape:"always",image:"always",line:"always",rule:"always",point:"always",rect:"always",square:"always",trail:"always",text:"always",tick:"always"},{geoshape:nn,...rn}=tn;function on(e){switch(e){case ie:case re:case fe:case le:case se:case ce:case we:case ke:case Oe:case Se:case De:case Fe:case ye:case oe:case ae:case de:case ue:return;case ne:case ee:case te:case $e:case ze:case _e:case Ae:case je:case Te:case Ee:return"discrete";case ve:case be:case xe:return"flexible";case me:case pe:case ge:case he:case Pe:case Ne:case Ce:return}}const an={argmax:1,argmin:1,average:1,count:1,distinct:1,exponential:1,exponentialb:1,product:1,max:1,mean:1,median:1,min:1,missing:1,q1:1,q3:1,ci0:1,ci1:1,stderr:1,stdev:1,stdevp:1,sum:1,valid:1,values:1,variance:1,variancep:1},sn={count:1,min:1,max:1};function cn(e){return Z(e,"argmin")}function ln(e){return Z(e,"argmax")}function un(e){return t.isString(e)&&t.hasOwnProperty(an,e)}const fn=new Set(["count","valid","missing","distinct"]);function dn(e){return t.isString(e)&&fn.has(e)}const mn=new Set(["count","sum","distinct","valid","missing"]),pn=new Set(["mean","average","median","q1","q3","min","max"]);function gn(e){return t.isBoolean(e)&&(e=La(e,void 0)),`bin${D(e).map(t=>bn(e[t])?C(`_${t}_${O(e[t])}`):C(`_${t}_${e[t]}`)).join("")}`}function hn(e){return!0===e||vn(e)&&!e.binned}function yn(e){return"binned"===e||vn(e)&&!0===e.binned}function vn(e){return t.isObject(e)}function bn(e){return Z(e,"param")}function xn(e){switch(e){case ee:case te:case we:case ve:case be:case xe:case Oe:case Se:case De:case Fe:case $e:return 6;case ze:return 4;default:return 10}}function $n(e){return Z(e,"expr")}function wn(e,{level:t}={level:0}){const n=D(e||{}),i={};for(const r of n)i[r]=0===t?An(e[r]):wn(e[r],{level:t-1});return i}function kn(e){const{anchor:t,frame:n,offset:i,orient:r,angle:o,limit:a,color:s,subtitleColor:c,subtitleFont:l,subtitleFontSize:f,subtitleFontStyle:d,subtitleFontWeight:m,subtitleLineHeight:p,subtitlePadding:g,...h}=e,y={...t?{anchor:t}:{},...n?{frame:n}:{},...i?{offset:i}:{},...r?{orient:r}:{},...void 0!==o?{angle:o}:{},...void 0!==a?{limit:a}:{}},v={...c?{subtitleColor:c}:{},...l?{subtitleFont:l}:{},...f?{subtitleFontSize:f}:{},...d?{subtitleFontStyle:d}:{},...m?{subtitleFontWeight:m}:{},...p?{subtitleLineHeight:p}:{},...g?{subtitlePadding:g}:{}};return{titleMarkConfig:{...h,...s?{fill:s}:{}},subtitleMarkConfig:u(e,["align","baseline","dx","dy","limit"]),nonMarkTitleProperties:y,subtitle:v}}function Sn(e){return t.isString(e)||t.isArray(e)&&t.isString(e[0])}function Dn(e){return Z(e,"signal")}function Fn(e){return Z(e,"step")}function On(e){return!t.isArray(e)&&(Z(e,"fields")&&!Z(e,"data"))}function zn(e){return!t.isArray(e)&&(Z(e,"field")&&Z(e,"data"))}const _n=D({aria:1,description:1,ariaRole:1,ariaRoleDescription:1,blend:1,opacity:1,fill:1,fillOpacity:1,stroke:1,strokeCap:1,strokeWidth:1,strokeOpacity:1,strokeDash:1,strokeDashOffset:1,strokeJoin:1,strokeOffset:1,strokeMiterLimit:1,startAngle:1,endAngle:1,padAngle:1,innerRadius:1,outerRadius:1,size:1,shape:1,interpolate:1,tension:1,orient:1,align:1,baseline:1,text:1,dir:1,dx:1,dy:1,ellipsis:1,limit:1,radius:1,theta:1,angle:1,font:1,fontSize:1,fontWeight:1,fontStyle:1,lineBreak:1,lineHeight:1,cursor:1,href:1,tooltip:1,cornerRadius:1,cornerRadiusTopLeft:1,cornerRadiusTopRight:1,cornerRadiusBottomLeft:1,cornerRadiusBottomRight:1,aspect:1,width:1,height:1,url:1,smooth:1}),Cn={arc:1,area:1,group:1,image:1,line:1,path:1,rect:1,rule:1,shape:1,symbol:1,text:1,trail:1},Pn=["cornerRadius","cornerRadiusTopLeft","cornerRadiusTopRight","cornerRadiusBottomLeft","cornerRadiusBottomRight"];function Nn(e){const n=t.isArray(e.condition)?e.condition.map(jn):jn(e.condition);return{...An(e),condition:n}}function An(e){if($n(e)){const{expr:t,...n}=e;return{signal:t,...n}}return e}function jn(e){if($n(e)){const{expr:t,...n}=e;return{signal:t,...n}}return e}function Tn(e){if($n(e)){const{expr:t,...n}=e;return{signal:t,...n}}return Dn(e)?e:void 0!==e?{value:e}:void 0}function En(e){return Dn(e)?e.signal:t.stringValue(e.value)}function Mn(e){return Dn(e)?e.signal:null==e?null:t.stringValue(e)}function qn(e,t,n){for(const i of n){const n=Wn(i,t.markDef,t.config);void 0!==n&&(e[i]=Tn(n))}return e}function Rn(e){return[].concat(e.type,e.style??[])}function Ln(e,t,n,i={}){const{vgChannel:r,ignoreVgConfig:o}=i;return r&&Z(t,r)?t[r]:void 0!==t[e]?t[e]:!o||r&&r!==e?Wn(e,t,n,i):void 0}function Wn(e,t,n,{vgChannel:i}={}){const r=Un(e,t,n.style);return I(i?r:void 0,r,i?n[t.type][i]:void 0,n[t.type][e],i?n.mark[i]:n.mark[e])}function Un(e,t,n){return In(e,Rn(t),n)}function In(e,n,i){let r;n=t.array(n);for(const t of n){const n=i[t];Z(n,e)&&(r=n[e])}return r}function Bn(e,n){return t.array(e).reduce((e,t)=>(e.field.push(Fa(t,n)),e.order.push(t.sort??"ascending"),e),{field:[],order:[]})}function Vn(e,t){const n=[...e];return t.forEach(e=>{for(const t of n)if(Q(t,e))return;n.push(e)}),n}function Hn(e,n){return Q(e,n)||!n?e:e?[...t.array(e),...t.array(n)].join(", "):n}function Gn(e,t){const n=e.value,i=t.value;if(null==n||null===i)return{explicit:e.explicit,value:null};if((Sn(n)||Dn(n))&&(Sn(i)||Dn(i)))return{explicit:e.explicit,value:Hn(n,i)};if(Sn(n)||Dn(n))return{explicit:e.explicit,value:n};if(Sn(i)||Dn(i))return{explicit:e.explicit,value:i};if(!(Sn(n)||Dn(n)||Sn(i)||Dn(i)))return{explicit:e.explicit,value:Vn(n,i)};throw new Error("It should never reach here")}function Yn(e){return`Invalid specification ${K(e)}. Make sure the specification includes at least one of the following properties: "mark", "layer", "facet", "hconcat", "vconcat", "concat", or "repeat".`}const Xn='Autosize "fit" only works for single views and layered views.';function Jn(e){return`${"width"==e?"Width":"Height"} "container" only works for single views and layered views.`}function Qn(e){return`${"width"==e?"Width":"Height"} "container" only works well with autosize "fit" or "fit-${"width"==e?"x":"y"}".`}function Kn(e){return e?`Dropping "fit-${e}" because spec has discrete ${ut(e)}.`:'Dropping "fit" because spec has discrete size.'}function Zn(e){return`Unknown field for ${e}. Cannot calculate view size.`}function ei(e){return`Cannot project a selection on encoding channel "${e}", which has no field.`}function ti(e,t){return`Cannot project a selection on encoding channel "${e}" as it uses an aggregate function ("${t}").`}function ni(e){return`Selection not supported for ${e} yet.`}const ii="The same selection must be used to override scale domains in a layered view.";function ri(e){return`The "columns" property cannot be used when "${e}" has nested row/column.`}const oi="Animation involving facet, layer, or concat is currently unsupported.";function ai(e,t,n){return`An ancestor parsed field "${e}" as ${n} but a child wants to parse the field as ${t}.`}function si(e){return`Ignoring an invalid transform: ${K(e)}.`}function ci(e){return`Config.customFormatTypes is not true, thus custom format type and format for channel ${e} are dropped.`}function li(e){return`${e}Offset dropped because ${e} is continuous`}function ui(e){return`Invalid field type "${e}".`}function fi(e,t){const{fill:n,stroke:i}=t;return`Dropping color ${e} as the plot also has ${n&&i?"fill and stroke":n?"fill":"stroke"}.`}function di(e,t){return`Dropping ${K(e)} from channel "${t}" since it does not contain any data field, datum, value, or signal.`}function mi(e,t,n){return`${e} dropped as it is incompatible with "${t}".`}function pi(e){return`${e}-encoding is dropped as ${e} is not a valid encoding channel.`}function gi(e){return`${e} encoding should be discrete (ordinal / nominal / binned).`}function hi(e){return`${e} encoding should be discrete (ordinal / nominal / binned) or use a discretizing scale (e.g. threshold).`}function yi(e,t){return`Using discrete channel "${e}" to encode "${t}" field can be misleading as it does not encode ${"ordinal"===t?"order":"magnitude"}.`}function vi(e){return`Using unaggregated domain with raw field has no effect (${K(e)}).`}function bi(e){return`Unaggregated domain not applicable for "${e}" since it produces values outside the origin domain of the source data.`}function xi(e){return`Unaggregated domain is currently unsupported for log scale (${K(e)}).`}function $i(e,t,n){return`${n}-scale's "${t}" is dropped as it does not work with ${e} scale.`}function wi(e){return`The step for "${e}" is dropped because the ${"width"===e?"x":"y"} is continuous.`}const ki="Domains that should be unioned has conflicting sort properties. Sort will be set to true.";function Si(e,t){return`Unioning discrete legend values from ${e} and ${t}.`}function Di(e,t){return`Invalid ${e}: ${K(t)}.`}function Fi(e){return`1D error band does not support ${e}.`}function Oi(e){return`Channel ${e} is required for "binned" bin.`}const zi=t.logger(t.Warn);let _i=zi;function Ci(...e){_i.error(...e)}function Pi(...e){_i.warn(...e)}function Ni(e){if(e&&t.isObject(e))for(const t of Li)if(Z(e,t))return!0;return!1}const Ai=["january","february","march","april","may","june","july","august","september","october","november","december"],ji=Ai.map(e=>e.substr(0,3)),Ti=["sunday","monday","tuesday","wednesday","thursday","friday","saturday"],Ei=Ti.map(e=>e.substr(0,3));function Mi(e,n){const i=[];if(n&&void 0!==e.day&&D(e).length>1&&(Pi(function(e){return`Dropping day from datetime ${K(e)} as day cannot be combined with other units.`}(e)),delete(e=c(e)).day),void 0!==e.year?i.push(e.year):i.push(2012),void 0!==e.month){const r=n?function(e){if(X(e)&&(e=+e),t.isNumber(e))return e-1;{const t=e.toLowerCase(),n=Ai.indexOf(t);if(-1!==n)return n;const i=t.substr(0,3),r=ji.indexOf(i);if(-1!==r)return r;throw new Error(Di("month",e))}}(e.month):e.month;i.push(r)}else if(void 0!==e.quarter){const r=n?function(e){if(X(e)&&(e=+e),t.isNumber(e))return e>4&&Pi(Di("quarter",e)),e-1;throw new Error(Di("quarter",e))}(e.quarter):e.quarter;i.push(t.isNumber(r)?3*r:`${r}*3`)}else i.push(0);if(void 0!==e.date)i.push(e.date);else if(void 0!==e.day){const r=n?function(e){if(X(e)&&(e=+e),t.isNumber(e))return e%7;{const t=e.toLowerCase(),n=Ti.indexOf(t);if(-1!==n)return n;const i=t.substr(0,3),r=Ei.indexOf(i);if(-1!==r)return r;throw new Error(Di("day",e))}}(e.day):e.day;i.push(t.isNumber(r)?r+1:`${r}+1`)}else i.push(1);for(const t of["hours","minutes","seconds","milliseconds"]){const n=e[t];i.push(void 0===n?0:n)}return i}function qi(e){const t=Mi(e,!0).join(", ");return e.utc?`utc(${t})`:`datetime(${t})`}const Ri={year:1,quarter:1,month:1,week:1,day:1,dayofyear:1,date:1,hours:1,minutes:1,seconds:1,milliseconds:1},Li=D(Ri);function Wi(e){return t.isObject(e)?e.binned:Ui(e)}function Ui(e){return e?.startsWith("binned")}function Ii(e){return e.startsWith("utc")}const Bi={"year-month":"%b %Y ","year-month-date":"%b %d, %Y "};function Vi(e){return Li.filter(t=>Gi(e,t))}function Hi(e){const t=Vi(e);return t[t.length-1]}function Gi(e,t){const n=e.indexOf(t);return!(n<0)&&(!(n>0&&"seconds"===t&&"i"===e.charAt(n-1))&&(!(e.length>n+3&&"day"===t&&"o"===e.charAt(n+3))&&!(n>0&&"year"===t&&"f"===e.charAt(n-1))))}function Yi(e,t,{end:n}={end:!1}){const i=j(t),r=Ii(e)?"utc":"";function o(e){return"quarter"===e?`(${r}quarter(${i})-1)`:`${r}${e}(${i})`}let a;const s={};for(const t of Li)Gi(e,t)&&(s[t]=o(t),a=t);return n&&(s[a]+="+1"),function(e){const t=Mi(e,!1).join(", ");return e.utc?`utc(${t})`:`datetime(${t})`}(s)}function Xi(e){if(!e)return;return`timeUnitSpecifier(${K(Vi(e))}, ${K(Bi)})`}function Ji(e){if(!e)return;let n;return t.isString(e)?n=Ui(e)?{unit:e.substring(6),binned:!0}:{unit:e}:t.isObject(e)&&(n={...e,...e.unit?{unit:e.unit}:{}}),Ii(n.unit)&&(n.utc=!0,n.unit=n.unit.substring(3)),n}function Qi(e,t=e=>e){const n=Ji(e),i=Hi(n.unit);if(i&&"day"!==i){const e={year:2001,month:1,date:1,hours:0,minutes:0,seconds:0,milliseconds:0},{step:r,part:o}=Zi(i,n.step);return`${t(qi({...e,[o]:+e[o]+r}))} - ${t(qi(e))}`}}const Ki={year:1,month:1,date:1,hours:1,minutes:1,seconds:1,milliseconds:1};function Zi(e,n=1){if(function(e){return t.hasOwnProperty(Ki,e)}(e))return{part:e,step:n};switch(e){case"day":case"dayofyear":return{part:"date",step:n};case"quarter":return{part:"month",step:3*n};case"week":return{part:"date",step:7*n}}}function er(e){return!!e?.field&&void 0!==e.equal}function tr(e){return!!e?.field&&void 0!==e.lt}function nr(e){return!!e?.field&&void 0!==e.lte}function ir(e){return!!e?.field&&void 0!==e.gt}function rr(e){return!!e?.field&&void 0!==e.gte}function or(e){if(e?.field){if(t.isArray(e.range)&&2===e.range.length)return!0;if(Dn(e.range))return!0}return!1}function ar(e){return!!e?.field&&(t.isArray(e.oneOf)||t.isArray(e.in))}function sr(e){return ar(e)||er(e)||or(e)||tr(e)||ir(e)||nr(e)||rr(e)}function cr(e,t){return Ia(e,{timeUnit:t,wrapTime:!0})}function lr(e,t=!0){const{field:n}=e,i=Ji(e.timeUnit),{unit:r,binned:o}=i||{},a=Fa(e,{expr:"datum"}),s=r?`time(${o?a:Yi(r,n)})`:a;if(er(e))return`${s}===${cr(e.equal,r)}`;if(tr(e)){return`${s}<${cr(e.lt,r)}`}if(ir(e)){return`${s}>${cr(e.gt,r)}`}if(nr(e)){return`${s}<=${cr(e.lte,r)}`}if(rr(e)){return`${s}>=${cr(e.gte,r)}`}if(ar(e))return`indexof([${function(e,t){return e.map(e=>cr(e,t))}(e.oneOf,r).join(",")}], ${s}) !== -1`;if(function(e){return!!e?.field&&void 0!==e.valid}(e))return ur(s,e.valid);if(or(e)){const{range:n}=wn(e),i=Dn(n)?{signal:`${n.signal}[0]`}:n[0],o=Dn(n)?{signal:`${n.signal}[1]`}:n[1];if(null!==i&&null!==o&&t)return`inrange(${s}, [${cr(i,r)}, ${cr(o,r)}])`;const a=[];return null!==i&&a.push(`${s} >= ${cr(i,r)}`),null!==o&&a.push(`${s} <= ${cr(o,r)}`),a.length>0?a.join(" && "):"true"}throw new Error(`Invalid field predicate: ${K(e)}`)}function ur(e,t=!0){return t?`isValid(${e}) && isFinite(+${e})`:`!isValid(${e}) || !isFinite(+${e})`}function fr(e){return sr(e)&&e.timeUnit?{...e,timeUnit:Ji(e.timeUnit)}:e}function dr(e){return"quantitative"===e||"temporal"===e}function mr(e){return"ordinal"===e||"nominal"===e}const pr="quantitative",gr="ordinal",hr="temporal",yr="nominal",vr="geojson";const br="linear",xr="log",$r="pow",wr="sqrt",kr="time",Sr="utc",Dr="point",Fr="band",Or={linear:"numeric",log:"numeric",pow:"numeric",sqrt:"numeric",symlog:"numeric",identity:"numeric",sequential:"numeric",time:"time",utc:"time",ordinal:"ordinal","bin-ordinal":"bin-ordinal",point:"ordinal-position",band:"ordinal-position",quantile:"discretizing",quantize:"discretizing",threshold:"discretizing"};function zr(e,t){const n=Or[e],i=Or[t];return n===i||"ordinal-position"===n&&"time"===i||"ordinal-position"===i&&"time"===n}const _r={linear:0,log:1,pow:1,sqrt:1,symlog:1,identity:1,sequential:1,time:0,utc:0,point:10,band:11,ordinal:0,"bin-ordinal":0,quantile:0,quantize:0,threshold:0};function Cr(e){return _r[e]}const Pr=new Set(["linear","log","pow","sqrt","symlog"]),Nr=new Set([...Pr,"time","utc"]);function Ar(e){return Pr.has(e)}const jr=new Set(["quantile","quantize","threshold"]),Tr=new Set([...Nr,...jr,"sequential","identity"]),Er=new Set(["ordinal","bin-ordinal","point","band"]);function Mr(e){return Er.has(e)}function qr(e){return Tr.has(e)}function Rr(e){return Nr.has(e)}function Lr(e){return jr.has(e)}function Wr(e){return Z(e,"param")}const{type:Ur,domain:Ir,range:Br,rangeMax:Vr,rangeMin:Hr,scheme:Gr,...Yr}={type:1,domain:1,domainMax:1,domainMin:1,domainMid:1,domainRaw:1,align:1,range:1,rangeMax:1,rangeMin:1,scheme:1,bins:1,reverse:1,round:1,clamp:1,nice:1,base:1,exponent:1,constant:1,interpolate:1,zero:1,padding:1,paddingInner:1,paddingOuter:1},Xr=D(Yr);function Jr(e,t){switch(t){case"type":case"domain":case"reverse":case"range":return!0;case"scheme":case"interpolate":return!["point","band","identity"].includes(e);case"bins":return!["point","band","identity","ordinal"].includes(e);case"round":return Rr(e)||"band"===e||"point"===e;case"padding":case"rangeMin":case"rangeMax":return Rr(e)||["point","band"].includes(e);case"paddingOuter":case"align":return["point","band"].includes(e);case"paddingInner":return"band"===e;case"domainMax":case"domainMid":case"domainMin":case"domainRaw":case"clamp":return Rr(e);case"nice":return Rr(e)||"quantize"===e||"threshold"===e;case"exponent":return"pow"===e;case"base":return"log"===e;case"constant":return"symlog"===e;case"zero":return qr(e)&&!p(["log","time","utc","threshold","quantile"],e)}}function Qr(e,t){switch(t){case"interpolate":case"scheme":case"domainMid":return Be(e)?void 0:`Cannot use the scale property "${t}" with non-color channel.`;case"align":case"type":case"bins":case"domain":case"domainMax":case"domainMin":case"domainRaw":case"range":case"base":case"exponent":case"constant":case"nice":case"padding":case"paddingInner":case"paddingOuter":case"rangeMax":case"rangeMin":case"reverse":case"round":case"clamp":case"zero":return}}const Kr={arc:"arc",area:"area",bar:"bar",image:"image",line:"line",point:"point",rect:"rect",rule:"rule",text:"text",tick:"tick",trail:"trail",circle:"circle",square:"square",geoshape:"geoshape"},Zr=Kr.arc,eo=Kr.area,to=Kr.bar,no=Kr.image,io=Kr.line,ro=Kr.point,oo=Kr.rect,ao=Kr.rule,so=Kr.text,co=Kr.tick,lo=Kr.trail,uo=Kr.circle,fo=Kr.square,mo=Kr.geoshape;function po(e){return["line","area","trail"].includes(e)}function go(e){return["rect","bar","image","arc","tick"].includes(e)}const ho=new Set(D(Kr));function yo(e){return Z(e,"type")}const vo=["stroke","strokeWidth","strokeDash","strokeDashOffset","strokeOpacity","strokeJoin","strokeMiterLimit","fill","fillOpacity"],bo=D({color:1,filled:1,invalid:1,order:1,radius2:1,theta2:1,timeUnitBandSize:1,timeUnitBandPosition:1}),xo=["binSpacing","continuousBandSize","discreteBandSize","minBandSize"],$o={area:["line","point"],bar:xo,rect:xo,line:["point"],tick:["bandSize","thickness",...xo]},wo=D({mark:1,arc:1,area:1,bar:1,circle:1,image:1,line:1,point:1,rect:1,rule:1,square:1,text:1,tick:1,trail:1,geoshape:1});function ko(e){return Z(e,"band")}const So={horizontal:["cornerRadiusTopRight","cornerRadiusBottomRight"],vertical:["cornerRadiusTopLeft","cornerRadiusTopRight"]},Do={binSpacing:0,continuousBandSize:5,minBandSize:.25,timeUnitBandPosition:.5},Fo={...Do,binSpacing:1},Oo={...Do,thickness:1};function zo(e,{isPath:t}){return void 0===e||"break-paths-show-path-domains"===e?t?"break-paths-show-domains":"filter":null===e?"show":e}function _o({markDef:e,config:t,scaleChannel:n,scaleType:i,isCountAggregate:r}){if(!i||!qr(i)||r)return"always-valid";const o=zo(Ln("invalid",e,t),{isPath:po(e.type)}),a=t.scale?.invalid?.[n];return void 0!==a?"show":o}function Co({scaleName:e,scale:t,mode:n}){const i=`domain('${e}')`;if(!t||!e)return;const r=`${i}[0]`,o=`peek(${i})`,a=t.domainHasZero();if("definitely"===a)return{scale:e,value:0};if("maybe"===a){return{signal:`scale('${e}', inrange(0, ${i}) ? 0 : ${"zeroOrMin"===n?r:o})`}}return{signal:`scale('${e}', ${"zeroOrMin"===n?r:o})`}}function Po({scaleChannel:e,channelDef:t,scale:n,scaleName:i,markDef:r,config:o}){const a=n?.get("type"),s=Ta(t),c=_o({scaleChannel:e,markDef:r,config:o,scaleType:a,isCountAggregate:dn(s?.aggregate)});if(s&&"show"===c){const t=o.scale.invalid?.[e]??"zero-or-min";return{test:ur(Fa(s,{expr:"datum"}),!1),...No(t,n,i)}}}function No(e,n,i){if(r=e,t.isObject(r)&&"value"in r){const{value:t}=e;return Dn(t)?{signal:t.signal}:{value:t}}var r;return Co({scale:n,scaleName:i,mode:"zeroOrMin"})}function Ao(e){const{channel:t,channelDef:n,markDef:i,scale:r,scaleName:o,config:a}=e,s=st(t),c=Eo(e),l=Po({scaleChannel:s,channelDef:n,scale:r,scaleName:o,markDef:i,config:a});return void 0!==l?[l,c]:c}function jo(e,t,n,i){const r={};if(t&&(r.scale=t),pa(e)){const{datum:t}=e;Ni(t)?r.signal=qi(t):Dn(t)?r.signal=t.signal:$n(t)?r.signal=t.expr:r.value=t}else r.field=Fa(e,n);if(i){const{offset:e,band:t}=i;e&&(r.offset=e),t&&(r.band=t)}return r}function To({scaleName:e,fieldOrDatumDef:t,fieldOrDatumDef2:n,offset:i,startSuffix:r,endSuffix:o="end",bandPosition:a=.5}){const s=!Dn(a)&&0<a&&a<1?"datum":void 0,c=Fa(t,{expr:s,suffix:r}),l=void 0!==n?Fa(n,{expr:s}):Fa(t,{suffix:o,expr:s}),u={};if(0===a||1===a){u.scale=e;const t=0===a?c:l;u.field=t}else{const t=Dn(a)?`(1-${a.signal}) * ${c} + ${a.signal} * ${l}`:`${1-a} * ${c} + ${a} * ${l}`;u.signal=`scale("${e}", ${t})`}return i&&(u.offset=i),u}function Eo({channel:e,channelDef:n,channel2Def:i,markDef:r,config:o,scaleName:a,scale:s,stack:c,offset:l,defaultRef:u,bandPosition:f}){if(n){if(va(n)){const t=s?.get("type");if(ba(n)){f??=oa({fieldDef:n,fieldDef2:i,markDef:r,config:o});const{bin:s,timeUnit:u,type:d}=n;if(hn(s)||f&&u&&d===hr)return c?.impute?jo(n,a,{binSuffix:"mid"},{offset:l}):f&&!Mr(t)?To({scaleName:a,fieldOrDatumDef:n,bandPosition:f,offset:l}):jo(n,a,Va(n,e)?{binSuffix:"range"}:{},{offset:l});if(yn(s)){if(da(i))return To({scaleName:a,fieldOrDatumDef:n,fieldOrDatumDef2:i,bandPosition:f,offset:l});Pi(Oi(e===ie?oe:ae))}}return jo(n,a,Mr(t)?{binSuffix:"range"}:{},{offset:l,band:"band"===t?f??n.bandPosition??.5:void 0})}if(xa(n)){const t=l?{offset:l}:{};return{...Mo(e,n.value),...t}}}return t.isFunction(u)&&(u=u()),u?{...u,...l?{offset:l}:{}}:u}function Mo(e,t){return p(["x","x2"],e)&&"width"===t?{field:{group:"width"}}:p(["y","y2"],e)&&"height"===t?{field:{group:"height"}}:Tn(t)}function qo(e){return e&&"number"!==e&&"time"!==e}function Ro(e,t,n){return`${e}(${t}${n?`, ${K(n)}`:""})`}function Lo({fieldOrDatumDef:e,format:n,formatType:i,expr:r,normalizeStack:o,config:a}){if(qo(i))return Uo({fieldOrDatumDef:e,format:n,formatType:i,expr:r,config:a});const s=Wo(e,r,o),c=ma(e);if(void 0===n&&void 0===i&&a.customFormatTypes){if("quantitative"===c){if(o&&a.normalizedNumberFormatType)return Uo({fieldOrDatumDef:e,format:a.normalizedNumberFormat,formatType:a.normalizedNumberFormatType,expr:r,config:a});if(a.numberFormatType)return Uo({fieldOrDatumDef:e,format:a.numberFormat,formatType:a.numberFormatType,expr:r,config:a})}if("temporal"===c&&a.timeFormatType&&da(e)&&void 0===e.timeUnit)return Uo({fieldOrDatumDef:e,format:a.timeFormat,formatType:a.timeFormatType,expr:r,config:a})}if(Ua(e)){const{unit:i,utc:r}=da(l=e)?Ji(l.timeUnit)||{}:{unit:void 0,utc:void 0},o=function({field:e,timeUnit:n,format:i,formatType:r,rawTimeFormat:o,isUTCScale:a}){return!n||i?!n&&r?`${r}(${e}, ${K(i)})`:`${a?"utc":"time"}Format(${e}, ${K(i=t.isString(i)?i:o)})`:function(e,t,n){if(!e)return;const i=Xi(e);return`${n||Ii(e)?"utc":"time"}Format(${t}, ${i})`}(n,e,a)}({field:s,timeUnit:i,format:n,formatType:a.timeFormatType,rawTimeFormat:a.timeFormat,isUTCScale:r||$a(e)&&e.scale?.type===Sr});return o?{signal:o}:void 0}var l;if(n=Vo({type:c,specifiedFormat:n,config:a,normalizeStack:o}),da(e)&&hn(e.bin)){return{signal:Yo(s,Fa(e,{expr:r,binSuffix:"end"}),n,i,a)}}return n||"quantitative"===ma(e)?{signal:`${Ho(s,n)}`}:{signal:`isValid(${s}) ? ${s} : ""+${s}`}}function Wo(e,t,n){return da(e)?n?`${Fa(e,{expr:t,suffix:"end"})}-${Fa(e,{expr:t,suffix:"start"})}`:Fa(e,{expr:t}):function(e){const{datum:t}=e;return Ni(t)?qi(t):`${K(t)}`}(e)}function Uo({fieldOrDatumDef:e,format:t,formatType:n,expr:i,normalizeStack:r,config:o,field:a}){if(a??=Wo(e,i,r),"datum.value"!==a&&da(e)&&hn(e.bin)){return{signal:Yo(a,Fa(e,{expr:i,binSuffix:"end"}),t,n,o)}}return{signal:Ro(n,a,t)}}function Io(e,n,i,r,o,a){if(!t.isString(r)||!qo(r)){if(void 0===i&&void 0===r&&o.customFormatTypes&&"quantitative"===ma(e)){if(o.normalizedNumberFormatType&&wa(e)&&"normalize"===e.stack)return;if(o.numberFormatType)return}if(wa(e)&&"normalize"===e.stack&&o.normalizedNumberFormat)return Vo({type:"quantitative",config:o,normalizeStack:!0});if(Ua(e)){const t=da(e)?Ji(e.timeUnit)?.unit:void 0;if(void 0===t&&o.customFormatTypes&&o.timeFormatType)return;return function({specifiedFormat:e,timeUnit:t,config:n,omitTimeFormatConfig:i}){if(e)return e;if(t)return{signal:Xi(t)};return i?void 0:n.timeFormat}({specifiedFormat:i,timeUnit:t,config:o,omitTimeFormatConfig:a})}return Vo({type:n,specifiedFormat:i,config:o})}}function Bo(e,t,n){return e&&(Dn(e)||"number"===e||"time"===e)?e:Ua(t)&&"time"!==n&&"utc"!==n?da(t)&&Ji(t?.timeUnit)?.utc?"utc":"time":void 0}function Vo({type:e,specifiedFormat:n,config:i,normalizeStack:r}){return t.isString(n)?n:e===pr?r?i.normalizedNumberFormat:i.numberFormat:void 0}function Ho(e,t){return`format(${e}, "${t||""}")`}function Go(e,n,i,r){return qo(i)?Ro(i,e,n):Ho(e,(t.isString(n)?n:void 0)??r.numberFormat)}function Yo(e,t,n,i,r){if(void 0===n&&void 0===i&&r.customFormatTypes&&r.numberFormatType)return Yo(e,t,r.numberFormat,r.numberFormatType,r);const o=Go(e,n,i,r),a=Go(t,n,i,r);return`${ur(e,!1)} ? "null" : ${o} + " – " + ${a}`}const Xo="min",Jo={x:1,y:1,color:1,fill:1,stroke:1,strokeWidth:1,size:1,shape:1,fillOpacity:1,strokeOpacity:1,opacity:1,text:1};function Qo(e){return t.hasOwnProperty(Jo,e)}function Ko(e){return e&&("count"===e.op||Z(e,"field"))}function Zo(e){return e&&t.isArray(e)}function ea(e){return Z(e,"row")||Z(e,"column")}function ta(e){return Z(e,"header")}function na(e){return Z(e,"facet")}function ia(e){const{field:t,timeUnit:n,bin:i,aggregate:r}=e;return{...n?{timeUnit:n}:{},...i?{bin:i}:{},...r?{aggregate:r}:{},field:t}}function ra(e){return Z(e,"sort")}function oa({fieldDef:e,fieldDef2:t,markDef:n,config:i}){if(va(e)&&void 0!==e.bandPosition)return e.bandPosition;if(da(e)){const{timeUnit:r,bin:o}=e;if(r&&!t)return Wn("timeUnitBandPosition",n,i);if(hn(o))return.5}}function aa({channel:e,fieldDef:t,fieldDef2:n,markDef:i,config:r,scaleType:o,useVlSizeChannel:a}){const s=ut(e),c=Ln(a?"size":s,i,r,{vgChannel:s});if(void 0!==c)return c;if(da(t)){const{timeUnit:e,bin:a}=t;if(e&&!n)return{band:Wn("timeUnitBandSize",i,r)};if(hn(a)&&!Mr(o))return{band:1}}return go(i.type)?o?Mr(o)?r[i.type]?.discreteBandSize||{band:1}:r[i.type]?.continuousBandSize:r[i.type]?.discreteBandSize:void 0}function sa(e,t,n,i){return!!(hn(e.bin)||e.timeUnit&&ba(e)&&"temporal"===e.type)&&void 0!==oa({fieldDef:e,fieldDef2:t,markDef:n,config:i})}function ca(e){return Z(e,"sort")&&!Z(e,"field")}function la(e){return Z(e,"condition")}function ua(e){const n=e?.condition;return!!n&&!t.isArray(n)&&da(n)}function fa(e){const n=e?.condition;return!!n&&!t.isArray(n)&&va(n)}function da(e){return Z(e,"field")||"count"===e?.aggregate}function ma(e){return e?.type}function pa(e){return Z(e,"datum")}function ga(e){return ba(e)&&!Oa(e)||ya(e)}function ha(e){return ba(e)&&"quantitative"===e.type&&!e.bin||ya(e)}function ya(e){return pa(e)&&t.isNumber(e.datum)}function va(e){return da(e)||pa(e)}function ba(e){return e&&(Z(e,"field")||"count"===e.aggregate)&&Z(e,"type")}function xa(e){return Z(e,"value")}function $a(e){return Z(e,"scale")||Z(e,"sort")}function wa(e){return Z(e,"axis")||Z(e,"stack")||Z(e,"impute")}function ka(e){return Z(e,"legend")}function Sa(e){return Z(e,"format")||Z(e,"formatType")}function Da(e){return f(e,["legend","axis","header","scale"])}function Fa(e,t={}){let n=e.field;const i=t.prefix;let r=t.suffix,o="";if(function(e){return"count"===e.aggregate}(e))n=H("count");else{let i;if(!t.nofn)if(function(e){return Z(e,"op")}(e))i=e.op;else{const{bin:a,aggregate:s,timeUnit:c}=e;hn(a)?(i=gn(a),r=(t.binSuffix??"")+(t.suffix??"")):s?ln(s)?(o=`["${n}"]`,n=`argmax_${s.argmax}`):cn(s)?(o=`["${n}"]`,n=`argmin_${s.argmin}`):i=String(s):c&&!Wi(c)&&(i=function(e){const{utc:t,...n}=Ji(e);return n.unit?(t?"utc":"")+D(n).map(e=>C(`${"unit"===e?"":`_${e}_`}${n[e]}`)).join(""):`${t?"utc":""}timeunit${D(n).map(e=>C(`_${e}_${n[e]}`)).join("")}`}(c),r=(!["range","mid"].includes(t.binSuffix)&&t.binSuffix||"")+(t.suffix??""))}i&&(n=n?`${i}_${n}`:i)}return r&&(n=`${n}_${r}`),i&&(n=`${i}_${n}`),t.forAs?W(n):t.expr?T(n,t.expr)+o:R(n)+o}function Oa(e){switch(e.type){case"nominal":case"ordinal":case"geojson":return!0;case"quantitative":return da(e)&&!!e.bin;case"temporal":return!1}throw new Error(ui(e.type))}const za=(e,t)=>{switch(t.fieldTitle){case"plain":return e.field;case"functional":return function(e){const{aggregate:t,bin:n,timeUnit:i,field:r}=e;if(ln(t))return`${r} for argmax(${t.argmax})`;if(cn(t))return`${r} for argmin(${t.argmin})`;const o=i&&!Wi(i)?Ji(i):void 0,a=t||o?.unit||o?.maxbins&&"timeunit"||hn(n)&&"bin";return a?`${a.toUpperCase()}(${r})`:r}(e);default:return function(e,t){const{field:n,bin:i,timeUnit:r,aggregate:o}=e;if("count"===o)return t.countTitle;if(hn(i))return`${n} (binned)`;if(r&&!Wi(r)){const e=Ji(r)?.unit;if(e)return`${n} (${Vi(e).join("-")})`}else if(o)return ln(o)?`${n} for max ${o.argmax}`:cn(o)?`${n} for min ${o.argmin}`:`${A(o)} of ${n}`;return n}(e,t)}};let _a=za;function Ca(e){_a=e}function Pa(e,t,{allowDisabling:n,includeDefault:i=!0}){const r=Na(e)?.title;if(!da(e))return r??e.title;const o=e,a=i?Aa(o,t):void 0;return n?I(r,o.title,a):r??o.title??a}function Na(e){return wa(e)&&e.axis?e.axis:ka(e)&&e.legend?e.legend:ta(e)&&e.header?e.header:void 0}function Aa(e,t){return _a(e,t)}function ja(e){if(Sa(e)){const{format:t,formatType:n}=e;return{format:t,formatType:n}}{const t=Na(e)??{},{format:n,formatType:i}=t;return{format:n,formatType:i}}}function Ta(e){return da(e)?e:ua(e)?e.condition:void 0}function Ea(e){return va(e)?e:fa(e)?e.condition:void 0}function Ma(e,n,i,r={}){if(_(e)){return Pi(function(e,t,n){return`Channel ${e} is a ${t}. Converted to {value: ${K(n)}}.`}(n,t.isString(e)?"string":t.isNumber(e)?"number":"boolean",e)),{value:e}}return va(e)?qa(e,n,i,r):fa(e)?{...e,condition:qa(e.condition,n,i,r)}:e}function qa(e,n,i,r){if(Sa(e)){const{format:t,formatType:o,...a}=e;if(qo(o)&&!i.customFormatTypes)return Pi(ci(n)),qa(a,n,i,r)}else{const t=wa(e)?"axis":ka(e)?"legend":ta(e)?"header":null;if(t&&e[t]){const{format:o,formatType:a,...s}=e[t];if(qo(a)&&!i.customFormatTypes)return Pi(ci(n)),qa({...e,[t]:s},n,i,r)}}return da(e)?Ra(e,n,r):function(e){let n=e.type;if(n)return e;const{datum:i}=e;return n=t.isNumber(i)?"quantitative":t.isString(i)?"nominal":Ni(i)?"temporal":void 0,{...e,type:n}}(e)}function Ra(e,n,{compositeMark:i=!1}={}){const{aggregate:r,timeUnit:o,bin:a,field:s}=e,c={...e};if(i||!r||un(r)||ln(r)||cn(r)||(Pi(function(e){return`Invalid aggregation operator "${e}".`}(r)),delete c.aggregate),o&&(c.timeUnit=Ji(o)),s&&(c.field=`${s}`),hn(a)&&(c.bin=La(a,n)),yn(a)&&!At(n)&&Pi(function(e){return`Channel ${e} should not be used with "binned" bin.`}(n)),ba(c)){const{type:e}=c,t=function(e){if(e)switch(e=e.toLowerCase()){case"q":case pr:return"quantitative";case"t":case hr:return"temporal";case"o":case gr:return"ordinal";case"n":case yr:return"nominal";case vr:return"geojson"}}(e);e!==t&&(c.type=t),"quantitative"!==e&&dn(r)&&(Pi(function(e,t){return`Invalid field type "${e}" for aggregate: "${t}", using "quantitative" instead.`}(e,r)),c.type="quantitative")}else if(!at(n)){const e=function(e,n){switch(n){case"latitude":case"longitude":return"quantitative";case"row":case"column":case"facet":case"shape":case"strokeDash":return"nominal";case"order":return"ordinal"}if(ra(e)&&t.isArray(e.sort))return"ordinal";const{aggregate:i,bin:r,timeUnit:o}=e;if(o)return"temporal";if(r||i&&!ln(i)&&!cn(i))return"quantitative";if($a(e)&&e.scale?.type)switch(Or[e.scale.type]){case"numeric":case"discretizing":return"quantitative";case"time":return"temporal"}return"nominal"}(c,n);c.type=e}if(ba(c)){const{compatible:e,warning:t}=function(e,t){const n=e.type;if("geojson"===n&&"shape"!==t)return{compatible:!1,warning:`Channel ${t} should not be used with a geojson data.`};switch(t){case ee:case te:case ne:return Oa(e)?Wa:{compatible:!1,warning:gi(t)};case ie:case re:case se:case ce:case ve:case be:case xe:case _e:case Pe:case Ne:case Ae:case je:case Te:case ke:case fe:case le:case Ee:return Wa;case pe:case he:case me:case ge:return n!==pr?{compatible:!1,warning:`Channel ${t} should be used with a quantitative field only, not ${e.type} field.`}:Wa;case Se:case De:case Fe:case Oe:case we:case de:case ue:case oe:case ae:case ye:return"nominal"!==n||e.sort?Wa:{compatible:!1,warning:`Channel ${t} should not be used with an unsorted discrete field.`};case $e:case ze:return Oa(e)||$a(i=e)&&Lr(i.scale?.type)?Wa:{compatible:!1,warning:hi(t)};case Ce:return"nominal"!==e.type||"sort"in e?Wa:{compatible:!1,warning:"Channel order is inappropriate for nominal field, which has no inherent order."}}var i}(c,n)||{};!1===e&&Pi(t)}if(ra(c)&&t.isString(c.sort)){const{sort:e}=c;if(Qo(e))return{...c,sort:{encoding:e}};const t=e.substring(1);if("-"===e.charAt(0)&&Qo(t))return{...c,sort:{encoding:t,order:"descending"}}}if(ta(c)){const{header:e}=c;if(e){const{orient:t,...n}=e;if(t)return{...c,header:{...n,labelOrient:e.labelOrient||t,titleOrient:e.titleOrient||t}}}}return c}function La(e,n){return t.isBoolean(e)?{maxbins:xn(n)}:"binned"===e?{binned:!0}:e.maxbins||e.step?e:{...e,maxbins:xn(n)}}const Wa={compatible:!0};function Ua(e){const{formatType:t}=ja(e);return"time"===t||!t&&((n=e)&&("temporal"===n.type||da(n)&&!!n.timeUnit));var n}function Ia(e,{timeUnit:n,type:i,wrapTime:r,undefinedIfExprNotRequired:o}){const a=n&&Ji(n)?.unit;let s,c=a||"temporal"===i;return $n(e)?s=e.expr:Dn(e)?s=e.signal:Ni(e)?(c=!0,s=qi(e)):(t.isString(e)||t.isNumber(e))&&c&&(s=`datetime(${K(e)})`,function(e){return t.hasOwnProperty(Ri,e)}(a)&&(t.isNumber(e)&&e<1e4||t.isString(e)&&isNaN(Date.parse(e)))&&(s=qi({[a]:e}))),s?r&&c?`time(${s})`:s:o?void 0:K(e)}function Ba(e,t){const{type:n}=e;return t.map(t=>{const i=Ia(t,{timeUnit:da(e)&&!Wi(e.timeUnit)?e.timeUnit:void 0,type:n,undefinedIfExprNotRequired:!0});return void 0!==i?{signal:i}:t})}function Va(e,t){return hn(e.bin)?Zt(t)&&["ordinal","nominal"].includes(e.type):(console.warn("Only call this method for binned field defs."),!1)}const Ha={labelAlign:{part:"labels",vgProp:"align"},labelBaseline:{part:"labels",vgProp:"baseline"},labelColor:{part:"labels",vgProp:"fill"},labelFont:{part:"labels",vgProp:"font"},labelFontSize:{part:"labels",vgProp:"fontSize"},labelFontStyle:{part:"labels",vgProp:"fontStyle"},labelFontWeight:{part:"labels",vgProp:"fontWeight"},labelOpacity:{part:"labels",vgProp:"opacity"},labelOffset:null,labelPadding:null,gridColor:{part:"grid",vgProp:"stroke"},gridDash:{part:"grid",vgProp:"strokeDash"},gridDashOffset:{part:"grid",vgProp:"strokeDashOffset"},gridOpacity:{part:"grid",vgProp:"opacity"},gridWidth:{part:"grid",vgProp:"strokeWidth"},tickColor:{part:"ticks",vgProp:"stroke"},tickDash:{part:"ticks",vgProp:"strokeDash"},tickDashOffset:{part:"ticks",vgProp:"strokeDashOffset"},tickOpacity:{part:"ticks",vgProp:"opacity"},tickSize:null,tickWidth:{part:"ticks",vgProp:"strokeWidth"}};function Ga(e){return e?.condition}const Ya=["domain","grid","labels","ticks","title"],Xa={grid:"grid",gridCap:"grid",gridColor:"grid",gridDash:"grid",gridDashOffset:"grid",gridOpacity:"grid",gridScale:"grid",gridWidth:"grid",orient:"main",bandPosition:"both",aria:"main",description:"main",domain:"main",domainCap:"main",domainColor:"main",domainDash:"main",domainDashOffset:"main",domainOpacity:"main",domainWidth:"main",format:"main",formatType:"main",labelAlign:"main",labelAngle:"main",labelBaseline:"main",labelBound:"main",labelColor:"main",labelFlush:"main",labelFlushOffset:"main",labelFont:"main",labelFontSize:"main",labelFontStyle:"main",labelFontWeight:"main",labelLimit:"main",labelLineHeight:"main",labelOffset:"main",labelOpacity:"main",labelOverlap:"main",labelPadding:"main",labels:"main",labelSeparation:"main",maxExtent:"main",minExtent:"main",offset:"both",position:"main",tickCap:"main",tickColor:"main",tickDash:"main",tickDashOffset:"main",tickMinStep:"both",tickOffset:"both",tickOpacity:"main",tickRound:"both",ticks:"main",tickSize:"main",tickWidth:"both",title:"main",titleAlign:"main",titleAnchor:"main",titleAngle:"main",titleBaseline:"main",titleColor:"main",titleFont:"main",titleFontSize:"main",titleFontStyle:"main",titleFontWeight:"main",titleLimit:"main",titleLineHeight:"main",titleOpacity:"main",titlePadding:"main",titleX:"main",titleY:"main",encode:"both",scale:"both",tickBand:"both",tickCount:"both",tickExtra:"both",translate:"both",values:"both",zindex:"both"},Ja={orient:1,aria:1,bandPosition:1,description:1,domain:1,domainCap:1,domainColor:1,domainDash:1,domainDashOffset:1,domainOpacity:1,domainWidth:1,format:1,formatType:1,grid:1,gridCap:1,gridColor:1,gridDash:1,gridDashOffset:1,gridOpacity:1,gridWidth:1,labelAlign:1,labelAngle:1,labelBaseline:1,labelBound:1,labelColor:1,labelFlush:1,labelFlushOffset:1,labelFont:1,labelFontSize:1,labelFontStyle:1,labelFontWeight:1,labelLimit:1,labelLineHeight:1,labelOffset:1,labelOpacity:1,labelOverlap:1,labelPadding:1,labels:1,labelSeparation:1,maxExtent:1,minExtent:1,offset:1,position:1,tickBand:1,tickCap:1,tickColor:1,tickCount:1,tickDash:1,tickDashOffset:1,tickExtra:1,tickMinStep:1,tickOffset:1,tickOpacity:1,tickRound:1,ticks:1,tickSize:1,tickWidth:1,title:1,titleAlign:1,titleAnchor:1,titleAngle:1,titleBaseline:1,titleColor:1,titleFont:1,titleFontSize:1,titleFontStyle:1,titleFontWeight:1,titleLimit:1,titleLineHeight:1,titleOpacity:1,titlePadding:1,titleX:1,titleY:1,translate:1,values:1,zindex:1},Qa={...Ja,style:1,labelExpr:1,encoding:1};function Ka(e){return t.hasOwnProperty(Qa,e)}const Za=D({axis:1,axisBand:1,axisBottom:1,axisDiscrete:1,axisLeft:1,axisPoint:1,axisQuantitative:1,axisRight:1,axisTemporal:1,axisTop:1,axisX:1,axisXBand:1,axisXDiscrete:1,axisXPoint:1,axisXQuantitative:1,axisXTemporal:1,axisY:1,axisYBand:1,axisYDiscrete:1,axisYPoint:1,axisYQuantitative:1,axisYTemporal:1});function es(e){return Z(e,"mark")}class ts{name;run;constructor(e,t){this.name=e,this.run=t}hasMatchingType(e){return!!es(e)&&(yo(t=e.mark)?t.type:t)===this.name;var t}}function ns(e,n){const i=e?.[n];return!!i&&(t.isArray(i)?g(i,e=>!!e.field):da(i)||ua(i))}function is(e,n){const i=e?.[n];return!!i&&(t.isArray(i)?g(i,e=>!!e.field):da(i)||pa(i)||fa(i))}function rs(e,t){if(At(t)){const n=e[t];if((da(n)||pa(n))&&(mr(n.type)||da(n)&&n.timeUnit)){return is(e,dt(t))}}return!1}function os(e){return g(Ye,n=>{if(ns(e,n)){const i=e[n];if(t.isArray(i))return g(i,e=>!!e.aggregate);{const e=Ta(i);return e&&!!e.aggregate}}return!1})}function as(e,n){const i=[],r=[],o=[],a=[],s={};return ls(e,(c,l)=>{if(da(c)){const{field:u,aggregate:f,bin:d,timeUnit:m,...p}=c;if(f||m||d){const e=Na(c),g=e?.title;let h=Fa(c,{forAs:!0});const y={...g?[]:{title:Pa(c,n,{allowDisabling:!0})},...p,field:h};if(f){let e;if(ln(f)?(e="argmax",h=Fa({op:"argmax",field:f.argmax},{forAs:!0}),y.field=`${h}.${u}`):cn(f)?(e="argmin",h=Fa({op:"argmin",field:f.argmin},{forAs:!0}),y.field=`${h}.${u}`):"boxplot"!==f&&"errorbar"!==f&&"errorband"!==f&&(e=f),e){const t={op:e,as:h};u&&(t.field=u),a.push(t)}}else if(i.push(h),ba(c)&&hn(d)){if(r.push({bin:d,field:u,as:h}),i.push(Fa(c,{binSuffix:"end"})),Va(c,l)&&i.push(Fa(c,{binSuffix:"range"})),At(l)){const e={field:`${h}_end`};s[`${l}2`]=e}y.bin="binned",at(l)||(y.type=pr)}else if(m&&!Wi(m)){o.push({timeUnit:m,field:u,as:h});const e=ba(c)&&c.type!==hr&&"time";e&&(l===_e||l===Ae?y.formatType=e:!function(e){return t.hasOwnProperty(_t,e)}(l)?At(l)&&(y.axis={formatType:e,...y.axis}):y.legend={formatType:e,...y.legend})}s[l]=y}else i.push(u),s[l]=e[l]}else s[l]=e[l]}),{bins:r,timeUnits:o,aggregate:a,groupby:i,encoding:s}}function ss(e,t,n){const i=en(t,n);if(!i)return!1;if("binned"===i){const n=e[t===oe?ie:re];return!!(da(n)&&da(e[t])&&yn(n.bin))}return!0}function cs(e,t){const n={};for(const i of D(e)){const r=Ma(e[i],i,t,{compositeMark:!0});n[i]=r}return n}function ls(e,n,i){if(e)for(const r of D(e)){const o=e[r];if(t.isArray(o))for(const e of o)n.call(i,e,r);else n.call(i,o,r)}}function us(e,n){return D(n).reduce((i,r)=>{switch(r){case ie:case re:case je:case Ee:case Te:case oe:case ae:return i;case se:case ce:if("line"===e||"area"===e||"trail"===e){const e=n[r];if(da(e)){const t=n[r===se?ie:re];if(da(t)&&!t.aggregate&&!e.aggregate){const n=Fa(t,{}),r=Fa(e,{});n&&r&&n!==r&&i.push(n)}}}return i;case fe:case de:case le:case ue:case ye:case me:case pe:case ge:case he:case _e:case $e:case ke:case Ae:return i;case Ce:if("line"===e||"trail"===e)return i;case Pe:case Ne:{const e=n[r];if(t.isArray(e)||da(e))for(const n of t.array(e))n.aggregate||i.push(Fa(n,{}));return i}case we:if("trail"===e)return i;case ve:case be:case xe:case Se:case De:case Fe:case ze:case Oe:{const e=Ta(n[r]);return e&&!e.aggregate&&i.push(Fa(e,{})),i}}},[])}function fs(e,n,i,r=!0){if("tooltip"in i)return{tooltip:i.tooltip};return{tooltip:[...e.map(({fieldPrefix:e,titlePrefix:t})=>{const i=r?` of ${ds(n)}`:"";return{field:e+n.field,type:n.type,title:Dn(t)?{signal:`${t}"${escape(i)}"`}:t+i}}),...b(function(e){const n=[];for(const i of D(e))if(ns(e,i)){const r=e[i],o=t.array(r);for(const e of o)da(e)?n.push(e):ua(e)&&n.push(e.condition)}return n}(i).map(Da),d)]}}function ds(e){const{title:t,field:n}=e;return I(t,n)}function ms(e,n,i,r,o){const{scale:a,axis:s}=i;return({partName:c,mark:l,positionPrefix:u,endP