UNPKG

vega-lite

Version:

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

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