@graphysdk/viz-engine 1.9.0-beta.1789372403170 → 1.9.0-beta.1789377729015

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var Hd=Object.create,mo=Object.defineProperty,Wd=Object.getOwnPropertyDescriptor,Kd=Object.getOwnPropertyNames,zd=Object.getPrototypeOf,Yd=Object.prototype.hasOwnProperty,qd=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(var a=Kd(t),i=0,o=a.length,s;i<o;i++)s=a[i],!Yd.call(e,s)&&s!==r&&mo(e,s,{get:(c=>t[c]).bind(null,s),enumerable:!(n=Wd(t,s))||n.enumerable});return e},ir=(e,t,r)=>(r=e!=null?Hd(zd(e)):{},qd(t||!e||!e.__esModule?mo(r,"default",{value:e,enumerable:!0}):r,e));const l=require("./config.types-p7nmFVnK.cjs");let be=require("color2k"),ho=require("date-fns"),at=require("lodash-es"),st=require("d3-time"),jd=require("date-fns/differenceInDays"),Re=require("d3-regression"),se=require("d3-scale"),je=require("d3-interpolate"),$=require("d3-scale-chromatic"),Je=require("lodash-es/clamp");Je=ir(Je,1);let jt=require("lodash-es/merge");jt=ir(jt,1);let Wr=require("humanize-duration");Wr=ir(Wr,1);let Pe=require("d3-shape"),Xd=require("d3-delaunay"),Xt=require("lodash-es/isEqual");Xt=ir(Xt,1);typeof window<"u"&&(window.__GRAPHY_SDK__??={},window.__GRAPHY_SDK__.vizEngine="1.9.0-beta.1789372403170");var Zd=1e6;function te(e){return String(Math.round(e*Zd))}var Na="#FFFFFF",Vr="#1A1A1A",Jd=4.5,fo=e=>{try{return(0,be.getContrast)(e,Na)>(0,be.getContrast)(e,Vr)?Na:Vr}catch{return Vr}},Qd=(e,t)=>{try{const r=go(void 0,t);return r===void 0||(0,be.getContrast)(r,e)>=Jd?e:fo(r)}catch{return e}},go=(e,t)=>{try{if(e===void 0){const[,,,n]=(0,be.parseToRgba)(t);return n>=1?t:void 0}const[,,,r]=(0,be.parseToRgba)(e);return r>=1?e:(0,be.parseToRgba)(t)[3]<1?void 0:(0,be.mix)(t,(0,be.opacify)(e,1),r)}catch{return}},Ba=0;function W(){return Ba+=1,`${Math.random().toString(36).slice(2,6)}${Ba.toString(36)}`}var he=Math.PI*2,ep=8,tp=1e-9,rp=[0,Math.PI/2,Math.PI,he*3/4],yo=(e,t)=>Math.abs(t-e)>=he-tp,Oe=e=>(e%he+he)%he,Zt=(e,t,r)=>{if(yo(t,r))return!0;const n=Oe(r-t);return Oe(e-t)<=n},Qe=(e,t)=>{const r=Math.abs(Oe(e)-Oe(t));return Math.min(r,he-r)},Fa=(e,t)=>{const r=Oe(t-e);return r>Math.PI?r-he:r},vo=(e,t,r)=>e*he+t+r,fe=(e,t)=>({x:t*Math.sin(e),y:t*Math.cos(e)}),Ce=(e,t)=>{const r=fe(e,t);return{x:.5+r.x/2,y:.5+r.y/2}},np=(e,t,r,n)=>{const a=[Ce(e,r),Ce(e,n),Ce(t,r),Ce(t,n)],i=Math.max(r,n),o=rp.filter(c=>Zt(c,e,t)).map(c=>Ce(c,i)),s=[...a,...o];return{xMin:Math.min(...s.map(c=>c.x)),xMax:Math.max(...s.map(c=>c.x)),yMin:Math.min(...s.map(c=>c.y)),yMax:Math.max(...s.map(c=>c.y))}},or=(e,t)=>({angle:Oe(Math.atan2(e,t)),radius:Math.hypot(e,t)}),sr=(e,t)=>{const r=e.x-.5,n=e.y-.5;return{x:t>=1?r*2*t:r*2,y:t>=1?n*2:n*2/t}},mn=(e,t)=>{const{x:r,y:n}=sr(e,t);return or(r,n)};function M(e){return e[l.POSITION_VARIABLES.x]}function D(e){return e[l.POSITION_VARIABLES.y]}function j(e){return e[l.POSITION_VARIABLES.xMin]}function X(e){return e[l.POSITION_VARIABLES.xMax]}function G(e){return e[l.POSITION_VARIABLES.yMin]}function F(e){return e[l.POSITION_VARIABLES.yMax]}function hn(e){return e[l.POSITION_VARIABLES.yRaw]}function ap(e,t){return e[l.resolveScaledAestheticVariable(t)]}var ip={xMin:0,xMax:1,yMin:0,yMax:1},bo=(e,t)=>{const r=j(e)??M(e),n=X(e)??M(e),a=G(e)??D(e),i=F(e)??D(e);return!l.isStrictNumericDataValue(r)||!l.isStrictNumericDataValue(n)||!l.isStrictNumericDataValue(a)||!l.isStrictNumericDataValue(i)?null:t.type!=="polar"?{xMin:r,xMax:n,yMin:a,yMax:i}:{...np(r,n,a,i),frame:"disk"}},ft=(e,t)=>{const r=(e.xMin+e.xMax)/2,n=(e.yMin+e.yMax)/2;switch(t){case"top":return{x:r,y:e.yMax};case"bottom":return{x:r,y:e.yMin};case"left":return{x:e.xMin,y:n};case"right":return{x:e.xMax,y:n};case"top-left":return{x:e.xMin,y:e.yMax};case"top-right":return{x:e.xMax,y:e.yMax};case"bottom-left":return{x:e.xMin,y:e.yMin};case"bottom-right":return{x:e.xMax,y:e.yMin};default:return{x:r,y:n}}},So=e=>ft(ip,e),xo=["stack","dodge","identity","fill"],fn=["solid","dashed","dotted"],gn=e=>fn.includes(e);function U(e){return e==="stack"||e==="fill"}var Q=(e,t)=>{const r=l.extractConstantValue(t);if(r!==void 0)return()=>r;const n=l.extractVariableName(t);return l.isDefined(n)?a=>{const i=a[n];if(i===void 0)return null;switch(e.getType(n)){case"numeric":return l.isStrictNumericDataValue(i)?i:null;case"categorical":return l.isStrictCategoricalDataValue(i)?i:null;case"temporal":return l.isStrictTemporalDataValue(i)?i:null;default:return null}}:()=>null},it=(e,t)=>Q(e,t.x),yn=(e,t)=>Q(e,t.y),op=(e,t)=>Q(e,t.label),Ao=(e,t)=>Q(e,t.color),sp=(e,t)=>Q(e,t.size),lp=(e,t)=>Q(e,t.alpha),cp=(e,t)=>Q(e,t.group),up=(e,t)=>Q(e,t.strokeWidth),$a={variable:l.POSITION_VARIABLES.yRaw};function lr(e,t){return U(e)?$a:t.y??$a}function gt(e){return Q(e.data,lr(e.position,e.mapping))}var Ne=e=>{const t=l.extractVariableName(e.mapping.x);return t!==null&&t!==l.CONSTANT_VARIABLES.x?t:l.GROUP_VARIABLES.group},vn=e=>dp(e)?l.extractVariableName(e.mapping.y):null,Io=e=>vn(e)===null?null:gt(e),bn=e=>e.spatialKind!=="cells",dp=e=>e.spatialKind==="points"||e.spatialKind==="cells",To=(e,t)=>e.yScaleType===t.yScaleType&&zr(e.valueFormat)===zr(t.valueFormat),Kr=e=>`${e.yScaleType} y axis, ${zr(e.valueFormat)}`,zr=e=>e.type==="currency"?`${e.type}:${e.iso}`:e.type,Lo=(e,t)=>{const r=l.toExplicitValueFormat(e.data.getValueFormat(Ne(e))),n=vn(e);return a=>({...a,anchorValue:l.parseAddressingValue(a.anchorValue,r,t),...a.groupValue!==void 0&&{groupValue:l.parseAddressingValue(a.groupValue,l.toExplicitValueFormat(e.data.getValueFormat(l.GROUP_VARIABLES.group)),t)},...a.crossValue!==void 0&&n!==null&&{crossValue:l.parseAddressingValue(a.crossValue,l.toExplicitValueFormat(e.data.getValueFormat(n)),t)}})};function Eo(e){return e instanceof l.VizError?{severity:"error",kind:e.kind,code:e.code,message:e.message,...e.context!==void 0?{context:e.context}:{},...e.suggestion!==void 0?{suggestion:e.suggestion}:{}}:{severity:"error",kind:"internal",code:"INTERNAL_INVARIANT",message:e instanceof Error?e.message:String(e)}}function P(e,t){return Ro(e,t)}function R(e,t){for(const r of Object.keys(t)){const n=t[r];if(n!==void 0&&n!==e[r])return{...e,...t}}return e}function wo(e,t,r){if(e[t]===r)return e;const n=[...e];return n[t]=r,n}function Be(e,t){let r=null;for(const[n,a]of e.entries()){const i=t(a,n);if(i===a){r?.push(i);continue}r??=e.slice(0,n),r.push(i)}return r??e}function Ro(e,t){let r=!1;const n={...e};for(const[a,i]of Object.entries(t)){const o=e[a];if(l.isPlainObject(i)&&l.isPlainObject(o)){const s=Ro(o,i);s!==o&&(n[a]=s,r=!0)}else i!==void 0&&i!==o&&(n[a]=i,r=!0)}return r?n:e}function cr(e){return{pipe:t=>{const r=t(e);return cr({...e,...r})},result:()=>e}}var pp=(e,t)=>{if(!l.isLookupValueFormat(e))return e;const r=t[e.byVariable];return r===void 0?e.fallback:e.cases[l.getStableKey(r)]??e.fallback},Sn=e=>e.type==="polar"?"disk":"panel",ur=(e,t)=>{if(e!=="disk")return{x:0,y:0,width:t.width,height:t.height};const r=Math.min(t.width,t.height);return{x:(t.width-r)/2,y:(t.height-r)/2,width:r,height:r}},Ga=(e,t)=>{if(e.frame!=="disk")return{x:e.x,y:e.y};if(t.width<=0||t.height<=0)return{x:0,y:0};const r=ur(e.frame,t),n=r.y+(1-e.y)*r.height;return{x:(r.x+e.x*r.width)/t.width,y:1-n/t.height}};function Z(e,t){return e==="x"?t.x:t.y}function ge(e,t){return e==="x"?t.y:t.x}function ut(e,t){return{main:Z(e,t),cross:ge(e,t)}}function Ua(e,t){return e==="x"?{x:t.main,y:t.cross}:{x:t.cross,y:t.main}}function mp(e){return e.type==="cartesian"}var re=e=>e[l.GROUP_VARIABLES.group],yt=e=>{const t=Ne(e),r=Io(e),n=bn(e)&&t!==l.GROUP_VARIABLES.group;return a=>{const i=a[t]??null;if(i===null)return null;const o=r===null?null:r(a);if(r!==null&&o===null)return null;const s=n?re(a)??null:null;return{layerId:e.id,anchorValue:i,...o!==null&&{crossValue:o},...s!==null&&{groupValue:s}}}},et=(e,t)=>e>=0&&e<=1&&t>=0&&t<=1,hp={type:"decimal"};function Co(e){return e.length>0&&e.every(t=>t.data.size()===0)}function xn(e,t){return t!==null&&e.data.hasVariable(t)?e.data.getValueFormat(t):hp}function fp(e){return xn(e,l.extractVariableName(e.mapping.y))}function Vo({geom:e,position:t,mapping:r,purpose:n}){return e.resolveValueSource?.(r,n)??lr(t,r)}function Do(e,t){const r=Vo({geom:t,position:e.position,mapping:e.mapping,purpose:"measurement"}),n=l.extractVariableName(r),a=n===l.POSITION_VARIABLES.yRaw?l.extractVariableName(e.mapping.y):n;return{read:Q(e.data,r),valueFormat:xn(e,a)}}var _o=e=>{const t=Ne(e),r=Io(e),n=bn(e);return(a,i)=>!l.areDataValuesEqual(a[t]??null,i.anchorValue)||!(r===null||i.crossValue===void 0||l.areDataValuesEqual(r(a),i.crossValue))?!1:!n||i.groupValue===void 0?!0:l.areDataValuesEqual(re(a),i.groupValue)},Po=e=>{const t=l.extractVariableName(e.mapping.y),r=gt(e);return(n,a)=>t!==null&&a===t?r(n):n[a]??null},gp=["lt","lte","gt","gte","range"],yp={highlight:{subject:"Highlight predicate",effect:"dropping this highlight"},"selection-anchor":{subject:"Selection anchor predicate",effect:"dropping this annotation"},"style-rule":{subject:"Style rule predicate",effect:"dropping this rule"}},me=()=>!1,He=()=>!0;function vt(e,t){return{hasVariable:r=>e.data.hasVariable(r),getType:r=>e.data.getType(r),getValueFormat:r=>e.data.getValueFormat(r),readValue:Po(e),parsingLocale:t}}function xe(e,t){if("and"in e){const r=e.and.map(n=>xe(n,t)).filter(n=>n!==He);return r.includes(me)?me:r.length===0?He:n=>{for(const a of r)if(!a(n))return!1;return!0}}if("or"in e){const r=e.or.map(n=>xe(n,t)).filter(n=>n!==me);return r.includes(He)?He:r.length===0?me:n=>{for(const a of r)if(a(n))return!0;return!1}}if("not"in e){const r=xe(e.not,t);return r===me?He:r===He?me:n=>!r(n)}return bp(e,t)}function Ae(e,t,r="highlight"){return"and"in e?e.and.flatMap(n=>Ae(n,t,r)):"or"in e?e.or.flatMap(n=>Ae(n,t,r)):"not"in e?Ae(e.not,t,r):vp(e,t,r)}function vp(e,t,r){const{subject:n,effect:a}=yp[r];if(!t.hasVariable(e.variable))return[{code:"UNKNOWN_VARIABLE",message:`${n} references unknown variable '${e.variable}' — ${a}.`,context:{variableName:e.variable},suggestion:`Map '${e.variable}' in the layer or correct the variable name in the predicate.`}];const i=Sp(e);return i!==null&&t.getType(e.variable)==="categorical"?[{code:"INVALID_PREDICATE_OPERATOR",message:`${n} uses ordering operator '${i}' on categorical variable '${e.variable}' — ${a}. Use 'eq' or 'oneOf' instead.`,context:{variableName:e.variable},suggestion:"Use 'eq' or 'oneOf' for categorical variables."}]:[]}function bp(e,t){if(!t.hasVariable(e.variable))return me;const r=l.toExplicitValueFormat(t.getValueFormat(e.variable)),n=a=>l.parseAddressingValue(a,r,t.parsingLocale);if("eq"in e){const a=n(e.eq);return i=>l.areDataValuesEqual(t.readValue(i,e.variable),a)}if("oneOf"in e){const a=e.oneOf.map(n);return i=>{const o=t.readValue(i,e.variable);for(const s of a)if(l.areDataValuesEqual(o,s))return!0;return!1}}if("lt"in e){const a=n(e.lt);return i=>We(t.readValue(i,e.variable),a)==="less"}if("lte"in e){const a=n(e.lte);return i=>{const o=We(t.readValue(i,e.variable),a);return o==="less"||o==="equal"}}if("gt"in e){const a=n(e.gt);return i=>We(t.readValue(i,e.variable),a)==="greater"}if("gte"in e){const a=n(e.gte);return i=>{const o=We(t.readValue(i,e.variable),a);return o==="greater"||o==="equal"}}if("range"in e){const[a,i]=e.range,o=n(a),s=n(i);return c=>{const u=t.readValue(c,e.variable),d=We(u,o),p=We(u,s);return d==="incomparable"||p==="incomparable"?!1:(d==="greater"||d==="equal")&&(p==="less"||p==="equal")}}return me}function Sp(e){for(const t of gp)if(t in e)return t;return null}function We(e,t){if(e===null||t===null)return"incomparable";if(l.isStrictTemporalDataValue(e)&&l.isStrictTemporalDataValue(t)){const r=e.getTime(),n=t.getTime();return r<n?"less":r>n?"greater":"equal"}return l.isStrictNumericDataValue(e)&&l.isStrictNumericDataValue(t)?e<t?"less":e>t?"greater":"equal":"incomparable"}var xp=(e,t,r,n,a,i)=>{const o=Mo(e,t,r.predicate,n,a,i);if(o===null)return null;const s=Oo(r.padding),c=s===null?Tp(o,r.padding):o,u={x:c.xMin,y:c.yMin,width:Math.max(0,c.xMax-c.xMin),height:Math.max(0,c.yMax-c.yMin),frame:c.frame};return s===null?u:{...u,defer:s}},Ap=(e,t,r,n,a,i)=>{const o=Mo(e,t,r.predicate,n,a,i);return o===null?null:{...ft(o,r.align),frame:o.frame}},Oo=e=>e===void 0||typeof e=="number"||e.unit!=="px"?null:{type:"px-offset",x:e.x??0,y:e.y??0},Mo=(e,t,r,n,a,i)=>{if(t.has(r))return t.get(r)??null;let o=null,s=!1;const c=new Map;for(const u of n){if(!u.interactive)continue;const d=Ae(r,u.data,"selection-anchor");if(d.length>0){for(const h of d)c.set(`${h.code}:${h.message}`,h);continue}s=!0;const p=xe(r,vt(u,i));if(p!==me)for(const h of u.data){if(!p(h))continue;const m=bo(h,a);m!==null&&(o=o===null?m:Ip(o,m))}}if(!s)for(const u of c.values())e.diagnostics.addWarning(u);return t.set(r,o),o},Ip=(e,t)=>({frame:e.frame,xMin:Math.min(e.xMin,t.xMin),xMax:Math.max(e.xMax,t.xMax),yMin:Math.min(e.yMin,t.yMin),yMax:Math.max(e.yMax,t.yMax)}),Tp=(e,t)=>{if(t===void 0)return e;const{x:r=0,y:n=0}=typeof t=="number"?{x:t,y:t}:t;return{...e,xMin:e.xMin-r,xMax:e.xMax+r,yMin:e.yMin-n,yMax:e.yMax+n}},Jt=(e,t,r)=>{const n=Ep(e,t,r);return n===null?null:n.defer?.type==="annotation-ref"?n:wp(n,t.offset,e.coordSystem)},ko=(e,t)=>t.anchorType==="selection"?xp(e.container,e.selectionBoxCache,t,e.layers,e.coordSystem,e.parsingLocale):t.anchorType==="annotation"?{x:0,y:0,width:0,height:0,defer:{type:"annotation-ref",ref:t.ref,align:"center"}}:{x:t.x,y:1-t.y-t.height,width:t.width,height:t.height},An=(e,t,r)=>Yr(e,t,r)?.point??null,Yr=({container:e,layers:t,coordSystem:r,parsingLocale:n},a,i)=>{for(const o of t){const s=e.geomRegistry.get(o.geom),{resolveAnchorPosition:c}=s;if(c===void 0||a.layerId!==void 0&&o.id!==a.layerId||a.layerId===void 0&&!o.interactive)continue;const u=Do(o,s),d=_o(o),p=yt(o),h=Lo(o,n)(a);let m=-1;for(const f of o.data){if(m+=1,!d(f,h))continue;const g=c(f,{coordSystem:r,position:o.position,purpose:i,align:a.align});if(g===null)continue;const v=No(o,f,u);if(v===null)continue;const y=p(f);if(y!==null)return{point:{...g,...v,frame:Sn(r),observationIndex:m,anchor:a.align===void 0?y:{...y,align:a.align}},layerId:o.id}}}return null},Lp=(e,t)=>{const{layers:r,coordSystem:n,scales:a,parsingLocale:i}=e;if(n.type!=="cartesian")return null;const o=a.x,s=a.y;if(o===void 0||s===void 0||o.kind!=="position"||s.kind!=="position")return null;const c=Wa(t.x,"x",r,i),u=Wa(t.y,"y",r,i);if(c===null||u===null)return null;const d=o.map(c),p=s.map(u);if(!et(d,p))return null;const h=Ha(d,o,Rp(e)),m=Ha(p,s),f=Ua(n.mainAxis,{main:h.min,cross:m.min}),g=Ua(n.mainAxis,{main:h.max,cross:m.max});return ft({xMin:f.x,xMax:g.x,yMin:f.y,yMax:g.y},t.align??"center")},No=(e,t,r)=>{const n=r.read(t);return l.isStrictNumericDataValue(n)?{geom:e.geom,measurementValue:n,valueFormat:pp(r.valueFormat,t),yScaleType:e.yScaleType}:null},Ep=(e,t,r)=>{switch(t.anchorType){case"panel":return{x:t.x,y:1-t.y};case"axis":return Lp(e,t);case"selection":return Ap(e.container,e.selectionBoxCache,t,e.layers,e.coordSystem,e.parsingLocale);case"annotation":return{x:0,y:0,defer:{type:"annotation-ref",ref:t.ref,align:t.align??"center",offset:t.offset}};case"observation":return An(e,Cp(t),r)}},wp=(e,t,r)=>{if(t===void 0||r.type==="polar")return e;const n=Oo(t);return n!==null?{...e,defer:n}:{...e,x:e.x+(t.x??0),y:e.y-(t.y??0)}},Ha=(e,t,r=1)=>{const{bandwidth:n}=t;if(n===null||n<=0)return{min:e,max:e};const a=n*r/2;return{min:e-a,max:e+a}},Rp=({container:e,layers:t,coordSystem:r})=>{let n=0;for(const a of t){const i=e.geomRegistry.get(a.geom).resolveBandFraction?.(a.params,r);i!==void 0&&(n=Math.max(n,i))}return n>0?n:1},Cp=e=>({layerId:e.layerId,anchorValue:e.anchorValue,groupValue:e.groupValue,crossValue:e.crossValue,align:e.align}),Wa=(e,t,r,n)=>{for(const a of r){const i=l.extractVariableName(a.mapping[t]);if(!(i===null||i===l.CONSTANT_VARIABLES.x))return l.parseValue(e,l.toExplicitValueFormat(a.data.getValueFormat(i)),n)}return e},Vp=class extends l.Stage{constructor(e){super(),this.container=e}dependencies(e){return[e.annotations,e.layers,e.coordSystem,e.scales.x,e.scales.y,e.config.parsingLocale]}run(e){const{annotations:t,layers:r,coordSystem:n,scales:a,config:i}=e,o={container:this.container,layers:r,coordSystem:n,scales:a,selectionBoxCache:new Map,parsingLocale:i.parsingLocale},s={differenceArrows:Gp(o,t.differenceArrows),shapes:Op(o,t.shapes),arrows:kp(o,t.arrows),textAnnotations:Np(o,t.textAnnotations),images:Mp(o,t.images),stickers:Bp(o,t.stickers),pinnedNumbers:Fp(o,t.pinnedNumbers),comments:$p(o,t.comments)};return Dp(this.container,s),_p(this.container,s),s}},le=(e,t,r,n)=>{e.diagnostics.addWarning({code:"ANNOTATION_ANCHOR_UNRESOLVED",message:`Annotation "${r}" (${t}) ${n} — dropping this annotation.`,context:{annotationId:r,kind:t},suggestion:"Check that the anchor points at data, an axis value or a panel position that exists."})},Dp=(e,t)=>{const r=new Set;for(const n of Object.values(t))for(const{id:a}of n){if(r.has(a)){e.diagnostics.addWarning({code:"ANNOTATION_DUPLICATE_ID",message:`More than one annotation carries id "${a}" — references to it resolve to the first, and the rest cannot be addressed.`,context:{annotationId:a},suggestion:"Give each annotation its own id."});continue}r.add(a)}},_p=(e,t)=>{const r=new Set;for(const n of Object.values(t))for(const a of n)r.add(a.id);for(const{id:n,ref:a}of Pp(t))r.has(a)||e.diagnostics.addWarning({code:"ANNOTATION_REF_NOT_FOUND",message:`Annotation "${n}" references id "${a}", whose annotation could not be anchored and was dropped.`,context:{annotationId:n,ref:a},suggestion:"Fix the anchor on the target annotation or point this reference at one that resolves."})},Pp=e=>{const t=[],r=(n,a)=>{a.defer?.type==="annotation-ref"&&t.push({id:n,ref:a.defer.ref})};for(const n of e.shapes)r(n.id,n.region);for(const n of e.images)r(n.id,n.region);for(const n of e.arrows)r(n.id,n.start),r(n.id,n.end);for(const n of e.textAnnotations)r(n.id,n.at);for(const n of e.stickers)r(n.id,n.at);return t},Op=(e,t)=>{const r=[];for(const n of t){const a=ko(e,n.region);if(a===null){le(e.container,"shape",n.id,"has a region anchor that resolves to nothing");continue}r.push({id:n.id,kind:n.kind,zOrder:n.zOrder,region:a})}return r},Mp=(e,t)=>{const r=[];for(const n of t){const a=ko(e,n.region);if(a===null){le(e.container,"image",n.id,"has a region anchor that resolves to nothing");continue}r.push({id:n.id,src:n.src,zOrder:n.zOrder,region:a,fit:n.fit})}return r},kp=(e,t)=>{const r=[];for(const n of t){const a=Jt(e,n.start,"pin"),i=Jt(e,n.end,"pin");if(a===null||i===null){le(e.container,"arrow",n.id,`has ${Bo(a,i)} resolving to nothing`);continue}r.push({id:n.id,start:a,end:i,startArrowheadStyle:n.startArrowheadStyle,endArrowheadStyle:n.endArrowheadStyle})}return r},Np=(e,t)=>{const r=[];for(const n of t){const a=Jt(e,n.at,"pin");if(a===null){le(e.container,"text",n.id,"has a point anchor that resolves to nothing");continue}r.push({id:n.id,content:n.content,at:a,width:n.width,align:n.align})}return r},Bp=(e,t)=>{const r=[];for(const n of t){const a=Jt(e,n.at,"pin");if(a===null){le(e.container,"sticker",n.id,"has a point anchor that resolves to nothing");continue}r.push({id:n.id,at:a,sticker:n.sticker})}return r},Fp=(e,t)=>{const r=[];for(const n of t){const a=An(e,n.at,"pin");if(a===null){le(e.container,"pinnedNumber",n.id,"matches no observation");continue}r.push({id:n.id,at:a})}return r},$p=(e,t)=>{const r=[];for(const n of t){const a=An(e,n.at,"pin");if(a===null){le(e.container,"comment",n.id,"matches no observation");continue}r.push({id:n.id,at:a,content:n.content})}return r},Gp=(e,t)=>{if(e.coordSystem.type!=="cartesian"){for(const n of t)le(e.container,"differenceArrow",n.id,"needs a cartesian coord system");return[]}const r=[];for(const n of t){const a=Yr(e,n.start,"value"),i=Yr(e,n.end,"value");if(a===null||i===null){le(e.container,"differenceArrow",n.id,`has ${Bo(a,i)} matching no observation`);continue}if(a.layerId===i.layerId&&a.point.observationIndex===i.point.observationIndex){le(e.container,"differenceArrow",n.id,"has both ends on the same observation");continue}Up(e,n,a.point,i.point),r.push({id:n.id,start:a.point,end:i.point,label:n.label,labelCrossPosition:n.labelCrossPosition})}return r},Bo=(e,t)=>e===null&&t===null?"start and end anchors":e===null?"a start anchor":"an end anchor",Up=(e,t,r,n)=>{To(r,n)||e.container.diagnostics.addWarning({code:"INCOMPARABLE_ARROW_ENDPOINTS",message:`Difference arrow "${t.id}" measures between endpoints on different bases, so its label reports a quantity that does not exist.`,context:{annotationId:t.id,expected:Kr(r),actual:Kr(n)},suggestion:"Point both ends at observations sharing one y scale and one unit, or label the arrow as a proportion."})};function Hp(e,t="kind"){const r=new Map;r.set(t,[]);for(const a of e)for(const i of a.observations)for(const o of Object.keys(i))r.has(o)||r.set(o,[]);for(const a of e)for(const i of a.observations)for(const[o,s]of r)s.push(o===t?a.kind:i[o]??null);const n={};for(const[a,i]of r)n[a]={type:Fo(i),values:i};return new l.Dataset(n)}function Fo(e){const t=Array.isArray(e)?e:[e];for(const r of t)if(r!==null)return typeof r=="number"?"numeric":r instanceof Date?"temporal":"categorical";return"categorical"}var Wp=class extends l.Stage{dependencies(e){return[e.data,e.mapping]}run(e){let t=e.data,r=e.mapping;r.x===""&&(t=t.addConstantVariable(l.CONSTANT_VARIABLES.x,"categorical",""),r={...r,x:l.CONSTANT_VARIABLES.x});for(const n of Object.keys(r)){const a=l.extractConstantValue(r[n]);if(a===void 0)continue;const i=l.prefixInternalVariable(`const_${n}`);t=t.addConstantVariable(i,Fo(a),a),r={...r,[n]:i}}return{data:t,mapping:r}}},Fe=class{constructor(){this.perLayerMemo=l.createPerKeyMemo(),this.listMemo=l.createSingleSlotMemo()}get stats(){return l.sumMemoStats(this.perLayerMemo.stats,this.listMemo.stats)}compile(e){const t=this.dependencies(e),r=e.layers.map(n=>this.perLayerMemo(n,t,()=>this.compileLayer(n,e)));return this.listMemo(r,()=>r)}},Kp=class extends l.Stage{constructor(e){super(),this.registry=e}dependencies(e){return[e.coordSpec,e.scales,e.layers]}run(e){return this.registry.get(e.coordSpec.coordType).setup(e)}},zp=class extends Fe{constructor(e){super(),this.registry=e}dependencies(e){return[e.coordSpec,e.coordSystem]}compileLayer(e,t){const[r]=this.registry.get(t.coordSpec.coordType).transform({coordSpec:t.coordSpec,coordSystem:t.coordSystem,layers:[e]});if(!r)throw new l.InternalError({message:`CoordCompiler: strategy '${t.coordSpec.coordType}' did not return a transformed layer`});return r}},Yp=class{constructor(e){this.setupStage=new Kp(e),this.transformStage=new zp(e)}get setupStats(){return this.setupStage.stats}get transformStats(){return this.transformStage.stats}setup(e){return this.setupStage.compile(e)}transform(e){return this.transformStage.compile(e)}},qp=class{constructor(){this.coordType="cartesian"}setup(e){if(e.coordSpec.coordType!=="cartesian")throw new l.InternalError({message:`Invalid coordinate type: ${e.coordSpec.coordType}`});return{coordSystem:{type:"cartesian",mainAxis:"x",axisMapping:{x:{position:"bottom",geometry:"linear"},y:{position:"right",geometry:"linear"}}},scales:e.scales}}transform(e){return e.layers}},jp=class{constructor(){this.coordType="flip"}setup(e){if(e.coordSpec.coordType!=="flip")throw new l.InternalError({message:`Invalid coordinate type: ${e.coordSpec.coordType}`});return{coordSystem:{type:"cartesian",mainAxis:"y",axisMapping:{x:{position:"left",geometry:"linear"},y:{position:"bottom",geometry:"linear"}}},scales:Zp(e.scales,e.layers)}}transform(e){return e.layers.map(t=>Qp(t))}},Xp=[[l.POSITION_VARIABLES.x,l.POSITION_VARIABLES.y],[l.POSITION_VARIABLES.xMin,l.POSITION_VARIABLES.yMin],[l.POSITION_VARIABLES.xMax,l.POSITION_VARIABLES.yMax]],Ka=l.prefixInternalVariable("flipSwap"),Zp=(e,t)=>Jp(t)?e.map(r=>r.scaledAesthetic!=="x"||r.scaleType!=="continuous"&&r.scaleType!=="datetime"&&r.scaleType!=="discrete"?r:{...r,reverse:!r.reverse}):e,Jp=e=>{for(const t of e){const r=l.extractVariableName(t.mapping.x);if(!r||!t.data.hasVariable(r))continue;const n=t.data.getType(r);if(n==="categorical"||n==="temporal")return!0}return!1},Qp=e=>{let t=e.data;for(const[r,n]of Xp){const a=t.hasVariable(r),i=t.hasVariable(n);a&&i?t=t.renameVariable(r,Ka).renameVariable(n,r).renameVariable(Ka,n):a?t=t.renameVariable(r,n):i&&(t=t.renameVariable(n,r))}return{...e,data:t}};function $o(e){const t=new Set,r=[];for(const n of e){const a=n instanceof Date?n.getTime():String(n);t.has(a)||(t.add(a),r.push(n))}return r}var Go=(e,t)=>$o(t.domain!==null&&t.domain.length>0?t.domain:e),em=class{constructor(){this.coordType="polar"}setup(e){if(e.coordSpec.coordType!=="polar")throw new l.InternalError({message:`Invalid coordinate type: ${e.coordSpec.coordType}`});const{params:t}=e.coordSpec,r=t.startAngle*(Math.PI/180),n=nm(t,e.scales,e.layers),a=im(t,e.scales,e.layers);return{coordSystem:{type:"polar",axisMapping:t.theta==="x"?{x:{position:"bottom",geometry:"circular"},y:{position:"left",geometry:"radial"}}:{x:{position:"left",geometry:"radial"},y:{position:"bottom",geometry:"circular"}},innerRadius:t.innerRadius,startAngle:r,spokeRotation:n,bandAxis:a},scales:e.scales}}transform(e){if(e.coordSpec.coordType!=="polar")throw new l.InternalError({message:`Invalid coordinate type: ${e.coordSpec.coordType}`});if(e.coordSystem.type!=="polar")throw new l.InternalError({message:"PolarCoord.transform received a non-polar coord system"});const{params:t}=e.coordSpec,{startAngle:r,spokeRotation:n}=e.coordSystem,a=rm(r,n),i=om(t);return e.layers.map(o=>sm(t.theta==="y"?lm(o):o,a,i))}},tm=[[l.POSITION_VARIABLES.x,l.POSITION_VARIABLES.y],[l.POSITION_VARIABLES.xMin,l.POSITION_VARIABLES.yMin],[l.POSITION_VARIABLES.xMax,l.POSITION_VARIABLES.yMax]];function rm(e,t){return r=>vo(r,e,t)}function nm(e,t,r){const n=t.find(i=>i.scaledAesthetic===e.theta);if(n===void 0||n.scaleType!=="discrete")return 0;const a=am(n,e,r);return a===0?0:-Math.PI/a}function am(e,t,r){const n=[];for(const a of r){const i=l.extractVariableName(a.mapping[t.theta]);if(!(i===null||!a.data.hasVariable(i)))for(const o of a.data.getValues(i))n.push(o)}return Go(n,e).length}function im(e,t,r){if(e.theta==="x")return"x";const n=t.find(i=>i.scaledAesthetic==="x")?.scaleType==="discrete",a=r.some(i=>i.position==="fill");return n&&!a?"y":null}function om(e){const{innerRadius:t}=e;return r=>t+r*(1-t)}function sm(e,t,r){let n=e.data;return n=Ke(n,l.POSITION_VARIABLES.x,t),n=Ke(n,l.POSITION_VARIABLES.xMin,t),n=Ke(n,l.POSITION_VARIABLES.xMax,t),n=Ke(n,l.POSITION_VARIABLES.y,r),n=Ke(n,l.POSITION_VARIABLES.yMin,r),n=Ke(n,l.POSITION_VARIABLES.yMax,r),{...e,data:n}}function Ke(e,t,r){if(!e.hasVariable(t))return e;const n=e.getValues(t,{type:"numeric"}).map(a=>a===null?null:r(a));return e.addVariable(t,"numeric",n)}function lm(e){let t=e.data;for(const[r,n]of tm){const a=t.hasVariable(r),i=t.hasVariable(n);if(!a&&!i)continue;const o=a?t.getValues(r):null,s=i?t.getValues(n):null;o&&(t=t.addVariable(n,"numeric",o)),s&&(t=t.addVariable(r,"numeric",s))}return{...e,data:t}}var cm=class extends l.Registry{constructor(){super("coord"),this.register("cartesian",new qp),this.register("flip",new jp),this.register("polar",new em)}},Uo=new Set(["min","max","scalar"]),um={x:{min:l.POSITION_VARIABLES.xMin,max:l.POSITION_VARIABLES.xMax},y:{min:l.POSITION_VARIABLES.yMin,max:l.POSITION_VARIABLES.yMax}};function dm(e){const t=new Set;for(const r of e)r.role==="point"?t.add(r.axis):(r.role==="min"||r.role==="max")&&l.isDefined(r.aes)&&t.add(r.aes);return[...t]}function pm(e){const t=new Set;for(const r of e)r.role==="point"&&t.add(r.axis),l.isDefined(r.aes)&&t.add(r.aes);return[...t]}function mm(e,t,r){let n=e;for(const a of t){if(a.role!=="min"&&a.role!=="max"||!l.isDefined(a.aes))continue;const i=um[a.axis][a.role];if(n.hasVariable(i))continue;const o=l.extractVariableName(r[a.aes]);!l.isDefined(o)||!n.hasVariable(o)||(n=n.addVariable(i,"numeric",n.getValues(o,{type:"numeric"})))}return n}var hm=class{constructor(e){this.container=e}compile(e,t){const r=this.container.geomRegistry.get(e),n=r.compile(t),a={...t.mapping,...n.mapping};return{...n,data:mm(n.data,r.positionRoles,a)}}},In=["x","y"],Tn=new Set(["x","y","ySecondary"]),bt=new Set(["color","size","alpha","strokeWidth","lineType"]),$e=e=>Tn.has(e),Ln=e=>bt.has(e),Ho=e=>$e(e)||Ln(e);function Te(e){return e==="secondary"?"ySecondary":"y"}function Wo(e,t){return e==="y"?Te(t):"x"}function H(e){return e==="ySecondary"?"y":e}var Le=(e,t)=>{if(l.isDefined(t.group)){const a=l.extractVariableName(t.group);if(a!==null)return[a]}const r=new Set([l.extractVariableName(t.x),l.extractVariableName(t.y)].filter(l.isDefined)),n=new Set;for(const a of bt){const i=l.extractVariableName(t[a]);l.isDefined(i)&&(r.has(i)||e.hasVariable(i)&&e.getType(i)==="categorical"&&n.add(i))}return[...n]},dr=(e,t)=>e.hasVariable(l.GROUP_VARIABLES.group)?e.getValues(l.GROUP_VARIABLES.group,{distinct:!0,skipNulls:!0}).length>1:Le(e,t).some(r=>e.getValues(r,{distinct:!0,skipNulls:!0}).length>1),fm=class{compute({data:e,mapping:t}){const r=Le(e,t);if(r.length===0)return{data:e.addConstantVariable(l.GROUP_VARIABLES.group,"categorical",null)};const n=e.size(),a=r.map(o=>e.getValues(o)),i=new Array(n);for(let o=0;o<n;o++)i[o]=l.getStableKey(a.map(s=>s[o]));return{data:e.addVariable(l.GROUP_VARIABLES.group,"categorical",i)}}},gm=e=>{if(e===void 0)return{};const t={};for(const r of e.columns)r.label!==void 0&&(t[r.key]=r.label);return t},ym=(e,t,r)=>{const n=Me(t,"color");return n===null?{}:(e?.columns??[]).some(a=>a.key===n)?{}:r};function Me(e,t){const r=H(t);for(const n of Ko(t,e)){const a=l.extractVariableName(n.mapping[r]);if(l.isDefined(a))return a}return null}var pr=(e,t)=>e===null?null:t[e]??e,vm=(e,t)=>e===null?null:t[String(e)]??null,ke=({layers:e,scaleType:t,variableName:r})=>{if(r===null)return Dr(t);for(const n of e){if(!n.data.hasVariable(r))continue;const a=n.data.getValueFormat(r),i=a.type==="lookup"?a.fallback:a;return Sm(i,t)?i:Dr(t)}return Dr(t)},bm=(e,t)=>t!=="y"&&t!=="ySecondary"?!1:Ko(t,e).some(r=>r.position==="fill");function Ko(e,t){return e==="ySecondary"?t.filter(r=>r.yScaleType==="secondary"):e==="y"?t.filter(r=>r.yScaleType==="primary"):t}var Dr=e=>{switch(e){case"continuous":return{type:"decimal"};case"datetime":return{type:"date"};case"discrete":case"palette":case"identity":return{type:"text"}}},Sm=(e,t)=>{switch(t){case"continuous":return l.isNumericValueFormat(e);case"datetime":return l.isTemporalValueFormat(e);case"discrete":case"palette":case"identity":return!0}},xm=[{unit:"year",step:1e3},{unit:"year",step:100},{unit:"year",step:50},{unit:"year",step:20},{unit:"year",step:10},{unit:"year",step:5},{unit:"year",step:2},{unit:"year",step:1},{unit:"month",step:6},{unit:"month",step:3},{unit:"month",step:2},{unit:"month",step:1},{unit:"week",step:2},{unit:"week",step:1},{unit:"day",step:2},{unit:"day",step:1},{unit:"hour",step:12},{unit:"hour",step:6},{unit:"hour",step:3}],za={year:0,quarter:1,month:2,week:3,day:4,hour:5},ze=40,Am=(e,t,r)=>{const n=r.unit==="quarter"?r.step*3:r.step;return Em(r.unit).range(e,new Date(t.valueOf()+1),n)},Im=({unit:e,step:t,start:r,stop:n})=>{const a=(0,jd.differenceInDays)(n,r);switch(e){case"hour":return 24*a/t>ze;case"day":return a/t>ze;case"week":return a/(7*t)>ze;case"month":return a/(30*t)>ze;case"quarter":return a/(90*t)>ze;case"year":return a/(365*t)>ze}},Tm=(e,t)=>{const r=!l.isDateWithoutYearValueFormat(t);switch(e.unit){case"year":return r?{type:"year"}:{type:"month"};case"quarter":return{type:"quarter"};case"month":return r?{type:"month_year"}:{type:"month"};case"week":return r?{type:"weekly_date_range_with_year"}:{type:"weekly_date_range"};case"day":return r?{type:"date"}:{type:"day_month"};case"hour":return r?{type:"datetime"}:{type:"time"}}},Lm=(e,t)=>{const r=wm(t);return r===null?!1:za[e]>za[r]},Em=e=>{switch(e){case"hour":return st.utcHour;case"day":return st.utcDay;case"week":return st.utcMonday;case"month":case"quarter":return st.utcMonth;case"year":return st.utcYear}},wm=e=>{switch(e.type){case"year":return"year";case"quarter":return"quarter";case"month_year":case"month":return"month";case"weekly_date_range":case"weekly_date_range_with_year":return"week";case"date":case"day_month":case"datetime":return"day";case"time":return"hour";default:return null}},zo={left:"right",right:"left",top:"bottom",bottom:"top"},Rm={x:!0,y:!0,ySecondary:!1},Cm=20,Ya=new Set(["top","bottom"]),Vm={type:"percentage"};function Dm(e,t){const{scales:r,config:n,layers:a,coordSystem:i,variableLabels:o,geomRegistry:s}=e;if(Co(a))return[];if(i.type==="polar"&&i.bandAxis===null)return[];const c=Om(s,a,i.type,n),u=new Set(t.map(h=>h.position)),d=km(Yo(n.axes.y.position,i.axisMapping.y.position),u),p=[];for(const h of Tn){const m=r[h];if(!l.isDefined(m)||m.kind!=="position")continue;const f=_m({scaleAestheticKey:h,scale:m,config:n,layers:a,axisMapping:i.axisMapping,resolvedYPosition:d,gridOverrides:c,variableLabels:o});p.push(f)}return p}function _m(e){const{scaleAestheticKey:t,scale:r,config:n,layers:a,axisMapping:i,resolvedYPosition:o,gridOverrides:s,variableLabels:c}=e,{axisConfig:u,position:d,geometry:p}=Mm(t,n,i,o),h=Me(a,t),m=bm(a,t)?Vm:ke({layers:a,scaleType:r.spec.scaleType,variableName:h});return{scaleAestheticKey:t,position:d,geometry:p,label:Pm(u,h,c),isVisible:u.isVisible,tickCandidates:Bm(r,m,u.ticks.mode),valueFormat:m,tickMode:u.ticks.mode,ticksVisible:u.ticks.isVisible,gridVisible:Nm(u,s,t),scaleType:r.spec.scaleType,bandwidth:r.bandwidth??void 0}}function Pm(e,t,r){return e.label?e.label:t?r[t]??null:null}function Om(e,t,r,n){const a=t.flatMap(s=>{const c=e.get(s.geom).grid[r];return c?[c]:[]}),i=a.some(s=>s.hideGridX),o=a.some(s=>s.hideGridY);return{x:{gridVisible:qa(i,n.axes.x.grid.isVisible)},y:{gridVisible:qa(o,n.axes.y.grid.isVisible)}}}function qa(e,t){if(e&&t===null)return!1}function Mm(e,t,r,n){switch(e){case"x":return{axisConfig:t.axes[e],position:Yo(t.axes[e].position,r[e].position),geometry:r.x.geometry};case"y":return{axisConfig:t.axes[e],position:n,geometry:r.y.geometry};case"ySecondary":{const a=zo[n],i=(0,at.merge)({isVisible:t.axes.y.isVisible,label:null,position:a,grid:t.axes.y.grid,ticks:t.axes.y.ticks},t.axes.ySecondary);return{axisConfig:i,position:i.position,geometry:r.y.geometry}}}}function Yo(e,t){return Ya.has(e)===Ya.has(t)?e:t}function km(e,t){return t.has(e)?zo[e]:e}function Nm(e,t,r){const{gridVisible:n}=r==="x"?t.x:t.y;return n??e.grid.isVisible??Rm[r]}var Bm=(e,t,r)=>{const n=e.spec.scaleType==="continuous"||e.spec.scaleType==="datetime";if(r==="edges"&&n){const a=$m(e);if(a)return[a]}if(e.spec.scaleType==="continuous"){const a=new Set,i=[];for(let o=1;o<=Cm;o++){const s=e.generateTicks({count:o}),c=l.getStableKey(s);a.has(c)||(a.add(c),i.push({ticks:s.map(u=>tt(e,u))}))}return i}return e.spec.scaleType==="datetime"?Fm(e,t):[{ticks:e.generateTicks().map(a=>tt(e,a))}]},Fm=(e,t)=>{const[r,n]=e.domain;if(!l.isStrictTemporalDataValue(r)||!l.isStrictTemporalDataValue(n))return[{ticks:e.generateTicks().map(s=>tt(e,s))}];const a=new Set,i=[],o=(s,c)=>{if(s.length===0)return;const u=l.getStableKey(s);a.has(u)||(a.add(u),i.push({ticks:s.map(d=>tt(e,d)),valueFormat:c}))};for(const s of xm)Im({...s,start:r,stop:n})||Lm(s.unit,t)||o(e.generateTicks({interval:s}),Tm(s,t));return o(e.generateTicks({atInputs:!0})),i.sort((s,c)=>s.ticks.length-c.ticks.length),i},$m=e=>{const{domain:t}=e,r=t[0],n=t.at(-1);return!l.isDefined(r)||!l.isDefined(n)||l.getStableKey([r])===l.getStableKey([n])?null:{ticks:[tt(e,r),tt(e,n)]}},tt=(e,t)=>({value:t,position:e.map(t)});function qo({scale:e,aesthetics:t,layers:r}){const n=Gm({layers:r,aesthetics:t}),a=jo({layers:r,aesthetics:t});return e.domain.map(i=>({value:i,geom:n(i),owner:a(i)}))}function Gm({layers:e,aesthetics:t}){const r=jo({layers:e,aesthetics:t}),n=e.find(i=>t.some(o=>l.isDefined(i.mapping[o]))),a=n?n.geom:"bar";return i=>{const o=r(i);return o?o.layer.geom:a}}function jo({layers:e,aesthetics:t,layerFilter:r}){const n=new Map;for(const[a,i]of e.entries()){if(r&&!r(i))continue;const o=t.find(c=>l.isDefined(i.mapping[c]));if(o===void 0)continue;const s=l.extractVariableName(i.mapping[o]);if(!(s===null||!i.data.hasVariable(s)))for(const c of i.data.getValues(s,{distinct:!0})){const u=l.getStableKey(c);n.has(u)||n.set(u,{layer:i,layerIndex:a})}}return a=>n.get(l.getStableKey(a))}var En=e=>{if(e.kind==="identity")return!1;const t=e.spec.scaleType;return t!=="continuous"&&t!=="datetime"};function Um({scales:e,layers:t,valueLabels:r}){const n=e.color;if(n===void 0||!En(n))return[];if(!t.some(s=>l.isDefined(s.mapping.color)))return[];const a=Me(t,"color");if(Xo({colorVariableName:a,xVariableName:Me(t,"x"),mapsColorAcrossMultipleLayers:Wm(t)>1,isMergedWithAnotherAesthetic:Hm(e,t,a)}))return[];const i=n.spec.scaleType,o=t.findIndex(s=>l.isDefined(s.mapping.color));return qo({scale:n,aesthetics:["color"],layers:t}).map(({value:s,geom:c,owner:u})=>{const d=u?.layerIndex??o,p=t[d],h=p?l.extractVariableName(p.mapping.color):null;return{value:s,color:String(n.map(s)),geom:c,layerIndex:d,valueFormat:ke({layers:p?[p]:t,scaleType:i,variableName:h}),label:vm(s,r)}})}var Xo=({colorVariableName:e,xVariableName:t,mapsColorAcrossMultipleLayers:r,isMergedWithAnotherAesthetic:n})=>n?!1:e===null||l.isInternalVariable(e)?!r:t!==null&&e===t;function Hm(e,t,r){if(r===null)return!1;for(const n of bt){if(n==="color")continue;const a=e[n];if(!(a===void 0||!En(a))&&Me(t,n)===r)return!0}return!1}var Wm=e=>e.filter(t=>l.isDefined(t.mapping.color)).length;function Zo(e,t){return e.get(t.geom).summaries.perGroupHeadline===!0}function Km(e,t,r,n){const a=r.findIndex(i=>Zo(e,i));return a===-1?[]:t.length<2?[{value:null,swatch:null,layerIndex:a,groupLabelFormat:{type:"text"},label:pr(l.extractVariableName(r[a]?.mapping.y),n)}]:t.map(i=>({value:i.value,swatch:{color:i.color,geom:i.geom,layerId:r[i.layerIndex]?.id,value:i.value},layerIndex:i.layerIndex,groupLabelFormat:i.valueFormat,label:i.label}))}function ja(e,t,r){if(r===null||t===null)return[...e];const n=l.getStableKey(r);return e.filter((a,i)=>l.getStableKey(t[i]??null)===n)}var Jo=e=>e==="none"?"first":e,zm=(e,t)=>{switch(t){case"total":{const{sum:r,count:n}=Xa(e);return n===0?null:r}case"average":{const{sum:r,count:n}=Xa(e);return n===0?null:r/n}case"current":return e.at(-1)??null}},Ym=(e,t)=>{if(e.length<2)return null;const r=e.at(-1),n=t==="previous"?e.at(-2):e.at(0);return r===void 0||n===void 0||r.cross===null||n.cross===null||n.cross===0?null:{variation:(r.cross-n.cross)/n.cross,against:n.main}},Xa=e=>e.reduce((t,r)=>r===null?t:{sum:t.sum+r,count:t.count+1},{sum:0,count:0});function qm(e){const{config:t,coordSystem:r}=e,n=t.headline.show;return n==="none"||n==="conversion"?null:r.type==="polar"?jm(e,n):Xm(e,n)}function jm(e,t){if(t!=="total")return null;const{scales:r,layers:n}=e,a=n.find(s=>s.summary.grandTotal!==void 0);if(a===void 0)return null;const i=a.summary.grandTotal;if(i===void 0)return null;const o=l.extractVariableName(a.mapping.y);return o===null?null:{kind:"grandTotal",value:i,valueFormat:ke({layers:[a],scaleType:r.y?.spec.scaleType??"continuous",variableName:o})}}function Xm(e,t){const{config:r,scales:n,layers:a,variableLabels:i,colorGroups:o,geomRegistry:s}=e;if(!a.some(d=>Zo(s,d)))return null;const c=Km(s,o,a,i);if(c.length===0)return null;const u=c.map(d=>Zm({group:d,show:t,compareWith:r.headline.compareWith,layers:a,scales:n})).filter(d=>d!==null);return u.length===0?null:{kind:"perGroup",items:u}}function Zm({group:e,show:t,compareWith:r,layers:n,scales:a}){const i=n[e.layerIndex];if(i===void 0)return null;const o=l.extractVariableName(i.mapping.y);if(o===null||t==="total"&&i.position==="fill")return null;const s=l.extractVariableName(i.mapping.x),c=l.extractVariableName(i.mapping.color),u=i.yScaleType==="secondary"?a.ySecondary:a.y,d=ke({layers:[i],scaleType:u?.spec.scaleType??"continuous",variableName:o}),p=eh(i.data,s),h=ke({layers:[i],scaleType:p?"datetime":a.x?.spec.scaleType??"discrete",variableName:s}),m=th(i.data,s),f=m.getValues(o,{type:"numeric"}),g=s!==null?m.getValues(s):[],v=c!==null?m.getValues(c):null,y=ja(f,v,e.value),b=ja(g,v,e.value);return{value:e.value,swatch:e.swatch,aggregate:zm(y,t),valueFormat:d,groupLabelFormat:e.groupLabelFormat,mainValueFormat:h,label:e.label,caption:Jm(t,p,b),comparison:Qm(t,r,p,b,y)}}function Jm(e,t,r){if(e==="current"){const i=r.at(-1);return i===void 0?null:{kind:"point",value:i}}if(!t)return null;const n=r.at(0),a=r.at(-1);return n===void 0||a===void 0?null:{kind:"range",from:n,to:a}}function Qm(e,t,r,n,a){return e!=="current"||!r?null:Ym(n.map((i,o)=>({main:i,cross:a[o]??null})),Jo(t))}function eh(e,t){return t!==null&&e.hasVariable(t)&&e.getType(t)==="temporal"}function th(e,t){return t===null||!["numeric","temporal"].includes(e.getType(t))?e:e.orderBy(t)}function ae(e,...t){return e?t.includes(e.geom):!1}function B(e,t){return e.find(r=>r.id===t)}function Ee(e,...t){return e.find(r=>t.includes(r.geom))}function rh(e,...t){return e.filter(r=>t.includes(r.geom))}function wn(e,t){return e.interactive?!1:t.some(r=>r!==e&&l.areMappingsEquivalent(r.mapping,e.mapping))}function Rn(e){const t=e.filter(r=>!wn(r,e));return t.length>0?t:e}function Qo({legendPosition:e,coordSystem:t,layers:r}){if(e!=="right"||t.type!=="cartesian"||t.mainAxis!=="x")return!1;const n=Rn(r);return n.length===1&&n[0]?.supportsDirectLabels===!0}var nh=3;function ah({scales:e,config:t,layers:r,coordSystem:n,variableLabels:a,colorGroups:i,geomRegistry:o}){if(t.legend.position==="none")return{drawn:[],position:"none"};const s=new Map(i.map(v=>[l.getStableKey(v.value),v])),c=ph(lh({scales:e,layers:r})),u=Me(r,"x"),d=c.map(v=>{if(uh(v,u,r))return null;const y=hh({group:v,variableLabels:a,layers:r,colorGroupsByValue:s});return y.items.length===0?null:{group:v,built:y}}).filter(l.isDefined),p=ih(d),h=Rn(r),m=Sh(o,t.legend.position,p,h,n);if(d.length===0)return{drawn:[],position:m};if(t.legend.position==="auto"&&bh(o,p,h,n))return{drawn:[],position:m};const f=xh(t.legend.display,{legendPosition:m,coordSystem:n,layers:r}),g=f==="direct"?Lh(h[0]):null;return{drawn:d.map(({built:v})=>oh(v,{position:m,display:f,align:t.legend.align},g)),position:m}}function ih(e){return e.reduce((t,{group:r,built:n})=>t+(r.some(a=>a.guideType!=="discrete")?1:n.items.length),0)}function oh(e,t,r){const{position:n,display:a}=t,i=sh(t.align,n);return a!=="direct"||r===null?{...e,position:n,display:a,align:i}:{...e,position:n,display:a,align:i,items:e.items.map(o=>({...o,normalizedY:r.get(String(o.value))??null}))}}function sh(e,t){return e!=="auto"?e:t==="top"||t==="bottom"?"start":"center"}function lh(e){const{scales:t,layers:r}=e,n=[];for(const a of bt){const i=t[a];if(i===void 0||i.kind==="identity"||!ch(a,r))continue;const o=Me(r,a),s=Th(a,i);n.push({scaleAestheticKey:a,scale:i,variableName:o,guideType:s})}return n}function ch(e,t){const r=H(e);return t.some(n=>l.isDefined(n.mapping[r]))}function uh(e,t,r){const[n]=e;return n.scaleAestheticKey!=="color"?!1:Xo({colorVariableName:n.variableName,xVariableName:t,mapsColorAcrossMultipleLayers:dh(n.scaleAestheticKey,r),isMergedWithAnotherAesthetic:e.length>1})}function dh(e,t){const r=H(e);return t.filter(n=>l.isDefined(n.mapping[r])).length>1}function ph(e){const t=new Map;for(const r of e){const n=Ih(r),a=t.get(n);a?a.push(r):t.set(n,[r])}return[...t.values()]}function mh(e,t,r){if(t==="lineType"){e.lineType=r;return}if(t==="color"){e.color=String(r);return}e[t]=r}function hh({group:e,variableLabels:t,layers:r,colorGroupsByValue:n}){const a=e[0],i=e.map(u=>H(u.scaleAestheticKey)),o=qo({scale:a.scale,aesthetics:i,layers:r}),s=ke({layers:r,scaleType:a.scale.spec.scaleType,variableName:a.variableName}),c=r.find(u=>i.some(d=>l.isDefined(u.mapping[d])))?.id;return{aesthetics:e.map(u=>u.scaleAestheticKey),title:pr(a.variableName,t),items:o.map(u=>fh(u,e,i,s,n,c))}}function fh(e,t,r,n,a,i){const o={};for(const c of t)mh(o,c.scaleAestheticKey,c.scale.map(e.value));if(o.color===void 0&&r.includes("size")&&(o.color=l.DEFAULT_GEOM_COLOR),o.lineType===void 0){const c=l.extractConstantValue(e.owner?.layer.mapping.lineType);gn(c)&&(o.lineType=c)}const s=yh(e,t,r,n,a);return{value:e.value,label:gh(t,e,a),visual:o,normalizedY:null,geom:e.geom,valueFormat:s,layerId:e.owner?.layer.id??i}}function gh(e,t,r){return e[0].scaleAestheticKey!=="color"?null:r.get(l.getStableKey(t.value))?.label??null}function yh(e,t,r,n,a){if(t[0].scaleAestheticKey==="color")return a.get(l.getStableKey(e.value))?.valueFormat??n;const i=e.owner?.layer,o=vh(i,r);return i===void 0||o===null?n:ke({layers:[i],scaleType:t[0].scale.spec.scaleType,variableName:o})}function vh(e,t){if(e===void 0)return null;for(const r of t){const n=e.mapping[r];if(n===void 0)continue;const a=l.extractVariableName(n);if(a!==null)return a}return null}function bh(e,t,r,n){if(t>1)return!1;const a=n.type==="polar";return r.some(i=>e.get(i.geom).legend.suppressWhenSingleItem||a)}function Sh(e,t,r,n,a){if(t!=="auto")return t;if(a.type==="polar")return"top";let i=!1,o=!1,s=!1;for(const u of n){const{sidePlacement:d}=e.get(u.geom).legend;d==="whenCrowded"&&(i=!0),d==="whenStackedVertical"&&(o=!0,U(u.position)&&(s=!0))}const c=r>=nh;return i&&o?"top":i?c?"right":"top":s?Ah(a)?"top":c?"right":"top":"top"}function xh(e,t){return e==="pill"?"pill":Qo(t)?"direct":"pill"}function Ah(e){return e.type==="cartesian"&&e.mainAxis==="y"}function Ih(e){const t=e.scale.domain.map(l.getStableKey);return JSON.stringify([e.variableName,e.guideType,...t])}function Th(e,t){return En(t)?"discrete":`continuous:${e}`}function Lh(e){if(!e)return new Map;const t=new Map;return e.data.groupBy(l.GROUP_VARIABLES.group).forEach(r=>{const n=r.findLast(c=>l.isDefined(F(c))||l.isDefined(D(c)));if(!n)return;const a=re(n);if(!l.isDefined(a))return;const i=G(n),o=F(n)??D(n);if(!l.isDefined(o))return;const s=l.isDefined(i)?(i+o)/2:o;t.set(String(a),s)}),t}var Eh=class extends l.Stage{constructor(e){super(),this.container=e}dependencies(e){return[e.scales,e.config.axes,e.config.legend,e.config.headline,e.layers,e.coordSystem,e.originalData]}run(e){const t=gm(e.originalData),r=Um({scales:e.scales,layers:e.layers,valueLabels:ym(e.originalData,e.layers,t)}),n={scales:e.scales,config:e.config,layers:e.layers,coordSystem:e.coordSystem,variableLabels:t,colorGroups:r,geomRegistry:this.container.geomRegistry},a=qm(n),i=ah(n),o={...i,drawn:wh(a,i.drawn)};return{axes:Dm(n,o.drawn),legends:o,headline:a,colorGroups:r,variableLabels:t}}},wh=(e,t)=>e?.kind!=="perGroup"||t.some(r=>r.display==="direct")?t:[],dt=(e,t,r)=>{switch(e){case"series":return Rh(t);case"x-value":return Cn(t,r)}},mr=e=>{const t=l.readMainAxisVariable(e);return t===""?null:t},Rh=e=>l.getStableKey([re(e)]),Cn=(e,t)=>l.getStableKey([t!==null?e[t]??null:null]),Ch={bar:"observation-rerender",rule:null,line:"overlay-anchor",area:"overlay-anchor",point:"overlay-anchor",tile:"observation-rerender"};function es(e){const t=Ch[e]??null;return t===null?null:{strategy:t,composition:ts()}}function ts(){return{isDimmed:!1,matchedLayer:null,overlayCandidates:[]}}var Vh=class extends Fe{constructor(e){super(),this.container=e}dependencies(e){return[e.highlights,e.config.parsingLocale]}compileLayer(e,t){const r=e.highlight;if(r===null)return e;const n=t.highlights.filter(({layerId:i})=>i===void 0||i===e.id);if(n.length===0)return e;const a=Dh({layer:e,highlights:n,parsingLocale:t.config.parsingLocale,strategy:r.strategy,container:this.container});return{...e,highlight:{...r,composition:a}}}};function Dh({layer:e,highlights:t,parsingLocale:r,strategy:n,container:a}){const i=t.filter(I=>{const V=Ae(I.predicate,e.data);for(const O of V)a.diagnostics.addWarning({...O,message:`${O.message} Dropping this highlight.`});return V.length===0}),o=mr(e.mapping),s=vt(e,r),c=i.map(I=>({predicate:xe(I.predicate,s),scope:I.scope})),u=c.some(({scope:I})=>I==="series"),d=c.some(({scope:I})=>I==="x-value"),p=n==="overlay-anchor",h=e.data.size(),m=u?new Array(h):null,f=d?new Array(h):null,g=p?new Array(h):null,v=new Uint8Array(h),y=new Set,b=new Set;let A=!1,T=0;for(const I of e.data){let V,O;m!==null&&(V=dt("series",I,o),m[T]=V),f!==null&&(O=dt("x-value",I,o),f[T]=O),g!==null&&(g[T]=I);for(const{predicate:ie,scope:kt}of c)if(ie(I))switch(kt){case"series":V!==void 0&&y.add(V);break;case"x-value":O!==void 0&&b.add(O);break;case"data-point":v[T]=1,A=!0;break}T++}if(y.size===0&&b.size===0&&!A)return ts();const L=new Uint8Array(h),E=[];let w=0;for(let I=0;I<h;I++){const V=m?.[I],O=f?.[I],ie=V!==void 0&&y.has(V),kt=O!==void 0&&b.has(O),Ma=v[I]===1;if(n==="observation-rerender")(ie||Ma||kt)&&(L[I]=1,w++);else if(ie)L[I]=1,w++;else if(Ma||kt){const ka=g?.[I];ka!==void 0&&E.push({observation:ka,observationIndex:I})}}const C=w>0?{...e,data:e.data.filterByMask(L)}:null;return{isDimmed:(n==="observation-rerender"||y.size>0)&&C!==null,matchedLayer:C,overlayCandidates:E}}var _h=l.prefixInternalVariable("__ungrouped__");function Ph(e){const t=e.getVariableNames().filter(a=>e.getType(a)==="temporal"&&l.isDateWithoutYearValueFormat(e.getValueFormat(a)));if(t.length===0)return e;const r=e.getValues(l.GROUP_VARIABLES.group,{type:"categorical"});let n=e;for(const a of t){const i=n.getValues(a,{type:"temporal"}),o=new Map,s=i.map((c,u)=>{if(c===null)return null;const d=r[u]??_h;let p=o.get(d);return p||(p=new l.ChronologicalDateManager,o.set(d,p)),p.incrementYearIfNeeded(c)});n=n.addVariable(a,"temporal",s)}return n}var Oh=()=>({defaults:[],overrides:[],warnings:[]}),Mh=class extends Fe{constructor(e,t,r,n,a,i){super(),this.container=e,this.transformCompiler=t,this.statCompiler=r,this.groupCompiler=n,this.geomCompiler=a,this.positionAdjusterCompiler=i}dependencies(e){return[e.data,e.mapping,Za(e),e.coords.coordType]}compileLayer(e,t){return this.runLayerPipeline({layer:e,data:this.transformCompiler.compile({data:t.data,transforms:e.transforms}),effectiveMapping:{...t.mapping,...e.mapping},xScaleIsDiscrete:Za(t),coordType:t.coords.coordType})}runLayerPipeline({layer:e,data:t,effectiveMapping:r,xScaleIsDiscrete:n,coordType:a}){const i=cr({data:t,mapping:r}).pipe(({data:s,mapping:c})=>{const u=this.statCompiler.compute(e.stat,{data:s,mapping:c,xScaleIsDiscrete:n});return{data:u.data,mapping:{...c,...u.mapping}}}).pipe(({data:s,mapping:c})=>({data:this.groupCompiler.compute({data:s,mapping:c}).data,mapping:c})).pipe(({data:s,mapping:c})=>({data:Ph(s),mapping:c})).pipe(({data:s,mapping:c})=>{const u=this.geomCompiler.compile(e.geom,{data:s,mapping:c,params:e.params,coordType:a});return{data:u.data,mapping:{...c,...u.mapping}}}).pipe(({data:s,mapping:c})=>{const u=this.positionAdjusterCompiler.adjust(e.position,{data:s,mapping:c});return{data:u.data,mapping:{...c,...u.mapping}}}).result(),o=this.container.geomRegistry.get(e.geom);return{...i,id:e.id,geom:e.geom,position:e.position,yScaleType:e.yScaleType,params:e.params,interactive:e.interactive,dataLabels:e.dataLabels,summary:{},spatialKind:o.spatialKind,identityKey:o.identityKey,tooltip:o.tooltip,supportsDirectLabels:o.legend.directLabelSupport?.[e.position]===!0,highlight:es(e.geom),styles:Oh()}}};function Za(e){return e.scales.some(t=>t.scaledAesthetic==="x"&&t.scaleType==="discrete")}function rs(e,t){const[r]=t;if(r){for(const n of t)e.addError(n);throw new l.UserInputError(r)}}function kh(e,t){return t.some(r=>U(r.position)||e.get(r.geom).scaleConstraints?.bandPadding===0)}function qr(e,t){const r=ns(e,t),n={};for(const{layer:i,scaleConstraints:o,crossAxis:s}of r)o.zeroBaseline===!0&&(n[s]={nice:(n[s]?.nice??!0)&&i.position!=="fill"});const a=r.find(({scaleConstraints:i})=>i.discreteCrossAxis===!0);return{discreteAxis:r.some(({scaleConstraints:i})=>i.discreteMainAxis===!0)?"x":null,discreteCrossAxis:a?.crossAxis??null,bandedAxes:Bh(r),zeroAxes:n,bandPadding:Fh(r),inferredColor:r.some(({scaleConstraints:i})=>i.inferredColor===!0)}}function Nh(e,t){const r=ns(e,t);for(const n of r){if(n.scaleConstraints.discreteCrossAxis!==!0)continue;const a=r.find(i=>i.scaleConstraints.zeroBaseline===!0&&i.crossAxis===n.crossAxis);if(a!==void 0)return{crossAxis:n.crossAxis,banded:Ja(n),zeroAnchored:Ja(a)}}return null}var Ja=({layer:e,index:t})=>({layerId:e.id,layerIndex:t,geom:e.geom});function ns(e,t){const r=[];return t.forEach((n,a)=>{if(!e.has(n.geom))return;const{scaleConstraints:i}=e.get(n.geom);i!==void 0&&r.push({layer:n,index:a,scaleConstraints:i,crossAxis:Te(n.yScaleType)})}),r}function Bh(e){const t=new Set;for(const r of e)if(r.scaleConstraints.discreteCrossAxis===!0)for(const n of as(r))t.add(n);return[...t]}function Fh(e){const t={};for(const r of e){const n=r.scaleConstraints.bandPadding;if(n!==void 0)for(const a of as(r)){const i=t[a];t[a]=i===void 0?n:Math.min(i,n)}}return t}function as({scaleConstraints:e,crossAxis:t}){return e.discreteCrossAxis!==!0?["x"]:e.discreteMainAxis===!0?["x",t]:[t]}var $h=new Set(["label","group"]),Gh=class{constructor(e,t,r,n){this.container=e,this.transformCompiler=t,this.statRegistry=r,this.layerCompiler=n}get stats(){return this.layerCompiler.stats}compile(e){this.checkPreCompile(e);const t=this.layerCompiler.compile(e);return this.checkPostCompile(t),t}checkPreCompile(e){const t=[];e.layers.forEach((r,n)=>{const a=this.transformCompiler.compile({data:e.data,transforms:r.transforms}),i={...e.mapping,...r.mapping},o={layerId:r.id,layerIndex:n,geom:r.geom,position:r.position,stat:r.stat,effectiveMapping:i,data:a,coordType:e.coords.coordType,dataLabels:r.dataLabels};t.push(...this.validateLayer(o));const s=[...this.collectUndeclaredAesthetics(o),...this.collectPanelJustifyWarnings(o)];for(const c of s)this.container.diagnostics.addWarning(c)}),t.push(...this.validateSharedScaleDemands(e.layers)),rs(this.container.diagnostics,t)}checkPostCompile(e){Co(e)&&this.container.diagnostics.addWarning({code:"EMPTY_DATASET",message:"No data to plot — every layer resolved to zero observations.",suggestion:"Check the dataset has rows and that transforms (filters, joins) are not removing them all."})}validateLayer(e){return[...this.validateRequiredAesthetics(e),...this.validateVariableExistence(e),...this.validatePositionalAestheticTypes(e),...this.validateGeomMapping(e),...this.validateCoordSupport(e),...this.validateSupportedPosition(e)]}collectPanelJustifyWarnings({geom:e,effectiveMapping:t,data:r,layerIndex:n,coordType:a,dataLabels:i}){const{justify:o,showDataLabels:s}=i;if(!s||o!=="panel-start"&&o!=="panel-end")return[];if(a==="polar"||!this.container.geomRegistry.get(e).isComposite)return[];if(!dr(r,t))return[];const c=o==="panel-end"?"end":"start";return[{code:"DATA_LABEL_PLACEMENT_COERCED",message:`Multiple ${e} groups would all pin their labels to the same panel edge; justify '${o}' will render as '${c}'.`,context:{layerIndex:n,expected:c,actual:o},suggestion:`Use justify '${c}' for this layer.`}]}validateRequiredAesthetics({layerId:e,layerIndex:t,geom:r,stat:n,effectiveMapping:a}){const i=[],{positionRoles:o,aesthetics:s}=this.container.geomRegistry.get(r),c=[...dm(o),...s.filter(p=>p.required).map(p=>p.name)],{computedVariables:u}=this.statRegistry.get(n.type),d=u;for(const p of c)d.has(p)||l.isDefined(a[p])||i.push({code:"MISSING_AESTHETIC",message:`Layer '${e}': geom '${r}' requires aesthetic '${p}'`,context:{layerIndex:t,aesthetic:p}});return i}validateVariableExistence({layerId:e,layerIndex:t,geom:r,stat:n,effectiveMapping:a,data:i}){const o=[],{computedVariables:s}=this.statRegistry.get(n.type),{derivedVariables:c}=this.container.geomRegistry.get(r),u=s,d=new Set(c);for(const[p,h]of Object.entries(a)){if(u.has(p))continue;const m=l.extractVariableName(h);m===null||m===""||d.has(m)||i.hasVariable(m)||o.push({code:"UNKNOWN_VARIABLE",message:`Layer '${e}': aesthetic '${p}' references variable '${m}' which does not exist in the dataset`,context:{layerIndex:t,aesthetic:p,variableName:m}})}return o}validatePositionalAestheticTypes({layerId:e,layerIndex:t,geom:r,stat:n,effectiveMapping:a,data:i}){const{positionRoles:o}=this.container.geomRegistry.get(r),{computedVariables:s}=this.statRegistry.get(n.type),c=s,u=[];for(const d of o){if(!Uo.has(d.role)||!l.isDefined(d.aes)||c.has(d.aes)||d.role==="scalar"&&d.aes===d.axis)continue;const p=l.extractVariableName(a[d.aes]);if(p===null||!i.hasVariable(p)||i.size()===0)continue;const h=i.getType(p);h!=="numeric"&&u.push({code:"INCOMPATIBLE_TYPE",message:`Layer '${e}': aesthetic '${d.aes}' must be numeric, but variable '${p}' is ${h}`,context:{layerIndex:t,aesthetic:d.aes,variableName:p,variableType:h},suggestion:this.suggestNumericAestheticFix(d.aes,d.axis,a,i)})}return u}suggestNumericAestheticFix(e,t,r,n){const a=t==="y"?"x":"y";if(e===t){const i=l.extractVariableName(r[a]);if(i!==null&&n.hasVariable(i)&&n.getType(i)==="numeric")return`Swap the '${a}' and '${t}' mappings so the numeric variable is on '${t}'. Add coord.flip() to orient the graph horizontally.`}return`Map '${e}' to a numeric variable.`}validateGeomMapping({layerId:e,layerIndex:t,geom:r,stat:n,effectiveMapping:a}){const{validateMapping:i}=this.container.geomRegistry.get(r);if(i===void 0)return[];const{computedVariables:o}=this.statRegistry.get(n.type);return i({mapping:a,computedVariables:o}).map(s=>({...s,message:`Layer '${e}': ${s.message}`,context:{...s.context,layerIndex:t}}))}validateSharedScaleDemands(e){const t=Nh(this.container.geomRegistry,e);if(t===null)return[];const{crossAxis:r,banded:n,zeroAnchored:a}=t;return[{code:"CONFLICTING_SCALE_DEMANDS",message:`Layer '${n.layerId}' (geom '${n.geom}') needs '${r}' to be a band scale, but layer '${a.layerId}' (geom '${a.geom}') needs it to be a value axis anchored at zero. One scale cannot be both.`,context:{aesthetic:r,layerId:n.layerId,layerIndex:n.layerIndex},suggestion:"Drop one of the layers, or move one onto the secondary y axis with 'yScaleType'."}]}validateCoordSupport({layerId:e,layerIndex:t,geom:r,coordType:n}){const{supportedCoordTypes:a}=this.container.geomRegistry.get(r);return a.includes(n)?[]:[{code:"UNSUPPORTED_COORD",message:`Layer '${e}': geom '${r}' is not supported under ${n} coords`,context:{layerIndex:t}}]}validateSupportedPosition({layerId:e,layerIndex:t,geom:r,position:n}){const{supportedPositions:a}=this.container.geomRegistry.get(r);return a.includes(n)?[]:[{code:"UNSUPPORTED_POSITION",message:`Layer '${e}': geom '${r}' does not support the '${n}' position`,context:{layerIndex:t},suggestion:`Use one of: ${a.join(", ")}.`}]}collectUndeclaredAesthetics({layerId:e,layerIndex:t,geom:r,stat:n,effectiveMapping:a}){const{positionRoles:i,aesthetics:o}=this.container.geomRegistry.get(r),{computedVariables:s}=this.statRegistry.get(n.type),c=new Set([...pm(i),...o.map(h=>h.name)]),u=$h,d=s,p=[];for(const h of Object.keys(a))l.isDefined(a[h])&&(c.has(h)||u.has(h)||d.has(h)||p.push({code:"UNDECLARED_AESTHETIC",message:`Layer '${e}': geom '${r}' does not declare aesthetic '${h}'; the mapping is ignored`,context:{layerIndex:t,aesthetic:h}}));return p}},ye=class{constructor(){this.positionRoles=[],this.identityKey="x-group",this.defaultPosition="identity",this.supportedPositions=xo,this.defaultInteractive=!0,this.aesthetics=[],this.derivedVariables=[],this.highlightStrategy="overlay-anchor",this.supportedCoordTypes=["cartesian","flip"],this.spatialKind="points",this.grid={},this.legend={},this.dataLabelCoordTypes=[],this.isComposite=!1,this.tooltip=[],this.summaries={}}resolveParams(e){return(0,at.merge)({},this.defaultParams,e.params)}},Vn=(e,t)=>{const r=l.extractVariableName(t.x);return!r||!["numeric","temporal"].includes(e.getType(r))?e:e.orderBy(r,"asc")},Dn=(e,{coordSystem:t})=>{const r=M(e),n=D(e);return!l.isStrictNumericDataValue(r)||!l.isStrictNumericDataValue(n)?null:t.type==="polar"?Ce(r,n):{x:r,y:n}},Uh=class extends ye{constructor(...e){super(...e),this.type="area",this.supportedCoordTypes=["cartesian","polar","flip"],this.defaultParams={interpolate:"linear",missingValues:"zero"},this.defaultPosition="stack",this.positionRoles=[{axis:"x",role:"point",valueKind:"value"},{axis:"y",role:"min",valueKind:"value"},{axis:"y",role:"max",valueKind:"value",aes:"y"}],this.aesthetics=[{kind:"visual",name:"color"},{kind:"visual",name:"strokeWidth"},{kind:"visual",name:"lineType"},{kind:"visual",name:"alpha"}],this.summaries={perGroupHeadline:!0},this.dataLabels={cartesian:{offset:8},flip:{offset:8}},this.dataLabelCoordTypes=["cartesian","flip"],this.isComposite=!0,this.legend={suppressWhenSingleItem:!0,sidePlacement:"whenCrowded",directLabelSupport:{stack:!0,dodge:!0,identity:!0,fill:!0}},this.spatialKind="filled-buckets",this.resolveAnchorPosition=Dn}resolveParams(e){const t=super.resolveParams(e);return t.missingValues==="gap"?{...t,missingValues:"zero"}:t}compile({data:e,mapping:t}){return e=Vn(e,t),e.hasVariable(l.POSITION_VARIABLES.yMin)||(e=e.addConstantVariable(l.POSITION_VARIABLES.yMin,"numeric",0)),{data:e,mapping:{}}}},Hh=.7,Wh=.1,Kh=.03,zh=.05,is=e=>{const t=e[l.STACK_VARIABLES.role];return t??"solo"},Yh=class extends ye{constructor(...e){super(...e),this.type="bar",this.defaultParams={},this.defaultPosition="dodge",this.positionRoles=[{axis:"x",role:"point",valueKind:"value"},{axis:"y",role:"min",valueKind:"value"},{axis:"y",role:"max",valueKind:"value",aes:"y"}],this.aesthetics=[{kind:"visual",name:"color"},{kind:"visual",name:"alpha"}],this.summaries={grandTotal:!0,stackTotals:!0,perGroupHeadline:!0},this.grid={cartesian:{hideGridX:!0},flip:{hideGridX:!0}},this.legend={suppressWhenSingleItem:!0,sidePlacement:"whenStackedVertical",directLabelSupport:{stack:!0,fill:!0}},this.scaleConstraints={discreteMainAxis:!0,zeroBaseline:!0},this.dataLabels={polar:{format:"percentage"}},this.dataLabelCoordTypes=["cartesian","flip","polar"],this.highlightStrategy="observation-rerender",this.supportedCoordTypes=["cartesian","polar","flip"],this.spatialKind="rects",this.resolveDataLabelDefaults=t=>U(t)?{justify:"center"}:{},this.resolveBandFraction=(t,r)=>jr(t,r.type),this.resolveAnchorPosition=(t,{coordSystem:r,position:n,purpose:a,align:i})=>{if(i!==void 0){const p=bo(t,r);return p===null?null:ft(p,i)}if(r.type==="polar")return qh(t);const o=U(n),s={isSolo:!o||is(t)==="solo",isNegative:o&&jh(t),purpose:a};if(r.mainAxis==="x"){const p=j(t),h=X(t),m=Qa({lowerBound:G(t),upperBound:F(t)??D(t),options:s});return p===null||h===null||m===null?null:{x:(p+h)/2,y:m}}const c=G(t),u=F(t),d=Qa({lowerBound:j(t),upperBound:X(t)??M(t),options:s});return c===null||u===null||d===null?null:{x:d,y:(c+u)/2}}}resolveParams(e){const{width:t,...r}=super.resolveParams(e),n=this.resolveWidthParam(t,e.diagnostics);return{...r,...n!==void 0&&{width:n}}}compile({data:e,mapping:t,params:r,coordType:n}){const a=jr(r,n);e=Vn(e,t),e.hasVariable(l.POSITION_VARIABLES.yMin)||(e=e.addConstantVariable(l.POSITION_VARIABLES.yMin,"numeric",0));const i=a/2;return e=e.addConstantVariable(l.POSITION_VARIABLES.xMin,"numeric",-i).addConstantVariable(l.POSITION_VARIABLES.xMax,"numeric",i),{data:e,mapping:{}}}resolveWidthParam(e,t){if(e===void 0)return;const r=typeof e=="number"&&Number.isFinite(e)?e:null;if(r!==null&&r>0&&r<=1)return r;const n=r!==null&&r>1?1:void 0;return t?.addWarning({code:"INVALID_GEOM_PARAM",message:`Bar width must be a fraction in (0, 1], got ${String(e)}; falling back to ${n??"the default band"}.`,context:{geom:this.type,param:"width",expected:"0 < width <= 1",actual:r??String(e)},suggestion:"Set params.width to a fraction of the category band in (0, 1]."}),n}},jr=({width:e},t)=>e!==void 0?e:t==="polar"?1:Hh,qh=e=>{const t=j(e),r=X(e),n=G(e),a=F(e);return t===null||r===null||n===null||a===null?null:Ce((t+r)/2,(n+a)/2)},jh=e=>{const t=hn(e);return l.isStrictNumericDataValue(t)&&t<0},Qa=e=>{const{lowerBound:t,upperBound:r,options:n}=e,a=n.isNegative?t:r;if(a===null)return null;if(n.purpose==="value"||n.isSolo)return a;const i=n.isNegative?r:t;return i===null?null:(i+a)/2},Xh=class extends ye{constructor(...e){super(...e),this.type="line",this.supportedCoordTypes=["cartesian","polar","flip"],this.defaultParams={interpolate:"linear",missingValues:"gap"},this.positionRoles=[{axis:"x",role:"point",valueKind:"value"},{axis:"y",role:"point",valueKind:"value"}],this.aesthetics=[{kind:"visual",name:"color"},{kind:"visual",name:"strokeWidth"},{kind:"visual",name:"lineType"},{kind:"visual",name:"alpha"}],this.summaries={perGroupHeadline:!0},this.dataLabels={cartesian:{offset:8},flip:{offset:8}},this.dataLabelCoordTypes=["cartesian","flip"],this.isComposite=!0,this.legend={suppressWhenSingleItem:!0,sidePlacement:"whenCrowded",directLabelSupport:{stack:!0,dodge:!0,identity:!0,fill:!0}},this.spatialKind="buckets",this.resolveAnchorPosition=Dn}compile(e){return{data:Vn(e.data,e.mapping),mapping:{}}}},Zh=class extends ye{constructor(...e){super(...e),this.type="point",this.supportedCoordTypes=["cartesian","polar","flip"],this.defaultParams={},this.positionRoles=[{axis:"x",role:"point",valueKind:"value"},{axis:"y",role:"point",valueKind:"value"}],this.aesthetics=[{kind:"visual",name:"color"},{kind:"visual",name:"size"},{kind:"visual",name:"alpha"}],this.summaries={perGroupHeadline:!0},this.dataLabelCoordTypes=["cartesian","flip"],this.resolveAnchorPosition=Dn,this.resolveValueSource=(t,r)=>{if(r!=="label")return null;const n=l.extractVariableName(t.size);return n!==null?{variable:n}:null}}compile({data:e}){return{data:e,mapping:{}}}},Jh=class extends ye{constructor(...e){super(...e),this.type="rule",this.defaultParams={labelPosition:"start"},this.defaultInteractive=!1,this.positionRoles=[{axis:"y",role:"scalar",valueKind:"value",aes:"y"},{axis:"x",role:"scalar",valueKind:"value",aes:"x"}],this.highlightStrategy=null,this.spatialKind="noop",this.validateMapping=({mapping:t,computedVariables:r})=>{const n=r.has("x")||l.isStrictNumericDataValue(l.extractConstantValue(t.x)),a=r.has("y")||l.isStrictNumericDataValue(l.extractConstantValue(t.y));return n&&a?[{code:"INVALID_RULE_MAPPING",message:"rule geom requires exactly one of 'x' or 'y', both were provided"}]:!n&&!a?[{code:"INVALID_RULE_MAPPING",message:"rule geom requires a numeric value on 'x' or 'y'"}]:[]}}compile({data:e,mapping:t}){const r=ei(t.y,e);if(r!==null)return{data:new l.Dataset({[l.RULE_VARIABLES.y]:{type:"numeric",values:[r.value],valueFormat:r.sourceFormat}}),mapping:{y:l.RULE_VARIABLES.y,x:void 0}};const n=ei(t.x,e);return n!==null?{data:new l.Dataset({[l.RULE_VARIABLES.x]:{type:"numeric",values:[n.value],valueFormat:n.sourceFormat}}),mapping:{x:l.RULE_VARIABLES.x,y:void 0}}:{data:new l.Dataset,mapping:{x:void 0,y:void 0}}}},ei=(e,t)=>{const r=l.extractConstantValue(e);if(l.isStrictNumericDataValue(r))return{value:r,sourceFormat:void 0};const n=l.extractVariableName(e);if(n===null||!l.isStatVariable(n)||!t.hasVariable(n))return null;const[a]=t.getValues(n);return l.isStrictNumericDataValue(a)?{value:a,sourceFormat:t.getValueFormat(n)}:null},Qh=e=>{const t=l.extractVariableName(e.color);return t!==null?{variable:t}:null},ef=class extends ye{constructor(...e){super(...e),this.type="tile",this.defaultParams={},this.positionRoles=[{axis:"x",role:"point",valueKind:"value"},{axis:"x",role:"min",valueKind:"value"},{axis:"x",role:"max",valueKind:"value"},{axis:"y",role:"point",valueKind:"value"},{axis:"y",role:"min",valueKind:"value"},{axis:"y",role:"max",valueKind:"value"}],this.supportedPositions=["identity"],this.supportedCoordTypes=["cartesian"],this.aesthetics=[{kind:"visual",name:"color",required:!0}],this.scaleConstraints={discreteMainAxis:!0,discreteCrossAxis:!0,bandPadding:0,inferredColor:!0},this.grid={cartesian:{hideGridX:!0,hideGridY:!0}},this.legend={suppressWhenSingleItem:!1},this.dataLabels={cartesian:{showDataLabels:!0}},this.dataLabelCoordTypes=["cartesian"],this.highlightStrategy="observation-rerender",this.spatialKind="cells",this.identityKey="x-y",this.tooltip=[{aes:"color"}],this.resolveValueSource=Qh,this.resolveAnchorPosition=t=>{const r=j(t),n=X(t),a=G(t),i=F(t);return r===null||n===null||a===null||i===null?null:{x:(r+n)/2,y:(a+i)/2}}}compile({data:e}){return{data:e.addConstantVariable(l.POSITION_VARIABLES.xMin,"numeric",-.5).addConstantVariable(l.POSITION_VARIABLES.xMax,"numeric",.5).addConstantVariable(l.POSITION_VARIABLES.yMin,"numeric",-.5).addConstantVariable(l.POSITION_VARIABLES.yMax,"numeric",.5),mapping:{}}}},tf=[new Yh,new Zh,new Xh,new Uh,new Jh,new ef],hr=class extends l.Registry{constructor(){super("geom");for(const e of tf)this.register(e.type,e)}},Ge=class{compute(e){return e.data.size()===0?{data:e.data,mapping:{}}:this.computeStat(e)}},rf=class extends Ge{constructor(...e){super(...e),this.type="count",this.computedVariables=new Set(["y"])}computeStat({data:e,mapping:t}){const r=l.extractVariableName(t.x);if(!l.isDefined(r))throw new l.UserInputError({code:"MISSING_STAT_VARIABLE",message:"'x' variable is required for 'count' stat",context:{aesthetic:"x"},suggestion:"Map a variable to 'x' when using the 'count' stat."});if(l.extractVariableName(t.y)!==null)throw new l.UserInputError({code:"CONFLICTING_STAT_MAPPING",message:"Cannot map 'y' variable together with 'count' stat",context:{aesthetic:"y"},suggestion:"Remove the 'y' mapping; the 'count' stat computes it."});const n=[...new Set([r,...Le(e,t)])];return{data:e.groupBy(...n).rollup({[l.STAT_VARIABLES.count]:{variableName:r,aggregation:"count"}}),mapping:{y:l.STAT_VARIABLES.count}}}},nf=class extends Ge{constructor(...e){super(...e),this.type="identity",this.computedVariables=new Set}computeStat({data:e}){return{data:e,mapping:{}}}},af=class extends Ge{constructor(...e){super(...e),this.type="mean",this.computedVariables=new Set(["y"])}computeStat({data:e,mapping:t}){const r=l.extractVariableName(t.y);if(!l.isDefined(r))throw new l.UserInputError({code:"MISSING_STAT_VARIABLE",message:"'y' variable is required for 'mean' stat",context:{aesthetic:"y"},suggestion:"Map a numeric variable to 'y' when using the 'mean' stat."});return{data:e.rollup({[l.STAT_VARIABLES.mean]:{variableName:r,aggregation:"mean"}}),mapping:{y:l.STAT_VARIABLES.mean}}}},of=2,os=1440*60*1e3,sf=class extends Ge{constructor(...e){super(...e),this.type="smooth",this.computedVariables=new Set}computeStat({data:e,mapping:t,spec:r,xScaleIsDiscrete:n}){if(r.type!=="smooth")throw new l.InternalError({message:`SmoothStat received a spec of type '${r.type}'`});const a=l.extractVariableName(t.x),i=l.extractVariableName(t.y);if(!l.isDefined(a))throw new l.UserInputError({code:"MISSING_STAT_VARIABLE",message:"'x' variable is required for 'smooth' stat",context:{aesthetic:"x"},suggestion:"Map a variable to 'x' when using the 'smooth' stat."});if(!l.isDefined(i))throw new l.UserInputError({code:"MISSING_STAT_VARIABLE",message:"'y' variable is required for 'smooth' stat",context:{aesthetic:"y"},suggestion:"Map a numeric variable to 'y' when using the 'smooth' stat."});const o=e.getType(a),s=e.getType(i);if(s!=="numeric")throw new l.UserInputError({code:"INCOMPATIBLE_TYPE",message:`'smooth' stat requires a numeric 'y' (got '${s}' for variable '${i}')`,context:{aesthetic:"y",variableName:i,variableType:s}});const c=Le(e,t),u=hf(a,o,i,c,e);return c.length===0?ti({data:e,xVariable:a,xType:o,yVariable:i,spec:r,output:u,groupObservation:{},xScaleIsDiscrete:n}):e.groupBy(...c).forEach(d=>{const p=ff(d,c);ti({data:d,xVariable:a,xType:o,yVariable:i,spec:r,output:u,groupObservation:p,xScaleIsDiscrete:n})}),{data:u.build(),mapping:{}}}},ti=({data:e,xVariable:t,xType:r,yVariable:n,spec:a,output:i,groupObservation:o,xScaleIsDiscrete:s})=>{const{observations:c,temporalOrigin:u}=lf({data:e,xVariable:t,yVariable:n,xType:r});c.length<of||(s?mf({observations:c,spec:a,output:i,groupObservation:o}):df({observations:c,xType:r,temporalOrigin:u,spec:a,output:i,groupObservation:o}))},lf=({data:e,xVariable:t,yVariable:r,xType:n})=>{const a=e.getValues(t),i=e.getValues(r,{type:"numeric"}),o=n==="temporal"?cf(a):null,s=[],c=new Map;for(let u=0;u<a.length;u++){const d=a[u],p=i[u];if(!l.isDefined(d)||!l.isDefined(p)||!Number.isFinite(p))continue;const h=uf({xValue:d,xType:n,categoryRank:c,temporalOrigin:o});h!==null&&s.push({x:h,y:p,originalX:d})}return{observations:s,temporalOrigin:o}},cf=e=>{let t=null;for(const r of e){if(!l.isStrictTemporalDataValue(r))continue;const n=r.getTime();(t===null||n<t)&&(t=n)}return t},uf=({xValue:e,xType:t,categoryRank:r,temporalOrigin:n})=>{switch(t){case"numeric":return!l.isStrictNumericDataValue(e)||!Number.isFinite(e)?null:e;case"temporal":{if(!l.isStrictTemporalDataValue(e))return null;const a=e.getTime();return n===null?a:(a-n)/os+1}case"categorical":{if(!l.isStrictCategoricalDataValue(e))return null;const a=r.get(e);if(a!==void 0)return a;const i=r.size+1;return r.set(e,i),i}default:throw new l.InternalError({message:`Unexpected xType: ${t}`})}},df=({observations:e,xType:t,temporalOrigin:r,spec:n,output:a,groupObservation:i})=>{const o=ss(n,e);for(const[s,c]of o){if(!Number.isFinite(s)||!Number.isFinite(c))continue;const u=t==="temporal"?pf(s,r):s;a.push({x:u,y:c,groupObservation:i})}},pf=(e,t)=>t===null?new Date(e):new Date((e-1)*os+t),mf=({observations:e,spec:t,output:r,groupObservation:n})=>{const a=new Map;for(const s of e)a.has(s.x)||a.set(s.x,s.originalX);const i=[...a.keys()].sort((s,c)=>s-c);if(t.method==="loess"){const s=ss(t,e),c=new Map;for(const[u,d]of s)Number.isFinite(d)&&(c.has(u)||c.set(u,d));for(const u of i){const d=c.get(u),p=a.get(u);d===void 0||p===void 0||r.push({x:p,y:d,groupObservation:n})}return}const o=ls(t,e);for(const s of i){const c=a.get(s),u=o.predict(s);c===void 0||!Number.isFinite(u)||r.push({x:c,y:u,groupObservation:n})}},ss=(e,t)=>e.method==="loess"?(0,Re.regressionLoess)().x(r=>r.x).y(r=>r.y).bandwidth(e.bandwidth)(t):ls(e,t),ls=(e,t)=>{const r=a=>a.x,n=a=>a.y;switch(e.method){case"linear":return(0,Re.regressionLinear)().x(r).y(n)(t);case"exponential":return(0,Re.regressionExp)().x(r).y(n)(t);case"logarithmic":return(0,Re.regressionLog)().x(r).y(n)(t);case"quadratic":return(0,Re.regressionQuad)().x(r).y(n)(t);case"power":return(0,Re.regressionPow)().x(r).y(n)(t);case"polynomial":return(0,Re.regressionPoly)().x(r).y(n).order(e.order)(t);case"loess":throw new l.InternalError({message:"'loess' does not expose a 'predict' function"})}},hf=(e,t,r,n,a)=>{const i=[],o=[],s=Object.fromEntries(n.map(c=>[c,[]]));return{push:({x:c,y:u,groupObservation:d})=>{i.push(c),o.push(u);for(const p of n)s[p]?.push(d[p]??null)},build:()=>{const c={[e]:{type:t,values:i,valueFormat:a.getValueFormat(e)},[r]:{type:"numeric",values:o,valueFormat:a.getValueFormat(r)}};for(const u of n)c[u]={type:a.getType(u),values:s[u]??[],valueFormat:a.getValueFormat(u)};return new l.Dataset(c)}}},ff=(e,t)=>{const r={};for(const n of t)r[n]=e.getValues(n)[0]??null;return r},gf=class extends Ge{constructor(...e){super(...e),this.type="sum",this.computedVariables=new Set(["y"])}computeStat({data:e,mapping:t}){const r=l.extractVariableName(t.y);if(!l.isDefined(r))throw new l.UserInputError({code:"MISSING_STAT_VARIABLE",message:"'y' variable is required for 'sum' stat",context:{aesthetic:"y"},suggestion:"Map a numeric variable to 'y' when using the 'sum' stat."});const n=l.extractVariableName(t.x),a=[...new Set([...n===null?[]:[n],...Le(e,t)])];return{data:e.groupBy(...a).rollup({[l.STAT_VARIABLES.sum]:{variableName:r,aggregation:"sum"}}),mapping:{y:l.STAT_VARIABLES.sum}}}},yf=[new nf,new rf,new sf,new af,new gf],vf=class extends l.Registry{constructor(){super("stat");for(const e of yf)this.register(e.type,e)}};function bf({geoms:e,stats:t,transforms:r}){const n=new hr,a=new vf,i=new l.TransformRegistry;for(const o of e)n.register(o.type,o);for(const o of t)a.register(o.type,o);for(const o of r)i.register(o.transformType,o);return{geomRegistry:n,statRegistry:a,transformRegistry:i}}function _n(e){if("definition"in e)return e.definition;if(us(e)||ds(e)||ps(e))return e}function cs(e){const t=[],r=[],n=[];for(const a of e){const i=_n(a);i&&(us(i)?t.push(i):ds(i)?r.push(i):ps(i)&&n.push(i))}return{geoms:t,stats:r,transforms:n,warnings:[..._r("geom",t,a=>a.type),..._r("stat",r,a=>a.type),..._r("transform",n,a=>a.transformType),...Sf(t),...xf(t)]}}function Sf(e){const t=[];for(const r of e)r.spatialKind==="render-hit-test"&&(r.identityKey!=="x-group"&&r.identityKey!=="x-y"||t.push({code:"RENDER_HIT_TEST_IDENTITY",message:`The render-hit-test geom '${r.type}' uses the position-derived '${r.identityKey}' identity, which has no meaning for render-owned geometry; its hover lookup will be empty.`,context:{kind:"geom",requested:r.type},suggestion:"Declare 'identityKey' as a column the geom owns (`{ variable: '<column>' }`) or 'index', so a hit-test result resolves to an observation."}));return t}function xf(e){const t=[];for(const r of e)r.spatialKind!=="cells"||!r.supportedCoordTypes.includes("polar")||t.push({code:"SPATIAL_KIND_COORD_UNSUPPORTED",message:`The geom '${r.type}' declares polar support, but its 'cells' hit-test shape has no polar projection; its observations will not respond to hover under polar coords.`,context:{kind:"geom",requested:r.type},suggestion:"Drop 'polar' from 'supportedCoordTypes', or declare 'rects' as the spatial kind so a bandless polar layer hit-tests as an enclosure."});return t}function _r(e,t,r){const n=new Map;for(const i of t){const o=r(i),s=n.get(o);s?s.add(i):n.set(o,new Set([i]))}const a=[];for(const[i,o]of n)o.size<2||a.push({code:"DUPLICATE_REGISTERED_TYPE",message:`Multiple plugins register the ${e} '${i}' (${o.size} definitions); the last in the array wins.`,context:{kind:e,requested:i},suggestion:`Remove the duplicate ${e} plugin(s) named '${i}', or rename them so each registers a distinct ${e}.`});return a}var us=e=>e instanceof ye,ds=e=>e instanceof Ge,ps=e=>"transformType"in e&&typeof e.apply=="function",Af=class{constructor(e){this.registry=e}adjust(e,t){return this.registry.get(e).adjust(t)}},fr=class{},If=class extends fr{constructor(...e){super(...e),this.type="dodge"}adjust({data:e,mapping:t}){if(!l.extractVariableName(t.x))return{data:e,mapping:{}};const r=e.getValues(l.GROUP_VARIABLES.group,{type:"categorical",distinct:!0,skipNulls:!0});if(r.length===0)return{data:e,mapping:{}};const n=e.size(),a=e.getValues(l.GROUP_VARIABLES.group,{type:"categorical"}),i=Tf(e)??[-.7/2,.7/2],o=r.length>1?Wh:0,s=(0,se.scaleBand)().domain(r.map(String)).range(i).paddingInner(o).paddingOuter(0),c=s.bandwidth(),u=new Array(n).fill(null),d=new Array(n).fill(null);for(let p=0;p<n;p++){const h=a[p];if(!l.isDefined(h))continue;const m=s(String(h));l.isDefined(m)&&(u[p]=m,d[p]=m+c)}return{data:e.addVariable(l.POSITION_VARIABLES.xMin,"numeric",u).addVariable(l.POSITION_VARIABLES.xMax,"numeric",d),mapping:{}}}},Tf=e=>{const t=e.getConstant(l.POSITION_VARIABLES.xMin)?.value,r=e.getConstant(l.POSITION_VARIABLES.xMax)?.value;return typeof t!="number"||typeof r!="number"?null:[t,r]},ri=l.prefixInternalVariable("__ungrouped__"),ms=(e,t)=>{const r=l.extractVariableName(t.x),n=l.extractVariableName(t.y);if(!r||!n)return null;const a=e.getValues(l.GROUP_VARIABLES.group,{type:"categorical",distinct:!0,skipNulls:!0}),i=a.length===0,o=i?[ri]:a,s=e.getValues(r),c=e.getValues(n,{type:"numeric"}),u=e.getValues(l.GROUP_VARIABLES.group,{type:"categorical"}),d=e.size(),p=new Map;for(let h=0;h<d;h++){const m=l.getStableKey(s[h]??null),f=u[h],g=i?ri:f;if(!l.isDefined(g))continue;let v=p.get(m);v||(v=new Map,p.set(m,v));let y=v.get(g);y||(y=[],v.set(g,y)),y.push(h)}return{yValues:c,observationIndicesByXAndGroup:p,uniqueGroupKeys:o,observationCount:d}},hs=(e,t,r,n)=>{const a=new Array(n).fill(null);for(const[,i]of r){const o=[];let s=-1,c=1/0,u=-1/0,d=-1,p=1/0,h=-1/0;for(const m of i.values())for(const f of m){const g=e[f],v=t[f];!l.isDefined(g)||!l.isDefined(v)||(o.push(f),(g<c||g===c&&v>u)&&(s=f,c=g,u=v),(v>h||v===h&&g<p)&&(d=f,p=g,h=v))}for(const m of o)a[m]=Lf(m===s,m===d)}return a},Lf=(e,t)=>e&&t?"solo":e?"floor":t?"ceiling":"middle",Ef=class extends fr{constructor(...e){super(...e),this.type="fill"}adjust({data:e,mapping:t}){const r=ms(e,t);if(r===null)return{data:e,mapping:{}};const{yValues:n,observationIndicesByXAndGroup:a,uniqueGroupKeys:i,observationCount:o}=r,s=[...n],c=new Array(o).fill(0);for(const[,d]of a){let p=0,h=0;for(const g of i){const v=d.get(g);if(v!==void 0)for(const y of v){const b=n[y];b!=null&&(b>=0?p+=b:h-=b)}}let m=0,f=0;for(const g of i){const v=d.get(g);if(v!==void 0)for(const y of v){const b=n[y];if(b===void 0)continue;if(b===null){c[y]=null,s[y]=null;continue}const A=b>=0?p:h;if(A===0){c[y]=0,s[y]=0;continue}const T=b/A;b>=0?(c[y]=m,s[y]=m+=T):(s[y]=f,c[y]=f+=T)}}}const u=hs(c,s,a,o);return{data:e.addVariable(l.POSITION_VARIABLES.yMin,"numeric",c).addVariable(l.POSITION_VARIABLES.yMax,"numeric",s).addVariable(l.POSITION_VARIABLES.yRaw,"numeric",n).addVariable(l.STACK_VARIABLES.role,"categorical",u),mapping:{}}}},wf=class extends fr{constructor(...e){super(...e),this.type="identity"}adjust({data:e}){return{data:e,mapping:{}}}},Rf=class extends fr{constructor(...e){super(...e),this.type="stack"}adjust({data:e,mapping:t}){const r=ms(e,t);if(r===null)return{data:e,mapping:{}};const{yValues:n,observationIndicesByXAndGroup:a,uniqueGroupKeys:i,observationCount:o}=r,s=[...n],c=new Array(o).fill(0);for(const[,h]of a){let m=0,f=0;for(const g of i){const v=h.get(g);if(v!==void 0)for(const y of v){const b=n[y];if(b!==void 0){if(b===null){c[y]=null,s[y]=null;continue}b>=0?(c[y]=m,s[y]=m+=b):(s[y]=f,c[y]=f+=b)}}}}const u=hs(c,s,a,o);let d=e.addVariable(l.POSITION_VARIABLES.yMin,"numeric",c).addVariable(l.POSITION_VARIABLES.yMax,"numeric",s).addVariable(l.POSITION_VARIABLES.yRaw,"numeric",n).addVariable(l.STACK_VARIABLES.role,"categorical",u);const p=l.extractVariableName(t.y);return p!==null&&(d=d.addVariable(p,"numeric",s)),{data:d,mapping:{}}}},Cf=class extends l.Registry{constructor(){super("position"),this.register("identity",new wf),this.register("stack",new Rf),this.register("fill",new Ef),this.register("dodge",new If)}},Vf=class{map({data:e,layer:t,getPositionScale:r,geomRegistry:n}){let a=e;const i=n.get(t.geom);for(const o of i.positionRoles){if(o.role!=="scalar"||!l.isDefined(o.aes)||Ln(o.aes))continue;const s=l.extractVariableName(t.mapping[o.aes]);if(!l.isDefined(s)||!a.hasVariable(s))continue;const c=r(Wo(o.axis,t.yScaleType));if(!c)continue;const u=a.getValues(s,{type:"numeric"}).map(d=>l.isDefined(d)?c.map(d):null);a=a.addVariable(l.resolveScaledAestheticVariable(o.aes),"numeric",u)}return a}},Df=class{map({data:e,layer:t,getPositionScale:r}){const n=l.extractVariableName(t.mapping.x),a=r("x");if(!n||!a)return e;const i=e.getValues(n).map(o=>l.isDefined(o)?a.map(o):null);return e.addVariable(l.POSITION_VARIABLES.x,"numeric",i)}},_f=class{map({data:e,getPositionScale:t}){const r=t("x");if(!r||!e.hasVariable(l.POSITION_VARIABLES.xMin)||!e.hasVariable(l.POSITION_VARIABLES.xMax))return e;const n=r.bandwidth,a=l.isDefined(n)&&e.hasVariable(l.POSITION_VARIABLES.x)?Pf(e,r,n):Of(e,r);return e.addVariable(l.POSITION_VARIABLES.xMin,"numeric",a.min).addVariable(l.POSITION_VARIABLES.xMax,"numeric",a.max)}};function Pf(e,t,r){const n=e.getValues(l.POSITION_VARIABLES.x,{type:"numeric"}),a=e.getValues(l.POSITION_VARIABLES.xMin,{type:"numeric"}),i=e.getValues(l.POSITION_VARIABLES.xMax,{type:"numeric"}),o="reverse"in t.spec&&t.spec.reverse===!0,s=e.size(),c=fs(s);for(let u=0;u<s;u++){const d=n[u],p=a[u],h=i[u];!l.isDefined(d)||!l.isDefined(p)||!l.isDefined(h)||(c.min[u]=d+(o?-h:p)*r,c.max[u]=d+(o?-p:h)*r)}return c}function Of(e,t){const r=e.getValues(l.POSITION_VARIABLES.xMin,{type:"numeric"}),n=e.getValues(l.POSITION_VARIABLES.xMax,{type:"numeric"}),a=e.size(),i=fs(a);for(let o=0;o<a;o++){const s=r[o],c=n[o];!l.isDefined(s)||!l.isDefined(c)||(i.min[o]=t.map(s),i.max[o]=t.map(c))}return i}function fs(e){return{min:new Array(e).fill(null),max:new Array(e).fill(null)}}var Mf=class{map({data:e,layer:t,getPositionScale:r}){const n=l.extractVariableName(t.mapping.y),a=r(Te(t.yScaleType));if(!n||!a)return e;const i=e.getValues(n).map(o=>l.isDefined(o)?a.map(o):null);return e.addVariable(l.POSITION_VARIABLES.y,"numeric",i)}},kf=class{map({data:e,layer:t,getPositionScale:r}){const n=r(Te(t.yScaleType));if(!n||!e.hasVariable(l.POSITION_VARIABLES.yMin)||!e.hasVariable(l.POSITION_VARIABLES.yMax))return e;const a=n.bandwidth,i=l.isDefined(a)&&e.hasVariable(l.POSITION_VARIABLES.y)?Nf(e,n,a):Bf(e,n);return e.addVariable(l.POSITION_VARIABLES.yMin,"numeric",i.min).addVariable(l.POSITION_VARIABLES.yMax,"numeric",i.max)}};function Nf(e,t,r){const n=e.getValues(l.POSITION_VARIABLES.y,{type:"numeric"}),a=e.getValues(l.POSITION_VARIABLES.yMin,{type:"numeric"}),i=e.getValues(l.POSITION_VARIABLES.yMax,{type:"numeric"}),o="reverse"in t.spec&&t.spec.reverse===!0,s=e.size(),c=gs(s);for(let u=0;u<s;u++){const d=n[u],p=a[u],h=i[u];!l.isDefined(d)||!l.isDefined(p)||!l.isDefined(h)||(c.min[u]=d+(o?-h:p)*r,c.max[u]=d+(o?-p:h)*r)}return c}function Bf(e,t){const r=e.getValues(l.POSITION_VARIABLES.yMin,{type:"numeric"}),n=e.getValues(l.POSITION_VARIABLES.yMax,{type:"numeric"}),a=e.size(),i=gs(a);for(let o=0;o<a;o++){const s=r[o],c=n[o];!l.isDefined(s)||!l.isDefined(c)||(i.min[o]=t.map(s),i.max[o]=t.map(c))}return i}function gs(e){return{min:new Array(e).fill(null),max:new Array(e).fill(null)}}var Ff=[new Df,new Mf,new _f,new kf,new Vf];function $f(e,t){const r=e[t];return r?.kind==="position"?r:null}var Gf=class extends Fe{constructor(e,t=Ff){super(),this.container=e,this.mappers=t}dependencies(e){return[e.scales.x,e.scales.y,e.scales.ySecondary]}compileLayer(e,t){const r=a=>$f(t.scales,a);let n=e.data;for(const a of this.mappers)n=a.map({data:n,layer:e,getPositionScale:r,geomRegistry:this.container.geomRegistry});return{...e,data:n}}},Uf=class extends l.Stage{constructor(e,t){super(),this.container=e,this.registry=t}dependencies(e){return[e.layers,e.scales,e.colorScheme]}run(e){this.validateScaleTypeCompatibility(e);const t=new Map;for(const i of e.scales)t.set(i.scaledAesthetic,i);const r=this.collectValues(e.layers,t),n={colorScheme:e.colorScheme,hasTouchingGeoms:kh(this.container.geomRegistry,e.layers)},a={};for(const[i,o]of t){const s=r.get(i)??[];a[i]=this.registry.get(o.scaleType).compile(o,s,n)}return a}validateScaleTypeCompatibility(e){const t=[];for(const r of e.scales){const{compatibleDataTypes:n}=this.registry.get(r.scaleType),a=H(r.scaledAesthetic),i=e.layers.find(c=>l.isDefined(c.mapping[a]));if(!i)continue;const o=l.extractVariableName(i.mapping[a]);if(!l.isDefined(o)||!i.data.hasVariable(o)||i.data.size()===0)continue;const s=i.data.getType(o);if(n.includes(s)||t.push({code:"INCOMPATIBLE_TYPE",message:`Scale '${r.scaledAesthetic}' (${r.scaleType}) is incompatible with variable '${o}' (${s})`,context:{aesthetic:a,variableName:o,scaleType:r.scaleType,variableType:s}}),r.scaledAesthetic==="lineType"&&s!=="categorical"){const c=s==="temporal"?"Bucket the variable into categorical periods (e.g. quarter, year) first.":"Bin the variable into categorical buckets first.";t.push({code:"INCOMPATIBLE_TYPE",message:`Scale 'lineType' is discrete-only and cannot be mapped to ${s} variable '${o}'. ${c}`,context:{aesthetic:a,variableName:o,scaleType:r.scaleType,variableType:s},suggestion:c})}}rs(this.container.diagnostics,t)}collectValues(e,t){const r=new Map;for(const n of e){const a=this.resolveCustomPositionalAxes(n);for(const[i,o]of Object.entries(n.mapping)){if(!l.isDefined(o))continue;const s=i==="y"?Te(n.yScaleType):i,c=a.get(i)??(Ho(s)?s:void 0);if(!l.isDefined(c)||!t.has(c))continue;const u=t.get(c)?.scaleType,d=this.resolveVariables(i,o,n.data,u);this.collectFromVariables(n.data,d,c,r)}}return r}resolveCustomPositionalAxes(e){const t=new Map,r=this.container.geomRegistry.get(e.geom);for(const n of r.positionRoles)n.role!=="scalar"||!l.isDefined(n.aes)||Ln(n.aes)||t.set(n.aes,Wo(n.axis,e.yScaleType));return t}resolveVariables(e,t,r,n){if(e==="y"&&n!=="discrete"&&this.hasPositionAdjustedY(r))return[l.POSITION_VARIABLES.yMin,l.POSITION_VARIABLES.yMax];const a=l.extractVariableName(t);return!a||!r.hasVariable(a)?[]:[a]}hasPositionAdjustedY(e){return e.hasVariable(l.POSITION_VARIABLES.yMin)&&e.hasVariable(l.POSITION_VARIABLES.yMax)}collectFromVariables(e,t,r,n){if(t.length===0)return;let a=[];for(const o of t)a=a.concat(e.getValues(o));const i=n.get(r);n.set(r,i?i.concat(a):a)}},Hf=["rgb","lab","hcl","hsl"],Wf=["viridis","magma","inferno","plasma","cividis","turbo","Blues","Greens","Greys","Oranges","Purples","Reds"],ys=["RdBu","BrBG","PuOr","Spectral"],vs={"red-blue":"RdBu","brown-teal":"BrBG","purple-orange":"PuOr",spectral:"Spectral"},Kf=new Set(ys.map(e=>e.toLowerCase()));function bs(e){const t=e.toLowerCase(),r=vs[t];return r?r.toLowerCase():t}function zf(e){return Kf.has(bs(e))}var Yf={rgb:je.interpolateRgb,lab:je.interpolateLab,hcl:je.interpolateHcl,hsl:je.interpolateHsl},qf={viridis:$.interpolateViridis,magma:$.interpolateMagma,inferno:$.interpolateInferno,plasma:$.interpolatePlasma,cividis:$.interpolateCividis,turbo:$.interpolateTurbo,blues:$.interpolateBlues,greens:$.interpolateGreens,greys:$.interpolateGreys,oranges:$.interpolateOranges,purples:$.interpolatePurples,reds:$.interpolateReds,rdbu:$.interpolateRdBu,brbg:$.interpolateBrBG,puor:$.interpolatePuOr,spectral:$.interpolateSpectral};function Pn(e){const t=Xf(e);return e.reverse?r=>t(1-r):t}function jf(e={},t=2){const r=Pn({range:e.range??null,scheme:e.scheme??null,interpolate:e.interpolate??l.CONTINUOUS_SCALE_DEFAULTS.interpolate,reverse:e.reverse??!1});return t<2?t===1?[r(0)]:[]:Array.from({length:t},(n,a)=>r(a/(t-1)))}function Xf(e){const t=Yf[e.interpolate];if(e.range&&e.range.length>=2)return(0,je.piecewise)(t,e.range.map(r=>String(r)));if(e.scheme){const r=qf[bs(e.scheme)];if(r)return r}return(0,je.piecewise)(t,[...l.DEFAULT_SEQUENTIAL_RAMP])}var St=class{createPositionScale(e,t){return{kind:"position",aesthetic:H(e.scaledAesthetic),spec:e,...t}}createVisualScale(e,t){return{kind:"visual",aesthetic:H(e.scaledAesthetic),spec:e,...t}}},Zf=class extends St{constructor(e){super(),this.container=e,this.compatibleDataTypes=["numeric"]}compile(e,t){if(e.scaleType!=="continuous")throw new l.InternalError({message:"ContinuousScale.compile received non-continuous spec"});const r=$e(e.scaledAesthetic),n=e.scaledAesthetic==="color",a=this.computeDataDomain(t,e);return n?this.buildColorScale(a,e):r?this.buildPositionScale(a,e):this.buildVisualScale(a,e)}computeDataDomain(e,t){let r=1/0,n=-1/0;for(const a of e)typeof a=="number"&&(a<r&&(r=a),a>n&&(n=a));return r===1/0?[0,0]:(t.zero&&(r>0&&(r=0),n<0&&(n=0)),[r,n])}createD3Scale(e,t,r){let n=[r.domainMin??e[0],r.domainMax??e[1]];const a=r.transform==="log"&&Jf(n);r.transform==="log"&&!a&&this.container.diagnostics.addWarning({code:"INCOMPATIBLE_SCALE_DOMAIN",message:`Log scale on '${r.scaledAesthetic}' needs a strictly positive or negative domain, but the domain is [${e[0]}, ${e[1]}] — rendering a linear scale instead.`,context:{aesthetic:H(r.scaledAesthetic),scaleType:r.scaleType,actual:e},suggestion:"Filter out non-positive values or set a positive domainMin so the log scale can apply."});const i=a?(0,se.scaleLog)():r.transform==="sqrt"?(0,se.scaleSqrt)():(0,se.scaleLinear)();r.nice&&!a&&(n=i.copy().domain(n).nice().domain());const o=r.domainMin??n[0],s=r.domainMax??n[1];return i.domain([o,s]).range(t).clamp(r.clamp)}buildPositionScale(e,t){const r=t.reverse?[1,0]:[0,1],n=this.createD3Scale(e,r,t);return this.createPositionScale(t,{map:n,domain:n.domain(),bandwidth:null,generateTicks:a=>a&&"count"in a?n.ticks(a.count):n.ticks()})}buildVisualScale(e,t){const r=Qf(t.range)??[0,1],n=t.reverse?[r[1],r[0]]:r,a=this.createD3Scale(e,n,t);return this.createVisualScale(t,{map:a,domain:a.domain(),generateTicks:i=>i&&"count"in i?a.ticks(i.count):a.ticks()})}buildColorScale(e,t){const r=Pn(t),n=t.domainMid;if(n!==null){const[a,i]=this.resolveColorDomain(e,t);if(n>a&&n<i){const[o,s]=this.symmetrizeDomain([a,i],t,n);return this.buildDivergingColorScale([o,n,s],t,r)}}return this.buildSequentialColorScale(e,t,r)}buildSequentialColorScale(e,t,r){const n=this.createD3Scale(e,[0,1],t),a=i=>typeof i!="number"||!Number.isFinite(i)?null:r(n(i));return this.createVisualScale(t,{map:a,domain:n.domain(),generateTicks:i=>i&&"count"in i?n.ticks(i.count):n.ticks()})}buildDivergingColorScale(e,t,r){const n=(0,se.scaleLinear)().domain(e).range([0,.5,1]).clamp(t.clamp),a=i=>typeof i!="number"||!Number.isFinite(i)?null:r(n(i));return this.createVisualScale(t,{map:a,domain:e,generateTicks:i=>i&&"count"in i?n.ticks(i.count):n.ticks()})}resolveColorDomain(e,t){let r=t.domainMin??e[0],n=t.domainMax??e[1];if(t.nice){const a=(0,se.scaleLinear)().domain([r,n]).nice().domain();r=t.domainMin??a[0],n=t.domainMax??a[1]}return[r,n]}symmetrizeDomain(e,t,r){if(!t.symmetric)return e;const n=Math.max(Math.abs(e[0]-r),Math.abs(e[1]-r));return[t.domainMin??r-n,t.domainMax??r+n]}},Jf=e=>{const[t,r]=e;return t>0&&r>0||t<0&&r<0};function Qf(e){if(!e)return null;const[t,r]=e;return typeof t=="number"&&typeof r=="number"?[t,r]:null}var eg=class extends St{constructor(...e){super(...e),this.compatibleDataTypes=["temporal"]}compile(e,t){if(e.scaleType!=="datetime")throw new l.InternalError({message:"DatetimeScale.compile received non-datetime spec"});const r=$e(e.scaledAesthetic),n=this.computeDataDomain(t);if(!r)throw new l.UserInputError({code:"INCOMPATIBLE_TYPE",message:"Datetime scale is not supported for non-position aesthetics",context:{aesthetic:e.scaledAesthetic},suggestion:"Use a continuous or discrete scale for non-position aesthetics (color, size, alpha, strokeWidth)."});return this.buildScale(n,e,this.collectInputDates(t))}collectInputDates(e){const t=new Set,r=[];for(const n of e){if(!(n instanceof Date))continue;const a=n.getTime();t.has(a)||(t.add(a),r.push(n))}return r.sort((n,a)=>n.getTime()-a.getTime()),r}computeDataDomain(e){let t=1/0,r=-1/0;for(const n of e){if(!(n instanceof Date))continue;const a=n.getTime();a<t&&(t=a),a>r&&(r=a)}return t===1/0?[]:[new Date(t),new Date(r)]}createD3Scale(e,t,r){const n=tg(e)?e:[],a=(0,se.scaleUtc)().domain(n).range(t).clamp(r.clamp);if(r.nice&&a.nice(),l.isDefined(r.domainMin)||l.isDefined(r.domainMax)){const[i,o]=a.domain();i!==void 0&&o!==void 0&&a.domain([r.domainMin??i,r.domainMax??o])}return a}buildScale(e,t,r){const n=t.reverse?[1,0]:[0,1],a=this.createD3Scale(e,n,t),[i,o]=a.domain(),s=i&&o?r.filter(c=>c>=i&&c<=o):[];return this.createPositionScale(t,{map:a,domain:a.domain(),bandwidth:null,generateTicks:c=>c&&"atInputs"in c?s:c&&"interval"in c?i&&o?Am(i,o,c.interval):[]:a.ticks(c?.count)})}},tg=e=>e.length===2&&l.isStrictTemporalDataValue(e[0])&&l.isStrictTemporalDataValue(e[1]),rg=class extends St{constructor(...e){super(...e),this.compatibleDataTypes=["categorical","numeric","temporal"]}compile(e,t){if(e.scaleType!=="discrete")throw new l.InternalError({message:"DiscreteScale.compile received non-discrete spec"});const r=$e(e.scaledAesthetic),n=Go(t,e);return r?this.buildPositionScale(n,e):this.buildVisualScale(n,e)}buildPositionScale(e,t){const r=e.map(String),n=t.padding??l.DISCRETE_SCALE_DEFAULTS.padding,a=t.reverse?[1,0]:[0,1],i=(0,se.scaleBand)().domain(r).range(a).paddingInner(n).paddingOuter(n/2),o=i.bandwidth()/2;return this.createPositionScale(t,{map:s=>(i(String(s))??NaN)+o,domain:e,bandwidth:i.bandwidth(),generateTicks:()=>[...e]})}buildVisualScale(e,t){const r=e.map(String),n=t.range&&t.range.length>0?(0,se.scaleOrdinal)().domain(r).range(t.range).unknown(t.range[0]):null;return this.createVisualScale(t,{map:a=>{const i=String(a);return n?n(i):i},domain:e,generateTicks:()=>e})}},ng=class extends St{constructor(...e){super(...e),this.compatibleDataTypes=["numeric","categorical","temporal"]}compile(e){if(e.scaleType!=="identity")throw new l.InternalError({message:"IdentityScale.compile received non-identity spec"});return{kind:"identity",aesthetic:H(e.scaledAesthetic),spec:e,map:t=>t,domain:[],generateTicks:()=>[]}}},ag=class extends St{constructor(...e){super(...e),this.compatibleDataTypes=["categorical","temporal","numeric"]}compile(e,t,r){if(e.scaleType!=="palette")throw new l.InternalError({message:"PaletteScale.compile received non-palette spec"});const n=$o(t),a=l.resolvePaletteRange(e.palette,{groupCount:n.length,...r}),i=l.applyOverrides(a.length>0?a:[...l.DEFAULT_COLOR_PALETTE],e.overrides),o=(0,se.scaleOrdinal)().domain(n.map(String)).range(i).unknown(i[0]);return this.createVisualScale(e,{map:s=>o(String(s)),domain:n,generateTicks:()=>n})}},ig=class extends l.Registry{constructor(e){super("scale"),this.register("continuous",new Zf(e)),this.register("discrete",new rg),this.register("datetime",new eg),this.register("identity",new ng),this.register("palette",new ag)}},Ss={x:"position",y:"position",ySecondary:"position",color:"color-range",size:"continuous-range",alpha:"continuous-range",strokeWidth:"continuous-range",lineType:"discrete-only"},og={numeric:{position:"continuous","color-range":"continuous","continuous-range":"continuous","discrete-only":"discrete"},categorical:{position:"discrete","color-range":"palette","continuous-range":"discrete","discrete-only":"discrete"},temporal:{position:"datetime","color-range":"continuous","continuous-range":"continuous","discrete-only":"discrete"}};function On(e,t){const{data:r,layers:n,mapping:a,customPalettes:i}=t;return{container:e,data:r,layers:n,mapping:a,customPalettes:i,demands:qr(e.geomRegistry,n)}}function gr(e,t){switch(t.scaleType){case"inferred":return{...gr(e,ug(e,t)),inferredFrom:t};case"continuous":{const r=Ss[t.scaledAesthetic],n=r==="continuous-range"&&t.scaledAesthetic in l.NON_POSITION_RANGE_DEFAULTS?l.NON_POSITION_RANGE_DEFAULTS[t.scaledAesthetic]:null,a=t.scaledAesthetic==="size"&&r==="continuous-range"?"sqrt":l.CONTINUOUS_SCALE_DEFAULTS.transform;return{type:t.type,scaledAesthetic:t.scaledAesthetic,scaleType:t.scaleType,transform:t.transform??a,reverse:t.reverse??l.CONTINUOUS_SCALE_DEFAULTS.reverse,nice:t.nice??l.CONTINUOUS_SCALE_DEFAULTS.nice,zero:t.zero??l.CONTINUOUS_SCALE_DEFAULTS.zero,clamp:t.clamp??r!=="position",domainMin:t.domainMin??l.CONTINUOUS_SCALE_DEFAULTS.domainMin,domainMax:t.domainMax??l.CONTINUOUS_SCALE_DEFAULTS.domainMax,range:t.range??n??null,scheme:dg(e.container,t),interpolate:t.interpolate??l.CONTINUOUS_SCALE_DEFAULTS.interpolate,domainMid:t.domainMid??l.CONTINUOUS_SCALE_DEFAULTS.domainMid,symmetric:t.symmetric??l.isDefined(t.domainMid)}}case"datetime":return{type:t.type,scaledAesthetic:t.scaledAesthetic,scaleType:t.scaleType,domainMin:t.domainMin??l.DATETIME_SCALE_DEFAULTS.domainMin,domainMax:t.domainMax??l.DATETIME_SCALE_DEFAULTS.domainMax,nice:t.nice??l.DATETIME_SCALE_DEFAULTS.nice,reverse:t.reverse??l.DATETIME_SCALE_DEFAULTS.reverse,clamp:t.clamp??!1};case"discrete":return Xr(t,e.demands);case"palette":return{type:t.type,scaledAesthetic:t.scaledAesthetic,scaleType:t.scaleType,palette:l.resolvePaletteConfig(e.container,t.palette,e.customPalettes),overrides:l.resolvePaletteOverrides(e.container,t.overrides,t.palette,e.customPalettes)};case"identity":return{type:t.type,scaledAesthetic:t.scaledAesthetic,scaleType:t.scaleType};default:throw new l.InternalError({message:`Unknown scale type: ${t.scaleType}`})}}function sg(e,t){const{scales:r,layers:n,coords:a}=t,i=On(e,t),o=hg(mg(r,n),i.demands),s=new Map;for(const u of o)s.set(u.scaledAesthetic,u);const c=[...s.values()].map(u=>{const d=lg(i,u);return gr(i,d)});return a.coordType==="polar"?c.map(Mn):c}function Xr(e,t){const r=t?.bandPadding[e.scaledAesthetic];return{type:e.type,scaledAesthetic:e.scaledAesthetic,scaleType:e.scaleType,range:e.range??l.DISCRETE_SCALE_DEFAULTS.range,domain:e.domain??l.DISCRETE_SCALE_DEFAULTS.domain,padding:e.padding??r??l.DISCRETE_SCALE_DEFAULTS.padding,reverse:e.reverse??cg(e.scaledAesthetic,t)}}var Mn=e=>e.scaleType==="discrete"?{...e,padding:0}:e;function lg(e,t){return t.scaleType==="inferred"||t.scaleType==="discrete"||!e.demands.bandedAxes.includes(t.scaledAesthetic)?t:(e.container.diagnostics.addWarning({code:"UNSUPPORTED_SCALE_TYPE",message:`A geom drawn on '${t.scaledAesthetic}' needs it to be a band scale, but the spec declares a '${t.scaleType}' one; the band wins.`,context:{aesthetic:H(t.scaledAesthetic),scaleType:t.scaleType},suggestion:`Declare '${t.scaledAesthetic}' as a discrete scale, or omit it and let the geom's band be inferred.`}),l.discrete(t.scaledAesthetic,{..."reverse"in t&&t.reverse!==void 0&&{reverse:t.reverse}}))}function cg(e,t){return e===t?.discreteCrossAxis?!0:l.DISCRETE_SCALE_DEFAULTS.reverse}function ug({data:e,layers:t,mapping:r,demands:n},a){const i=H(a.scaledAesthetic),o=a.scaledAesthetic==="ySecondary"?pg(t,r):r[i];if(a.scaledAesthetic===n.discreteAxis||a.scaledAesthetic===n.discreteCrossAxis)return l.discrete(a.scaledAesthetic,a.options);const s=n.zeroAxes[a.scaledAesthetic];if(s!==void 0){const p=a.options;return l.continuous(a.scaledAesthetic,{...p,zero:!0,...!s.nice&&{nice:!1}})}const c=l.extractVariableName(o);if(!l.isDefined(c)||!e.hasVariable(c)||e.size()===0)return l.continuous(a.scaledAesthetic,a.options);const u=e.getType(c),d=Ss[a.scaledAesthetic];switch(og[u][d]){case"discrete":return l.discrete(a.scaledAesthetic,a.options);case"palette":return l.palette(a.scaledAesthetic);case"datetime":return l.datetime(a.scaledAesthetic,a.options);case"continuous":return l.continuous(a.scaledAesthetic,a.options);default:return l.identity(a.scaledAesthetic)}}function dg(e,t){const r=t.scheme??l.CONTINUOUS_SCALE_DEFAULTS.scheme;return r===null?null:l.isDefined(t.range)?(e.diagnostics.addWarning({code:"CONFLICTING_COLOR_RAMP",message:`The color scale sets both a 'scheme' ('${r}') and an explicit 'range'; the range wins and the scheme is ignored.`,context:{aesthetic:H(t.scaledAesthetic),scaleType:t.scaleType},suggestion:"Set either a scheme or a range, not both."}),null):(!l.isDefined(t.domainMid)&&zf(r)&&e.diagnostics.addWarning({code:"DIVERGING_SCHEME_WITHOUT_MIDPOINT",message:`The color scale uses a diverging scheme ('${r}') without 'domainMid', so its neutral colour lands at the data midpoint rather than a meaningful centre.`,context:{aesthetic:H(t.scaledAesthetic),scaleType:t.scaleType,actual:r},suggestion:"Set 'domainMid' (e.g. 0) to centre the neutral colour."}),r)}function pg(e,t){const r=e.find(n=>n.yScaleType==="secondary");return r?r.mapping.y??t.y:t.y}function mg(e,t){return!t.some(r=>r.yScaleType==="secondary")||e.some(r=>r.scaledAesthetic==="ySecondary")?e:[...e,l.inferred("ySecondary")]}function hg(e,t){return e.some(r=>r.scaledAesthetic==="color")?e:[...e,t.inferredColor?l.inferred("color"):l.palette("color")]}var fg={top:{x:0,y:-1},bottom:{x:0,y:1},left:{x:-1,y:0},right:{x:1,y:0},"top-left":{x:-1,y:-1},"top-right":{x:1,y:-1},"bottom-left":{x:-1,y:1},"bottom-right":{x:1,y:1}},gg=(e,t,r)=>{const n=yg(e,t),a=Sg(n);return{differenceArrows:(n.differenceArrows??[]).map(i=>Ag(e,i,r)).filter(l.isDefined),shapes:(n.shapes??[]).map(i=>Eg(e,i,a)).filter(l.isDefined),arrows:(n.arrows??[]).map(i=>Cg(e,i,r,a)).filter(l.isDefined),textAnnotations:(n.textAnnotations??[]).map(i=>xg(e,i,r,a)).filter(l.isDefined),stickers:(n.stickers??[]).map(i=>Ig(e,i,r,a)).filter(l.isDefined),images:(n.images??[]).map(i=>wg(e,i,a)).filter(l.isDefined),pinnedNumbers:(n.pinnedNumbers??[]).map(i=>Tg(e,i,r)).filter(l.isDefined),comments:(n.comments??[]).map(i=>Lg(e,i,r)).filter(l.isDefined)}},yg=(e,t)=>{if(t===void 0)return{};if(!vg(t))return t;const r=new Set,n=a=>a.id===void 0?a:r.has(a.id)?(e.diagnostics.addWarning({code:"ANNOTATION_DUPLICATE_ID",message:`More than one annotation declares id "${a.id}" — giving this one a generated id, so references to "${a.id}" point at the first.`,context:{annotationId:a.id},suggestion:"Give each annotation its own id."}),{...a,id:W()}):(r.add(a.id),a);return{differenceArrows:t.differenceArrows?.map(a=>n(a)),shapes:t.shapes?.map(a=>n(a)),arrows:t.arrows?.map(a=>n(a)),textAnnotations:t.textAnnotations?.map(a=>n(a)),images:t.images?.map(a=>n(a)),stickers:t.stickers?.map(a=>n(a)),pinnedNumbers:t.pinnedNumbers?.map(a=>n(a)),comments:t.comments?.map(a=>n(a))}},vg=e=>{const t=new Set;for(const r of bg(e))if(r.id!==void 0){if(t.has(r.id))return!0;t.add(r.id)}return!1},bg=e=>[...e.differenceArrows??[],...e.shapes??[],...e.arrows??[],...e.textAnnotations??[],...e.images??[],...e.stickers??[],...e.pinnedNumbers??[],...e.comments??[]],Sg=e=>{const t=new Set,r=[e.differenceArrows,e.shapes,e.arrows,e.textAnnotations,e.images,e.stickers,e.pinnedNumbers,e.comments];for(const n of r)for(const a of n??[])a.id!==void 0&&t.add(a.id);return t},kn=(e,t,r,n)=>{if(r.has(t))return!0;const a=n===void 0?"An annotation":`Annotation "${n}"`;return e.diagnostics.addWarning({code:"ANNOTATION_REF_NOT_FOUND",message:`${a} references id "${t}" but no annotation declares that id — dropping this annotation.`,context:{ref:t,...n!==void 0?{annotationId:n}:{}},suggestion:"Reference the explicit id of another annotation in the same spec, or set an id on the target."}),!1},xg=(e,t,r,n)=>{const a=Qt(e,t.at,r,n,t.id);return a===null?null:{id:t.id??W(),content:t.content,at:a,width:t.width,align:t.align??l.TEXT_ANNOTATION_DEFAULTS.align}},Ag=(e,t,r)=>{const n=pt(e,t.start,r),a=pt(e,t.end,r);return n===null||a===null?null:{id:t.id??W(),start:n,end:a,label:t.label,labelCrossPosition:t.labelCrossPosition??l.DIFFERENCE_ARROW_DEFAULTS.labelCrossPosition}},pt=(e,t,r)=>{const n=t.align!==void 0?{align:t.align}:{};return t.layerId===void 0?{anchorValue:t.anchorValue,groupValue:t.groupValue,crossValue:t.crossValue,...n}:r.some(a=>a.id===t.layerId)?{layerId:t.layerId,anchorValue:t.anchorValue,groupValue:t.groupValue,crossValue:t.crossValue,...n}:(e.diagnostics.addWarning({code:"UNKNOWN_LAYER_ID",message:`Annotation references layerId "${t.layerId}", which no layer carries — dropping this annotation.`,context:{layerId:t.layerId,available:r.map(a=>a.id)},suggestion:"Reference an existing layer id, or omit layerId to anchor against the data directly."}),null)},Qt=(e,t,r,n,a)=>{if(t.anchorType==="annotation")return kn(e,t.ref,n,a)?t:null;if(t.anchorType==="panel"||t.anchorType==="axis"||t.anchorType==="selection")return t;const i=pt(e,t,r);return i===null?null:{anchorType:"observation",...i,...t.offset!==void 0?{offset:t.offset}:{}}},Ig=(e,t,r,n)=>{const a=Qt(e,t.at,r,n,t.id);return a===null?null:{id:t.id??W(),at:a,sticker:t.sticker}},Tg=(e,t,r)=>{const n=pt(e,t.at,r);return n===null?null:{id:t.id??W(),at:n}},Lg=(e,t,r)=>{const n=pt(e,t.at,r);return n===null?null:{id:t.id??W(),at:n,content:t.content}},Eg=(e,t,r)=>t.region.anchorType==="annotation"&&!kn(e,t.region.ref,r,t.id)?null:{id:t.id??W(),kind:t.kind??l.SHAPE_DEFAULTS.kind,zOrder:t.zOrder??l.SHAPE_DEFAULTS.zOrder,region:Rg(t.region)},wg=(e,t,r)=>t.region.anchorType==="annotation"&&!kn(e,t.region.ref,r,t.id)?null:{id:t.id??W(),src:t.src,zOrder:t.zOrder??l.IMAGE_ANNOTATION_DEFAULTS.zOrder,region:t.region,fit:t.fit??l.IMAGE_ANNOTATION_DEFAULTS.fit},Rg=e=>e.anchorType!=="selection"||e.padding!==void 0?e:{...e,padding:l.SELECTION_PADDING_DEFAULT},ni=e=>{if(e.anchorType==="panel"||e.anchorType==="axis"||e.offset!==void 0||e.align===void 0)return e;const t=fg[e.align];return t===void 0?e:{...e,offset:{x:t.x*4,y:t.y*4,unit:"px"}}},Cg=(e,t,r,n)=>{const a=Qt(e,t.start,r,n,t.id),i=Qt(e,t.end,r,n,t.id);return a===null||i===null?null:{id:t.id??W(),start:ni(a),end:ni(i),startArrowheadStyle:t.startArrowheadStyle??l.ARROW_DEFAULTS.startArrowheadStyle,endArrowheadStyle:t.endArrowheadStyle??l.ARROW_DEFAULTS.endArrowheadStyle}},Vg={parsingLocale:"en-US",legend:{position:"auto",display:"auto",align:"auto"},axes:{x:{isVisible:!0,label:null,position:"bottom",grid:{isVisible:null},ticks:{isVisible:!0,mode:"auto"}},y:{isVisible:!0,label:null,position:"right",grid:{isVisible:null},ticks:{isVisible:!1,mode:"auto"}}},panel:{overflow:{dataLabels:{x:"inside",y:"inside"},differenceArrows:{x:"outside",y:"outside"}}},headline:{show:"none",compareWith:"none",size:"auto",position:"above"},numberFormat:{decimals:"auto",abbreviation:"auto"},content:{title:null,isTitleVisible:!0,subtitle:null,isSubtitleVisible:!0,caption:null,isCaptionVisible:!1,source:null,isSourceVisible:!1,brandMark:{enabled:!1,placement:"footer",variant:"full"},isBrandMarkVisible:!1}};function Dg(e){const t=(0,at.merge)({},Vg,e);return t.content=_g(t.content,e?.content),t}var _g=(e,t)=>{const r=t?.brandMark?.enabled??t?.isBrandMarkVisible??e.brandMark.enabled,n={...e.brandMark,enabled:r};return{...e,brandMark:n,isBrandMarkVisible:r}},Pg={xLimits:null,yLimits:null},Kt={theta:"x",startAngle:0,innerRadius:0};function Zr(e){const t=e??{type:"coord",coordType:"cartesian"},r=(0,jt.default)({},Pg,t.params??{});switch(t.coordType){case"cartesian":case"flip":return{...t,params:r};case"polar":return{...t,params:{...r,theta:t.params?.theta??Kt.theta,startAngle:t.params?.startAngle??Kt.startAngle,innerRadius:(0,Je.default)(t.params?.innerRadius??Kt.innerRadius,0,1)}}}}function Og(e,t,r){const n=[];for(const a of t){if(a.layerId!==void 0&&!r.some(i=>i.id===a.layerId)){e.diagnostics.addWarning({code:"UNKNOWN_LAYER_ID",message:`Highlight references layerId "${a.layerId}", which no layer carries — dropping this highlight.`,context:{layerId:a.layerId,available:r.map(i=>i.id)},suggestion:"Reference an existing layer id, or omit layerId to apply the highlight across all layers."});continue}n.push({type:"highlight",id:a.id??W(),predicate:a.predicate,scope:a.scope??"data-point",...a.layerId!==void 0?{layerId:a.layerId}:{}})}return n}var Mg=class{constructor(){this.diagnostics=[],this.persistent=[]}addWarning(e,t={}){const r={...e,severity:"warning",kind:"user-input"};t.persistent?this.persistent.push(r):this.diagnostics.push(r)}addError(e){this.diagnostics.push({...e,severity:"error",kind:"user-input"})}reset(){this.diagnostics=[]}drain(){const e=this.persistent.length===0?this.diagnostics:[...this.persistent,...this.diagnostics];if(e.length===0)return{errors:[],warnings:[]};const t=ai(e.filter(n=>n.severity==="error")),r=ai(e.filter(n=>n.severity==="warning"));return this.diagnostics=[],{errors:t,warnings:r}}},kg=class{constructor(e,t){this.sink=e,this.baseContext=t}addWarning(e,t){this.sink.addWarning(this.stampBaseContext(e),t)}addError(e){this.sink.addError(this.stampBaseContext(e))}stampBaseContext(e){const t=e.context??{};return{...e,context:{...t,...this.baseContext}}}};function ai(e){const t=new Set;return e.filter(r=>{const n=JSON.stringify(r);return t.has(n)?!1:(t.add(n),!0)})}var Ng={showDataLabels:!1,format:"absolute",showStackTotals:!1,showCategoryLabels:!1,labelSource:{variable:l.POSITION_VARIABLES.yRaw},position:"auto",justify:"end",align:"center",offset:4,categoryPosition:"inside",categoryJustify:"start",categoryAlign:"center",categoryOffset:4};function xs(e,t){const r=e??t,n=typeof r=="string"?r:r.type;if(n==="smooth"){const a=typeof r=="string"?void 0:r;return{type:"smooth",method:a?.method??"linear",order:a?.order??3,bandwidth:a?.bandwidth??.3}}return{type:n}}function Ue(e,t,r,n,a,i){const o=a!==void 0&&i!==void 0?new kg(a,{layerIndex:i}):a,s=e.get(n.geom),c=n.position??s.defaultPosition,u=$g({dataLabels:Ug(e,t,n,c,r),geom:s,position:c,coordType:r,diagnostics:o});return Fg({diagnostics:o,coordType:r,geom:s,position:c,dataLabels:u}),{id:n.id??W(),type:n.type,geom:n.geom,mapping:n.mapping??{},stat:xs(n.stat,"identity"),position:c,yScaleType:n.yScaleType??"primary",params:s.resolveParams({params:n.params,diagnostics:o}),transforms:n.transforms??[],interactive:n.interactive??s.defaultInteractive,dataLabels:u}}function Bg(e,t,r,n,a){const i=n.map((o,s)=>Ue(e,t,r,o,a,s));return Is(e,i)}var As=(e,t,r,n)=>n.label!==void 0?n.label:Vo({geom:e.get(t),position:r,mapping:n,purpose:"label"}),Is=(e,t)=>{const r=new Set;for(const n of t)n.position==="fill"&&r.add(n.yScaleType);return r.size===0?t:Be(t,n=>{if(!r.has(n.yScaleType)||!e.has(n.geom)||!e.get(n.geom).positionRoles.some(o=>o.axis==="y"&&o.role==="scalar"))return n;const a=l.extractConstantValue(n.mapping.y);if(!l.isStrictNumericDataValue(a))return n;const i=(0,at.clamp)(a,0,1);return i===a?n:{...n,mapping:{...n.mapping,y:{value:i}}}})},Fg=({diagnostics:e,coordType:t,geom:r,position:n,dataLabels:a})=>{if(e===void 0)return;const i=r.type==="bar"&&t!=="polar";if(a.showDataLabels&&!r.dataLabelCoordTypes.includes(t)){e.addWarning({code:"DATA_LABELS_UNSUPPORTED",message:`Data labels are not supported for geom '${r.type}' under '${t}' coords; none will render.`,suggestion:"Turn off showDataLabels for this layer."});return}a.showDataLabels&&a.position==="outside"&&i&&U(n)&&e.addWarning({code:"DATA_LABEL_PLACEMENT_COERCED",message:"Stacked bar segments only place data labels inside; position 'outside' will render as 'inside'.",context:{expected:"inside",actual:"outside"},suggestion:"Use position 'inside' or 'auto', or enable showStackTotals for a label above the stack."}),a.showStackTotals&&!(i&&n==="stack")&&e.addWarning({code:"DATA_LABEL_SETTING_IGNORED",message:"showStackTotals only applies to stacked cartesian bars; it will be ignored.",suggestion:"Turn off showStackTotals, or use a bar geom with position 'stack'."})},$g=({dataLabels:e,geom:t,position:r,coordType:n,diagnostics:a})=>{const{justify:i,showDataLabels:o}=e;if(i!=="panel-start"&&i!=="panel-end")return e;const s=Gg(t,r,n);if(s===null)return e;const c=i==="panel-end"?"end":"start";return o&&a?.addWarning({code:"DATA_LABEL_PLACEMENT_COERCED",message:`${s}; justify '${i}' will render as '${c}'.`,context:{expected:c,actual:i},suggestion:`Use justify '${c}' for this layer.`}),{...e,justify:c}},Gg=(e,t,r)=>r==="polar"?"Panel-edge anchors do not apply under polar coords":e.type==="bar"&&U(t)?"Stacked bar segments would all pin their labels to the same panel edge":null,Ug=(e,t,r,n,a)=>{const i={...t,...r.mapping},o=As(e,r.geom,n,i),s=e.get(r.geom);return{...(0,at.merge)({},Ng,s.resolveDataLabelDefaults?.(n)??{},s.dataLabels?.[a]??{},r.dataLabels??{}),labelSource:o}},Hg=e=>{const t=new Set;e!==void 0&&Ts(e,t,new Set);const r={tokens:{},defaults:[],overrides:[]};for(const n of t)Object.assign(r.tokens,n.tokens),r.defaults.push(...n.defaults??[]),r.overrides.push(...n.overrides??[]);return r},Ts=(e,t,r)=>{if(!r.has(e)){r.add(e);for(const n of e.extends??[])Ts(n,t,r);t.delete(e),t.add(e),r.delete(e)}};function Wg(e,t,r){const n=Zr(t.coords),a=Bg(e.geomRegistry,t.mapping,n.coordType,t.layers,e.diagnostics),i=sg(e,{data:t.data,scales:t.scales,layers:a,mapping:t.mapping,coords:n,customPalettes:r}),o=Dg(t.config),s=Og(e,t.highlights,a),c=gg(e,t.annotations,a),u=Hg(t.styles);return{data:t.data,mapping:t.mapping,layers:a,scales:i,transforms:t.transforms,highlights:s,styles:u,annotations:c,coords:n,config:o}}var Ls=class{constructor(e){this.container=e}compile({input:e,dataset:t,customPalettes:r}){return Wg(this.container,{...e,data:t},r)}},Kg=class{constructor(e){this.registry=e}compute(e,t){return this.registry.get(e.type).compute({data:t.data,mapping:t.mapping,spec:e,xScaleIsDiscrete:t.xScaleIsDiscrete})}},xt={differenceArrow:"differenceArrows",shape:"shapes",arrow:"arrows",text:"textAnnotations",image:"images",sticker:"stickers",pinnedNumber:"pinnedNumbers",comment:"comments"},zg={differenceArrow(e){return{type:"annotation",kind:"differenceArrow",annotation:e}},shape(e){return{type:"annotation",kind:"shape",annotation:e}},arrow(e){return{type:"annotation",kind:"arrow",annotation:e}},text(e){return{type:"annotation",kind:"text",annotation:e}},image(e){return{type:"annotation",kind:"image",annotation:e}},sticker(e){return{type:"annotation",kind:"sticker",annotation:e}},pinnedNumber(e){return{type:"annotation",kind:"pinnedNumber",annotation:e}},comment(e){return{type:"annotation",kind:"comment",annotation:e}}},Es=Object.keys(xt),Yg=e=>Object.hasOwn(xt,e),At=(e,t)=>{for(const r of Es){const n=qg(e,r,t);if(n)return n}return null},It=(e,t)=>e[xt[t]],Nn=(e,t,r)=>({...e,[xt[t]]:r}),ws=(e,t)=>{const r=It(e,t.kind);return Nn(e,t.kind,[...r.slice(0,t.index),...r.slice(t.index+1)])},qg=(e,t,r)=>{const n=It(e,t),a=n.findIndex(o=>o.id===r),i=n[a];return i===void 0?null:{kind:t,index:a,annotation:i}},jg=class extends Fe{constructor(e){super(),this.container=e}compile(e){const t=super.compile(e);for(const r of yy(e.styles,t))this.container.diagnostics.addWarning(r);for(const r of by(e.styles))this.container.diagnostics.addWarning(r);for(const r of Sy(e.styles))this.container.diagnostics.addWarning(r);for(const r of t)for(const n of r.styles.warnings)this.container.diagnostics.addWarning(n);return t}dependencies(e){return[e.styles,e.config.parsingLocale]}compileLayer(e,t){const r=ks({layer:e,layerIndex:t.layers.indexOf(e),styles:t.styles,parsingLocale:t.config.parsingLocale});return{...e,styles:r}}},Ve={color:"color",alpha:"unitInterval",saturation:"unitInterval"},er={bar:{...Ve,borderRadius:"radiusToken",borderColor:"color",borderWidth:"pixels"},line:{...Ve,strokeWidth:"pixels",lineType:"lineType",fillAlpha:"unitInterval"},area:{...Ve,strokeWidth:"pixels",lineType:"lineType",strokeAlpha:"unitInterval"},point:{...Ve,size:"pixels",borderColor:"color",borderWidth:"pixels"},rule:{color:"color",strokeWidth:"pixels",lineType:"lineType"},tile:{...Ve,borderRadius:"pixels",borderColor:"color",borderWidth:"pixels"}},ii=1,oi=1e3,Xg="'none' or a shadow object { offsetX, offsetY, blur, color }",si="a non-negative number of pixels, or an object of those per edge",Nt={color:"color",strokeWidth:"pixels",lineType:"lineType"},z={fontFamily:"fontFamily",fontSize:"pixels",fontWeight:"fontWeight",lineHeight:"multiplier",textColor:"color"},Bt={...z,paddingInline:"pixels",paddingBlock:"pixels",background:"color",borderColor:"color",borderWidth:"pixels",borderRadius:"pixels"},li={background:"color",borderColor:"color",borderWidth:"pixels",borderRadius:"pixels",paddingInline:"pixels",paddingBlock:"pixels",shadow:"shadow"},_={panelBorder:{...Nt,borderRadius:"pixels"},panelBorderEdge:Nt,gridLine:Nt,tickLine:{...Nt,length:"pixels"},axisLabel:{...z,margin:"margin"},tickLabel:{...z,offset:"pixels",margin:"margin"},ruleLabel:z,dataLabel:Bt,graph:{background:"color",borderColor:"color",borderWidth:"pixels",borderRadius:"pixels",fontFamily:"fontFamily",fontSize:"pixels",fontWeight:"fontWeight",lineHeight:"multiplier",textColor:"color",textScale:"multiplier",padding:"padding"},heading:z,caption:z,source:z,header:{margin:"margin"},footer:{margin:"margin"},hoverGuide:{color:"color",background:"color"},tooltip:li,tooltipText:z,tooltipPrimaryRow:{background:"color"},headline:{gap:"pixels",margin:"margin"},legend:{gap:"pixels",margin:"margin"},legendPopover:li,legendItem:{...z,paddingInline:"pixels",paddingBlock:"pixels",background:"color",borderColor:"color",borderWidth:"pixels",borderRadius:"pixels"},legendItemSwatch:{size:"pixels",strokeWidth:"pixels"},directLabel:{...z,strokeWidth:"pixels",lineType:"lineType"},annotation:{color:"color",alpha:"unitInterval"},annotationShape:{color:"color",alpha:"unitInterval",borderColor:"color",borderWidth:"pixels"},annotationArrow:{color:"color",strokeWidth:"pixels",lineType:"lineType",borderColor:"color",borderWidth:"pixels",shadow:"shadow"},annotationDifferenceArrow:{color:"color",strokeWidth:"pixels"},annotationDifferenceArrowLabel:Bt,annotationText:{...Bt,alpha:"unitInterval"},annotationImage:{alpha:"unitInterval",borderRadius:"pixels"},annotationCallout:{color:"color",size:"pixels",borderColor:"color",borderWidth:"pixels",shadow:"shadow"},annotationCalloutLabel:{...Bt,shadow:"shadow"}},Rs={number:z,numberCenter:z,caption:z,label:z,swatch:{size:"pixels"},trend:z,trendUp:{textColor:"color"},trendDown:{textColor:"color"},trendFlat:{textColor:"color"}},Zg=new Set([...Object.keys(Ve),...Object.values(er).flatMap(e=>Object.keys(e??{})),...Object.values(_).flatMap(e=>Object.keys(e)),...Object.values(Rs).flatMap(e=>Object.keys(e))]),Cs=["geom","panelBorder","gridLine","tickLine","axisLabel","tickLabel","ruleLabel","dataLabel","graph","heading","caption","source","header","footer","hoverGuide","tooltip","headline","headlineItem","legend","legendItem","directLabel","annotation"],Jg=new Set(["gridLine","tickLine","axisLabel","tickLabel"]),Qg=new Set(["panelBorder","legend","axisLabel","tickLabel"]),ey=(e,t,r="en-US")=>ks({layer:e,layerIndex:0,styles:{tokens:t.tokens??{},defaults:t.defaults??[],overrides:t.overrides??[]},parsingLocale:r}),ty=class extends l.Stage{constructor(e){super(),this.container=e}compile(e){const t=super.compile(e);for(const r of vy(e.styles,e.annotations))this.container.diagnostics.addWarning(r);for(const r of t.warnings)this.container.diagnostics.addWarning(r);return t}dependencies(e){return[e.styles]}run(e){return Vs(e.styles)}},Vs=e=>{const t=[],r={...l.BUILTIN_STYLES.tokens,...e.tokens},n={panelBorder:{defaults:[],overrides:[]},gridLine:{defaults:[],overrides:[]},tickLine:{defaults:[],overrides:[]},axisLabel:{defaults:[],overrides:[]},tickLabel:{defaults:[],overrides:[]},ruleLabel:{defaults:[],overrides:[]},dataLabel:{defaults:[],overrides:[]},graph:{defaults:[],overrides:[]},heading:{defaults:[],overrides:[]},caption:{defaults:[],overrides:[]},source:{defaults:[],overrides:[]},header:{defaults:[],overrides:[]},footer:{defaults:[],overrides:[]},hoverGuide:{defaults:[],overrides:[]},tooltip:{defaults:[],overrides:[]},headline:{defaults:[],overrides:[]},headlineItem:{defaults:[],overrides:[]},legend:{defaults:[],overrides:[]},legendItem:{defaults:[],overrides:[]},directLabel:{defaults:[],overrides:[]},annotation:{defaults:[],overrides:[]},warnings:t},a=(i,o,s,c)=>{if(yr(i))return;const u=i.id===void 0?{}:{styleEntryId:i.id},d=i.select.target;if(!ny(i)){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} targets unknown '${String(d)}'.`,context:{param:"target",actual:String(d),...u},suggestion:`Set 'target' to one of ${Cs.map(m=>`'${m}'`).join(", ")}.`});return}if(i.when!==void 0){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} ignored: chrome entries take no conditions.`,context:{param:"when",...u},suggestion:"Remove the 'when' clause — chrome is chart-scoped, with no observations or states."});return}const p=i.select;if(p.target==="annotation"){const m=p.kind;if(m!==void 0&&!my(m)){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses unknown annotation kind '${String(m)}'.`,context:{param:"kind",actual:String(m),...u},suggestion:`Set 'kind' to one of ${l.ANNOTATION_STYLE_KINDS.map(y=>`'${y}'`).join(", ")}, or omit it to address every annotation.`});return}const f=p.part,g=hy(m);if(f!==void 0&&!(typeof f=="string"&&g.includes(f))){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses unknown part '${String(f)}'.`,context:{param:"part",actual:String(f),...u},suggestion:g.length>0?`Set 'part' to ${g.map(y=>`'${y}'`).join(", ")}, or omit it to address the ${m==="differenceArrow"?"line":"marker"}.`:`Remove 'part' — ${m===void 0?"kind-agnostic":`'${String(m)}'`} entries have none.`});return}const v=p.annotation;if(v!==void 0&&typeof v!="string"){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses an invalid annotation ${Se(v)}.`,context:{param:"annotation",actual:Se(v),...u},suggestion:"Set 'annotation' to the id of an annotation in the spec, or omit it to address every one of the kind."});return}}if(Qg.has(p.target)){const m=p.edge;if(m!==void 0&&!ay(m)){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses unknown edge '${String(m)}'.`,context:{param:"edge",actual:String(m),...u},suggestion:`Set 'edge' to one of ${l.PANEL_BORDER_EDGES.map(f=>`'${f}'`).join(", ")}.`});return}}if(Jg.has(p.target)){const m=p.axis;if(m!==void 0&&!fy(m)){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses unknown axis '${String(m)}'.`,context:{param:"axis",actual:String(m),...u},suggestion:`Set 'axis' to one of ${In.map(f=>`'${f}'`).join(", ")}.`});return}}if(p.target==="ruleLabel"){const m=p.layer;if(m!==void 0&&typeof m!="string"){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses an invalid layer ${Se(m)}.`,context:{param:"layer",actual:Se(m),...u},suggestion:"Set 'layer' to the id of a rule layer in the spec, or omit it to address every rule label."});return}}if(p.target==="tooltip"){const m=p.part;if(m!==void 0&&!sy(m)){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses unknown part '${String(m)}'.`,context:{param:"part",actual:String(m),...u},suggestion:`Set 'part' to one of ${l.TOOLTIP_PARTS.map(f=>`'${f}'`).join(", ")}, or omit it to address the box.`});return}}if(p.target==="heading"){const m=p.part;if(m!==void 0&&!cy(m)){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses unknown part '${String(m)}'.`,context:{param:"part",actual:String(m),...u},suggestion:`Set 'part' to one of ${l.HEADING_PARTS.map(f=>`'${f}'`).join(", ")}, or omit it to address every heading level.`});return}}if(p.target==="source"){const m=p.part;if(m!==void 0&&!ly(m)){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses unknown part '${String(m)}'.`,context:{param:"part",actual:String(m),...u},suggestion:`Set 'part' to one of ${l.SOURCE_PARTS.map(f=>`'${f}'`).join(", ")}, or omit it to address the label.`});return}}if(p.target==="legend"){const m=p.part;if(m!==void 0&&!uy(m)){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses unknown part '${String(m)}'.`,context:{param:"part",actual:String(m),...u},suggestion:`Set 'part' to one of ${l.LEGEND_PARTS.map(f=>`'${f}'`).join(", ")}, or omit it to address the gap.`});return}}if(p.target==="legendItem"){const m=p.part;if(m!==void 0&&!dy(m)){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses unknown part '${String(m)}'.`,context:{param:"part",actual:String(m),...u},suggestion:`Set 'part' to one of ${l.LEGEND_ITEM_PARTS.map(f=>`'${f}'`).join(", ")}, or omit it to address the pill.`});return}}if(p.target==="headlineItem"){const m=p.part;if(!py(m)){t.push({code:"INVALID_STYLE_RULE",message:m===void 0?`Style ${s} ignored: headlineItem entries need a part.`:`Style ${s} addresses unknown part '${String(m)}'.`,context:{param:"part",actual:String(m),...u},suggestion:`Set 'part' to one of ${l.HEADLINE_ITEM_PARTS.map(f=>`'${f}'`).join(", ")}.`});return}}if(p.target==="dataLabel"){const m=p.role;if(m!==void 0&&!iy(m)){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses unknown role '${String(m)}'.`,context:{param:"role",actual:String(m),...u},suggestion:`Set 'role' to one of ${l.DATA_LABEL_ROLES.map(g=>`'${g}'`).join(", ")}.`});return}const f=p.position;if(f!==void 0){if(!oy(f)){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses unknown position '${String(f)}'.`,context:{param:"position",actual:String(f),...u},suggestion:`Set 'position' to one of ${l.DATA_LABEL_POSITIONS.map(g=>`'${g}'`).join(", ")}.`});return}if(m===void 0||m==="aggregate"){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses a position without a positionable role.`,context:{param:"position",actual:String(f),...u},suggestion:"Set 'role' to 'observation' or 'category', or remove 'position'."});return}}}const h=Fn({declarations:i.declarations,vocabulary:_s(p),tokens:r,location:s,origin:c,warnings:t,entryTarget:p.target});Object.keys(h).length!==0&&n[p.target][o].push({select:p,declarations:h,origin:c})};return l.BUILTIN_STYLES.defaults.forEach((i,o)=>{a(i,"defaults",`builtin[${o}]`,{list:"builtin"})}),e.defaults.forEach((i,o)=>{a(i,"defaults",`defaults[${o}]`,{list:"defaults",index:o,...i.id===void 0?{}:{id:i.id}})}),e.overrides.forEach((i,o)=>{a(i,"overrides",`overrides[${o}]`,{list:"overrides",index:o,...i.id===void 0?{}:{id:i.id}})}),n},ry=(e,t)=>{if(e==="geom"){const r=Object.keys(er).find(n=>er[n]?.[t]!==void 0);return r===void 0?void 0:`style.geom.${r}`}if(e==="annotation"){const r=l.ANNOTATION_STYLE_KINDS.find(n=>_s({target:"annotation",kind:n})[t]!==void 0);return r===void 0?void 0:`style.annotation.${r}`}},yr=e=>e.select.target==="geom",ny=e=>{const t=e.select.target;return t!=="geom"&&Cs.includes(t)},Ds=e=>(e!==void 0?er[e]:void 0)??Ve,_s=e=>{if(e.target==="panelBorder")return e.edge===void 0?_.panelBorder:_.panelBorderEdge;if(e.target==="tooltip")return e.part===void 0?_.tooltip:e.part==="primaryRow"?_.tooltipPrimaryRow:_.tooltipText;if(e.target==="legend")return e.part==="popover"?_.legendPopover:_.legend;if(e.target==="legendItem")return e.part===void 0?_.legendItem:_.legendItemSwatch;if(e.target==="headlineItem")return Rs[e.part];if(e.target==="annotation")switch(e.kind){case"shape":return _.annotationShape;case"arrow":return _.annotationArrow;case"differenceArrow":return e.part==="label"?_.annotationDifferenceArrowLabel:_.annotationDifferenceArrow;case"text":return _.annotationText;case"image":return _.annotationImage;case"pinnedNumber":case"comment":return e.part==="label"?_.annotationCalloutLabel:_.annotationCallout;default:return _.annotation}return _[e.target]},ay=e=>typeof e=="string"&&l.PANEL_BORDER_EDGES.includes(e),iy=e=>typeof e=="string"&&l.DATA_LABEL_ROLES.includes(e),oy=e=>typeof e=="string"&&l.DATA_LABEL_POSITIONS.includes(e),sy=e=>typeof e=="string"&&l.TOOLTIP_PARTS.includes(e),ly=e=>typeof e=="string"&&l.SOURCE_PARTS.includes(e),cy=e=>typeof e=="string"&&l.HEADING_PARTS.includes(e),uy=e=>typeof e=="string"&&l.LEGEND_PARTS.includes(e),dy=e=>typeof e=="string"&&l.LEGEND_ITEM_PARTS.includes(e),py=e=>typeof e=="string"&&l.HEADLINE_ITEM_PARTS.includes(e),my=e=>typeof e=="string"&&l.ANNOTATION_STYLE_KINDS.includes(e),hy=e=>typeof e=="string"&&e in l.ANNOTATION_PARTS?l.ANNOTATION_PARTS[e]:[],fy=e=>typeof e=="string"&&In.includes(e),gy=(e,t,r)=>{const n=[];return l.BUILTIN_STYLES.defaults.forEach((a,i)=>{if(!yr(a))return;const o=a.select.kind;if(o!==void 0&&o!==e)return;const s={list:"builtin"},c=Fn({declarations:a.declarations,vocabulary:Ds(o),tokens:t,location:`builtin[${i}]`,origin:s,warnings:r,entryTarget:"geom"});Object.keys(c).length!==0&&n.push({declarations:c,...a.when?.state===void 0?{}:{state:a.when.state},origin:s})}),n},Bn=(e,t)=>{e.defaults.forEach((r,n)=>t(r,"defaults",n)),e.overrides.forEach((r,n)=>t(r,"overrides",n))},yy=(e,t)=>{const r=new Set(t.map(a=>a.id)),n=[];return Bn(e,(a,i,o)=>{const s=a.select;if(s.target!=="geom"&&s.target!=="ruleLabel")return;const c=s.layer;c===void 0||typeof c!="string"||r.has(c)||n.push({code:"INVALID_STYLE_RULE",message:`Style ${i}[${o}] targets unknown layer '${c}'.`,context:{param:"layer",actual:c,...a.id===void 0?{}:{styleEntryId:a.id}},suggestion:"Set 'layer' to the id of a layer in the spec."})}),n},vy=(e,t)=>{const r=new Map(Es.flatMap(a=>t[xt[a]].map(i=>[i.id,a]))),n=[];return Bn(e,(a,i,o)=>{const s=a.select;if(s.target!=="annotation")return;const c=s.annotation;if(c===void 0||typeof c!="string")return;const u={param:"annotation",actual:c,...a.id===void 0?{}:{styleEntryId:a.id}},d=r.get(c);if(d===void 0){n.push({code:"INVALID_STYLE_RULE",message:`Style ${i}[${o}] targets unknown annotation '${c}'.`,context:u,suggestion:"Set 'annotation' to the id of an annotation in the spec."});return}if(d==="sticker"){n.push({code:"INVALID_STYLE_RULE",message:`Style ${i}[${o}] targets sticker '${c}', which has no style vocabulary.`,context:u,suggestion:"Remove the entry — stickers take no style declarations."});return}const p=s.kind;p!==void 0&&p!==d&&n.push({code:"INVALID_STYLE_RULE",message:`Style ${i}[${o}] targets ${d} '${c}' with an entry addressing kind '${String(p)}'.`,context:u,suggestion:`Set 'kind' to '${d}', or omit it to address the annotation with the shared vocabulary.`})}),n},by=e=>{const t=[];return Bn(e,(r,n,a)=>{if(!yr(r))return;const i=r.when?.state;i===void 0||Ps(i)||t.push({code:"INVALID_STYLE_RULE",message:`Style ${n}[${a}] scopes to unknown state '${i}'.`,context:{param:"state",actual:String(i),...r.id===void 0?{}:{styleEntryId:r.id}},suggestion:`Set 'state' to one of ${l.STYLE_STATES.map(o=>`'${o}'`).join(", ")}.`})}),t},Ps=e=>l.STYLE_STATES.includes(e),Sy=e=>{const t=[];for(const[r,n]of Object.entries(e.tokens))Os(n)||t.push({code:"INVALID_STYLE_RULE",message:`Style token '${r}' has an invalid value: ${Se(n)}.`,context:{param:"tokens",actual:Se(n)},suggestion:`Set '${r}' to a non-empty color string or a { light, dark } pair of colors.`});return t},Os=e=>typeof e=="string"?e.trim().length>0:l.isLightDarkColor(e)&&e.light.trim().length>0&&e.dark.trim().length>0,pe=e=>typeof e=="number"&&Number.isFinite(e),Ms=e=>{if(pe(e)&&e>=0)return{top:e,right:e,bottom:e,left:e};if(typeof e!="object"||e===null)return;const t=e,r={};for(const n of l.PANEL_BORDER_EDGES){const a=t[n];if(a!==void 0){if(!pe(a)||a<0)return;r[n]=a}}return r},xy=e=>{const t=Ms(e);return t===void 0?void 0:{...l.DEFAULT_GRAPH_PADDING_EDGES,...t}},Ay=e=>Ms(e),Se=e=>typeof e=="object"&&e!==null?JSON.stringify(e):String(e),ks=e=>{const{layer:t,layerIndex:r,styles:n,parsingLocale:a}=e,i=vt(t,a),o=[],s={...l.BUILTIN_STYLES.tokens,...n.tokens},c=(u,d)=>{const p=[];return u.forEach((h,m)=>{if(!yr(h))return;const f=h.select.kind;if(f!==void 0&&f!==t.geom||h.select.layer!==void 0&&h.select.layer!==t.id)return;const g=h.when?.state;if(g!==void 0&&!Ps(g))return;const v={list:d,index:m,...h.id===void 0?{}:{id:h.id}},y=h.when?.where;if(y!==void 0){const A=Ae(y,t.data,"style-rule");if(A.length>0){for(const T of A)o.push({...T,code:"INVALID_STYLE_RULE",message:`Style ${d}[${m}]: ${T.message}`,context:{...T.context,layerIndex:r,...h.id===void 0?{}:{styleEntryId:h.id}}});return}}const b=Fn({declarations:h.declarations,vocabulary:Ds(f),tokens:s,location:`${d}[${m}]`,origin:v,warnings:o,entryTarget:"geom"});Object.keys(b).length!==0&&p.push({declarations:b,...y===void 0?{}:{matches:xe(y,i)},...g===void 0?{}:{state:g},origin:v})}),p};return{defaults:[...gy(t.geom,s,o),...c(n.defaults,"defaults")],overrides:c(n.overrides,"overrides"),warnings:o}},Fn=e=>{const{declarations:t,vocabulary:r,tokens:n,location:a,origin:i,warnings:o,entryTarget:s}=e,c={},u=i.list==="builtin"||i.id===void 0?{}:{styleEntryId:i.id},d=(f,g)=>{c[f]=g},p=(f,g,v)=>{o.push({code:"INVALID_STYLE_RULE",message:`Style ${a} declaration '${f}' ignored: expected ${g}, got ${Se(v)}.`,context:{param:f,expected:g,actual:Se(v),...u},suggestion:`Set '${f}' to ${g}.`})},h=(f,g)=>{if(typeof g=="string"){if(g.trim().length>0)return g;p(f,"a non-empty color string",g);return}if(l.isStyleTokenRef(g)){const v=n[g.token];if(v===void 0){o.push({code:"INVALID_STYLE_RULE",message:`Style ${a} declaration '${f}' ignored: unknown token '${g.token}'.`,context:{param:f,actual:g.token,...u},suggestion:`Declare '${g.token}' in the stylesheet's tokens.`});return}return Os(v)?typeof v=="string"?v:{light:v.light,dark:v.dark}:void 0}if(l.isLightDarkColor(g)&&g.light.trim().length>0&&g.dark.trim().length>0)return{light:g.light,dark:g.dark};p(f,"a non-empty color string, a { light, dark } pair, or a token(...) reference",g)},m=f=>{const g=Zg.has(f),v=ry(s,f),y=v===void 0?`Declare '${f}' on a target whose vocabulary carries it.`:`Declare '${f}' on an entry whose kind supports it (e.g. ${v}).`;o.push({code:"INVALID_STYLE_RULE",message:`Style ${a} declaration '${f}' ignored: ${g?"not in this entry's vocabulary":"not a style property"}.`,context:{param:f,...u},suggestion:g?y:`Remove the unknown declaration '${f}'.`})};for(const f of Object.keys(t)){const g=t[f];if(g===void 0)continue;const v=r[f];if(v===void 0){m(f);continue}switch(v){case"color":{const y=h(f,g);y!==void 0&&d(f,y);break}case"unitInterval":pe(g)&&g>=0&&g<=1?d(f,g):p(f,"a number in [0, 1]",g);break;case"pixels":pe(g)&&g>=0?d(f,g):p(f,"a non-negative number of pixels",g);break;case"radiusToken":l.isBorderRadiusToken(g)?d(f,g):p(f,`one of ${l.BORDER_RADIUS_TOKENS.map(y=>`'${y}'`).join(", ")}`,g);break;case"lineType":gn(g)?d(f,g):p(f,`one of ${fn.map(y=>`'${y}'`).join(", ")}`,g);break;case"fontFamily":typeof g=="string"&&g.trim().length>0?d(f,g):p(f,"a non-empty CSS font-family list",g);break;case"fontWeight":pe(g)&&g>=ii&&g<=oi?d(f,g):p(f,`a number in [${ii}, ${oi}]`,g);break;case"multiplier":pe(g)&&g>0?d(f,g):p(f,"a positive multiple of the font size",g);break;case"shadow":{if(g==="none"){d(f,g);break}const y=g;if(!pe(y.offsetX)||!pe(y.offsetY)||!pe(y.blur)||y.blur<0){p(f,Xg,g);break}const b=h(f,y.color);b!==void 0&&d(f,{offsetX:y.offsetX,offsetY:y.offsetY,blur:y.blur,color:b});break}case"padding":{const y=xy(g);y===void 0?p(f,si,g):d(f,y);break}case"margin":{const y=Ay(g);y===void 0?p(f,si,g):d(f,y);break}default:break}}return c},Iy=({layer:e})=>{if(e.position==="stack")return;const t=l.extractVariableName(e.mapping.y);if(t===null)return;let r=0,n=0;for(const a of e.data){const i=a[t];l.isStrictNumericDataValue(i)&&(r+=i,n+=Math.abs(i))}return{grandTotal:r,absoluteGrandTotal:n}},Ty=({layer:e,mainAxis:t})=>{if(e.position!=="stack")return;const r=l.extractVariableName(e.mapping.x);if(r===null||!e.data.hasVariable(l.POSITION_VARIABLES.yMin)||!e.data.hasVariable(l.POSITION_VARIABLES.yMax))return;const n=s=>t==="y"?s.xMax:s.yMax,a=s=>t==="y"?s.xMin:s.yMin,i=new Map;for(const s of e.data){const c=s[r],u=G(s),d=F(s),p=j(s),h=X(s),m=hn(s);if(!l.isDefined(c)||!l.isDefined(u)||!l.isDefined(d)||!l.isDefined(p)||!l.isDefined(h)||!l.isDefined(m))continue;const f=m>=0;if(Math.abs(m)===0)continue;const g=Cn(s,r),v={xMin:p,xMax:h,yMin:u,yMax:d},y=i.get(g);if(y===void 0){i.set(g,{total:m,topPositive:f?v:null,bottomNegative:f?null:v});continue}y.total+=m,f?(y.topPositive===null||n(v)>n(y.topPositive))&&(y.topPositive=v):(y.bottomNegative===null||a(v)<a(y.bottomNegative))&&(y.bottomNegative=v)}const o=[];for(const[s,c]of i){const u=c.topPositive??c.bottomNegative;u!==null&&o.push({xKey:s,total:c.total,anchor:{xMin:u.xMin,xMax:u.xMax,yMin:u.yMin,yMax:u.yMax,direction:c.topPositive!==null?"positive":"negative"}})}return o},Ly=class extends Fe{constructor(e){super(),this.container=e}dependencies(e){return[e.coordSystem]}compileLayer(e,t){const r=this.container.geomRegistry.get(e.geom),n={},a=t.coordSystem.type==="cartesian"?t.coordSystem.mainAxis:"x";if(r.summaries.stackTotals){const i=Ty({layer:e,mainAxis:a});i!==void 0&&(n.stackTotals=i)}if(r.summaries.grandTotal){const i=Iy({layer:e});i!==void 0&&(n.grandTotal=i.grandTotal,n.absoluteGrandTotal=i.absoluteGrandTotal)}return{...e,summary:n}}},Ns=class extends l.Stage{constructor(e){super(),this.registry=e}key(e){return e.data}dependencies(e){return[e.transforms]}run(e){return e.transforms.reduce((t,r)=>this.registry.get(r.transformType).apply(t,r),e.data)}},ci={color:"categorical",size:"numeric",alpha:"numeric",strokeWidth:"numeric",lineType:"categorical"},Ey=["color","size","alpha","strokeWidth","lineType"],wy=class extends Fe{dependencies(e){return Ey.map(t=>e.scales[t])}compileLayer(e,t){let r=e.data;const n=Object.entries(l.VISUAL_VARIABLES);for(const[a,i]of n){const o=l.extractConstantValue(e.mapping[a]);if(o!==void 0){r=r.addConstantVariable(i,ci[a],o);continue}const s=l.extractVariableName(e.mapping[a]),c=t.scales[a];!s||!c||c.kind!=="visual"||(r=r.deriveVariableFrom(s,i,ci[a],Ry(c)))}return{...e,data:r}}},Ry=e=>t=>l.isDefined(t)?e.map(t):null;function Bs(e=new hr){return{diagnostics:new Mg,geomRegistry:e}}var Fs=class{constructor(e,t,r,n,a,i,o,s,c,u,d,p,h,m,f,g){this.container=e,this.dataCompiler=t,this.specCompiler=r,this.transformCompiler=n,this.constantMappingCompiler=a,this.layerPhasedCompiler=i,this.scaleCompiler=o,this.coordCompiler=s,this.positionMapperCompiler=c,this.visualMapperCompiler=u,this.guideCompiler=d,this.summariseCompiler=p,this.stylesCompiler=h,this.chromeStylesCompiler=m,this.highlightsCompiler=f,this.annotationsCompiler=g,this.lastCompile=null,this.lastDiagnostics=null,this.lastData=void 0,this.lastCustomPalettes={},this.stages=[{name:"data",getStats:()=>this.dataCompiler.stats},{name:"transform",getStats:()=>this.transformCompiler.stats},{name:"constantMapping",getStats:()=>this.constantMappingCompiler.stats},{name:"layer",getStats:()=>this.layerPhasedCompiler.stats},{name:"coordSetup",getStats:()=>this.coordCompiler.setupStats},{name:"scale",getStats:()=>this.scaleCompiler.stats},{name:"positionMapper",getStats:()=>this.positionMapperCompiler.stats},{name:"visualMapper",getStats:()=>this.visualMapperCompiler.stats},{name:"coordTransform",getStats:()=>this.coordCompiler.transformStats},{name:"summarise",getStats:()=>this.summariseCompiler.stats},{name:"guide",getStats:()=>this.guideCompiler.stats},{name:"styles",getStats:()=>this.stylesCompiler.stats},{name:"chromeStyles",getStats:()=>this.chromeStylesCompiler.stats},{name:"highlights",getStats:()=>this.highlightsCompiler.stats},{name:"annotations",getStats:()=>this.annotationsCompiler.stats}]}compile(e){try{const t=this.runCompile(()=>(this.lastData=e.data,this.lastCustomPalettes=e.customPalettes??{},this.runPipeline({spec:this.specCompiler.compile({input:e.input,customPalettes:this.lastCustomPalettes,dataset:this.dataCompiler.compile(e.data)}),colorScheme:e.colorScheme??ui})));return this.toOkResult(t)}catch(t){return this.toErrorResult(t)}}recompile(e){try{const t=this.runCompile(()=>{const r=e.colorScheme??ui;if(e.data===void 0)return this.runPipeline({spec:e.spec,colorScheme:r});this.lastData=e.data;const n=this.dataCompiler.compile(e.data),a=this.reResolveInferredScalesIfNeeded(e.spec.data,R(e.spec,{data:n}));return this.runPipeline({spec:a,colorScheme:r})});return this.toOkResult(t)}catch(t){return this.toErrorResult(t)}}getCacheStats(){const e={};for(const{name:t,getStats:r}of this.stages)e[t]={...r()};return e}getLastCompile(){return this.lastCompile}getDiagnostics(){return this.lastDiagnostics}reResolveInferredScalesIfNeeded(e,t){if(e.size()!==0||t.data.size()===0||t.scales.filter(n=>n.inferredFrom!==void 0).length===0)return t;const r=On(this.container,{data:t.data,layers:t.layers,mapping:t.mapping,customPalettes:this.lastCustomPalettes});return R(t,{scales:Be(t.scales,n=>{const a=n.inferredFrom;if(a===void 0)return n;const i=gr(r,a);return t.coords.coordType==="polar"?Mn(i):i})})}runCompile(e){this.container.diagnostics.reset();const t=this.trackCompile(e);return this.lastDiagnostics=this.container.diagnostics.drain(),t}toOkResult(e){return{ok:!0,compiled:e,warnings:this.lastDiagnostics?.warnings??[]}}toErrorResult(e){const t=this.container.diagnostics.drain();return this.lastDiagnostics=t,{ok:!1,errors:t.errors.length>0?t.errors:[Eo(e)],warnings:t.warnings}}trackCompile(e){if(!l.IS_DEV)return e();const t=this.getCacheStats(),r=performance.now(),n=e(),a=performance.now()-r,i={};for(const{name:o,getStats:s}of this.stages){const c=s();i[o]={hits:c.hits-t[o].hits,misses:c.misses-t[o].misses}}return this.lastCompile={stages:i,durationMs:a},n}runPipeline({spec:e,colorScheme:t}){return{...cr({spec:e}).pipe(({spec:r})=>({spec:R(r,{data:this.transformCompiler.compile({data:r.data,transforms:r.transforms})})})).pipe(({spec:r})=>{const n=this.constantMappingCompiler.compile({data:r.data,mapping:r.mapping});return{spec:R(r,{data:n.data,mapping:n.mapping})}}).pipe(({spec:r})=>({layers:this.layerPhasedCompiler.compile({data:r.data,layers:r.layers,mapping:r.mapping,coords:r.coords,scales:r.scales})})).pipe(({spec:r,layers:n})=>this.coordCompiler.setup({coordSpec:r.coords,scales:r.scales,layers:n})).pipe(({layers:r,scales:n})=>({scales:this.scaleCompiler.compile({layers:r,scales:n,colorScheme:t})})).pipe(({spec:r})=>({config:r.config})).pipe(({layers:r,scales:n})=>({layers:this.positionMapperCompiler.compile({layers:r,scales:n})})).pipe(({layers:r,scales:n})=>({layers:this.visualMapperCompiler.compile({layers:r,scales:n})})).pipe(({spec:r,layers:n,coordSystem:a})=>({layers:this.coordCompiler.transform({coordSpec:r.coords,coordSystem:a,layers:n})})).pipe(({layers:r,coordSystem:n})=>({layers:this.summariseCompiler.compile({layers:r,coordSystem:n})})).pipe(({spec:r,scales:n,layers:a,coordSystem:i})=>({guides:this.guideCompiler.compile({scales:n,config:r.config,layers:a,coordSystem:i,originalData:this.lastData})})).pipe(({spec:r,layers:n})=>({layers:this.stylesCompiler.compile({layers:n,styles:r.styles,config:r.config})})).pipe(({spec:r})=>({chrome:this.chromeStylesCompiler.compile({styles:r.styles,annotations:r.annotations})})).pipe(({spec:r,layers:n})=>({layers:this.highlightsCompiler.compile({layers:n,highlights:r.highlights,config:r.config})})).pipe(({spec:r,layers:n,coordSystem:a,scales:i})=>({annotations:this.annotationsCompiler.compile({annotations:r.annotations,layers:n,coordSystem:a,scales:i,config:r.config})})).result(),spec:e}}},Cy=["data","transform","constantMapping","layer","coordSetup","scale","positionMapper","visualMapper","coordTransform","summarise","guide","styles","chromeStyles","highlights","annotations"],ui="light",Vy=({plugins:e=[]}={})=>{const t=cs(e),{geomRegistry:r,statRegistry:n,transformRegistry:a}=bf(t),i=Bs(r),o=new ig(i),s=new Ns(a);for(const c of t.warnings)i.diagnostics.addWarning(c,{persistent:!0});return new Fs(i,new l.DataCompiler,new Ls(i),s,new Wp,new Gh(i,s,n,new Mh(i,s,new Kg(n),new fm,new hm(i),new Af(new Cf))),new Uf(i,o),new Yp(new cm),new Gf(i),new wy,new Eh(i),new Ly(i),new jg(i),new ty(i),new Vh(i),new Vp(i))};function $s(e,t){return e.geom===t}function Gs(...e){let t={},r;const[n,...a]=e;l.isDefined(n)&&!Dy(n)?(t=n,r=a):r=e;const i={mapping:t,layers:[],scales:[],transforms:[],highlights:[],config:{}};return r.reduce((o,s)=>Hs(o,s),i)}function Us(e,...t){return t.reduce((r,n)=>Hs(r,n),e)}function Dy(e){return typeof e=="object"&&e!==null&&"type"in e}function Hs(e,t){switch(t.type){case"scale":return{...e,scales:[...e.scales,t]};case"coord":return{...e,coords:t};case"config":return{...e,config:(0,jt.default)({},e.config,t.config)};case"layer":return{...e,layers:[...e.layers,t]};case"transform":return{...e,transforms:[...e.transforms,t]};case"mapping":return{...e,mapping:{...e.mapping,...t.mapping}};case"highlight":return{...e,highlights:[...e.highlights,t]};case"styles":return{...e,styles:e.styles===void 0?t:{...t,extends:[e.styles,...t.extends??[]]}};case"annotation":return _y(e,t);default:throw new l.InternalError({message:`Unknown spec item type: ${t.type}`})}}function _y(e,t){const r={...e.annotations};switch(t.kind){case"differenceArrow":r.differenceArrows=[...r.differenceArrows??[],t.annotation];break;case"shape":r.shapes=[...r.shapes??[],t.annotation];break;case"arrow":r.arrows=[...r.arrows??[],t.annotation];break;case"text":r.textAnnotations=[...r.textAnnotations??[],t.annotation];break;case"image":r.images=[...r.images??[],t.annotation];break;case"sticker":r.stickers=[...r.stickers??[],t.annotation];break;case"pinnedNumber":r.pinnedNumbers=[...r.pinnedNumbers??[],t.annotation];break;case"comment":r.comments=[...r.comments??[],t.annotation];break;default:throw new Error(`Unknown annotation kind: ${t.kind}`)}return{...e,annotations:r}}function Py(e){const t=e?.plugins??[],r=My(t);return{geom:{...l.geom,...r.geom},stat:{...l.stat,...r.stat},transform:{...l.transform,...r.transform},scale:l.scale,coord:l.coord,createSpec:Gs,pipe:Us,plugins:t}}var Oy=e=>(t={})=>l.buildLayerInput(e,t);function My(e){const{geoms:t,stats:r,transforms:n}=cs(e),a={};for(const s of t)a[s.type]=Oy(s.type);const i={};for(const s of r)i[s.type]=()=>({type:s.type});const o={};for(const s of n)o[s.transformType]=c=>({type:"transform",transformType:s.transformType,options:c?.options});return{geom:a,stat:i,transform:o}}var Pr="…",Ws=(e,t,r)=>{if(t<=0||e.length===0)return"";if(r(e)<=t)return e;if(r(Pr)>t)return"";let n=0,a=e.length-1,i=0;for(;n<=a;){const o=n+a>>>1;r(e.slice(0,o)+Pr)<=t?(i=o,n=o+1):a=o-1}return e.slice(0,i)+Pr};var Y={timeZone:"UTC"},K=e=>t=>{if(!l.isStrictTemporalDataValue(t))return"–";try{return e(t)}catch{return"n/a"}},we=e=>t=>l.isStrictNumericDataValue(t)?e(t):"–",$n=e=>t=>l.isStrictCategoricalDataValue(t)?t:"–",ky=Wr.default.humanizer({language:"en",spacer:"",delimiter:" ",languages:{en:{y:()=>"y",mo:()=>"mo",w:()=>"w",d:()=>"d",h:()=>"h",m:()=>"m",s:()=>"s",ms:()=>"ms"}}}),Ks=({valueFormat:e,locale:t,numberFormat:r,intlOptions:n})=>we(a=>{const i=typeof r.decimals=="number"?r.decimals:2,o=Hn(a,i),{base:s,suffix:c}=Un(a,r.abbreviation),u={...o,...l.isCurrencyValueFormat(e)?{style:"currency",currencyDisplay:"narrowSymbol",currency:e.iso}:{},...n};return`${Intl.NumberFormat(t,u).format(s)}${c}`}),zs=({locale:e,numberFormat:t,intlOptions:r})=>we(n=>{const{base:a,suffix:i}=Un(n,t.abbreviation),o={...Hn(a,t.decimals),...r};return`${Intl.NumberFormat(e,o).format(a)}${i}`}),Gn=e=>we(t=>ky(t)),Ys=({locale:e,intlOptions:t})=>we(r=>Intl.NumberFormat(e,{maximumFractionDigits:0,...t}).format(r)),qs=({locale:e,numberFormat:t,intlOptions:r})=>we(n=>{const a=Hn(n,t.decimals);return Intl.NumberFormat(e,{...a,...r,style:"percent"}).format(n)}),Un=(e,t="none")=>{switch(t){case"none":return{base:e,suffix:""};case"auto":{const r=Ny(e);return Un(e,r)}default:return{base:e/l.SUFFIX_MULTIPLIERS[t],suffix:t}}},Hn=(e,t)=>{if(typeof t=="number")return{minimumFractionDigits:t,maximumFractionDigits:t};const r=Math.ceil(Math.log10(Math.abs(e))),n=r>=3?0:r===2?1:2;return{minimumFractionDigits:t==="auto"?0:n,maximumFractionDigits:n}},Ny=e=>{const t=Math.abs(e);return t>=l.SUFFIX_MULTIPLIERS.b?"b":t>=l.SUFFIX_MULTIPLIERS.m?"m":t>=l.SUFFIX_MULTIPLIERS.k?"k":"none"},By=({locale:e,intlOptions:t})=>K(r=>Intl.DateTimeFormat(e,{dateStyle:"medium",...Y,...t}).format(r)),Fy=({locale:e,intlOptions:t})=>K(r=>{const n=Intl.DateTimeFormat(e,{dateStyle:"medium",timeStyle:"medium",...Y,...t}).formatToParts(r);return $y(n.map(Gy))}),js=({locale:e,intlOptions:t})=>K(r=>Intl.DateTimeFormat(e,{day:"numeric",month:"long",...Y,...t}).format(r)),Xs=({locale:e,intlOptions:t})=>K(r=>Intl.DateTimeFormat(e,{month:"long",...Y,...t}).format(r)),Wn=({locale:e,intlOptions:t})=>K(r=>Intl.DateTimeFormat(e,{month:"short",year:"numeric",...Y,...t}).format(r)),Kn=e=>K(t=>`Q${Math.floor(t.getUTCMonth()/3)+1} ${t.getUTCFullYear()}`),Zs=({locale:e,intlOptions:t})=>K(r=>{const n=(0,ho.addDays)(r,6);return Intl.DateTimeFormat(e,{day:"numeric",month:"long",...Y,...t,year:void 0}).formatRange(r,n)}),Js=({locale:e,intlOptions:t})=>K(r=>{const n=(0,ho.addDays)(r,6);return Intl.DateTimeFormat(e,{dateStyle:"medium",...Y,...t}).formatRange(r,n)}),zn=({locale:e,intlOptions:t})=>K(r=>Intl.DateTimeFormat(e,{year:"numeric",...Y,...t}).format(r)),Qs=({locale:e,intlOptions:t})=>K(r=>Intl.DateTimeFormat(e,{timeStyle:"short",...Y,...t}).format(r)),$y=e=>e.map(t=>t.value).join(""),Gy=e=>e.type!=="literal"||e.value!==", "?e:{type:"literal",value:" • "},di=1e3,Uy=({valueFormat:e,locale:t,tickValues:r,intlOptions:n})=>we(a=>{const i={...qn(a,r),notation:"compact",...l.isCurrencyValueFormat(e)?{style:"currency",currencyDisplay:"narrowSymbol",currency:e.iso}:{},...n};return Yn(a,t,i)}),Hy=({locale:e,tickValues:t,intlOptions:r})=>we(n=>{const a={...qn(n,t),notation:"compact",...r};return Yn(n,e,a)}),Wy=({locale:e,tickValues:t,intlOptions:r})=>we(n=>{const a={...qn(n,t),notation:"compact",...r,style:"percent"};return Yn(n,e,a)}),Yn=(e,t,r)=>Intl.NumberFormat(t,r).formatToParts(e).map(n=>n.type==="compact"?n.value.toLowerCase():n.value).join(""),el=e=>Math.abs(e)>di?el(e/di):Number.isInteger(e),Ky=e=>{if(e.length<2)return!1;const[t,r]=e;return typeof t!="number"||typeof r!="number"?!1:Math.abs(r-t)<1},qn=(e,t)=>el(e)?{minimumFractionDigits:0,maximumFractionDigits:0}:Ky(t)?{minimumFractionDigits:0,maximumFractionDigits:4}:{minimumFractionDigits:0,maximumFractionDigits:1},zy=({locale:e,intlOptions:t})=>K(r=>Intl.DateTimeFormat(e,{day:"numeric",month:"short",...Y,...t}).format(r)),Yy=({locale:e,intlOptions:t})=>K(r=>Intl.DateTimeFormat(e,{month:"short",...Y,...t}).format(r)),qy=({locale:e,intlOptions:t})=>K(r=>Intl.DateTimeFormat(e,{day:"numeric",month:"short",...Y,...t}).format(r)),jy=({locale:e,intlOptions:t})=>K(r=>Intl.DateTimeFormat(e,{timeStyle:"short",...Y,...t}).format(r)),jn=e=>{const{valueFormat:t}=e;switch(t.type){case"currency":return Uy(e);case"date":case"datetime":return zy(e);case"day_month":case"weekly_date_range":case"weekly_date_range_with_year":return qy(e);case"decimal":case"integer":return Hy(e);case"duration":return Gn(e);case"month":return Yy(e);case"month_year":return Wn(e);case"percentage":return Wy(e);case"quarter":return Kn(e);case"text":return $n(e);case"time":return jy(e);case"year":return zn(e);case"lookup":return jn({...e,valueFormat:t.fallback});default:throw new l.InternalError({message:`Unhandled value format: ${t.type}`})}},Xy=.9,Zy=1/3,Jy=1/4,Qy=e=>e.formattedAxis.position==="top"||e.formattedAxis.position==="bottom"?ev(e):tv(e),ev=({formattedAxis:e,bandwidthPx:t,panelRect:r,measureLabel:n})=>{const{widths:a,maxWidth:i,maxHeight:o}=tl(e.ticks,n),s=rv(e.ticks,r.width),c=s*Xy;if(i<=c)return{...e,labelRotation:0,labelMaxWidthPx:null};if(s>=50){const d=Qr(c);return{...e,ticks:Jr(e.ticks,a,d,n),labelRotation:0,labelMaxWidthPx:d}}if(o+8>t)return{...e,ticks:[],labelRotation:0,labelMaxWidthPx:null};const u=Qr(r.height*Zy);return{...e,ticks:Jr(e.ticks,a,u,n),labelRotation:-90,labelMaxWidthPx:u}},tv=({formattedAxis:e,bandwidthPx:t,panelRect:r,measureLabel:n})=>{const{widths:a,maxWidth:i,maxHeight:o}=tl(e.ticks,n);if(o>t)return{...e,ticks:[],labelRotation:0,labelMaxWidthPx:null};const s=Qr(r.width*Jy);return i<=s?{...e,labelRotation:0,labelMaxWidthPx:null}:{...e,ticks:Jr(e.ticks,a,s,n),labelRotation:0,labelMaxWidthPx:s}},rv=(e,t)=>{const r=e[0],n=e[1];return r===void 0||n===void 0?t:Math.abs(n.position-r.position)*t},tl=(e,t)=>{const r=[];let n=0,a=0;for(const i of e){const{width:o,height:s}=t(i.formattedLabel);r.push(o),o>n&&(n=o),s>a&&(a=s)}return{widths:r,maxWidth:n,maxHeight:a}},Jr=(e,t,r,n)=>{const a=i=>n(i).width;return e.map((i,o)=>(t[o]??0)<=r?i:{...i,formattedLabel:Ws(i.formattedLabel,r,a)})},Qr=e=>Math.max(0,Math.floor(e)),nv=(e,t,r,n)=>{if(e.length===0)return!0;const a=t==="top"||t==="bottom",i=a?60:40;let o=r-(e.length-1)*i;for(const s of e){const{width:c,height:u}=n(s);if(o-=a?c:u,o<0)return!1}return!0},av=({axis:e,availableSpacePx:t,measureLabel:r,resolveFormatter:n})=>{const{tickCandidates:a,position:i}=e;if(a.length===0)return[];const o=new Map,s=p=>{const h=o.get(p);if(h)return h;const m=a[p],f=m?iv(m.ticks,n(m)):[];return o.set(p,f),f};let c=0,u=a.length-1,d=-1;for(;c<=u;){const p=c+u>>>1;nv(s(p).map(h=>h.formattedLabel),i,t,r)?(d=p,c=p+1):u=p-1}return d>=0?s(d):s(0)},iv=(e,t)=>e.map(r=>({...r,formattedLabel:t(r.value)})),pi=.5,Tt=e=>({x:0,y:0,width:e.width,height:e.height}),Xn=e=>e==="panel-end"?"end":e==="panel-start"?"start":e,Lt=({box:e,panel:t,frame:r,placement:n,justify:a,align:i,offset:o,alignOffset:s,labelWidth:c,labelHeight:u})=>{const d=a==="panel-start"||a==="panel-end",p=(r.valueAxis==="x"?e.height:e.width)===0,h={anchor:sv(a,r.valueDirectionSign),placement:d?"inside":n,offset:o},m={anchor:lv(i),placement:p?n:"inside",offset:p?s??o:0},f=d?t:e,g=r.valueAxis==="x"?f:e,v=r.valueAxis==="y"?f:e,y=r.valueAxis==="x"?h:m,b=r.valueAxis==="x"?m:h,A=hi(y,{min:g.x,max:g.x+g.width,halfExtent:c/2}),T=hi(b,{min:v.y,max:v.y+v.height,halfExtent:u/2});return{x:A,y:T,position:ov(e,A,T,c,u)}},mi=(e,t,r,n)=>r-n>=e-pi&&r+n<=t+pi,ov=(e,t,r,n,a)=>{if(e.width===0&&e.height===0)return"outside";const i=e.width===0||mi(e.x,e.x+e.width,t,n/2),o=e.height===0||mi(e.y,e.y+e.height,r,a/2);return i&&o?"inside":"outside"},sv=(e,t)=>e==="center"?"center":(e==="end"||e==="panel-end")==(t===1)?"max":"min",lv=e=>e==="center"?"center":e==="start"?"min":"max",hi=({anchor:e,placement:t,offset:r},{min:n,max:a,halfExtent:i})=>{if(e==="center")return(n+a)/2;if(t==="inside"&&n===a)return n;const o=r+i;return e==="min"?t==="inside"?n+o:n-o:t==="inside"?a-o:a+o},cv=(e,t,r,n,a)=>{const i=t??e,o=1-Math.max(e,i);return{box:{x:r*n,y:o*a,width:0,height:Math.abs(e-i)*a},frame:{valueAxis:"y",valueDirectionSign:e>=i?-1:1}}},uv=e=>{const t=[];if(!e.layer.dataLabels.showDataLabels)return{labels:t,droppedCount:0};const{offset:r}=e.layer.dataLabels,n=pv(e.layer);for(const a of e.layer.data){const i=M(a),o=F(a)??D(a);if(i===null||o===null||!et(i,o))continue;const s=e.formatLabel(a);if(s==="")continue;const{width:c,height:u}=e.measureDataLabel("observation","outside",s),{box:d,frame:p}=cv(o,G(a),i,e.panelRect.width,e.panelRect.height),h=Lt({box:d,panel:Tt(e.panelRect),frame:p,...n,offset:r,labelWidth:c,labelHeight:u});t.push({layerId:e.layer.id,x:h.x,y:h.y,text:s,width:c,height:u,isRotated:!1,target:"observation",position:"outside"})}return{labels:t,droppedCount:0}},dv={place:uv,getPercentageValueStrategy:e=>e.position==="fill"?"fill":U(e.position)?"stack":"none"},pv=e=>{const{position:t,justify:r,align:n}=e.dataLabels;return t==="auto"?{placement:"outside",justify:"end",align:"center"}:{placement:t,justify:dr(e.data,e.mapping)?Xn(r):r,align:n}};function Et(e){return e[l.VISUAL_VARIABLES.color]}function rl(e){return e[l.VISUAL_VARIABLES.alpha]}function Zn(e){return e[l.VISUAL_VARIABLES.size]}function en(e){return e[l.VISUAL_VARIABLES.strokeWidth]}function nl(e){return e[l.VISUAL_VARIABLES.lineType]}var mv={color:Et,alpha:rl,strokeWidth:en,lineType:nl,size:Zn,borderWidth:en},ot=(e={})=>{const t=e.colorScheme??"light",r=new WeakMap,n=new WeakMap;return{geomReaders:s=>{const c=r.get(s);if(c!==void 0)return c;const u=fv(s.styles,t);return r.set(s,u),u},chromeReaders:s=>{const c=n.get(s);if(c!==void 0)return c;const u=hv(s,t);return n.set(s,u),u},explain:(s,c,u,d)=>{if(d!==void 0){const f=ct(s.styles.overrides,c,u,d,t);if(f!==void 0)return{value:f.value,tier:"override",origin:f.origin,state:d};const g=ct(s.styles.defaults,c,u,d,t);if(g!==void 0)return{value:g.value,tier:"default",origin:g.origin,state:d}}const p=ct(s.styles.overrides,c,u,void 0,t);if(p!==void 0)return{value:p.value,tier:"override",origin:p.origin};const h=al(c,u);if(h!==void 0)return{value:h,tier:"data"};const m=ct(s.styles.defaults,c,u,void 0,t);return m!==void 0?{value:m.value,tier:"default",origin:m.origin}:{value:void 0,tier:"unresolved"}}}},hv=(e,t)=>{const r=(v,y)=>{const b=w=>fi(v.overrides,w,y)??fi(v.defaults,w,y);return{get:w=>{const C=b(w)?.declarations[w];if(C!==void 0)return Or(C,t)},getSource:w=>{const C=b(w);return C===void 0?"unresolved":C.origin.list==="builtin"?"builtin":"authored"},explain:w=>{const C=b(w),I=C?.declarations[w];return C===void 0||I===void 0?{value:void 0,source:"unresolved"}:{value:Or(I,t),source:C.origin.list==="builtin"?"builtin":"authored",origin:C.origin,select:C.select}},collectAll:w=>{const C=[];for(const I of[v.defaults,v.overrides])for(const V of I){if(!y(V))continue;const O=V.declarations[w];O!==void 0&&C.push(Or(O,t))}return C}}},n=(v,y)=>{const b="edge"in v.select?v.select.edge:void 0;return b===void 0||b===y},a=v=>r(e.panelBorder,y=>n(y,v)),i=v=>r(e.legend,y=>y.select.target!=="legend"||y.select.part!==void 0?!1:n(y,v)),o=v=>(y,b)=>r(e[v],A=>A.select.target!==v||A.select.axis!==void 0&&A.select.axis!==y?!1:n(A,b)),s=v=>r(e.ruleLabel,y=>y.select.target!=="ruleLabel"?!1:y.select.layer===void 0||y.select.layer===v),c=(v,y)=>r(e.dataLabel,b=>b.select.target!=="dataLabel"||b.select.role!==void 0&&b.select.role!==v?!1:b.select.position===void 0||b.select.position===y),u=v=>r(e.tooltip,y=>y.select.target==="tooltip"&&y.select.part===v),d=v=>r(e.source,y=>y.select.target==="source"&&y.select.part===v),p=v=>r(e.heading,y=>y.select.target!=="heading"?!1:y.select.part===void 0||y.select.part===v),h=v=>r(e.legend,y=>y.select.target==="legend"&&y.select.part===v),m=v=>r(e.legendItem,y=>y.select.target==="legendItem"&&y.select.part===v),f=v=>r(e.headlineItem,y=>y.select.target==="headlineItem"&&y.select.part===v),g=(v,y)=>{const b=new Map;return A=>{const T=b.get(A);if(T!==void 0)return T;const L=r(e.annotation,E=>{if(E.select.target!=="annotation")return!1;const w=E.select.kind;return w!==void 0&&w!==v||E.select.part!==y?!1:E.select.annotation===void 0||E.select.annotation===A});return b.set(A,L),L}};return{panelBorder:a,gridLine:o("gridLine"),tickLine:o("tickLine"),axisLabel:o("axisLabel"),tickLabel:o("tickLabel"),ruleLabel:s,dataLabel:c,graph:r(e.graph,()=>!0),heading:{h1:p("h1"),h2:p("h2")},caption:r(e.caption,()=>!0),source:{label:d(void 0),link:d("link")},header:r(e.header,()=>!0),footer:r(e.footer,()=>!0),hoverGuide:r(e.hoverGuide,()=>!0),tooltip:{box:u(void 0),heading:u("heading"),label:u("label"),value:u("value"),primaryRow:u("primaryRow")},headline:r(e.headline,()=>!0),headlineItem:{number:f("number"),numberCenter:f("numberCenter"),caption:f("caption"),label:f("label"),swatch:f("swatch"),trend:f("trend"),trendUp:f("trendUp"),trendDown:f("trendDown"),trendFlat:f("trendFlat")},legend:Object.assign(i,{popover:h("popover")}),legendItem:{item:m(void 0),swatch:m("swatch")},directLabel:r(e.directLabel,()=>!0),annotation:{shape:g("shape"),arrow:g("arrow"),differenceArrow:Object.assign(g("differenceArrow"),{label:g("differenceArrow","label")}),text:g("text"),image:g("image"),pinnedNumber:Object.assign(g("pinnedNumber"),{label:g("pinnedNumber","label")}),comment:Object.assign(g("comment"),{label:g("comment","label")})}}},fi=(e,t,r)=>{for(let n=e.length-1;n>=0;n--){const a=e[n];if(!(a===void 0||!r(a))&&a.declarations[t]!==void 0)return a}},Or=(e,t)=>{if(l.isLightDarkColor(e))return e[t];if(typeof e=="object"&&"offsetX"in e){const{offsetX:r,offsetY:n,blur:a,color:i}=e;return{offsetX:r,offsetY:n,blur:a,color:l.isLightDarkColor(i)?i[t]:i}}return e},fv=(e,t)=>({get:(n,a,i)=>{if(i!==void 0){const c=Ft(e.overrides,n,a,i,t);if(c!==void 0)return c;const u=Ft(e.defaults,n,a,i,t);if(u!==void 0)return u}const o=Ft(e.overrides,n,a,void 0,t);if(o!==void 0)return o;const s=al(n,a);return s!==void 0?s:Ft(e.defaults,n,a,void 0,t)}}),Ft=(e,t,r,n,a)=>ct(e,t,r,n,a)?.value,ct=(e,t,r,n,a)=>{for(let i=e.length-1;i>=0;i--){const o=e[i];if(o===void 0||o.state!==n)continue;const s=o.declarations[t];if(s!==void 0&&gv(o,r))return{value:yv(s,a),origin:o.origin}}},gv=(e,t)=>e.matches===void 0?!0:t!==void 0&&e.matches(t),yv=(e,t)=>l.isLightDarkColor(e)?e[t]:e,al=(e,t)=>{const r=mv[e];if(!(r===void 0||t===void 0))return r(t)??void 0},Jn=(e,t,r)=>{const n={},a=i=>{const o=n[i];if(o!==void 0)return o;const{width:s,height:c}=e(t,i,r),u={width:s,height:c};return n[i]=u,u};return{get inside(){return a("inside")},get outside(){return a("outside")}}},$t=6,vv=.5,bv=e=>{const t=[];let r=0;const n=U(e.layer.position),a=e.coordSystem.mainAxis==="y";if(e.layer.dataLabels.showDataLabels){const{entries:i,shouldRotate:o}=xv({layer:e.layer,mainAxis:e.coordSystem.mainAxis,panelRect:e.panelRect,measureDataLabel:e.measureDataLabel,formatLabel:e.formatLabel,isFlipped:a});for(const s of i){const c=e.layer.dataLabels.position==="auto"?Tv({mainAxis:e.coordSystem.mainAxis,isStacked:n,isNegativeBar:s.isNegative,shouldRotate:o,bounds:s.bounds,boxes:s.boxes,panelWidth:e.panelRect.width,panelHeight:e.panelRect.height,offset:e.layer.dataLabels.offset}):Ev(e.layer.dataLabels,e.coordSystem.mainAxis,n,s,Tt(e.panelRect));if(c===null){r+=1;continue}const u=s.boxes[c.position];t.push({layerId:e.layer.id,x:c.x,y:c.y,text:s.text,width:u.width,height:u.height,isRotated:c.isRotated,target:"observation",position:c.position,...c.position==="inside"?{backdropColor:s.backdropColor}:{}})}}if(e.layer.dataLabels.showCategoryLabels)for(const i of wv(e,n))t.push(i);if(e.layer.dataLabels.showStackTotals){const i=Dv({layer:e.layer,mainAxis:e.coordSystem.mainAxis,panelRect:e.panelRect,measureDataLabel:e.measureDataLabel,formatAbsolute:e.formatAbsolute});for(const o of i)t.push(o)}return{labels:t,droppedCount:r}},Sv={place:bv,getPercentageValueStrategy:e=>e.position==="fill"?"fill":U(e.position)?"stack":"absoluteGrandTotal"},xv=({layer:e,mainAxis:t,panelRect:r,measureDataLabel:n,formatLabel:a,isFlipped:i})=>{const o=[];let s=!1;const c=e.dataLabels.position==="auto",u=l.extractVariableName(e.mapping.y),d=ot().geomReaders(e);for(const p of e.data){const h=ol(t,p);if(h===null)continue;const m=a(p);if(m==="")continue;const f=Jn(n,"observation",m),g=Qn(h,r);c&&f.inside.width>g.width&&(s=!0);const v=u===null?null:p[u],y=l.isStrictNumericDataValue(v)&&v<0;o.push({isNegative:y,text:m,boxes:f,bounds:g,backdropColor:d.get("color",p)})}return{entries:o,shouldRotate:!i&&s}},Qn=(e,t)=>({x:e.x*t.width,y:e.y*t.height,width:e.width*t.width,height:e.height*t.height}),il=(e,t,r,n,a)=>{if(e==="x"){let s=1-a,c=a-n;return c<0&&(s+=c,c=-c),{x:t,y:s,width:r-t,height:c}}let i=t,o=r-t;return o<0&&(i+=o,o=-o),{x:i,y:1-a,width:o,height:a-n}},ol=(e,t)=>{const r=j(t),n=X(t),a=G(t),i=F(t)??D(t);return r===null||n===null||a===null||i===null?null:il(e,r,n,a,i)},Av=(e,t)=>{const{xMin:r,xMax:n,yMin:a,yMax:i}=t.anchor;return il(e,r,n,a,i)},Iv=(e,t)=>e==="x"?t?"bottom":"top":t?"left":"right",tn=(e,t,r)=>r?{width:t,height:e}:{width:e,height:t},Tv=e=>e.isStacked?Rv({bounds:e.bounds,box:e.boxes.inside,isRotated:e.shouldRotate}):Vv({edge:Iv(e.mainAxis,e.isNegativeBar),bounds:e.bounds,boxes:e.boxes,isRotated:e.shouldRotate,panelWidth:e.panelWidth,panelHeight:e.panelHeight,offset:e.offset}),sl=(e,t)=>e==="x"?{valueAxis:"y",valueDirectionSign:t?1:-1}:{valueAxis:"x",valueDirectionSign:t?-1:1},Lv=e=>e==="panel-start"||e==="panel-end",Ev=(e,t,r,n,a)=>{if(e.position==="auto")return null;const i=r&&e.position==="outside"?"inside":e.position,o=n.boxes[i],s=Lt({box:n.bounds,panel:a,frame:sl(t,n.isNegative),placement:i,justify:e.justify,align:e.align,offset:e.offset,labelWidth:o.width,labelHeight:o.height});if(i==="inside"&&!Lv(e.justify)){const c=t==="y",u=c?n.bounds.width:n.bounds.height;return(c?o.width:o.height)>u+vv?null:{x:s.x,y:s.y,isRotated:!1,position:"inside"}}return{x:s.x,y:s.y,isRotated:!1,position:s.position}},wv=(e,t)=>{const r=[],{categoryPosition:n,categoryJustify:a,categoryAlign:i,categoryOffset:o}=e.layer.dataLabels,s=t&&n==="outside"?"inside":n,c=e.coordSystem.mainAxis,u=Tt(e.panelRect),d=l.extractVariableName(e.layer.mapping.y);for(const p of e.layer.data){const h=ol(c,p);if(h===null)continue;const m=e.formatCategory(p);if(m===null||m==="")continue;const f=Jn(e.measureDataLabel,"category",m),g=f[s],v=Qn(h,e.panelRect),y=d===null?null:p[d],b=l.isStrictNumericDataValue(y)&&y<0,A=Lt({box:v,panel:u,frame:sl(c,b),placement:s,justify:a,align:i,offset:o,labelWidth:g.width,labelHeight:g.height}),T=f[A.position];r.push({layerId:e.layer.id,x:A.x,y:A.y,text:m,width:T.width,height:T.height,isRotated:!1,target:"category",position:A.position})}return r},Rv=({bounds:e,box:t,isRotated:r})=>{const n=tn(t.width,t.height,r);return n.width>e.width||n.height>e.height?null:{x:e.x+e.width/2,y:e.y+e.height/2,isRotated:r,position:"inside"}},Cv=(e,t,r,n)=>{switch(e){case"top":return{edgeCoord:t.y,outwardSign:-1,panelExtent:n};case"bottom":return{edgeCoord:t.y+t.height,outwardSign:1,panelExtent:n};case"left":return{edgeCoord:t.x,outwardSign:-1,panelExtent:r};case"right":return{edgeCoord:t.x+t.width,outwardSign:1,panelExtent:r}}},Vv=({edge:e,bounds:t,boxes:r,isRotated:n,panelWidth:a,panelHeight:i,offset:o})=>{const s=e==="top"||e==="bottom",c=t.x+t.width/2,u=t.y+t.height/2,d=s?t.height:t.width,p=s?t.width:t.height,{edgeCoord:h,outwardSign:m,panelExtent:f}=Cv(e,t,a,i),g=tn(r.inside.width,r.inside.height,n),v=s?g.height:g.width,y=s?g.width:g.height,b=v+o<d,A=y<=p;if(s?b:b&&A){if(s&&!A)return null;if(n)return{x:c,y:u,isRotated:!0,position:"inside"};const w=h-m*(v/2+o);return{...s?{x:c,y:w}:{x:w,y:u},isRotated:!1,position:"inside"}}const T=tn(r.outside.width,r.outside.height,n),L=(s?T.height:T.width)/2,E=h+m*(L+o);return E-L<0||E+L>f?null:{...s?{x:c,y:E}:{x:E,y:u},isRotated:n,position:"outside"}},Dv=({layer:e,mainAxis:t,panelRect:r,measureDataLabel:n,formatAbsolute:a})=>{const i=[],o=e.summary.stackTotals;if(o===void 0||o.length===0)return i;const s=t==="y";for(const c of o){const u=Qn(Av(t,c),r),d=a(c.total),{width:p,height:h}=n("aggregate","outside",d),m=c.anchor.direction==="positive";let f,g;s?(f=m?u.x+u.width+$t+p/2:u.x-$t-p/2,g=u.y+u.height/2):(f=u.x+u.width/2,g=m?u.y-$t-h/2:u.y+u.height+$t+h/2),i.push({layerId:e.id,x:f,y:g,text:d,width:p,height:h,isRotated:!1,target:"aggregate",position:"outside"})}return i},_v=e=>{const t=[];if(!e.layer.dataLabels.showDataLabels)return{labels:t,droppedCount:0};const{offset:r}=e.layer.dataLabels,n=Ov(e.layer);for(const a of e.layer.data){const i=M(a),o=D(a);if(i===null||o===null||!et(i,o))continue;const s=e.formatLabel(a);if(s==="")continue;const{width:c,height:u}=e.measureDataLabel("observation","outside",s),d=Lt({box:{x:i*e.panelRect.width,y:(1-o)*e.panelRect.height,width:0,height:0},panel:Tt(e.panelRect),frame:{valueAxis:"y",valueDirectionSign:-1},...n,offset:r,labelWidth:c,labelHeight:u});t.push({layerId:e.layer.id,x:d.x,y:d.y,text:s,width:c,height:u,isRotated:!1,target:"observation",position:d.position})}return{labels:t,droppedCount:0}},Pv={place:_v,getPercentageValueStrategy:()=>"none"},Ov=e=>{const{position:t,justify:r,align:n}=e.dataLabels;return t==="auto"?{placement:"outside",justify:"end",align:"center"}:{placement:t,justify:dr(e.data,e.mapping)?Xn(r):r,align:n}},Mv=e=>{const t=[];if(!e.layer.dataLabels.showDataLabels)return{labels:t,droppedCount:0};const{offset:r}=e.layer.dataLabels,n=Nv(e.layer),a=n.justify==="panel-start"||n.justify==="panel-end",i=ot().geomReaders(e.layer);for(const o of e.layer.data){const s=M(o),c=D(o);if(s===null||c===null||!et(s,c))continue;const u=e.formatLabel(o);if(u==="")continue;const{width:d,height:p}=e.measureDataLabel("observation","outside",u),h=i.get("size",o)/2,m=Lt({box:{x:s*e.panelRect.width,y:(1-c)*e.panelRect.height,width:0,height:0},panel:Tt(e.panelRect),frame:{valueAxis:"y",valueDirectionSign:-1},...n,offset:a?r:r+h,alignOffset:r+h,labelWidth:d,labelHeight:p});t.push({layerId:e.layer.id,x:m.x,y:m.y,text:u,width:d,height:p,isRotated:!1,target:"observation",position:m.position})}return{labels:t,droppedCount:0}},kv={place:Mv,getPercentageValueStrategy:()=>"none"},Nv=e=>{const{position:t,justify:r,align:n}=e.dataLabels;return t==="auto"?{placement:"outside",justify:"end",align:"center"}:{placement:t,justify:r,align:n}},ll=e=>{const t=j(e),r=X(e),n=G(e),a=F(e);if(t===null||r===null||n===null||a===null)return null;const i=Math.min(t,r),o=Math.abs(r-t),s=Math.max(n,a),c=Math.abs(a-n);return{x:i,y:1-s,width:o,height:c}},cl=e=>{const t=ll(e);if(!t)return null;const r=t.width*Kh,n=t.height*zh;return{x:t.x+r,y:t.y+n,width:t.width-r*2,height:t.height-n*2}},gi=4,Bv=e=>{const t=[];if(!e.layer.dataLabels.showDataLabels)return{labels:t,droppedCount:0};const r=ot().geomReaders(e.layer);for(const n of e.layer.data){const a=cl(n);if(a===null||!Et(n))continue;const i=e.formatLabel(n);if(i==="")continue;const{width:o,height:s}=e.measureDataLabel("observation","inside",i),c=a.width*e.panelRect.width,u=a.height*e.panelRect.height;o+gi>c||s+gi>u||t.push({layerId:e.layer.id,x:(a.x+a.width/2)*e.panelRect.width,y:(a.y+a.height/2)*e.panelRect.height,text:i,width:o,height:s,isRotated:!1,target:"observation",position:"inside",backdropColor:r.get("color",n)})}return{labels:t,droppedCount:0}},Fv={place:Bv,getPercentageValueStrategy:()=>"none"};function ea(e){return{startAngle:e[l.POSITION_VARIABLES.xMin],endAngle:e[l.POSITION_VARIABLES.xMax]}}function ta(e){return{innerRadius:e[l.POSITION_VARIABLES.yMin],outerRadius:e[l.POSITION_VARIABLES.yMax]??e[l.POSITION_VARIABLES.y]}}var $v=" · ",Mr=2,mt=(e,t,r,n)=>{const a=Math.abs(e==="radial"?Math.sin(t):Math.cos(t)),i=Math.abs(e==="radial"?Math.cos(t):Math.sin(t));return a*(r/2)+i*(n/2)},Gv=({wedge:e,labelRadius:t,labelAngle:r,labelWidth:n,labelHeight:a})=>{const i=mt("radial",r,n,a);if(!(t-i>=e.innerRadiusPx-Mr&&t+i<=e.outerRadiusPx+Mr)||t<=0)return!1;const o=Math.abs(e.endAngle-e.startAngle)/2,s=mt("tangential",r,n,a)/t,c=Mr/t;return Math.abs(r-e.midAngle)+s<=o+c},Uv=({x:e,y:t,labelWidth:r,labelHeight:n,panelRect:a})=>e-r/2>=0&&e+r/2<=a.width&&t-n/2>=0&&t+n/2<=a.height,yi=({wedge:e,position:t,offset:r,labelWidth:n,labelHeight:a})=>t==="inside"?{labelRadius:(e.innerRadiusPx+e.outerRadiusPx)/2,labelAngle:e.midAngle,position:"inside"}:{labelRadius:e.outerRadiusPx+r+mt("radial",e.midAngle,n,a),labelAngle:e.midAngle,position:"outside"},Hv=({wedge:e,placement:t,justify:r,align:n,offset:a,labelWidth:i,labelHeight:o})=>{const s=n==="start"?e.startAngle:n==="end"?e.endAngle:e.midAngle,c=a+mt("radial",s,i,o);let u;if(r==="center")u=(e.innerRadiusPx+e.outerRadiusPx)/2;else if(r==="end")u=t==="inside"?e.outerRadiusPx-c:e.outerRadiusPx+c;else if(t==="inside")u=e.innerRadiusPx+c;else{const p=e.innerRadiusPx-c;u=p>=0?p:e.innerRadiusPx+c}let d=s;if(n!=="center"&&u>0){const p=mt("tangential",s,i,o)/u;d=s+(n==="start"?1:-1)*p}return{labelRadius:u,labelAngle:d,position:Gv({wedge:e,labelRadius:u,labelAngle:d,labelWidth:i,labelHeight:o})?"inside":"outside"}},Wv=e=>{const t=[];if(!e.layer.dataLabels.showDataLabels)return{labels:t,droppedCount:0};const{position:r,justify:n,align:a,offset:i,showCategoryLabels:o}=e.layer.dataLabels,s=e.coordSystem.bandAxis==="y"?"inside":"outside",c=e.panelRect.width/2,u=e.panelRect.height/2,d=Math.min(e.panelRect.width,e.panelRect.height)/2,p=ot().geomReaders(e.layer);for(const h of e.layer.data){const{startAngle:m,endAngle:f}=ea(h),{innerRadius:g,outerRadius:v}=ta(h);if(m===null||f===null||v===null)continue;const y=e.formatLabel(h);if(y==="")continue;const b=o?e.formatCategory(h):null,A=b===null?y:`${b}${$v}${y}`,T={startAngle:m,endAngle:f,midAngle:(m+f)/2,innerRadiusPx:(g??0)*d,outerRadiusPx:v*d};let L,E;if(r==="auto"){const I=e.measureDataLabel("observation",s,A);E={width:I.width,height:I.height},L=yi({wedge:T,position:s,offset:i,labelWidth:E.width,labelHeight:E.height});const V=c+Math.sin(L.labelAngle)*L.labelRadius,O=u-Math.cos(L.labelAngle)*L.labelRadius;if(L.position==="outside"&&!Uv({x:V,y:O,labelWidth:E.width,labelHeight:E.height,panelRect:e.panelRect})){const ie=e.measureDataLabel("observation","inside",A);E={width:ie.width,height:ie.height},L=yi({wedge:T,position:"inside",offset:i,labelWidth:E.width,labelHeight:E.height})}}else{const I=Jn(e.measureDataLabel,"observation",A),V=I[r];L=Hv({wedge:T,placement:r,justify:Xn(n),align:a,offset:i,labelWidth:V.width,labelHeight:V.height}),E=I[L.position]}const w=c+Math.sin(L.labelAngle)*L.labelRadius,C=u-Math.cos(L.labelAngle)*L.labelRadius;t.push({layerId:e.layer.id,x:w,y:C,text:A,width:E.width,height:E.height,isRotated:!1,target:"observation",position:L.position,...L.position==="inside"?{backdropColor:p.get("color",h)}:{}})}return{labels:t,droppedCount:0}},Kv={place:Wv,getPercentageValueStrategy:()=>"absoluteGrandTotal"},zv=e=>{const t=k({...e,valueFormat:e.valueFormat.fallback}),r={};for(const[a,i]of Object.entries(e.valueFormat.cases))r[a]=k({...e,valueFormat:i});const n=e.valueFormat.byVariable;return(a,i)=>{if(i===void 0||i[n]===void 0)return t(a);const o=l.getStableKey(i[n]),s=r[o];return s!==void 0?s(a,i):t(a)}},k=e=>{switch(e.valueFormat.type){case"currency":return Ks(e);case"date":return By(e);case"datetime":return Fy(e);case"day_month":return js(e);case"decimal":return zs(e);case"duration":return Gn(e);case"integer":return Ys(e);case"month":return Xs(e);case"month_year":return Wn(e);case"percentage":return qs(e);case"quarter":return Kn(e);case"text":return $n(e);case"weekly_date_range":return Zs(e);case"weekly_date_range_with_year":return Js(e);case"year":return zn(e);case"time":return Qs(e);case"lookup":return zv({...e,valueFormat:e.valueFormat});default:{const t=e.valueFormat;throw new l.InternalError({message:`Unhandled value format: ${t.type}`})}}};function ra({layer:e,numberFormat:t,locale:r}){return k({valueFormat:fp(e),locale:r,numberFormat:t})}var Yv=(e,t)=>{const r=l.extractVariableName(t.x);return r!==null&&r!==l.CONSTANT_VARIABLES.x?{read:it(e,t),variable:r}:{read:re,variable:l.GROUP_VARIABLES.group}},ul=({layer:e,coordSystem:t,axes:r,numberFormat:n,panelRect:a,measureDataLabel:i,formattingLocale:o,percentageValueStrategy:s})=>{const c=ra({layer:e,numberFormat:n,locale:o}),u=t.type==="cartesian"&&t.mainAxis==="y";return{layer:e,coordSystem:t,panelRect:a,measureDataLabel:i,formatLabel:Jv({layer:e,numberFormat:n,axes:r,locale:o,absoluteFormatter:c,percentageValueStrategy:s,isFlipped:u}),formatAbsolute:c,formatCategory:qv({layer:e,numberFormat:n,locale:o})}},qv=({layer:e,numberFormat:t,locale:r})=>{const{read:n,variable:a}=Yv(e.data,e.mapping),i=k({valueFormat:e.data.hasVariable(a)?e.data.getValueFormat(a):{type:"text"},locale:r,numberFormat:t});return o=>{const s=n(o);return s===null?null:i(s,o)}},jv=(e,t,r)=>{switch(t){case"stack":return Xv(e);case"fill":return Zv(e,r);case"absoluteGrandTotal":return()=>e.summary.absoluteGrandTotal??null;case"none":return()=>null}},Xv=e=>{const t=l.extractVariableName(e.mapping.x);let r=null,n=!1;return a=>{const i=e.summary.stackTotals;if(i===void 0||i.length===0||t===null)return null;if(!n){r=new Map;for(const c of i)r.set(c.xKey,c);n=!0}const o=a[t];if(o==null)return null;const s=r?.get(Cn(a,t));return s===void 0?null:s.total}},Zv=(e,t)=>{const r=t?j:G,n=t?X:F,a=gt(e);return i=>{const o=r(i),s=n(i);if(!l.isStrictNumericDataValue(o)||!l.isStrictNumericDataValue(s))return null;const c=Math.abs(s-o);if(c===0)return null;const u=a(i);return l.isStrictNumericDataValue(u)?u/c:null}},Jv=({layer:e,numberFormat:t,axes:r,locale:n,absoluteFormatter:a,percentageValueStrategy:i,isFlipped:o})=>{const s=Q(e.data,e.dataLabels.labelSource),c=jv(e,i,o),u=Qv({layer:e,numberFormat:t,axes:r,locale:n,absoluteFormatter:a}),d=k({valueFormat:{type:"percentage"},locale:n,numberFormat:t}),p=e.dataLabels.format==="percentage"&&dl(e);return h=>{const m=s(h);if(m===null)return"";if(!p||!l.isStrictNumericDataValue(m))return u(m,h);const f=c(h);return f===null||f===0?u(m,h):d(m/f)}},Qv=({layer:e,numberFormat:t,axes:r,locale:n,absoluteFormatter:a})=>{const i=e.dataLabels.labelSource,o=l.extractVariableName(i);if(o!==null){if(dl(e))return a;const s=eb(e,r,t,n,o);if(s!==null)return s}return k({valueFormat:tb(e.data,i),locale:n,numberFormat:t})},dl=e=>{const t=l.extractVariableName(e.dataLabels.labelSource);return t===null?!1:t===l.extractVariableName(lr(e.position,e.mapping))},eb=(e,t,r,n,a)=>{const i=l.extractVariableName(e.mapping.x);if(i===null||i!==a)return null;const o=t.find(s=>s.scaleAestheticKey==="x");return o===void 0?null:k({valueFormat:o.valueFormat,locale:n,numberFormat:r})},tb=(e,t)=>{const r=l.extractConstantValue(t);if(r!==void 0)return l.isNumericDataValue(r)?{type:"decimal"}:l.isTemporalDataValue(r)?{type:"date"}:{type:"text"};const n=l.extractVariableName(t);return n===null||!e.hasVariable(n)?{type:"text"}:e.getValueFormat(n)},na={bar:{cartesian:Sv,polar:Kv},line:{cartesian:Pv},point:{cartesian:kv},area:{cartesian:dv},tile:{cartesian:Fv}},rb=(e,t)=>na[e]?.[t]!==void 0,nb=({layers:e,coordSystem:t,axes:r,numberFormat:n,parsingLocale:a,panelRect:i,measureDataLabel:o,formattingLocale:s,plotBottomY:c,isFooterChromeReserved:u})=>{const d=[],p=s??a,h=t.type;let m=0;for(const f of e){if(!f.dataLabels.showDataLabels&&!f.dataLabels.showStackTotals&&!f.dataLabels.showCategoryLabels)continue;const g=f.geom,v=na[g]?.[h];if(v===void 0)continue;const y=ul({layer:f,coordSystem:t,axes:r,numberFormat:n,panelRect:i,measureDataLabel:o,formattingLocale:p,percentageValueStrategy:v.getPercentageValueStrategy(f)}),b=v.place(y);m+=b.droppedCount;for(const A of b.labels)ib(A,h,c,u)||d.push(A)}return{labels:d,warnings:m>0?[ab(m)]:[]}},ab=e=>({code:"DATA_LABELS_DROPPED",severity:"warning",kind:"user-input",message:e===1?"Dropped 1 data label that did not fit under position 'auto'.":`Dropped ${e} data labels that did not fit under position 'auto'.`,suggestion:"Set dataLabels.position to 'outside' to keep labels that do not fit inside the bars.",context:{actual:e}}),ib=(e,t,r,n)=>t==="polar"&&n&&e.position==="outside"&&e.y+e.height/2>r;function*ob({layers:e,coordSystem:t,axes:r,numberFormat:n,panelRect:a,measureDataLabel:i,locale:o}){if(!(t.type!=="cartesian"||a.width<=0||a.height<=0))for(const s of e){if(!s.dataLabels.showDataLabels&&!s.dataLabels.showStackTotals)continue;const c=na[s.geom]?.cartesian;if(c===void 0)continue;const u=ul({layer:s,coordSystem:t,axes:r,numberFormat:n,panelRect:a,measureDataLabel:i,formattingLocale:o,percentageValueStrategy:c.getPercentageValueStrategy(s)});for(const d of c.place(u).labels)yield{x:a.x+d.x-d.width/2,y:a.y+d.y-d.height/2,width:d.width,height:d.height}}}var kr={abbreviation:"none",decimals:"auto"},pl=({locale:e,kind:t,startValue:r,endValue:n,valueFormat:a})=>{if(r===null||n===null)return"n/a";switch(t){case"absolute-difference":return k({valueFormat:a,locale:e,numberFormat:kr,intlOptions:{signDisplay:"always"}})(n-r);case"relative-difference":{const i=n-r;if(i===0)return"0%";const o=i/r;return o===Number.POSITIVE_INFINITY?"∞":o===Number.NEGATIVE_INFINITY?"-∞":k({valueFormat:{type:"percentage"},locale:e,numberFormat:kr,intlOptions:{signDisplay:"always"}})(o)}case"proportion":{if(n-r===0)return"=";const i=n/r;return i===Number.POSITIVE_INFINITY?"∞":i===Number.NEGATIVE_INFINITY?"-∞":`${k({valueFormat:{type:"decimal"},locale:e,numberFormat:kr,intlOptions:{maximumFractionDigits:1}})(i)}x`}}},sb=2,lb=6,cb=6,ub=15,db=15,pb=2.5,mb=.5,hb=.25,ml=e=>{const t=e-sb,r=1+mb*t,n=1+hb*t;return{arrowStartGap:lb*r,arrowEndGap:cb*r,offsetFromHigherObservation:ub*n,arrowheadSize:pb*e,curveRadius:db*n,strokeWidth:e}},fb=(e,t,r,n)=>{const a=n.offsetFromHigherObservation+n.arrowheadSize+n.arrowEndGap;return e?Math.max(t.x,r.x)+a:Math.min(t.y,r.y)-a},gb=(e,t,r,{arrowStartGap:n,arrowEndGap:a,curveRadius:i})=>{const o={x:e.x,y:e.y-n},s={x:e.x,y:r},c={x:t.x,y:r},u={x:t.x,y:t.y-a},d=t.x>e.x?1:-1;return`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var Hd=Object.create,mo=Object.defineProperty,Wd=Object.getOwnPropertyDescriptor,Kd=Object.getOwnPropertyNames,zd=Object.getPrototypeOf,Yd=Object.prototype.hasOwnProperty,qd=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(var a=Kd(t),i=0,o=a.length,s;i<o;i++)s=a[i],!Yd.call(e,s)&&s!==r&&mo(e,s,{get:(c=>t[c]).bind(null,s),enumerable:!(n=Wd(t,s))||n.enumerable});return e},ir=(e,t,r)=>(r=e!=null?Hd(zd(e)):{},qd(t||!e||!e.__esModule?mo(r,"default",{value:e,enumerable:!0}):r,e));const l=require("./config.types-p7nmFVnK.cjs");let be=require("color2k"),ho=require("date-fns"),at=require("lodash-es"),st=require("d3-time"),jd=require("date-fns/differenceInDays"),Re=require("d3-regression"),se=require("d3-scale"),je=require("d3-interpolate"),$=require("d3-scale-chromatic"),Je=require("lodash-es/clamp");Je=ir(Je,1);let jt=require("lodash-es/merge");jt=ir(jt,1);let Wr=require("humanize-duration");Wr=ir(Wr,1);let Pe=require("d3-shape"),Xd=require("d3-delaunay"),Xt=require("lodash-es/isEqual");Xt=ir(Xt,1);typeof window<"u"&&(window.__GRAPHY_SDK__??={},window.__GRAPHY_SDK__.vizEngine="1.9.0-beta.1789377729015");var Zd=1e6;function te(e){return String(Math.round(e*Zd))}var Na="#FFFFFF",Vr="#1A1A1A",Jd=4.5,fo=e=>{try{return(0,be.getContrast)(e,Na)>(0,be.getContrast)(e,Vr)?Na:Vr}catch{return Vr}},Qd=(e,t)=>{try{const r=go(void 0,t);return r===void 0||(0,be.getContrast)(r,e)>=Jd?e:fo(r)}catch{return e}},go=(e,t)=>{try{if(e===void 0){const[,,,n]=(0,be.parseToRgba)(t);return n>=1?t:void 0}const[,,,r]=(0,be.parseToRgba)(e);return r>=1?e:(0,be.parseToRgba)(t)[3]<1?void 0:(0,be.mix)(t,(0,be.opacify)(e,1),r)}catch{return}},Ba=0;function W(){return Ba+=1,`${Math.random().toString(36).slice(2,6)}${Ba.toString(36)}`}var he=Math.PI*2,ep=8,tp=1e-9,rp=[0,Math.PI/2,Math.PI,he*3/4],yo=(e,t)=>Math.abs(t-e)>=he-tp,Oe=e=>(e%he+he)%he,Zt=(e,t,r)=>{if(yo(t,r))return!0;const n=Oe(r-t);return Oe(e-t)<=n},Qe=(e,t)=>{const r=Math.abs(Oe(e)-Oe(t));return Math.min(r,he-r)},Fa=(e,t)=>{const r=Oe(t-e);return r>Math.PI?r-he:r},vo=(e,t,r)=>e*he+t+r,fe=(e,t)=>({x:t*Math.sin(e),y:t*Math.cos(e)}),Ce=(e,t)=>{const r=fe(e,t);return{x:.5+r.x/2,y:.5+r.y/2}},np=(e,t,r,n)=>{const a=[Ce(e,r),Ce(e,n),Ce(t,r),Ce(t,n)],i=Math.max(r,n),o=rp.filter(c=>Zt(c,e,t)).map(c=>Ce(c,i)),s=[...a,...o];return{xMin:Math.min(...s.map(c=>c.x)),xMax:Math.max(...s.map(c=>c.x)),yMin:Math.min(...s.map(c=>c.y)),yMax:Math.max(...s.map(c=>c.y))}},or=(e,t)=>({angle:Oe(Math.atan2(e,t)),radius:Math.hypot(e,t)}),sr=(e,t)=>{const r=e.x-.5,n=e.y-.5;return{x:t>=1?r*2*t:r*2,y:t>=1?n*2:n*2/t}},mn=(e,t)=>{const{x:r,y:n}=sr(e,t);return or(r,n)};function M(e){return e[l.POSITION_VARIABLES.x]}function D(e){return e[l.POSITION_VARIABLES.y]}function j(e){return e[l.POSITION_VARIABLES.xMin]}function X(e){return e[l.POSITION_VARIABLES.xMax]}function G(e){return e[l.POSITION_VARIABLES.yMin]}function F(e){return e[l.POSITION_VARIABLES.yMax]}function hn(e){return e[l.POSITION_VARIABLES.yRaw]}function ap(e,t){return e[l.resolveScaledAestheticVariable(t)]}var ip={xMin:0,xMax:1,yMin:0,yMax:1},bo=(e,t)=>{const r=j(e)??M(e),n=X(e)??M(e),a=G(e)??D(e),i=F(e)??D(e);return!l.isStrictNumericDataValue(r)||!l.isStrictNumericDataValue(n)||!l.isStrictNumericDataValue(a)||!l.isStrictNumericDataValue(i)?null:t.type!=="polar"?{xMin:r,xMax:n,yMin:a,yMax:i}:{...np(r,n,a,i),frame:"disk"}},ft=(e,t)=>{const r=(e.xMin+e.xMax)/2,n=(e.yMin+e.yMax)/2;switch(t){case"top":return{x:r,y:e.yMax};case"bottom":return{x:r,y:e.yMin};case"left":return{x:e.xMin,y:n};case"right":return{x:e.xMax,y:n};case"top-left":return{x:e.xMin,y:e.yMax};case"top-right":return{x:e.xMax,y:e.yMax};case"bottom-left":return{x:e.xMin,y:e.yMin};case"bottom-right":return{x:e.xMax,y:e.yMin};default:return{x:r,y:n}}},So=e=>ft(ip,e),xo=["stack","dodge","identity","fill"],fn=["solid","dashed","dotted"],gn=e=>fn.includes(e);function U(e){return e==="stack"||e==="fill"}var Q=(e,t)=>{const r=l.extractConstantValue(t);if(r!==void 0)return()=>r;const n=l.extractVariableName(t);return l.isDefined(n)?a=>{const i=a[n];if(i===void 0)return null;switch(e.getType(n)){case"numeric":return l.isStrictNumericDataValue(i)?i:null;case"categorical":return l.isStrictCategoricalDataValue(i)?i:null;case"temporal":return l.isStrictTemporalDataValue(i)?i:null;default:return null}}:()=>null},it=(e,t)=>Q(e,t.x),yn=(e,t)=>Q(e,t.y),op=(e,t)=>Q(e,t.label),Ao=(e,t)=>Q(e,t.color),sp=(e,t)=>Q(e,t.size),lp=(e,t)=>Q(e,t.alpha),cp=(e,t)=>Q(e,t.group),up=(e,t)=>Q(e,t.strokeWidth),$a={variable:l.POSITION_VARIABLES.yRaw};function lr(e,t){return U(e)?$a:t.y??$a}function gt(e){return Q(e.data,lr(e.position,e.mapping))}var Ne=e=>{const t=l.extractVariableName(e.mapping.x);return t!==null&&t!==l.CONSTANT_VARIABLES.x?t:l.GROUP_VARIABLES.group},vn=e=>dp(e)?l.extractVariableName(e.mapping.y):null,Io=e=>vn(e)===null?null:gt(e),bn=e=>e.spatialKind!=="cells",dp=e=>e.spatialKind==="points"||e.spatialKind==="cells",To=(e,t)=>e.yScaleType===t.yScaleType&&zr(e.valueFormat)===zr(t.valueFormat),Kr=e=>`${e.yScaleType} y axis, ${zr(e.valueFormat)}`,zr=e=>e.type==="currency"?`${e.type}:${e.iso}`:e.type,Lo=(e,t)=>{const r=l.toExplicitValueFormat(e.data.getValueFormat(Ne(e))),n=vn(e);return a=>({...a,anchorValue:l.parseAddressingValue(a.anchorValue,r,t),...a.groupValue!==void 0&&{groupValue:l.parseAddressingValue(a.groupValue,l.toExplicitValueFormat(e.data.getValueFormat(l.GROUP_VARIABLES.group)),t)},...a.crossValue!==void 0&&n!==null&&{crossValue:l.parseAddressingValue(a.crossValue,l.toExplicitValueFormat(e.data.getValueFormat(n)),t)}})};function Eo(e){return e instanceof l.VizError?{severity:"error",kind:e.kind,code:e.code,message:e.message,...e.context!==void 0?{context:e.context}:{},...e.suggestion!==void 0?{suggestion:e.suggestion}:{}}:{severity:"error",kind:"internal",code:"INTERNAL_INVARIANT",message:e instanceof Error?e.message:String(e)}}function P(e,t){return Ro(e,t)}function R(e,t){for(const r of Object.keys(t)){const n=t[r];if(n!==void 0&&n!==e[r])return{...e,...t}}return e}function wo(e,t,r){if(e[t]===r)return e;const n=[...e];return n[t]=r,n}function Be(e,t){let r=null;for(const[n,a]of e.entries()){const i=t(a,n);if(i===a){r?.push(i);continue}r??=e.slice(0,n),r.push(i)}return r??e}function Ro(e,t){let r=!1;const n={...e};for(const[a,i]of Object.entries(t)){const o=e[a];if(l.isPlainObject(i)&&l.isPlainObject(o)){const s=Ro(o,i);s!==o&&(n[a]=s,r=!0)}else i!==void 0&&i!==o&&(n[a]=i,r=!0)}return r?n:e}function cr(e){return{pipe:t=>{const r=t(e);return cr({...e,...r})},result:()=>e}}var pp=(e,t)=>{if(!l.isLookupValueFormat(e))return e;const r=t[e.byVariable];return r===void 0?e.fallback:e.cases[l.getStableKey(r)]??e.fallback},Sn=e=>e.type==="polar"?"disk":"panel",ur=(e,t)=>{if(e!=="disk")return{x:0,y:0,width:t.width,height:t.height};const r=Math.min(t.width,t.height);return{x:(t.width-r)/2,y:(t.height-r)/2,width:r,height:r}},Ga=(e,t)=>{if(e.frame!=="disk")return{x:e.x,y:e.y};if(t.width<=0||t.height<=0)return{x:0,y:0};const r=ur(e.frame,t),n=r.y+(1-e.y)*r.height;return{x:(r.x+e.x*r.width)/t.width,y:1-n/t.height}};function Z(e,t){return e==="x"?t.x:t.y}function ge(e,t){return e==="x"?t.y:t.x}function ut(e,t){return{main:Z(e,t),cross:ge(e,t)}}function Ua(e,t){return e==="x"?{x:t.main,y:t.cross}:{x:t.cross,y:t.main}}function mp(e){return e.type==="cartesian"}var re=e=>e[l.GROUP_VARIABLES.group],yt=e=>{const t=Ne(e),r=Io(e),n=bn(e)&&t!==l.GROUP_VARIABLES.group;return a=>{const i=a[t]??null;if(i===null)return null;const o=r===null?null:r(a);if(r!==null&&o===null)return null;const s=n?re(a)??null:null;return{layerId:e.id,anchorValue:i,...o!==null&&{crossValue:o},...s!==null&&{groupValue:s}}}},et=(e,t)=>e>=0&&e<=1&&t>=0&&t<=1,hp={type:"decimal"};function Co(e){return e.length>0&&e.every(t=>t.data.size()===0)}function xn(e,t){return t!==null&&e.data.hasVariable(t)?e.data.getValueFormat(t):hp}function fp(e){return xn(e,l.extractVariableName(e.mapping.y))}function Vo({geom:e,position:t,mapping:r,purpose:n}){return e.resolveValueSource?.(r,n)??lr(t,r)}function Do(e,t){const r=Vo({geom:t,position:e.position,mapping:e.mapping,purpose:"measurement"}),n=l.extractVariableName(r),a=n===l.POSITION_VARIABLES.yRaw?l.extractVariableName(e.mapping.y):n;return{read:Q(e.data,r),valueFormat:xn(e,a)}}var _o=e=>{const t=Ne(e),r=Io(e),n=bn(e);return(a,i)=>!l.areDataValuesEqual(a[t]??null,i.anchorValue)||!(r===null||i.crossValue===void 0||l.areDataValuesEqual(r(a),i.crossValue))?!1:!n||i.groupValue===void 0?!0:l.areDataValuesEqual(re(a),i.groupValue)},Po=e=>{const t=l.extractVariableName(e.mapping.y),r=gt(e);return(n,a)=>t!==null&&a===t?r(n):n[a]??null},gp=["lt","lte","gt","gte","range"],yp={highlight:{subject:"Highlight predicate",effect:"dropping this highlight"},"selection-anchor":{subject:"Selection anchor predicate",effect:"dropping this annotation"},"style-rule":{subject:"Style rule predicate",effect:"dropping this rule"}},me=()=>!1,He=()=>!0;function vt(e,t){return{hasVariable:r=>e.data.hasVariable(r),getType:r=>e.data.getType(r),getValueFormat:r=>e.data.getValueFormat(r),readValue:Po(e),parsingLocale:t}}function xe(e,t){if("and"in e){const r=e.and.map(n=>xe(n,t)).filter(n=>n!==He);return r.includes(me)?me:r.length===0?He:n=>{for(const a of r)if(!a(n))return!1;return!0}}if("or"in e){const r=e.or.map(n=>xe(n,t)).filter(n=>n!==me);return r.includes(He)?He:r.length===0?me:n=>{for(const a of r)if(a(n))return!0;return!1}}if("not"in e){const r=xe(e.not,t);return r===me?He:r===He?me:n=>!r(n)}return bp(e,t)}function Ae(e,t,r="highlight"){return"and"in e?e.and.flatMap(n=>Ae(n,t,r)):"or"in e?e.or.flatMap(n=>Ae(n,t,r)):"not"in e?Ae(e.not,t,r):vp(e,t,r)}function vp(e,t,r){const{subject:n,effect:a}=yp[r];if(!t.hasVariable(e.variable))return[{code:"UNKNOWN_VARIABLE",message:`${n} references unknown variable '${e.variable}' — ${a}.`,context:{variableName:e.variable},suggestion:`Map '${e.variable}' in the layer or correct the variable name in the predicate.`}];const i=Sp(e);return i!==null&&t.getType(e.variable)==="categorical"?[{code:"INVALID_PREDICATE_OPERATOR",message:`${n} uses ordering operator '${i}' on categorical variable '${e.variable}' — ${a}. Use 'eq' or 'oneOf' instead.`,context:{variableName:e.variable},suggestion:"Use 'eq' or 'oneOf' for categorical variables."}]:[]}function bp(e,t){if(!t.hasVariable(e.variable))return me;const r=l.toExplicitValueFormat(t.getValueFormat(e.variable)),n=a=>l.parseAddressingValue(a,r,t.parsingLocale);if("eq"in e){const a=n(e.eq);return i=>l.areDataValuesEqual(t.readValue(i,e.variable),a)}if("oneOf"in e){const a=e.oneOf.map(n);return i=>{const o=t.readValue(i,e.variable);for(const s of a)if(l.areDataValuesEqual(o,s))return!0;return!1}}if("lt"in e){const a=n(e.lt);return i=>We(t.readValue(i,e.variable),a)==="less"}if("lte"in e){const a=n(e.lte);return i=>{const o=We(t.readValue(i,e.variable),a);return o==="less"||o==="equal"}}if("gt"in e){const a=n(e.gt);return i=>We(t.readValue(i,e.variable),a)==="greater"}if("gte"in e){const a=n(e.gte);return i=>{const o=We(t.readValue(i,e.variable),a);return o==="greater"||o==="equal"}}if("range"in e){const[a,i]=e.range,o=n(a),s=n(i);return c=>{const u=t.readValue(c,e.variable),d=We(u,o),p=We(u,s);return d==="incomparable"||p==="incomparable"?!1:(d==="greater"||d==="equal")&&(p==="less"||p==="equal")}}return me}function Sp(e){for(const t of gp)if(t in e)return t;return null}function We(e,t){if(e===null||t===null)return"incomparable";if(l.isStrictTemporalDataValue(e)&&l.isStrictTemporalDataValue(t)){const r=e.getTime(),n=t.getTime();return r<n?"less":r>n?"greater":"equal"}return l.isStrictNumericDataValue(e)&&l.isStrictNumericDataValue(t)?e<t?"less":e>t?"greater":"equal":"incomparable"}var xp=(e,t,r,n,a,i)=>{const o=Mo(e,t,r.predicate,n,a,i);if(o===null)return null;const s=Oo(r.padding),c=s===null?Tp(o,r.padding):o,u={x:c.xMin,y:c.yMin,width:Math.max(0,c.xMax-c.xMin),height:Math.max(0,c.yMax-c.yMin),frame:c.frame};return s===null?u:{...u,defer:s}},Ap=(e,t,r,n,a,i)=>{const o=Mo(e,t,r.predicate,n,a,i);return o===null?null:{...ft(o,r.align),frame:o.frame}},Oo=e=>e===void 0||typeof e=="number"||e.unit!=="px"?null:{type:"px-offset",x:e.x??0,y:e.y??0},Mo=(e,t,r,n,a,i)=>{if(t.has(r))return t.get(r)??null;let o=null,s=!1;const c=new Map;for(const u of n){if(!u.interactive)continue;const d=Ae(r,u.data,"selection-anchor");if(d.length>0){for(const h of d)c.set(`${h.code}:${h.message}`,h);continue}s=!0;const p=xe(r,vt(u,i));if(p!==me)for(const h of u.data){if(!p(h))continue;const m=bo(h,a);m!==null&&(o=o===null?m:Ip(o,m))}}if(!s)for(const u of c.values())e.diagnostics.addWarning(u);return t.set(r,o),o},Ip=(e,t)=>({frame:e.frame,xMin:Math.min(e.xMin,t.xMin),xMax:Math.max(e.xMax,t.xMax),yMin:Math.min(e.yMin,t.yMin),yMax:Math.max(e.yMax,t.yMax)}),Tp=(e,t)=>{if(t===void 0)return e;const{x:r=0,y:n=0}=typeof t=="number"?{x:t,y:t}:t;return{...e,xMin:e.xMin-r,xMax:e.xMax+r,yMin:e.yMin-n,yMax:e.yMax+n}},Jt=(e,t,r)=>{const n=Ep(e,t,r);return n===null?null:n.defer?.type==="annotation-ref"?n:wp(n,t.offset,e.coordSystem)},ko=(e,t)=>t.anchorType==="selection"?xp(e.container,e.selectionBoxCache,t,e.layers,e.coordSystem,e.parsingLocale):t.anchorType==="annotation"?{x:0,y:0,width:0,height:0,defer:{type:"annotation-ref",ref:t.ref,align:"center"}}:{x:t.x,y:1-t.y-t.height,width:t.width,height:t.height},An=(e,t,r)=>Yr(e,t,r)?.point??null,Yr=({container:e,layers:t,coordSystem:r,parsingLocale:n},a,i)=>{for(const o of t){const s=e.geomRegistry.get(o.geom),{resolveAnchorPosition:c}=s;if(c===void 0||a.layerId!==void 0&&o.id!==a.layerId||a.layerId===void 0&&!o.interactive)continue;const u=Do(o,s),d=_o(o),p=yt(o),h=Lo(o,n)(a);let m=-1;for(const f of o.data){if(m+=1,!d(f,h))continue;const g=c(f,{coordSystem:r,position:o.position,purpose:i,align:a.align});if(g===null)continue;const v=No(o,f,u);if(v===null)continue;const y=p(f);if(y!==null)return{point:{...g,...v,frame:Sn(r),observationIndex:m,anchor:a.align===void 0?y:{...y,align:a.align}},layerId:o.id}}}return null},Lp=(e,t)=>{const{layers:r,coordSystem:n,scales:a,parsingLocale:i}=e;if(n.type!=="cartesian")return null;const o=a.x,s=a.y;if(o===void 0||s===void 0||o.kind!=="position"||s.kind!=="position")return null;const c=Wa(t.x,"x",r,i),u=Wa(t.y,"y",r,i);if(c===null||u===null)return null;const d=o.map(c),p=s.map(u);if(!et(d,p))return null;const h=Ha(d,o,Rp(e)),m=Ha(p,s),f=Ua(n.mainAxis,{main:h.min,cross:m.min}),g=Ua(n.mainAxis,{main:h.max,cross:m.max});return ft({xMin:f.x,xMax:g.x,yMin:f.y,yMax:g.y},t.align??"center")},No=(e,t,r)=>{const n=r.read(t);return l.isStrictNumericDataValue(n)?{geom:e.geom,measurementValue:n,valueFormat:pp(r.valueFormat,t),yScaleType:e.yScaleType}:null},Ep=(e,t,r)=>{switch(t.anchorType){case"panel":return{x:t.x,y:1-t.y};case"axis":return Lp(e,t);case"selection":return Ap(e.container,e.selectionBoxCache,t,e.layers,e.coordSystem,e.parsingLocale);case"annotation":return{x:0,y:0,defer:{type:"annotation-ref",ref:t.ref,align:t.align??"center",offset:t.offset}};case"observation":return An(e,Cp(t),r)}},wp=(e,t,r)=>{if(t===void 0||r.type==="polar")return e;const n=Oo(t);return n!==null?{...e,defer:n}:{...e,x:e.x+(t.x??0),y:e.y-(t.y??0)}},Ha=(e,t,r=1)=>{const{bandwidth:n}=t;if(n===null||n<=0)return{min:e,max:e};const a=n*r/2;return{min:e-a,max:e+a}},Rp=({container:e,layers:t,coordSystem:r})=>{let n=0;for(const a of t){const i=e.geomRegistry.get(a.geom).resolveBandFraction?.(a.params,r);i!==void 0&&(n=Math.max(n,i))}return n>0?n:1},Cp=e=>({layerId:e.layerId,anchorValue:e.anchorValue,groupValue:e.groupValue,crossValue:e.crossValue,align:e.align}),Wa=(e,t,r,n)=>{for(const a of r){const i=l.extractVariableName(a.mapping[t]);if(!(i===null||i===l.CONSTANT_VARIABLES.x))return l.parseValue(e,l.toExplicitValueFormat(a.data.getValueFormat(i)),n)}return e},Vp=class extends l.Stage{constructor(e){super(),this.container=e}dependencies(e){return[e.annotations,e.layers,e.coordSystem,e.scales.x,e.scales.y,e.config.parsingLocale]}run(e){const{annotations:t,layers:r,coordSystem:n,scales:a,config:i}=e,o={container:this.container,layers:r,coordSystem:n,scales:a,selectionBoxCache:new Map,parsingLocale:i.parsingLocale},s={differenceArrows:Gp(o,t.differenceArrows),shapes:Op(o,t.shapes),arrows:kp(o,t.arrows),textAnnotations:Np(o,t.textAnnotations),images:Mp(o,t.images),stickers:Bp(o,t.stickers),pinnedNumbers:Fp(o,t.pinnedNumbers),comments:$p(o,t.comments)};return Dp(this.container,s),_p(this.container,s),s}},le=(e,t,r,n)=>{e.diagnostics.addWarning({code:"ANNOTATION_ANCHOR_UNRESOLVED",message:`Annotation "${r}" (${t}) ${n} — dropping this annotation.`,context:{annotationId:r,kind:t},suggestion:"Check that the anchor points at data, an axis value or a panel position that exists."})},Dp=(e,t)=>{const r=new Set;for(const n of Object.values(t))for(const{id:a}of n){if(r.has(a)){e.diagnostics.addWarning({code:"ANNOTATION_DUPLICATE_ID",message:`More than one annotation carries id "${a}" — references to it resolve to the first, and the rest cannot be addressed.`,context:{annotationId:a},suggestion:"Give each annotation its own id."});continue}r.add(a)}},_p=(e,t)=>{const r=new Set;for(const n of Object.values(t))for(const a of n)r.add(a.id);for(const{id:n,ref:a}of Pp(t))r.has(a)||e.diagnostics.addWarning({code:"ANNOTATION_REF_NOT_FOUND",message:`Annotation "${n}" references id "${a}", whose annotation could not be anchored and was dropped.`,context:{annotationId:n,ref:a},suggestion:"Fix the anchor on the target annotation or point this reference at one that resolves."})},Pp=e=>{const t=[],r=(n,a)=>{a.defer?.type==="annotation-ref"&&t.push({id:n,ref:a.defer.ref})};for(const n of e.shapes)r(n.id,n.region);for(const n of e.images)r(n.id,n.region);for(const n of e.arrows)r(n.id,n.start),r(n.id,n.end);for(const n of e.textAnnotations)r(n.id,n.at);for(const n of e.stickers)r(n.id,n.at);return t},Op=(e,t)=>{const r=[];for(const n of t){const a=ko(e,n.region);if(a===null){le(e.container,"shape",n.id,"has a region anchor that resolves to nothing");continue}r.push({id:n.id,kind:n.kind,zOrder:n.zOrder,region:a})}return r},Mp=(e,t)=>{const r=[];for(const n of t){const a=ko(e,n.region);if(a===null){le(e.container,"image",n.id,"has a region anchor that resolves to nothing");continue}r.push({id:n.id,src:n.src,zOrder:n.zOrder,region:a,fit:n.fit})}return r},kp=(e,t)=>{const r=[];for(const n of t){const a=Jt(e,n.start,"pin"),i=Jt(e,n.end,"pin");if(a===null||i===null){le(e.container,"arrow",n.id,`has ${Bo(a,i)} resolving to nothing`);continue}r.push({id:n.id,start:a,end:i,startArrowheadStyle:n.startArrowheadStyle,endArrowheadStyle:n.endArrowheadStyle})}return r},Np=(e,t)=>{const r=[];for(const n of t){const a=Jt(e,n.at,"pin");if(a===null){le(e.container,"text",n.id,"has a point anchor that resolves to nothing");continue}r.push({id:n.id,content:n.content,at:a,width:n.width,align:n.align})}return r},Bp=(e,t)=>{const r=[];for(const n of t){const a=Jt(e,n.at,"pin");if(a===null){le(e.container,"sticker",n.id,"has a point anchor that resolves to nothing");continue}r.push({id:n.id,at:a,sticker:n.sticker})}return r},Fp=(e,t)=>{const r=[];for(const n of t){const a=An(e,n.at,"pin");if(a===null){le(e.container,"pinnedNumber",n.id,"matches no observation");continue}r.push({id:n.id,at:a})}return r},$p=(e,t)=>{const r=[];for(const n of t){const a=An(e,n.at,"pin");if(a===null){le(e.container,"comment",n.id,"matches no observation");continue}r.push({id:n.id,at:a,content:n.content})}return r},Gp=(e,t)=>{if(e.coordSystem.type!=="cartesian"){for(const n of t)le(e.container,"differenceArrow",n.id,"needs a cartesian coord system");return[]}const r=[];for(const n of t){const a=Yr(e,n.start,"value"),i=Yr(e,n.end,"value");if(a===null||i===null){le(e.container,"differenceArrow",n.id,`has ${Bo(a,i)} matching no observation`);continue}if(a.layerId===i.layerId&&a.point.observationIndex===i.point.observationIndex){le(e.container,"differenceArrow",n.id,"has both ends on the same observation");continue}Up(e,n,a.point,i.point),r.push({id:n.id,start:a.point,end:i.point,label:n.label,labelCrossPosition:n.labelCrossPosition})}return r},Bo=(e,t)=>e===null&&t===null?"start and end anchors":e===null?"a start anchor":"an end anchor",Up=(e,t,r,n)=>{To(r,n)||e.container.diagnostics.addWarning({code:"INCOMPARABLE_ARROW_ENDPOINTS",message:`Difference arrow "${t.id}" measures between endpoints on different bases, so its label reports a quantity that does not exist.`,context:{annotationId:t.id,expected:Kr(r),actual:Kr(n)},suggestion:"Point both ends at observations sharing one y scale and one unit, or label the arrow as a proportion."})};function Hp(e,t="kind"){const r=new Map;r.set(t,[]);for(const a of e)for(const i of a.observations)for(const o of Object.keys(i))r.has(o)||r.set(o,[]);for(const a of e)for(const i of a.observations)for(const[o,s]of r)s.push(o===t?a.kind:i[o]??null);const n={};for(const[a,i]of r)n[a]={type:Fo(i),values:i};return new l.Dataset(n)}function Fo(e){const t=Array.isArray(e)?e:[e];for(const r of t)if(r!==null)return typeof r=="number"?"numeric":r instanceof Date?"temporal":"categorical";return"categorical"}var Wp=class extends l.Stage{dependencies(e){return[e.data,e.mapping]}run(e){let t=e.data,r=e.mapping;r.x===""&&(t=t.addConstantVariable(l.CONSTANT_VARIABLES.x,"categorical",""),r={...r,x:l.CONSTANT_VARIABLES.x});for(const n of Object.keys(r)){const a=l.extractConstantValue(r[n]);if(a===void 0)continue;const i=l.prefixInternalVariable(`const_${n}`);t=t.addConstantVariable(i,Fo(a),a),r={...r,[n]:i}}return{data:t,mapping:r}}},Fe=class{constructor(){this.perLayerMemo=l.createPerKeyMemo(),this.listMemo=l.createSingleSlotMemo()}get stats(){return l.sumMemoStats(this.perLayerMemo.stats,this.listMemo.stats)}compile(e){const t=this.dependencies(e),r=e.layers.map(n=>this.perLayerMemo(n,t,()=>this.compileLayer(n,e)));return this.listMemo(r,()=>r)}},Kp=class extends l.Stage{constructor(e){super(),this.registry=e}dependencies(e){return[e.coordSpec,e.scales,e.layers]}run(e){return this.registry.get(e.coordSpec.coordType).setup(e)}},zp=class extends Fe{constructor(e){super(),this.registry=e}dependencies(e){return[e.coordSpec,e.coordSystem]}compileLayer(e,t){const[r]=this.registry.get(t.coordSpec.coordType).transform({coordSpec:t.coordSpec,coordSystem:t.coordSystem,layers:[e]});if(!r)throw new l.InternalError({message:`CoordCompiler: strategy '${t.coordSpec.coordType}' did not return a transformed layer`});return r}},Yp=class{constructor(e){this.setupStage=new Kp(e),this.transformStage=new zp(e)}get setupStats(){return this.setupStage.stats}get transformStats(){return this.transformStage.stats}setup(e){return this.setupStage.compile(e)}transform(e){return this.transformStage.compile(e)}},qp=class{constructor(){this.coordType="cartesian"}setup(e){if(e.coordSpec.coordType!=="cartesian")throw new l.InternalError({message:`Invalid coordinate type: ${e.coordSpec.coordType}`});return{coordSystem:{type:"cartesian",mainAxis:"x",axisMapping:{x:{position:"bottom",geometry:"linear"},y:{position:"right",geometry:"linear"}}},scales:e.scales}}transform(e){return e.layers}},jp=class{constructor(){this.coordType="flip"}setup(e){if(e.coordSpec.coordType!=="flip")throw new l.InternalError({message:`Invalid coordinate type: ${e.coordSpec.coordType}`});return{coordSystem:{type:"cartesian",mainAxis:"y",axisMapping:{x:{position:"left",geometry:"linear"},y:{position:"bottom",geometry:"linear"}}},scales:Zp(e.scales,e.layers)}}transform(e){return e.layers.map(t=>Qp(t))}},Xp=[[l.POSITION_VARIABLES.x,l.POSITION_VARIABLES.y],[l.POSITION_VARIABLES.xMin,l.POSITION_VARIABLES.yMin],[l.POSITION_VARIABLES.xMax,l.POSITION_VARIABLES.yMax]],Ka=l.prefixInternalVariable("flipSwap"),Zp=(e,t)=>Jp(t)?e.map(r=>r.scaledAesthetic!=="x"||r.scaleType!=="continuous"&&r.scaleType!=="datetime"&&r.scaleType!=="discrete"?r:{...r,reverse:!r.reverse}):e,Jp=e=>{for(const t of e){const r=l.extractVariableName(t.mapping.x);if(!r||!t.data.hasVariable(r))continue;const n=t.data.getType(r);if(n==="categorical"||n==="temporal")return!0}return!1},Qp=e=>{let t=e.data;for(const[r,n]of Xp){const a=t.hasVariable(r),i=t.hasVariable(n);a&&i?t=t.renameVariable(r,Ka).renameVariable(n,r).renameVariable(Ka,n):a?t=t.renameVariable(r,n):i&&(t=t.renameVariable(n,r))}return{...e,data:t}};function $o(e){const t=new Set,r=[];for(const n of e){const a=n instanceof Date?n.getTime():String(n);t.has(a)||(t.add(a),r.push(n))}return r}var Go=(e,t)=>$o(t.domain!==null&&t.domain.length>0?t.domain:e),em=class{constructor(){this.coordType="polar"}setup(e){if(e.coordSpec.coordType!=="polar")throw new l.InternalError({message:`Invalid coordinate type: ${e.coordSpec.coordType}`});const{params:t}=e.coordSpec,r=t.startAngle*(Math.PI/180),n=nm(t,e.scales,e.layers),a=im(t,e.scales,e.layers);return{coordSystem:{type:"polar",axisMapping:t.theta==="x"?{x:{position:"bottom",geometry:"circular"},y:{position:"left",geometry:"radial"}}:{x:{position:"left",geometry:"radial"},y:{position:"bottom",geometry:"circular"}},innerRadius:t.innerRadius,startAngle:r,spokeRotation:n,bandAxis:a},scales:e.scales}}transform(e){if(e.coordSpec.coordType!=="polar")throw new l.InternalError({message:`Invalid coordinate type: ${e.coordSpec.coordType}`});if(e.coordSystem.type!=="polar")throw new l.InternalError({message:"PolarCoord.transform received a non-polar coord system"});const{params:t}=e.coordSpec,{startAngle:r,spokeRotation:n}=e.coordSystem,a=rm(r,n),i=om(t);return e.layers.map(o=>sm(t.theta==="y"?lm(o):o,a,i))}},tm=[[l.POSITION_VARIABLES.x,l.POSITION_VARIABLES.y],[l.POSITION_VARIABLES.xMin,l.POSITION_VARIABLES.yMin],[l.POSITION_VARIABLES.xMax,l.POSITION_VARIABLES.yMax]];function rm(e,t){return r=>vo(r,e,t)}function nm(e,t,r){const n=t.find(i=>i.scaledAesthetic===e.theta);if(n===void 0||n.scaleType!=="discrete")return 0;const a=am(n,e,r);return a===0?0:-Math.PI/a}function am(e,t,r){const n=[];for(const a of r){const i=l.extractVariableName(a.mapping[t.theta]);if(!(i===null||!a.data.hasVariable(i)))for(const o of a.data.getValues(i))n.push(o)}return Go(n,e).length}function im(e,t,r){if(e.theta==="x")return"x";const n=t.find(i=>i.scaledAesthetic==="x")?.scaleType==="discrete",a=r.some(i=>i.position==="fill");return n&&!a?"y":null}function om(e){const{innerRadius:t}=e;return r=>t+r*(1-t)}function sm(e,t,r){let n=e.data;return n=Ke(n,l.POSITION_VARIABLES.x,t),n=Ke(n,l.POSITION_VARIABLES.xMin,t),n=Ke(n,l.POSITION_VARIABLES.xMax,t),n=Ke(n,l.POSITION_VARIABLES.y,r),n=Ke(n,l.POSITION_VARIABLES.yMin,r),n=Ke(n,l.POSITION_VARIABLES.yMax,r),{...e,data:n}}function Ke(e,t,r){if(!e.hasVariable(t))return e;const n=e.getValues(t,{type:"numeric"}).map(a=>a===null?null:r(a));return e.addVariable(t,"numeric",n)}function lm(e){let t=e.data;for(const[r,n]of tm){const a=t.hasVariable(r),i=t.hasVariable(n);if(!a&&!i)continue;const o=a?t.getValues(r):null,s=i?t.getValues(n):null;o&&(t=t.addVariable(n,"numeric",o)),s&&(t=t.addVariable(r,"numeric",s))}return{...e,data:t}}var cm=class extends l.Registry{constructor(){super("coord"),this.register("cartesian",new qp),this.register("flip",new jp),this.register("polar",new em)}},Uo=new Set(["min","max","scalar"]),um={x:{min:l.POSITION_VARIABLES.xMin,max:l.POSITION_VARIABLES.xMax},y:{min:l.POSITION_VARIABLES.yMin,max:l.POSITION_VARIABLES.yMax}};function dm(e){const t=new Set;for(const r of e)r.role==="point"?t.add(r.axis):(r.role==="min"||r.role==="max")&&l.isDefined(r.aes)&&t.add(r.aes);return[...t]}function pm(e){const t=new Set;for(const r of e)r.role==="point"&&t.add(r.axis),l.isDefined(r.aes)&&t.add(r.aes);return[...t]}function mm(e,t,r){let n=e;for(const a of t){if(a.role!=="min"&&a.role!=="max"||!l.isDefined(a.aes))continue;const i=um[a.axis][a.role];if(n.hasVariable(i))continue;const o=l.extractVariableName(r[a.aes]);!l.isDefined(o)||!n.hasVariable(o)||(n=n.addVariable(i,"numeric",n.getValues(o,{type:"numeric"})))}return n}var hm=class{constructor(e){this.container=e}compile(e,t){const r=this.container.geomRegistry.get(e),n=r.compile(t),a={...t.mapping,...n.mapping};return{...n,data:mm(n.data,r.positionRoles,a)}}},In=["x","y"],Tn=new Set(["x","y","ySecondary"]),bt=new Set(["color","size","alpha","strokeWidth","lineType"]),$e=e=>Tn.has(e),Ln=e=>bt.has(e),Ho=e=>$e(e)||Ln(e);function Te(e){return e==="secondary"?"ySecondary":"y"}function Wo(e,t){return e==="y"?Te(t):"x"}function H(e){return e==="ySecondary"?"y":e}var Le=(e,t)=>{if(l.isDefined(t.group)){const a=l.extractVariableName(t.group);if(a!==null)return[a]}const r=new Set([l.extractVariableName(t.x),l.extractVariableName(t.y)].filter(l.isDefined)),n=new Set;for(const a of bt){const i=l.extractVariableName(t[a]);l.isDefined(i)&&(r.has(i)||e.hasVariable(i)&&e.getType(i)==="categorical"&&n.add(i))}return[...n]},dr=(e,t)=>e.hasVariable(l.GROUP_VARIABLES.group)?e.getValues(l.GROUP_VARIABLES.group,{distinct:!0,skipNulls:!0}).length>1:Le(e,t).some(r=>e.getValues(r,{distinct:!0,skipNulls:!0}).length>1),fm=class{compute({data:e,mapping:t}){const r=Le(e,t);if(r.length===0)return{data:e.addConstantVariable(l.GROUP_VARIABLES.group,"categorical",null)};const n=e.size(),a=r.map(o=>e.getValues(o)),i=new Array(n);for(let o=0;o<n;o++)i[o]=l.getStableKey(a.map(s=>s[o]));return{data:e.addVariable(l.GROUP_VARIABLES.group,"categorical",i)}}},gm=e=>{if(e===void 0)return{};const t={};for(const r of e.columns)r.label!==void 0&&(t[r.key]=r.label);return t},ym=(e,t,r)=>{const n=Me(t,"color");return n===null?{}:(e?.columns??[]).some(a=>a.key===n)?{}:r};function Me(e,t){const r=H(t);for(const n of Ko(t,e)){const a=l.extractVariableName(n.mapping[r]);if(l.isDefined(a))return a}return null}var pr=(e,t)=>e===null?null:t[e]??e,vm=(e,t)=>e===null?null:t[String(e)]??null,ke=({layers:e,scaleType:t,variableName:r})=>{if(r===null)return Dr(t);for(const n of e){if(!n.data.hasVariable(r))continue;const a=n.data.getValueFormat(r),i=a.type==="lookup"?a.fallback:a;return Sm(i,t)?i:Dr(t)}return Dr(t)},bm=(e,t)=>t!=="y"&&t!=="ySecondary"?!1:Ko(t,e).some(r=>r.position==="fill");function Ko(e,t){return e==="ySecondary"?t.filter(r=>r.yScaleType==="secondary"):e==="y"?t.filter(r=>r.yScaleType==="primary"):t}var Dr=e=>{switch(e){case"continuous":return{type:"decimal"};case"datetime":return{type:"date"};case"discrete":case"palette":case"identity":return{type:"text"}}},Sm=(e,t)=>{switch(t){case"continuous":return l.isNumericValueFormat(e);case"datetime":return l.isTemporalValueFormat(e);case"discrete":case"palette":case"identity":return!0}},xm=[{unit:"year",step:1e3},{unit:"year",step:100},{unit:"year",step:50},{unit:"year",step:20},{unit:"year",step:10},{unit:"year",step:5},{unit:"year",step:2},{unit:"year",step:1},{unit:"month",step:6},{unit:"month",step:3},{unit:"month",step:2},{unit:"month",step:1},{unit:"week",step:2},{unit:"week",step:1},{unit:"day",step:2},{unit:"day",step:1},{unit:"hour",step:12},{unit:"hour",step:6},{unit:"hour",step:3}],za={year:0,quarter:1,month:2,week:3,day:4,hour:5},ze=40,Am=(e,t,r)=>{const n=r.unit==="quarter"?r.step*3:r.step;return Em(r.unit).range(e,new Date(t.valueOf()+1),n)},Im=({unit:e,step:t,start:r,stop:n})=>{const a=(0,jd.differenceInDays)(n,r);switch(e){case"hour":return 24*a/t>ze;case"day":return a/t>ze;case"week":return a/(7*t)>ze;case"month":return a/(30*t)>ze;case"quarter":return a/(90*t)>ze;case"year":return a/(365*t)>ze}},Tm=(e,t)=>{const r=!l.isDateWithoutYearValueFormat(t);switch(e.unit){case"year":return r?{type:"year"}:{type:"month"};case"quarter":return{type:"quarter"};case"month":return r?{type:"month_year"}:{type:"month"};case"week":return r?{type:"weekly_date_range_with_year"}:{type:"weekly_date_range"};case"day":return r?{type:"date"}:{type:"day_month"};case"hour":return r?{type:"datetime"}:{type:"time"}}},Lm=(e,t)=>{const r=wm(t);return r===null?!1:za[e]>za[r]},Em=e=>{switch(e){case"hour":return st.utcHour;case"day":return st.utcDay;case"week":return st.utcMonday;case"month":case"quarter":return st.utcMonth;case"year":return st.utcYear}},wm=e=>{switch(e.type){case"year":return"year";case"quarter":return"quarter";case"month_year":case"month":return"month";case"weekly_date_range":case"weekly_date_range_with_year":return"week";case"date":case"day_month":case"datetime":return"day";case"time":return"hour";default:return null}},zo={left:"right",right:"left",top:"bottom",bottom:"top"},Rm={x:!0,y:!0,ySecondary:!1},Cm=20,Ya=new Set(["top","bottom"]),Vm={type:"percentage"};function Dm(e,t){const{scales:r,config:n,layers:a,coordSystem:i,variableLabels:o,geomRegistry:s}=e;if(Co(a))return[];if(i.type==="polar"&&i.bandAxis===null)return[];const c=Om(s,a,i.type,n),u=new Set(t.map(h=>h.position)),d=km(Yo(n.axes.y.position,i.axisMapping.y.position),u),p=[];for(const h of Tn){const m=r[h];if(!l.isDefined(m)||m.kind!=="position")continue;const f=_m({scaleAestheticKey:h,scale:m,config:n,layers:a,axisMapping:i.axisMapping,resolvedYPosition:d,gridOverrides:c,variableLabels:o});p.push(f)}return p}function _m(e){const{scaleAestheticKey:t,scale:r,config:n,layers:a,axisMapping:i,resolvedYPosition:o,gridOverrides:s,variableLabels:c}=e,{axisConfig:u,position:d,geometry:p}=Mm(t,n,i,o),h=Me(a,t),m=bm(a,t)?Vm:ke({layers:a,scaleType:r.spec.scaleType,variableName:h});return{scaleAestheticKey:t,position:d,geometry:p,label:Pm(u,h,c),isVisible:u.isVisible,tickCandidates:Bm(r,m,u.ticks.mode),valueFormat:m,tickMode:u.ticks.mode,ticksVisible:u.ticks.isVisible,gridVisible:Nm(u,s,t),scaleType:r.spec.scaleType,bandwidth:r.bandwidth??void 0}}function Pm(e,t,r){return e.label?e.label:t?r[t]??null:null}function Om(e,t,r,n){const a=t.flatMap(s=>{const c=e.get(s.geom).grid[r];return c?[c]:[]}),i=a.some(s=>s.hideGridX),o=a.some(s=>s.hideGridY);return{x:{gridVisible:qa(i,n.axes.x.grid.isVisible)},y:{gridVisible:qa(o,n.axes.y.grid.isVisible)}}}function qa(e,t){if(e&&t===null)return!1}function Mm(e,t,r,n){switch(e){case"x":return{axisConfig:t.axes[e],position:Yo(t.axes[e].position,r[e].position),geometry:r.x.geometry};case"y":return{axisConfig:t.axes[e],position:n,geometry:r.y.geometry};case"ySecondary":{const a=zo[n],i=(0,at.merge)({isVisible:t.axes.y.isVisible,label:null,position:a,grid:t.axes.y.grid,ticks:t.axes.y.ticks},t.axes.ySecondary);return{axisConfig:i,position:i.position,geometry:r.y.geometry}}}}function Yo(e,t){return Ya.has(e)===Ya.has(t)?e:t}function km(e,t){return t.has(e)?zo[e]:e}function Nm(e,t,r){const{gridVisible:n}=r==="x"?t.x:t.y;return n??e.grid.isVisible??Rm[r]}var Bm=(e,t,r)=>{const n=e.spec.scaleType==="continuous"||e.spec.scaleType==="datetime";if(r==="edges"&&n){const a=$m(e);if(a)return[a]}if(e.spec.scaleType==="continuous"){const a=new Set,i=[];for(let o=1;o<=Cm;o++){const s=e.generateTicks({count:o}),c=l.getStableKey(s);a.has(c)||(a.add(c),i.push({ticks:s.map(u=>tt(e,u))}))}return i}return e.spec.scaleType==="datetime"?Fm(e,t):[{ticks:e.generateTicks().map(a=>tt(e,a))}]},Fm=(e,t)=>{const[r,n]=e.domain;if(!l.isStrictTemporalDataValue(r)||!l.isStrictTemporalDataValue(n))return[{ticks:e.generateTicks().map(s=>tt(e,s))}];const a=new Set,i=[],o=(s,c)=>{if(s.length===0)return;const u=l.getStableKey(s);a.has(u)||(a.add(u),i.push({ticks:s.map(d=>tt(e,d)),valueFormat:c}))};for(const s of xm)Im({...s,start:r,stop:n})||Lm(s.unit,t)||o(e.generateTicks({interval:s}),Tm(s,t));return o(e.generateTicks({atInputs:!0})),i.sort((s,c)=>s.ticks.length-c.ticks.length),i},$m=e=>{const{domain:t}=e,r=t[0],n=t.at(-1);return!l.isDefined(r)||!l.isDefined(n)||l.getStableKey([r])===l.getStableKey([n])?null:{ticks:[tt(e,r),tt(e,n)]}},tt=(e,t)=>({value:t,position:e.map(t)});function qo({scale:e,aesthetics:t,layers:r}){const n=Gm({layers:r,aesthetics:t}),a=jo({layers:r,aesthetics:t});return e.domain.map(i=>({value:i,geom:n(i),owner:a(i)}))}function Gm({layers:e,aesthetics:t}){const r=jo({layers:e,aesthetics:t}),n=e.find(i=>t.some(o=>l.isDefined(i.mapping[o]))),a=n?n.geom:"bar";return i=>{const o=r(i);return o?o.layer.geom:a}}function jo({layers:e,aesthetics:t,layerFilter:r}){const n=new Map;for(const[a,i]of e.entries()){if(r&&!r(i))continue;const o=t.find(c=>l.isDefined(i.mapping[c]));if(o===void 0)continue;const s=l.extractVariableName(i.mapping[o]);if(!(s===null||!i.data.hasVariable(s)))for(const c of i.data.getValues(s,{distinct:!0})){const u=l.getStableKey(c);n.has(u)||n.set(u,{layer:i,layerIndex:a})}}return a=>n.get(l.getStableKey(a))}var En=e=>{if(e.kind==="identity")return!1;const t=e.spec.scaleType;return t!=="continuous"&&t!=="datetime"};function Um({scales:e,layers:t,valueLabels:r}){const n=e.color;if(n===void 0||!En(n))return[];if(!t.some(s=>l.isDefined(s.mapping.color)))return[];const a=Me(t,"color");if(Xo({colorVariableName:a,xVariableName:Me(t,"x"),mapsColorAcrossMultipleLayers:Wm(t)>1,isMergedWithAnotherAesthetic:Hm(e,t,a)}))return[];const i=n.spec.scaleType,o=t.findIndex(s=>l.isDefined(s.mapping.color));return qo({scale:n,aesthetics:["color"],layers:t}).map(({value:s,geom:c,owner:u})=>{const d=u?.layerIndex??o,p=t[d],h=p?l.extractVariableName(p.mapping.color):null;return{value:s,color:String(n.map(s)),geom:c,layerIndex:d,valueFormat:ke({layers:p?[p]:t,scaleType:i,variableName:h}),label:vm(s,r)}})}var Xo=({colorVariableName:e,xVariableName:t,mapsColorAcrossMultipleLayers:r,isMergedWithAnotherAesthetic:n})=>n?!1:e===null||l.isInternalVariable(e)?!r:t!==null&&e===t;function Hm(e,t,r){if(r===null)return!1;for(const n of bt){if(n==="color")continue;const a=e[n];if(!(a===void 0||!En(a))&&Me(t,n)===r)return!0}return!1}var Wm=e=>e.filter(t=>l.isDefined(t.mapping.color)).length;function Zo(e,t){return e.get(t.geom).summaries.perGroupHeadline===!0}function Km(e,t,r,n){const a=r.findIndex(i=>Zo(e,i));return a===-1?[]:t.length<2?[{value:null,swatch:null,layerIndex:a,groupLabelFormat:{type:"text"},label:pr(l.extractVariableName(r[a]?.mapping.y),n)}]:t.map(i=>({value:i.value,swatch:{color:i.color,geom:i.geom,layerId:r[i.layerIndex]?.id,value:i.value},layerIndex:i.layerIndex,groupLabelFormat:i.valueFormat,label:i.label}))}function ja(e,t,r){if(r===null||t===null)return[...e];const n=l.getStableKey(r);return e.filter((a,i)=>l.getStableKey(t[i]??null)===n)}var Jo=e=>e==="none"?"first":e,zm=(e,t)=>{switch(t){case"total":{const{sum:r,count:n}=Xa(e);return n===0?null:r}case"average":{const{sum:r,count:n}=Xa(e);return n===0?null:r/n}case"current":return e.at(-1)??null}},Ym=(e,t)=>{if(e.length<2)return null;const r=e.at(-1),n=t==="previous"?e.at(-2):e.at(0);return r===void 0||n===void 0||r.cross===null||n.cross===null||n.cross===0?null:{variation:(r.cross-n.cross)/n.cross,against:n.main}},Xa=e=>e.reduce((t,r)=>r===null?t:{sum:t.sum+r,count:t.count+1},{sum:0,count:0});function qm(e){const{config:t,coordSystem:r}=e,n=t.headline.show;return n==="none"||n==="conversion"?null:r.type==="polar"?jm(e,n):Xm(e,n)}function jm(e,t){if(t!=="total")return null;const{scales:r,layers:n}=e,a=n.find(s=>s.summary.grandTotal!==void 0);if(a===void 0)return null;const i=a.summary.grandTotal;if(i===void 0)return null;const o=l.extractVariableName(a.mapping.y);return o===null?null:{kind:"grandTotal",value:i,valueFormat:ke({layers:[a],scaleType:r.y?.spec.scaleType??"continuous",variableName:o})}}function Xm(e,t){const{config:r,scales:n,layers:a,variableLabels:i,colorGroups:o,geomRegistry:s}=e;if(!a.some(d=>Zo(s,d)))return null;const c=Km(s,o,a,i);if(c.length===0)return null;const u=c.map(d=>Zm({group:d,show:t,compareWith:r.headline.compareWith,layers:a,scales:n})).filter(d=>d!==null);return u.length===0?null:{kind:"perGroup",items:u}}function Zm({group:e,show:t,compareWith:r,layers:n,scales:a}){const i=n[e.layerIndex];if(i===void 0)return null;const o=l.extractVariableName(i.mapping.y);if(o===null||t==="total"&&i.position==="fill")return null;const s=l.extractVariableName(i.mapping.x),c=l.extractVariableName(i.mapping.color),u=i.yScaleType==="secondary"?a.ySecondary:a.y,d=ke({layers:[i],scaleType:u?.spec.scaleType??"continuous",variableName:o}),p=eh(i.data,s),h=ke({layers:[i],scaleType:p?"datetime":a.x?.spec.scaleType??"discrete",variableName:s}),m=th(i.data,s),f=m.getValues(o,{type:"numeric"}),g=s!==null?m.getValues(s):[],v=c!==null?m.getValues(c):null,y=ja(f,v,e.value),b=ja(g,v,e.value);return{value:e.value,swatch:e.swatch,aggregate:zm(y,t),valueFormat:d,groupLabelFormat:e.groupLabelFormat,mainValueFormat:h,label:e.label,caption:Jm(t,p,b),comparison:Qm(t,r,p,b,y)}}function Jm(e,t,r){if(e==="current"){const i=r.at(-1);return i===void 0?null:{kind:"point",value:i}}if(!t)return null;const n=r.at(0),a=r.at(-1);return n===void 0||a===void 0?null:{kind:"range",from:n,to:a}}function Qm(e,t,r,n,a){return e!=="current"||!r?null:Ym(n.map((i,o)=>({main:i,cross:a[o]??null})),Jo(t))}function eh(e,t){return t!==null&&e.hasVariable(t)&&e.getType(t)==="temporal"}function th(e,t){return t===null||!["numeric","temporal"].includes(e.getType(t))?e:e.orderBy(t)}function ae(e,...t){return e?t.includes(e.geom):!1}function B(e,t){return e.find(r=>r.id===t)}function Ee(e,...t){return e.find(r=>t.includes(r.geom))}function rh(e,...t){return e.filter(r=>t.includes(r.geom))}function wn(e,t){return e.interactive?!1:t.some(r=>r!==e&&l.areMappingsEquivalent(r.mapping,e.mapping))}function Rn(e){const t=e.filter(r=>!wn(r,e));return t.length>0?t:e}function Qo({legendPosition:e,coordSystem:t,layers:r}){if(e!=="right"||t.type!=="cartesian"||t.mainAxis!=="x")return!1;const n=Rn(r);return n.length===1&&n[0]?.supportsDirectLabels===!0}var nh=3;function ah({scales:e,config:t,layers:r,coordSystem:n,variableLabels:a,colorGroups:i,geomRegistry:o}){if(t.legend.position==="none")return{drawn:[],position:"none"};const s=new Map(i.map(v=>[l.getStableKey(v.value),v])),c=ph(lh({scales:e,layers:r})),u=Me(r,"x"),d=c.map(v=>{if(uh(v,u,r))return null;const y=hh({group:v,variableLabels:a,layers:r,colorGroupsByValue:s});return y.items.length===0?null:{group:v,built:y}}).filter(l.isDefined),p=ih(d),h=Rn(r),m=Sh(o,t.legend.position,p,h,n);if(d.length===0)return{drawn:[],position:m};if(t.legend.position==="auto"&&bh(o,p,h,n))return{drawn:[],position:m};const f=xh(t.legend.display,{legendPosition:m,coordSystem:n,layers:r}),g=f==="direct"?Lh(h[0]):null;return{drawn:d.map(({built:v})=>oh(v,{position:m,display:f,align:t.legend.align},g)),position:m}}function ih(e){return e.reduce((t,{group:r,built:n})=>t+(r.some(a=>a.guideType!=="discrete")?1:n.items.length),0)}function oh(e,t,r){const{position:n,display:a}=t,i=sh(t.align,n);return a!=="direct"||r===null?{...e,position:n,display:a,align:i}:{...e,position:n,display:a,align:i,items:e.items.map(o=>({...o,normalizedY:r.get(String(o.value))??null}))}}function sh(e,t){return e!=="auto"?e:t==="top"||t==="bottom"?"start":"center"}function lh(e){const{scales:t,layers:r}=e,n=[];for(const a of bt){const i=t[a];if(i===void 0||i.kind==="identity"||!ch(a,r))continue;const o=Me(r,a),s=Th(a,i);n.push({scaleAestheticKey:a,scale:i,variableName:o,guideType:s})}return n}function ch(e,t){const r=H(e);return t.some(n=>l.isDefined(n.mapping[r]))}function uh(e,t,r){const[n]=e;return n.scaleAestheticKey!=="color"?!1:Xo({colorVariableName:n.variableName,xVariableName:t,mapsColorAcrossMultipleLayers:dh(n.scaleAestheticKey,r),isMergedWithAnotherAesthetic:e.length>1})}function dh(e,t){const r=H(e);return t.filter(n=>l.isDefined(n.mapping[r])).length>1}function ph(e){const t=new Map;for(const r of e){const n=Ih(r),a=t.get(n);a?a.push(r):t.set(n,[r])}return[...t.values()]}function mh(e,t,r){if(t==="lineType"){e.lineType=r;return}if(t==="color"){e.color=String(r);return}e[t]=r}function hh({group:e,variableLabels:t,layers:r,colorGroupsByValue:n}){const a=e[0],i=e.map(u=>H(u.scaleAestheticKey)),o=qo({scale:a.scale,aesthetics:i,layers:r}),s=ke({layers:r,scaleType:a.scale.spec.scaleType,variableName:a.variableName}),c=r.find(u=>i.some(d=>l.isDefined(u.mapping[d])))?.id;return{aesthetics:e.map(u=>u.scaleAestheticKey),title:pr(a.variableName,t),items:o.map(u=>fh(u,e,i,s,n,c))}}function fh(e,t,r,n,a,i){const o={};for(const c of t)mh(o,c.scaleAestheticKey,c.scale.map(e.value));if(o.color===void 0&&r.includes("size")&&(o.color=l.DEFAULT_GEOM_COLOR),o.lineType===void 0){const c=l.extractConstantValue(e.owner?.layer.mapping.lineType);gn(c)&&(o.lineType=c)}const s=yh(e,t,r,n,a);return{value:e.value,label:gh(t,e,a),visual:o,normalizedY:null,geom:e.geom,valueFormat:s,layerId:e.owner?.layer.id??i}}function gh(e,t,r){return e[0].scaleAestheticKey!=="color"?null:r.get(l.getStableKey(t.value))?.label??null}function yh(e,t,r,n,a){if(t[0].scaleAestheticKey==="color")return a.get(l.getStableKey(e.value))?.valueFormat??n;const i=e.owner?.layer,o=vh(i,r);return i===void 0||o===null?n:ke({layers:[i],scaleType:t[0].scale.spec.scaleType,variableName:o})}function vh(e,t){if(e===void 0)return null;for(const r of t){const n=e.mapping[r];if(n===void 0)continue;const a=l.extractVariableName(n);if(a!==null)return a}return null}function bh(e,t,r,n){if(t>1)return!1;const a=n.type==="polar";return r.some(i=>e.get(i.geom).legend.suppressWhenSingleItem||a)}function Sh(e,t,r,n,a){if(t!=="auto")return t;if(a.type==="polar")return"top";let i=!1,o=!1,s=!1;for(const u of n){const{sidePlacement:d}=e.get(u.geom).legend;d==="whenCrowded"&&(i=!0),d==="whenStackedVertical"&&(o=!0,U(u.position)&&(s=!0))}const c=r>=nh;return i&&o?"top":i?c?"right":"top":s?Ah(a)?"top":c?"right":"top":"top"}function xh(e,t){return e==="pill"?"pill":Qo(t)?"direct":"pill"}function Ah(e){return e.type==="cartesian"&&e.mainAxis==="y"}function Ih(e){const t=e.scale.domain.map(l.getStableKey);return JSON.stringify([e.variableName,e.guideType,...t])}function Th(e,t){return En(t)?"discrete":`continuous:${e}`}function Lh(e){if(!e)return new Map;const t=new Map;return e.data.groupBy(l.GROUP_VARIABLES.group).forEach(r=>{const n=r.findLast(c=>l.isDefined(F(c))||l.isDefined(D(c)));if(!n)return;const a=re(n);if(!l.isDefined(a))return;const i=G(n),o=F(n)??D(n);if(!l.isDefined(o))return;const s=l.isDefined(i)?(i+o)/2:o;t.set(String(a),s)}),t}var Eh=class extends l.Stage{constructor(e){super(),this.container=e}dependencies(e){return[e.scales,e.config.axes,e.config.legend,e.config.headline,e.layers,e.coordSystem,e.originalData]}run(e){const t=gm(e.originalData),r=Um({scales:e.scales,layers:e.layers,valueLabels:ym(e.originalData,e.layers,t)}),n={scales:e.scales,config:e.config,layers:e.layers,coordSystem:e.coordSystem,variableLabels:t,colorGroups:r,geomRegistry:this.container.geomRegistry},a=qm(n),i=ah(n),o={...i,drawn:wh(a,i.drawn)};return{axes:Dm(n,o.drawn),legends:o,headline:a,colorGroups:r,variableLabels:t}}},wh=(e,t)=>e?.kind!=="perGroup"||t.some(r=>r.display==="direct")?t:[],dt=(e,t,r)=>{switch(e){case"series":return Rh(t);case"x-value":return Cn(t,r)}},mr=e=>{const t=l.readMainAxisVariable(e);return t===""?null:t},Rh=e=>l.getStableKey([re(e)]),Cn=(e,t)=>l.getStableKey([t!==null?e[t]??null:null]),Ch={bar:"observation-rerender",rule:null,line:"overlay-anchor",area:"overlay-anchor",point:"overlay-anchor",tile:"observation-rerender"};function es(e){const t=Ch[e]??null;return t===null?null:{strategy:t,composition:ts()}}function ts(){return{isDimmed:!1,matchedLayer:null,overlayCandidates:[]}}var Vh=class extends Fe{constructor(e){super(),this.container=e}dependencies(e){return[e.highlights,e.config.parsingLocale]}compileLayer(e,t){const r=e.highlight;if(r===null)return e;const n=t.highlights.filter(({layerId:i})=>i===void 0||i===e.id);if(n.length===0)return e;const a=Dh({layer:e,highlights:n,parsingLocale:t.config.parsingLocale,strategy:r.strategy,container:this.container});return{...e,highlight:{...r,composition:a}}}};function Dh({layer:e,highlights:t,parsingLocale:r,strategy:n,container:a}){const i=t.filter(I=>{const V=Ae(I.predicate,e.data);for(const O of V)a.diagnostics.addWarning({...O,message:`${O.message} Dropping this highlight.`});return V.length===0}),o=mr(e.mapping),s=vt(e,r),c=i.map(I=>({predicate:xe(I.predicate,s),scope:I.scope})),u=c.some(({scope:I})=>I==="series"),d=c.some(({scope:I})=>I==="x-value"),p=n==="overlay-anchor",h=e.data.size(),m=u?new Array(h):null,f=d?new Array(h):null,g=p?new Array(h):null,v=new Uint8Array(h),y=new Set,b=new Set;let A=!1,T=0;for(const I of e.data){let V,O;m!==null&&(V=dt("series",I,o),m[T]=V),f!==null&&(O=dt("x-value",I,o),f[T]=O),g!==null&&(g[T]=I);for(const{predicate:ie,scope:kt}of c)if(ie(I))switch(kt){case"series":V!==void 0&&y.add(V);break;case"x-value":O!==void 0&&b.add(O);break;case"data-point":v[T]=1,A=!0;break}T++}if(y.size===0&&b.size===0&&!A)return ts();const L=new Uint8Array(h),E=[];let w=0;for(let I=0;I<h;I++){const V=m?.[I],O=f?.[I],ie=V!==void 0&&y.has(V),kt=O!==void 0&&b.has(O),Ma=v[I]===1;if(n==="observation-rerender")(ie||Ma||kt)&&(L[I]=1,w++);else if(ie)L[I]=1,w++;else if(Ma||kt){const ka=g?.[I];ka!==void 0&&E.push({observation:ka,observationIndex:I})}}const C=w>0?{...e,data:e.data.filterByMask(L)}:null;return{isDimmed:(n==="observation-rerender"||y.size>0)&&C!==null,matchedLayer:C,overlayCandidates:E}}var _h=l.prefixInternalVariable("__ungrouped__");function Ph(e){const t=e.getVariableNames().filter(a=>e.getType(a)==="temporal"&&l.isDateWithoutYearValueFormat(e.getValueFormat(a)));if(t.length===0)return e;const r=e.getValues(l.GROUP_VARIABLES.group,{type:"categorical"});let n=e;for(const a of t){const i=n.getValues(a,{type:"temporal"}),o=new Map,s=i.map((c,u)=>{if(c===null)return null;const d=r[u]??_h;let p=o.get(d);return p||(p=new l.ChronologicalDateManager,o.set(d,p)),p.incrementYearIfNeeded(c)});n=n.addVariable(a,"temporal",s)}return n}var Oh=()=>({defaults:[],overrides:[],warnings:[]}),Mh=class extends Fe{constructor(e,t,r,n,a,i){super(),this.container=e,this.transformCompiler=t,this.statCompiler=r,this.groupCompiler=n,this.geomCompiler=a,this.positionAdjusterCompiler=i}dependencies(e){return[e.data,e.mapping,Za(e),e.coords.coordType]}compileLayer(e,t){return this.runLayerPipeline({layer:e,data:this.transformCompiler.compile({data:t.data,transforms:e.transforms}),effectiveMapping:{...t.mapping,...e.mapping},xScaleIsDiscrete:Za(t),coordType:t.coords.coordType})}runLayerPipeline({layer:e,data:t,effectiveMapping:r,xScaleIsDiscrete:n,coordType:a}){const i=cr({data:t,mapping:r}).pipe(({data:s,mapping:c})=>{const u=this.statCompiler.compute(e.stat,{data:s,mapping:c,xScaleIsDiscrete:n});return{data:u.data,mapping:{...c,...u.mapping}}}).pipe(({data:s,mapping:c})=>({data:this.groupCompiler.compute({data:s,mapping:c}).data,mapping:c})).pipe(({data:s,mapping:c})=>({data:Ph(s),mapping:c})).pipe(({data:s,mapping:c})=>{const u=this.geomCompiler.compile(e.geom,{data:s,mapping:c,params:e.params,coordType:a});return{data:u.data,mapping:{...c,...u.mapping}}}).pipe(({data:s,mapping:c})=>{const u=this.positionAdjusterCompiler.adjust(e.position,{data:s,mapping:c});return{data:u.data,mapping:{...c,...u.mapping}}}).result(),o=this.container.geomRegistry.get(e.geom);return{...i,id:e.id,geom:e.geom,position:e.position,yScaleType:e.yScaleType,params:e.params,interactive:e.interactive,dataLabels:e.dataLabels,summary:{},spatialKind:o.spatialKind,identityKey:o.identityKey,tooltip:o.tooltip,supportsDirectLabels:o.legend.directLabelSupport?.[e.position]===!0,highlight:es(e.geom),styles:Oh()}}};function Za(e){return e.scales.some(t=>t.scaledAesthetic==="x"&&t.scaleType==="discrete")}function rs(e,t){const[r]=t;if(r){for(const n of t)e.addError(n);throw new l.UserInputError(r)}}function kh(e,t){return t.some(r=>U(r.position)||e.get(r.geom).scaleConstraints?.bandPadding===0)}function qr(e,t){const r=ns(e,t),n={};for(const{layer:i,scaleConstraints:o,crossAxis:s}of r)o.zeroBaseline===!0&&(n[s]={nice:(n[s]?.nice??!0)&&i.position!=="fill"});const a=r.find(({scaleConstraints:i})=>i.discreteCrossAxis===!0);return{discreteAxis:r.some(({scaleConstraints:i})=>i.discreteMainAxis===!0)?"x":null,discreteCrossAxis:a?.crossAxis??null,bandedAxes:Bh(r),zeroAxes:n,bandPadding:Fh(r),inferredColor:r.some(({scaleConstraints:i})=>i.inferredColor===!0)}}function Nh(e,t){const r=ns(e,t);for(const n of r){if(n.scaleConstraints.discreteCrossAxis!==!0)continue;const a=r.find(i=>i.scaleConstraints.zeroBaseline===!0&&i.crossAxis===n.crossAxis);if(a!==void 0)return{crossAxis:n.crossAxis,banded:Ja(n),zeroAnchored:Ja(a)}}return null}var Ja=({layer:e,index:t})=>({layerId:e.id,layerIndex:t,geom:e.geom});function ns(e,t){const r=[];return t.forEach((n,a)=>{if(!e.has(n.geom))return;const{scaleConstraints:i}=e.get(n.geom);i!==void 0&&r.push({layer:n,index:a,scaleConstraints:i,crossAxis:Te(n.yScaleType)})}),r}function Bh(e){const t=new Set;for(const r of e)if(r.scaleConstraints.discreteCrossAxis===!0)for(const n of as(r))t.add(n);return[...t]}function Fh(e){const t={};for(const r of e){const n=r.scaleConstraints.bandPadding;if(n!==void 0)for(const a of as(r)){const i=t[a];t[a]=i===void 0?n:Math.min(i,n)}}return t}function as({scaleConstraints:e,crossAxis:t}){return e.discreteCrossAxis!==!0?["x"]:e.discreteMainAxis===!0?["x",t]:[t]}var $h=new Set(["label","group"]),Gh=class{constructor(e,t,r,n){this.container=e,this.transformCompiler=t,this.statRegistry=r,this.layerCompiler=n}get stats(){return this.layerCompiler.stats}compile(e){this.checkPreCompile(e);const t=this.layerCompiler.compile(e);return this.checkPostCompile(t),t}checkPreCompile(e){const t=[];e.layers.forEach((r,n)=>{const a=this.transformCompiler.compile({data:e.data,transforms:r.transforms}),i={...e.mapping,...r.mapping},o={layerId:r.id,layerIndex:n,geom:r.geom,position:r.position,stat:r.stat,effectiveMapping:i,data:a,coordType:e.coords.coordType,dataLabels:r.dataLabels};t.push(...this.validateLayer(o));const s=[...this.collectUndeclaredAesthetics(o),...this.collectPanelJustifyWarnings(o)];for(const c of s)this.container.diagnostics.addWarning(c)}),t.push(...this.validateSharedScaleDemands(e.layers)),rs(this.container.diagnostics,t)}checkPostCompile(e){Co(e)&&this.container.diagnostics.addWarning({code:"EMPTY_DATASET",message:"No data to plot — every layer resolved to zero observations.",suggestion:"Check the dataset has rows and that transforms (filters, joins) are not removing them all."})}validateLayer(e){return[...this.validateRequiredAesthetics(e),...this.validateVariableExistence(e),...this.validatePositionalAestheticTypes(e),...this.validateGeomMapping(e),...this.validateCoordSupport(e),...this.validateSupportedPosition(e)]}collectPanelJustifyWarnings({geom:e,effectiveMapping:t,data:r,layerIndex:n,coordType:a,dataLabels:i}){const{justify:o,showDataLabels:s}=i;if(!s||o!=="panel-start"&&o!=="panel-end")return[];if(a==="polar"||!this.container.geomRegistry.get(e).isComposite)return[];if(!dr(r,t))return[];const c=o==="panel-end"?"end":"start";return[{code:"DATA_LABEL_PLACEMENT_COERCED",message:`Multiple ${e} groups would all pin their labels to the same panel edge; justify '${o}' will render as '${c}'.`,context:{layerIndex:n,expected:c,actual:o},suggestion:`Use justify '${c}' for this layer.`}]}validateRequiredAesthetics({layerId:e,layerIndex:t,geom:r,stat:n,effectiveMapping:a}){const i=[],{positionRoles:o,aesthetics:s}=this.container.geomRegistry.get(r),c=[...dm(o),...s.filter(p=>p.required).map(p=>p.name)],{computedVariables:u}=this.statRegistry.get(n.type),d=u;for(const p of c)d.has(p)||l.isDefined(a[p])||i.push({code:"MISSING_AESTHETIC",message:`Layer '${e}': geom '${r}' requires aesthetic '${p}'`,context:{layerIndex:t,aesthetic:p}});return i}validateVariableExistence({layerId:e,layerIndex:t,geom:r,stat:n,effectiveMapping:a,data:i}){const o=[],{computedVariables:s}=this.statRegistry.get(n.type),{derivedVariables:c}=this.container.geomRegistry.get(r),u=s,d=new Set(c);for(const[p,h]of Object.entries(a)){if(u.has(p))continue;const m=l.extractVariableName(h);m===null||m===""||d.has(m)||i.hasVariable(m)||o.push({code:"UNKNOWN_VARIABLE",message:`Layer '${e}': aesthetic '${p}' references variable '${m}' which does not exist in the dataset`,context:{layerIndex:t,aesthetic:p,variableName:m}})}return o}validatePositionalAestheticTypes({layerId:e,layerIndex:t,geom:r,stat:n,effectiveMapping:a,data:i}){const{positionRoles:o}=this.container.geomRegistry.get(r),{computedVariables:s}=this.statRegistry.get(n.type),c=s,u=[];for(const d of o){if(!Uo.has(d.role)||!l.isDefined(d.aes)||c.has(d.aes)||d.role==="scalar"&&d.aes===d.axis)continue;const p=l.extractVariableName(a[d.aes]);if(p===null||!i.hasVariable(p)||i.size()===0)continue;const h=i.getType(p);h!=="numeric"&&u.push({code:"INCOMPATIBLE_TYPE",message:`Layer '${e}': aesthetic '${d.aes}' must be numeric, but variable '${p}' is ${h}`,context:{layerIndex:t,aesthetic:d.aes,variableName:p,variableType:h},suggestion:this.suggestNumericAestheticFix(d.aes,d.axis,a,i)})}return u}suggestNumericAestheticFix(e,t,r,n){const a=t==="y"?"x":"y";if(e===t){const i=l.extractVariableName(r[a]);if(i!==null&&n.hasVariable(i)&&n.getType(i)==="numeric")return`Swap the '${a}' and '${t}' mappings so the numeric variable is on '${t}'. Add coord.flip() to orient the graph horizontally.`}return`Map '${e}' to a numeric variable.`}validateGeomMapping({layerId:e,layerIndex:t,geom:r,stat:n,effectiveMapping:a}){const{validateMapping:i}=this.container.geomRegistry.get(r);if(i===void 0)return[];const{computedVariables:o}=this.statRegistry.get(n.type);return i({mapping:a,computedVariables:o}).map(s=>({...s,message:`Layer '${e}': ${s.message}`,context:{...s.context,layerIndex:t}}))}validateSharedScaleDemands(e){const t=Nh(this.container.geomRegistry,e);if(t===null)return[];const{crossAxis:r,banded:n,zeroAnchored:a}=t;return[{code:"CONFLICTING_SCALE_DEMANDS",message:`Layer '${n.layerId}' (geom '${n.geom}') needs '${r}' to be a band scale, but layer '${a.layerId}' (geom '${a.geom}') needs it to be a value axis anchored at zero. One scale cannot be both.`,context:{aesthetic:r,layerId:n.layerId,layerIndex:n.layerIndex},suggestion:"Drop one of the layers, or move one onto the secondary y axis with 'yScaleType'."}]}validateCoordSupport({layerId:e,layerIndex:t,geom:r,coordType:n}){const{supportedCoordTypes:a}=this.container.geomRegistry.get(r);return a.includes(n)?[]:[{code:"UNSUPPORTED_COORD",message:`Layer '${e}': geom '${r}' is not supported under ${n} coords`,context:{layerIndex:t}}]}validateSupportedPosition({layerId:e,layerIndex:t,geom:r,position:n}){const{supportedPositions:a}=this.container.geomRegistry.get(r);return a.includes(n)?[]:[{code:"UNSUPPORTED_POSITION",message:`Layer '${e}': geom '${r}' does not support the '${n}' position`,context:{layerIndex:t},suggestion:`Use one of: ${a.join(", ")}.`}]}collectUndeclaredAesthetics({layerId:e,layerIndex:t,geom:r,stat:n,effectiveMapping:a}){const{positionRoles:i,aesthetics:o}=this.container.geomRegistry.get(r),{computedVariables:s}=this.statRegistry.get(n.type),c=new Set([...pm(i),...o.map(h=>h.name)]),u=$h,d=s,p=[];for(const h of Object.keys(a))l.isDefined(a[h])&&(c.has(h)||u.has(h)||d.has(h)||p.push({code:"UNDECLARED_AESTHETIC",message:`Layer '${e}': geom '${r}' does not declare aesthetic '${h}'; the mapping is ignored`,context:{layerIndex:t,aesthetic:h}}));return p}},ye=class{constructor(){this.positionRoles=[],this.identityKey="x-group",this.defaultPosition="identity",this.supportedPositions=xo,this.defaultInteractive=!0,this.aesthetics=[],this.derivedVariables=[],this.highlightStrategy="overlay-anchor",this.supportedCoordTypes=["cartesian","flip"],this.spatialKind="points",this.grid={},this.legend={},this.dataLabelCoordTypes=[],this.isComposite=!1,this.tooltip=[],this.summaries={}}resolveParams(e){return(0,at.merge)({},this.defaultParams,e.params)}},Vn=(e,t)=>{const r=l.extractVariableName(t.x);return!r||!["numeric","temporal"].includes(e.getType(r))?e:e.orderBy(r,"asc")},Dn=(e,{coordSystem:t})=>{const r=M(e),n=D(e);return!l.isStrictNumericDataValue(r)||!l.isStrictNumericDataValue(n)?null:t.type==="polar"?Ce(r,n):{x:r,y:n}},Uh=class extends ye{constructor(...e){super(...e),this.type="area",this.supportedCoordTypes=["cartesian","polar","flip"],this.defaultParams={interpolate:"linear",missingValues:"zero"},this.defaultPosition="stack",this.positionRoles=[{axis:"x",role:"point",valueKind:"value"},{axis:"y",role:"min",valueKind:"value"},{axis:"y",role:"max",valueKind:"value",aes:"y"}],this.aesthetics=[{kind:"visual",name:"color"},{kind:"visual",name:"strokeWidth"},{kind:"visual",name:"lineType"},{kind:"visual",name:"alpha"}],this.summaries={perGroupHeadline:!0},this.dataLabels={cartesian:{offset:8},flip:{offset:8}},this.dataLabelCoordTypes=["cartesian","flip"],this.isComposite=!0,this.legend={suppressWhenSingleItem:!0,sidePlacement:"whenCrowded",directLabelSupport:{stack:!0,dodge:!0,identity:!0,fill:!0}},this.spatialKind="filled-buckets",this.resolveAnchorPosition=Dn}resolveParams(e){const t=super.resolveParams(e);return t.missingValues==="gap"?{...t,missingValues:"zero"}:t}compile({data:e,mapping:t}){return e=Vn(e,t),e.hasVariable(l.POSITION_VARIABLES.yMin)||(e=e.addConstantVariable(l.POSITION_VARIABLES.yMin,"numeric",0)),{data:e,mapping:{}}}},Hh=.7,Wh=.1,Kh=.03,zh=.05,is=e=>{const t=e[l.STACK_VARIABLES.role];return t??"solo"},Yh=class extends ye{constructor(...e){super(...e),this.type="bar",this.defaultParams={},this.defaultPosition="dodge",this.positionRoles=[{axis:"x",role:"point",valueKind:"value"},{axis:"y",role:"min",valueKind:"value"},{axis:"y",role:"max",valueKind:"value",aes:"y"}],this.aesthetics=[{kind:"visual",name:"color"},{kind:"visual",name:"alpha"}],this.summaries={grandTotal:!0,stackTotals:!0,perGroupHeadline:!0},this.grid={cartesian:{hideGridX:!0},flip:{hideGridX:!0}},this.legend={suppressWhenSingleItem:!0,sidePlacement:"whenStackedVertical",directLabelSupport:{stack:!0,fill:!0}},this.scaleConstraints={discreteMainAxis:!0,zeroBaseline:!0},this.dataLabels={polar:{format:"percentage"}},this.dataLabelCoordTypes=["cartesian","flip","polar"],this.highlightStrategy="observation-rerender",this.supportedCoordTypes=["cartesian","polar","flip"],this.spatialKind="rects",this.resolveDataLabelDefaults=t=>U(t)?{justify:"center"}:{},this.resolveBandFraction=(t,r)=>jr(t,r.type),this.resolveAnchorPosition=(t,{coordSystem:r,position:n,purpose:a,align:i})=>{if(i!==void 0){const p=bo(t,r);return p===null?null:ft(p,i)}if(r.type==="polar")return qh(t);const o=U(n),s={isSolo:!o||is(t)==="solo",isNegative:o&&jh(t),purpose:a};if(r.mainAxis==="x"){const p=j(t),h=X(t),m=Qa({lowerBound:G(t),upperBound:F(t)??D(t),options:s});return p===null||h===null||m===null?null:{x:(p+h)/2,y:m}}const c=G(t),u=F(t),d=Qa({lowerBound:j(t),upperBound:X(t)??M(t),options:s});return c===null||u===null||d===null?null:{x:d,y:(c+u)/2}}}resolveParams(e){const{width:t,...r}=super.resolveParams(e),n=this.resolveWidthParam(t,e.diagnostics);return{...r,...n!==void 0&&{width:n}}}compile({data:e,mapping:t,params:r,coordType:n}){const a=jr(r,n);e=Vn(e,t),e.hasVariable(l.POSITION_VARIABLES.yMin)||(e=e.addConstantVariable(l.POSITION_VARIABLES.yMin,"numeric",0));const i=a/2;return e=e.addConstantVariable(l.POSITION_VARIABLES.xMin,"numeric",-i).addConstantVariable(l.POSITION_VARIABLES.xMax,"numeric",i),{data:e,mapping:{}}}resolveWidthParam(e,t){if(e===void 0)return;const r=typeof e=="number"&&Number.isFinite(e)?e:null;if(r!==null&&r>0&&r<=1)return r;const n=r!==null&&r>1?1:void 0;return t?.addWarning({code:"INVALID_GEOM_PARAM",message:`Bar width must be a fraction in (0, 1], got ${String(e)}; falling back to ${n??"the default band"}.`,context:{geom:this.type,param:"width",expected:"0 < width <= 1",actual:r??String(e)},suggestion:"Set params.width to a fraction of the category band in (0, 1]."}),n}},jr=({width:e},t)=>e!==void 0?e:t==="polar"?1:Hh,qh=e=>{const t=j(e),r=X(e),n=G(e),a=F(e);return t===null||r===null||n===null||a===null?null:Ce((t+r)/2,(n+a)/2)},jh=e=>{const t=hn(e);return l.isStrictNumericDataValue(t)&&t<0},Qa=e=>{const{lowerBound:t,upperBound:r,options:n}=e,a=n.isNegative?t:r;if(a===null)return null;if(n.purpose==="value"||n.isSolo)return a;const i=n.isNegative?r:t;return i===null?null:(i+a)/2},Xh=class extends ye{constructor(...e){super(...e),this.type="line",this.supportedCoordTypes=["cartesian","polar","flip"],this.defaultParams={interpolate:"linear",missingValues:"gap"},this.positionRoles=[{axis:"x",role:"point",valueKind:"value"},{axis:"y",role:"point",valueKind:"value"}],this.aesthetics=[{kind:"visual",name:"color"},{kind:"visual",name:"strokeWidth"},{kind:"visual",name:"lineType"},{kind:"visual",name:"alpha"}],this.summaries={perGroupHeadline:!0},this.dataLabels={cartesian:{offset:8},flip:{offset:8}},this.dataLabelCoordTypes=["cartesian","flip"],this.isComposite=!0,this.legend={suppressWhenSingleItem:!0,sidePlacement:"whenCrowded",directLabelSupport:{stack:!0,dodge:!0,identity:!0,fill:!0}},this.spatialKind="buckets",this.resolveAnchorPosition=Dn}compile(e){return{data:Vn(e.data,e.mapping),mapping:{}}}},Zh=class extends ye{constructor(...e){super(...e),this.type="point",this.supportedCoordTypes=["cartesian","polar","flip"],this.defaultParams={},this.positionRoles=[{axis:"x",role:"point",valueKind:"value"},{axis:"y",role:"point",valueKind:"value"}],this.aesthetics=[{kind:"visual",name:"color"},{kind:"visual",name:"size"},{kind:"visual",name:"alpha"}],this.summaries={perGroupHeadline:!0},this.dataLabelCoordTypes=["cartesian","flip"],this.resolveAnchorPosition=Dn,this.resolveValueSource=(t,r)=>{if(r!=="label")return null;const n=l.extractVariableName(t.size);return n!==null?{variable:n}:null}}compile({data:e}){return{data:e,mapping:{}}}},Jh=class extends ye{constructor(...e){super(...e),this.type="rule",this.defaultParams={labelPosition:"start"},this.defaultInteractive=!1,this.positionRoles=[{axis:"y",role:"scalar",valueKind:"value",aes:"y"},{axis:"x",role:"scalar",valueKind:"value",aes:"x"}],this.highlightStrategy=null,this.spatialKind="noop",this.validateMapping=({mapping:t,computedVariables:r})=>{const n=r.has("x")||l.isStrictNumericDataValue(l.extractConstantValue(t.x)),a=r.has("y")||l.isStrictNumericDataValue(l.extractConstantValue(t.y));return n&&a?[{code:"INVALID_RULE_MAPPING",message:"rule geom requires exactly one of 'x' or 'y', both were provided"}]:!n&&!a?[{code:"INVALID_RULE_MAPPING",message:"rule geom requires a numeric value on 'x' or 'y'"}]:[]}}compile({data:e,mapping:t}){const r=ei(t.y,e);if(r!==null)return{data:new l.Dataset({[l.RULE_VARIABLES.y]:{type:"numeric",values:[r.value],valueFormat:r.sourceFormat}}),mapping:{y:l.RULE_VARIABLES.y,x:void 0}};const n=ei(t.x,e);return n!==null?{data:new l.Dataset({[l.RULE_VARIABLES.x]:{type:"numeric",values:[n.value],valueFormat:n.sourceFormat}}),mapping:{x:l.RULE_VARIABLES.x,y:void 0}}:{data:new l.Dataset,mapping:{x:void 0,y:void 0}}}},ei=(e,t)=>{const r=l.extractConstantValue(e);if(l.isStrictNumericDataValue(r))return{value:r,sourceFormat:void 0};const n=l.extractVariableName(e);if(n===null||!l.isStatVariable(n)||!t.hasVariable(n))return null;const[a]=t.getValues(n);return l.isStrictNumericDataValue(a)?{value:a,sourceFormat:t.getValueFormat(n)}:null},Qh=e=>{const t=l.extractVariableName(e.color);return t!==null?{variable:t}:null},ef=class extends ye{constructor(...e){super(...e),this.type="tile",this.defaultParams={},this.positionRoles=[{axis:"x",role:"point",valueKind:"value"},{axis:"x",role:"min",valueKind:"value"},{axis:"x",role:"max",valueKind:"value"},{axis:"y",role:"point",valueKind:"value"},{axis:"y",role:"min",valueKind:"value"},{axis:"y",role:"max",valueKind:"value"}],this.supportedPositions=["identity"],this.supportedCoordTypes=["cartesian"],this.aesthetics=[{kind:"visual",name:"color",required:!0}],this.scaleConstraints={discreteMainAxis:!0,discreteCrossAxis:!0,bandPadding:0,inferredColor:!0},this.grid={cartesian:{hideGridX:!0,hideGridY:!0}},this.legend={suppressWhenSingleItem:!1},this.dataLabels={cartesian:{showDataLabels:!0}},this.dataLabelCoordTypes=["cartesian"],this.highlightStrategy="observation-rerender",this.spatialKind="cells",this.identityKey="x-y",this.tooltip=[{aes:"color"}],this.resolveValueSource=Qh,this.resolveAnchorPosition=t=>{const r=j(t),n=X(t),a=G(t),i=F(t);return r===null||n===null||a===null||i===null?null:{x:(r+n)/2,y:(a+i)/2}}}compile({data:e}){return{data:e.addConstantVariable(l.POSITION_VARIABLES.xMin,"numeric",-.5).addConstantVariable(l.POSITION_VARIABLES.xMax,"numeric",.5).addConstantVariable(l.POSITION_VARIABLES.yMin,"numeric",-.5).addConstantVariable(l.POSITION_VARIABLES.yMax,"numeric",.5),mapping:{}}}},tf=[new Yh,new Zh,new Xh,new Uh,new Jh,new ef],hr=class extends l.Registry{constructor(){super("geom");for(const e of tf)this.register(e.type,e)}},Ge=class{compute(e){return e.data.size()===0?{data:e.data,mapping:{}}:this.computeStat(e)}},rf=class extends Ge{constructor(...e){super(...e),this.type="count",this.computedVariables=new Set(["y"])}computeStat({data:e,mapping:t}){const r=l.extractVariableName(t.x);if(!l.isDefined(r))throw new l.UserInputError({code:"MISSING_STAT_VARIABLE",message:"'x' variable is required for 'count' stat",context:{aesthetic:"x"},suggestion:"Map a variable to 'x' when using the 'count' stat."});if(l.extractVariableName(t.y)!==null)throw new l.UserInputError({code:"CONFLICTING_STAT_MAPPING",message:"Cannot map 'y' variable together with 'count' stat",context:{aesthetic:"y"},suggestion:"Remove the 'y' mapping; the 'count' stat computes it."});const n=[...new Set([r,...Le(e,t)])];return{data:e.groupBy(...n).rollup({[l.STAT_VARIABLES.count]:{variableName:r,aggregation:"count"}}),mapping:{y:l.STAT_VARIABLES.count}}}},nf=class extends Ge{constructor(...e){super(...e),this.type="identity",this.computedVariables=new Set}computeStat({data:e}){return{data:e,mapping:{}}}},af=class extends Ge{constructor(...e){super(...e),this.type="mean",this.computedVariables=new Set(["y"])}computeStat({data:e,mapping:t}){const r=l.extractVariableName(t.y);if(!l.isDefined(r))throw new l.UserInputError({code:"MISSING_STAT_VARIABLE",message:"'y' variable is required for 'mean' stat",context:{aesthetic:"y"},suggestion:"Map a numeric variable to 'y' when using the 'mean' stat."});return{data:e.rollup({[l.STAT_VARIABLES.mean]:{variableName:r,aggregation:"mean"}}),mapping:{y:l.STAT_VARIABLES.mean}}}},of=2,os=1440*60*1e3,sf=class extends Ge{constructor(...e){super(...e),this.type="smooth",this.computedVariables=new Set}computeStat({data:e,mapping:t,spec:r,xScaleIsDiscrete:n}){if(r.type!=="smooth")throw new l.InternalError({message:`SmoothStat received a spec of type '${r.type}'`});const a=l.extractVariableName(t.x),i=l.extractVariableName(t.y);if(!l.isDefined(a))throw new l.UserInputError({code:"MISSING_STAT_VARIABLE",message:"'x' variable is required for 'smooth' stat",context:{aesthetic:"x"},suggestion:"Map a variable to 'x' when using the 'smooth' stat."});if(!l.isDefined(i))throw new l.UserInputError({code:"MISSING_STAT_VARIABLE",message:"'y' variable is required for 'smooth' stat",context:{aesthetic:"y"},suggestion:"Map a numeric variable to 'y' when using the 'smooth' stat."});const o=e.getType(a),s=e.getType(i);if(s!=="numeric")throw new l.UserInputError({code:"INCOMPATIBLE_TYPE",message:`'smooth' stat requires a numeric 'y' (got '${s}' for variable '${i}')`,context:{aesthetic:"y",variableName:i,variableType:s}});const c=Le(e,t),u=hf(a,o,i,c,e);return c.length===0?ti({data:e,xVariable:a,xType:o,yVariable:i,spec:r,output:u,groupObservation:{},xScaleIsDiscrete:n}):e.groupBy(...c).forEach(d=>{const p=ff(d,c);ti({data:d,xVariable:a,xType:o,yVariable:i,spec:r,output:u,groupObservation:p,xScaleIsDiscrete:n})}),{data:u.build(),mapping:{}}}},ti=({data:e,xVariable:t,xType:r,yVariable:n,spec:a,output:i,groupObservation:o,xScaleIsDiscrete:s})=>{const{observations:c,temporalOrigin:u}=lf({data:e,xVariable:t,yVariable:n,xType:r});c.length<of||(s?mf({observations:c,spec:a,output:i,groupObservation:o}):df({observations:c,xType:r,temporalOrigin:u,spec:a,output:i,groupObservation:o}))},lf=({data:e,xVariable:t,yVariable:r,xType:n})=>{const a=e.getValues(t),i=e.getValues(r,{type:"numeric"}),o=n==="temporal"?cf(a):null,s=[],c=new Map;for(let u=0;u<a.length;u++){const d=a[u],p=i[u];if(!l.isDefined(d)||!l.isDefined(p)||!Number.isFinite(p))continue;const h=uf({xValue:d,xType:n,categoryRank:c,temporalOrigin:o});h!==null&&s.push({x:h,y:p,originalX:d})}return{observations:s,temporalOrigin:o}},cf=e=>{let t=null;for(const r of e){if(!l.isStrictTemporalDataValue(r))continue;const n=r.getTime();(t===null||n<t)&&(t=n)}return t},uf=({xValue:e,xType:t,categoryRank:r,temporalOrigin:n})=>{switch(t){case"numeric":return!l.isStrictNumericDataValue(e)||!Number.isFinite(e)?null:e;case"temporal":{if(!l.isStrictTemporalDataValue(e))return null;const a=e.getTime();return n===null?a:(a-n)/os+1}case"categorical":{if(!l.isStrictCategoricalDataValue(e))return null;const a=r.get(e);if(a!==void 0)return a;const i=r.size+1;return r.set(e,i),i}default:throw new l.InternalError({message:`Unexpected xType: ${t}`})}},df=({observations:e,xType:t,temporalOrigin:r,spec:n,output:a,groupObservation:i})=>{const o=ss(n,e);for(const[s,c]of o){if(!Number.isFinite(s)||!Number.isFinite(c))continue;const u=t==="temporal"?pf(s,r):s;a.push({x:u,y:c,groupObservation:i})}},pf=(e,t)=>t===null?new Date(e):new Date((e-1)*os+t),mf=({observations:e,spec:t,output:r,groupObservation:n})=>{const a=new Map;for(const s of e)a.has(s.x)||a.set(s.x,s.originalX);const i=[...a.keys()].sort((s,c)=>s-c);if(t.method==="loess"){const s=ss(t,e),c=new Map;for(const[u,d]of s)Number.isFinite(d)&&(c.has(u)||c.set(u,d));for(const u of i){const d=c.get(u),p=a.get(u);d===void 0||p===void 0||r.push({x:p,y:d,groupObservation:n})}return}const o=ls(t,e);for(const s of i){const c=a.get(s),u=o.predict(s);c===void 0||!Number.isFinite(u)||r.push({x:c,y:u,groupObservation:n})}},ss=(e,t)=>e.method==="loess"?(0,Re.regressionLoess)().x(r=>r.x).y(r=>r.y).bandwidth(e.bandwidth)(t):ls(e,t),ls=(e,t)=>{const r=a=>a.x,n=a=>a.y;switch(e.method){case"linear":return(0,Re.regressionLinear)().x(r).y(n)(t);case"exponential":return(0,Re.regressionExp)().x(r).y(n)(t);case"logarithmic":return(0,Re.regressionLog)().x(r).y(n)(t);case"quadratic":return(0,Re.regressionQuad)().x(r).y(n)(t);case"power":return(0,Re.regressionPow)().x(r).y(n)(t);case"polynomial":return(0,Re.regressionPoly)().x(r).y(n).order(e.order)(t);case"loess":throw new l.InternalError({message:"'loess' does not expose a 'predict' function"})}},hf=(e,t,r,n,a)=>{const i=[],o=[],s=Object.fromEntries(n.map(c=>[c,[]]));return{push:({x:c,y:u,groupObservation:d})=>{i.push(c),o.push(u);for(const p of n)s[p]?.push(d[p]??null)},build:()=>{const c={[e]:{type:t,values:i,valueFormat:a.getValueFormat(e)},[r]:{type:"numeric",values:o,valueFormat:a.getValueFormat(r)}};for(const u of n)c[u]={type:a.getType(u),values:s[u]??[],valueFormat:a.getValueFormat(u)};return new l.Dataset(c)}}},ff=(e,t)=>{const r={};for(const n of t)r[n]=e.getValues(n)[0]??null;return r},gf=class extends Ge{constructor(...e){super(...e),this.type="sum",this.computedVariables=new Set(["y"])}computeStat({data:e,mapping:t}){const r=l.extractVariableName(t.y);if(!l.isDefined(r))throw new l.UserInputError({code:"MISSING_STAT_VARIABLE",message:"'y' variable is required for 'sum' stat",context:{aesthetic:"y"},suggestion:"Map a numeric variable to 'y' when using the 'sum' stat."});const n=l.extractVariableName(t.x),a=[...new Set([...n===null?[]:[n],...Le(e,t)])];return{data:e.groupBy(...a).rollup({[l.STAT_VARIABLES.sum]:{variableName:r,aggregation:"sum"}}),mapping:{y:l.STAT_VARIABLES.sum}}}},yf=[new nf,new rf,new sf,new af,new gf],vf=class extends l.Registry{constructor(){super("stat");for(const e of yf)this.register(e.type,e)}};function bf({geoms:e,stats:t,transforms:r}){const n=new hr,a=new vf,i=new l.TransformRegistry;for(const o of e)n.register(o.type,o);for(const o of t)a.register(o.type,o);for(const o of r)i.register(o.transformType,o);return{geomRegistry:n,statRegistry:a,transformRegistry:i}}function _n(e){if("definition"in e)return e.definition;if(us(e)||ds(e)||ps(e))return e}function cs(e){const t=[],r=[],n=[];for(const a of e){const i=_n(a);i&&(us(i)?t.push(i):ds(i)?r.push(i):ps(i)&&n.push(i))}return{geoms:t,stats:r,transforms:n,warnings:[..._r("geom",t,a=>a.type),..._r("stat",r,a=>a.type),..._r("transform",n,a=>a.transformType),...Sf(t),...xf(t)]}}function Sf(e){const t=[];for(const r of e)r.spatialKind==="render-hit-test"&&(r.identityKey!=="x-group"&&r.identityKey!=="x-y"||t.push({code:"RENDER_HIT_TEST_IDENTITY",message:`The render-hit-test geom '${r.type}' uses the position-derived '${r.identityKey}' identity, which has no meaning for render-owned geometry; its hover lookup will be empty.`,context:{kind:"geom",requested:r.type},suggestion:"Declare 'identityKey' as a column the geom owns (`{ variable: '<column>' }`) or 'index', so a hit-test result resolves to an observation."}));return t}function xf(e){const t=[];for(const r of e)r.spatialKind!=="cells"||!r.supportedCoordTypes.includes("polar")||t.push({code:"SPATIAL_KIND_COORD_UNSUPPORTED",message:`The geom '${r.type}' declares polar support, but its 'cells' hit-test shape has no polar projection; its observations will not respond to hover under polar coords.`,context:{kind:"geom",requested:r.type},suggestion:"Drop 'polar' from 'supportedCoordTypes', or declare 'rects' as the spatial kind so a bandless polar layer hit-tests as an enclosure."});return t}function _r(e,t,r){const n=new Map;for(const i of t){const o=r(i),s=n.get(o);s?s.add(i):n.set(o,new Set([i]))}const a=[];for(const[i,o]of n)o.size<2||a.push({code:"DUPLICATE_REGISTERED_TYPE",message:`Multiple plugins register the ${e} '${i}' (${o.size} definitions); the last in the array wins.`,context:{kind:e,requested:i},suggestion:`Remove the duplicate ${e} plugin(s) named '${i}', or rename them so each registers a distinct ${e}.`});return a}var us=e=>e instanceof ye,ds=e=>e instanceof Ge,ps=e=>"transformType"in e&&typeof e.apply=="function",Af=class{constructor(e){this.registry=e}adjust(e,t){return this.registry.get(e).adjust(t)}},fr=class{},If=class extends fr{constructor(...e){super(...e),this.type="dodge"}adjust({data:e,mapping:t}){if(!l.extractVariableName(t.x))return{data:e,mapping:{}};const r=e.getValues(l.GROUP_VARIABLES.group,{type:"categorical",distinct:!0,skipNulls:!0});if(r.length===0)return{data:e,mapping:{}};const n=e.size(),a=e.getValues(l.GROUP_VARIABLES.group,{type:"categorical"}),i=Tf(e)??[-.7/2,.7/2],o=r.length>1?Wh:0,s=(0,se.scaleBand)().domain(r.map(String)).range(i).paddingInner(o).paddingOuter(0),c=s.bandwidth(),u=new Array(n).fill(null),d=new Array(n).fill(null);for(let p=0;p<n;p++){const h=a[p];if(!l.isDefined(h))continue;const m=s(String(h));l.isDefined(m)&&(u[p]=m,d[p]=m+c)}return{data:e.addVariable(l.POSITION_VARIABLES.xMin,"numeric",u).addVariable(l.POSITION_VARIABLES.xMax,"numeric",d),mapping:{}}}},Tf=e=>{const t=e.getConstant(l.POSITION_VARIABLES.xMin)?.value,r=e.getConstant(l.POSITION_VARIABLES.xMax)?.value;return typeof t!="number"||typeof r!="number"?null:[t,r]},ri=l.prefixInternalVariable("__ungrouped__"),ms=(e,t)=>{const r=l.extractVariableName(t.x),n=l.extractVariableName(t.y);if(!r||!n)return null;const a=e.getValues(l.GROUP_VARIABLES.group,{type:"categorical",distinct:!0,skipNulls:!0}),i=a.length===0,o=i?[ri]:a,s=e.getValues(r),c=e.getValues(n,{type:"numeric"}),u=e.getValues(l.GROUP_VARIABLES.group,{type:"categorical"}),d=e.size(),p=new Map;for(let h=0;h<d;h++){const m=l.getStableKey(s[h]??null),f=u[h],g=i?ri:f;if(!l.isDefined(g))continue;let v=p.get(m);v||(v=new Map,p.set(m,v));let y=v.get(g);y||(y=[],v.set(g,y)),y.push(h)}return{yValues:c,observationIndicesByXAndGroup:p,uniqueGroupKeys:o,observationCount:d}},hs=(e,t,r,n)=>{const a=new Array(n).fill(null);for(const[,i]of r){const o=[];let s=-1,c=1/0,u=-1/0,d=-1,p=1/0,h=-1/0;for(const m of i.values())for(const f of m){const g=e[f],v=t[f];!l.isDefined(g)||!l.isDefined(v)||(o.push(f),(g<c||g===c&&v>u)&&(s=f,c=g,u=v),(v>h||v===h&&g<p)&&(d=f,p=g,h=v))}for(const m of o)a[m]=Lf(m===s,m===d)}return a},Lf=(e,t)=>e&&t?"solo":e?"floor":t?"ceiling":"middle",Ef=class extends fr{constructor(...e){super(...e),this.type="fill"}adjust({data:e,mapping:t}){const r=ms(e,t);if(r===null)return{data:e,mapping:{}};const{yValues:n,observationIndicesByXAndGroup:a,uniqueGroupKeys:i,observationCount:o}=r,s=[...n],c=new Array(o).fill(0);for(const[,d]of a){let p=0,h=0;for(const g of i){const v=d.get(g);if(v!==void 0)for(const y of v){const b=n[y];b!=null&&(b>=0?p+=b:h-=b)}}let m=0,f=0;for(const g of i){const v=d.get(g);if(v!==void 0)for(const y of v){const b=n[y];if(b===void 0)continue;if(b===null){c[y]=null,s[y]=null;continue}const A=b>=0?p:h;if(A===0){c[y]=0,s[y]=0;continue}const T=b/A;b>=0?(c[y]=m,s[y]=m+=T):(s[y]=f,c[y]=f+=T)}}}const u=hs(c,s,a,o);return{data:e.addVariable(l.POSITION_VARIABLES.yMin,"numeric",c).addVariable(l.POSITION_VARIABLES.yMax,"numeric",s).addVariable(l.POSITION_VARIABLES.yRaw,"numeric",n).addVariable(l.STACK_VARIABLES.role,"categorical",u),mapping:{}}}},wf=class extends fr{constructor(...e){super(...e),this.type="identity"}adjust({data:e}){return{data:e,mapping:{}}}},Rf=class extends fr{constructor(...e){super(...e),this.type="stack"}adjust({data:e,mapping:t}){const r=ms(e,t);if(r===null)return{data:e,mapping:{}};const{yValues:n,observationIndicesByXAndGroup:a,uniqueGroupKeys:i,observationCount:o}=r,s=[...n],c=new Array(o).fill(0);for(const[,h]of a){let m=0,f=0;for(const g of i){const v=h.get(g);if(v!==void 0)for(const y of v){const b=n[y];if(b!==void 0){if(b===null){c[y]=null,s[y]=null;continue}b>=0?(c[y]=m,s[y]=m+=b):(s[y]=f,c[y]=f+=b)}}}}const u=hs(c,s,a,o);let d=e.addVariable(l.POSITION_VARIABLES.yMin,"numeric",c).addVariable(l.POSITION_VARIABLES.yMax,"numeric",s).addVariable(l.POSITION_VARIABLES.yRaw,"numeric",n).addVariable(l.STACK_VARIABLES.role,"categorical",u);const p=l.extractVariableName(t.y);return p!==null&&(d=d.addVariable(p,"numeric",s)),{data:d,mapping:{}}}},Cf=class extends l.Registry{constructor(){super("position"),this.register("identity",new wf),this.register("stack",new Rf),this.register("fill",new Ef),this.register("dodge",new If)}},Vf=class{map({data:e,layer:t,getPositionScale:r,geomRegistry:n}){let a=e;const i=n.get(t.geom);for(const o of i.positionRoles){if(o.role!=="scalar"||!l.isDefined(o.aes)||Ln(o.aes))continue;const s=l.extractVariableName(t.mapping[o.aes]);if(!l.isDefined(s)||!a.hasVariable(s))continue;const c=r(Wo(o.axis,t.yScaleType));if(!c)continue;const u=a.getValues(s,{type:"numeric"}).map(d=>l.isDefined(d)?c.map(d):null);a=a.addVariable(l.resolveScaledAestheticVariable(o.aes),"numeric",u)}return a}},Df=class{map({data:e,layer:t,getPositionScale:r}){const n=l.extractVariableName(t.mapping.x),a=r("x");if(!n||!a)return e;const i=e.getValues(n).map(o=>l.isDefined(o)?a.map(o):null);return e.addVariable(l.POSITION_VARIABLES.x,"numeric",i)}},_f=class{map({data:e,getPositionScale:t}){const r=t("x");if(!r||!e.hasVariable(l.POSITION_VARIABLES.xMin)||!e.hasVariable(l.POSITION_VARIABLES.xMax))return e;const n=r.bandwidth,a=l.isDefined(n)&&e.hasVariable(l.POSITION_VARIABLES.x)?Pf(e,r,n):Of(e,r);return e.addVariable(l.POSITION_VARIABLES.xMin,"numeric",a.min).addVariable(l.POSITION_VARIABLES.xMax,"numeric",a.max)}};function Pf(e,t,r){const n=e.getValues(l.POSITION_VARIABLES.x,{type:"numeric"}),a=e.getValues(l.POSITION_VARIABLES.xMin,{type:"numeric"}),i=e.getValues(l.POSITION_VARIABLES.xMax,{type:"numeric"}),o="reverse"in t.spec&&t.spec.reverse===!0,s=e.size(),c=fs(s);for(let u=0;u<s;u++){const d=n[u],p=a[u],h=i[u];!l.isDefined(d)||!l.isDefined(p)||!l.isDefined(h)||(c.min[u]=d+(o?-h:p)*r,c.max[u]=d+(o?-p:h)*r)}return c}function Of(e,t){const r=e.getValues(l.POSITION_VARIABLES.xMin,{type:"numeric"}),n=e.getValues(l.POSITION_VARIABLES.xMax,{type:"numeric"}),a=e.size(),i=fs(a);for(let o=0;o<a;o++){const s=r[o],c=n[o];!l.isDefined(s)||!l.isDefined(c)||(i.min[o]=t.map(s),i.max[o]=t.map(c))}return i}function fs(e){return{min:new Array(e).fill(null),max:new Array(e).fill(null)}}var Mf=class{map({data:e,layer:t,getPositionScale:r}){const n=l.extractVariableName(t.mapping.y),a=r(Te(t.yScaleType));if(!n||!a)return e;const i=e.getValues(n).map(o=>l.isDefined(o)?a.map(o):null);return e.addVariable(l.POSITION_VARIABLES.y,"numeric",i)}},kf=class{map({data:e,layer:t,getPositionScale:r}){const n=r(Te(t.yScaleType));if(!n||!e.hasVariable(l.POSITION_VARIABLES.yMin)||!e.hasVariable(l.POSITION_VARIABLES.yMax))return e;const a=n.bandwidth,i=l.isDefined(a)&&e.hasVariable(l.POSITION_VARIABLES.y)?Nf(e,n,a):Bf(e,n);return e.addVariable(l.POSITION_VARIABLES.yMin,"numeric",i.min).addVariable(l.POSITION_VARIABLES.yMax,"numeric",i.max)}};function Nf(e,t,r){const n=e.getValues(l.POSITION_VARIABLES.y,{type:"numeric"}),a=e.getValues(l.POSITION_VARIABLES.yMin,{type:"numeric"}),i=e.getValues(l.POSITION_VARIABLES.yMax,{type:"numeric"}),o="reverse"in t.spec&&t.spec.reverse===!0,s=e.size(),c=gs(s);for(let u=0;u<s;u++){const d=n[u],p=a[u],h=i[u];!l.isDefined(d)||!l.isDefined(p)||!l.isDefined(h)||(c.min[u]=d+(o?-h:p)*r,c.max[u]=d+(o?-p:h)*r)}return c}function Bf(e,t){const r=e.getValues(l.POSITION_VARIABLES.yMin,{type:"numeric"}),n=e.getValues(l.POSITION_VARIABLES.yMax,{type:"numeric"}),a=e.size(),i=gs(a);for(let o=0;o<a;o++){const s=r[o],c=n[o];!l.isDefined(s)||!l.isDefined(c)||(i.min[o]=t.map(s),i.max[o]=t.map(c))}return i}function gs(e){return{min:new Array(e).fill(null),max:new Array(e).fill(null)}}var Ff=[new Df,new Mf,new _f,new kf,new Vf];function $f(e,t){const r=e[t];return r?.kind==="position"?r:null}var Gf=class extends Fe{constructor(e,t=Ff){super(),this.container=e,this.mappers=t}dependencies(e){return[e.scales.x,e.scales.y,e.scales.ySecondary]}compileLayer(e,t){const r=a=>$f(t.scales,a);let n=e.data;for(const a of this.mappers)n=a.map({data:n,layer:e,getPositionScale:r,geomRegistry:this.container.geomRegistry});return{...e,data:n}}},Uf=class extends l.Stage{constructor(e,t){super(),this.container=e,this.registry=t}dependencies(e){return[e.layers,e.scales,e.colorScheme]}run(e){this.validateScaleTypeCompatibility(e);const t=new Map;for(const i of e.scales)t.set(i.scaledAesthetic,i);const r=this.collectValues(e.layers,t),n={colorScheme:e.colorScheme,hasTouchingGeoms:kh(this.container.geomRegistry,e.layers)},a={};for(const[i,o]of t){const s=r.get(i)??[];a[i]=this.registry.get(o.scaleType).compile(o,s,n)}return a}validateScaleTypeCompatibility(e){const t=[];for(const r of e.scales){const{compatibleDataTypes:n}=this.registry.get(r.scaleType),a=H(r.scaledAesthetic),i=e.layers.find(c=>l.isDefined(c.mapping[a]));if(!i)continue;const o=l.extractVariableName(i.mapping[a]);if(!l.isDefined(o)||!i.data.hasVariable(o)||i.data.size()===0)continue;const s=i.data.getType(o);if(n.includes(s)||t.push({code:"INCOMPATIBLE_TYPE",message:`Scale '${r.scaledAesthetic}' (${r.scaleType}) is incompatible with variable '${o}' (${s})`,context:{aesthetic:a,variableName:o,scaleType:r.scaleType,variableType:s}}),r.scaledAesthetic==="lineType"&&s!=="categorical"){const c=s==="temporal"?"Bucket the variable into categorical periods (e.g. quarter, year) first.":"Bin the variable into categorical buckets first.";t.push({code:"INCOMPATIBLE_TYPE",message:`Scale 'lineType' is discrete-only and cannot be mapped to ${s} variable '${o}'. ${c}`,context:{aesthetic:a,variableName:o,scaleType:r.scaleType,variableType:s},suggestion:c})}}rs(this.container.diagnostics,t)}collectValues(e,t){const r=new Map;for(const n of e){const a=this.resolveCustomPositionalAxes(n);for(const[i,o]of Object.entries(n.mapping)){if(!l.isDefined(o))continue;const s=i==="y"?Te(n.yScaleType):i,c=a.get(i)??(Ho(s)?s:void 0);if(!l.isDefined(c)||!t.has(c))continue;const u=t.get(c)?.scaleType,d=this.resolveVariables(i,o,n.data,u);this.collectFromVariables(n.data,d,c,r)}}return r}resolveCustomPositionalAxes(e){const t=new Map,r=this.container.geomRegistry.get(e.geom);for(const n of r.positionRoles)n.role!=="scalar"||!l.isDefined(n.aes)||Ln(n.aes)||t.set(n.aes,Wo(n.axis,e.yScaleType));return t}resolveVariables(e,t,r,n){if(e==="y"&&n!=="discrete"&&this.hasPositionAdjustedY(r))return[l.POSITION_VARIABLES.yMin,l.POSITION_VARIABLES.yMax];const a=l.extractVariableName(t);return!a||!r.hasVariable(a)?[]:[a]}hasPositionAdjustedY(e){return e.hasVariable(l.POSITION_VARIABLES.yMin)&&e.hasVariable(l.POSITION_VARIABLES.yMax)}collectFromVariables(e,t,r,n){if(t.length===0)return;let a=[];for(const o of t)a=a.concat(e.getValues(o));const i=n.get(r);n.set(r,i?i.concat(a):a)}},Hf=["rgb","lab","hcl","hsl"],Wf=["viridis","magma","inferno","plasma","cividis","turbo","Blues","Greens","Greys","Oranges","Purples","Reds"],ys=["RdBu","BrBG","PuOr","Spectral"],vs={"red-blue":"RdBu","brown-teal":"BrBG","purple-orange":"PuOr",spectral:"Spectral"},Kf=new Set(ys.map(e=>e.toLowerCase()));function bs(e){const t=e.toLowerCase(),r=vs[t];return r?r.toLowerCase():t}function zf(e){return Kf.has(bs(e))}var Yf={rgb:je.interpolateRgb,lab:je.interpolateLab,hcl:je.interpolateHcl,hsl:je.interpolateHsl},qf={viridis:$.interpolateViridis,magma:$.interpolateMagma,inferno:$.interpolateInferno,plasma:$.interpolatePlasma,cividis:$.interpolateCividis,turbo:$.interpolateTurbo,blues:$.interpolateBlues,greens:$.interpolateGreens,greys:$.interpolateGreys,oranges:$.interpolateOranges,purples:$.interpolatePurples,reds:$.interpolateReds,rdbu:$.interpolateRdBu,brbg:$.interpolateBrBG,puor:$.interpolatePuOr,spectral:$.interpolateSpectral};function Pn(e){const t=Xf(e);return e.reverse?r=>t(1-r):t}function jf(e={},t=2){const r=Pn({range:e.range??null,scheme:e.scheme??null,interpolate:e.interpolate??l.CONTINUOUS_SCALE_DEFAULTS.interpolate,reverse:e.reverse??!1});return t<2?t===1?[r(0)]:[]:Array.from({length:t},(n,a)=>r(a/(t-1)))}function Xf(e){const t=Yf[e.interpolate];if(e.range&&e.range.length>=2)return(0,je.piecewise)(t,e.range.map(r=>String(r)));if(e.scheme){const r=qf[bs(e.scheme)];if(r)return r}return(0,je.piecewise)(t,[...l.DEFAULT_SEQUENTIAL_RAMP])}var St=class{createPositionScale(e,t){return{kind:"position",aesthetic:H(e.scaledAesthetic),spec:e,...t}}createVisualScale(e,t){return{kind:"visual",aesthetic:H(e.scaledAesthetic),spec:e,...t}}},Zf=class extends St{constructor(e){super(),this.container=e,this.compatibleDataTypes=["numeric"]}compile(e,t){if(e.scaleType!=="continuous")throw new l.InternalError({message:"ContinuousScale.compile received non-continuous spec"});const r=$e(e.scaledAesthetic),n=e.scaledAesthetic==="color",a=this.computeDataDomain(t,e);return n?this.buildColorScale(a,e):r?this.buildPositionScale(a,e):this.buildVisualScale(a,e)}computeDataDomain(e,t){let r=1/0,n=-1/0;for(const a of e)typeof a=="number"&&(a<r&&(r=a),a>n&&(n=a));return r===1/0?[0,0]:(t.zero&&(r>0&&(r=0),n<0&&(n=0)),[r,n])}createD3Scale(e,t,r){let n=[r.domainMin??e[0],r.domainMax??e[1]];const a=r.transform==="log"&&Jf(n);r.transform==="log"&&!a&&this.container.diagnostics.addWarning({code:"INCOMPATIBLE_SCALE_DOMAIN",message:`Log scale on '${r.scaledAesthetic}' needs a strictly positive or negative domain, but the domain is [${e[0]}, ${e[1]}] — rendering a linear scale instead.`,context:{aesthetic:H(r.scaledAesthetic),scaleType:r.scaleType,actual:e},suggestion:"Filter out non-positive values or set a positive domainMin so the log scale can apply."});const i=a?(0,se.scaleLog)():r.transform==="sqrt"?(0,se.scaleSqrt)():(0,se.scaleLinear)();r.nice&&!a&&(n=i.copy().domain(n).nice().domain());const o=r.domainMin??n[0],s=r.domainMax??n[1];return i.domain([o,s]).range(t).clamp(r.clamp)}buildPositionScale(e,t){const r=t.reverse?[1,0]:[0,1],n=this.createD3Scale(e,r,t);return this.createPositionScale(t,{map:n,domain:n.domain(),bandwidth:null,generateTicks:a=>a&&"count"in a?n.ticks(a.count):n.ticks()})}buildVisualScale(e,t){const r=Qf(t.range)??[0,1],n=t.reverse?[r[1],r[0]]:r,a=this.createD3Scale(e,n,t);return this.createVisualScale(t,{map:a,domain:a.domain(),generateTicks:i=>i&&"count"in i?a.ticks(i.count):a.ticks()})}buildColorScale(e,t){const r=Pn(t),n=t.domainMid;if(n!==null){const[a,i]=this.resolveColorDomain(e,t);if(n>a&&n<i){const[o,s]=this.symmetrizeDomain([a,i],t,n);return this.buildDivergingColorScale([o,n,s],t,r)}}return this.buildSequentialColorScale(e,t,r)}buildSequentialColorScale(e,t,r){const n=this.createD3Scale(e,[0,1],t),a=i=>typeof i!="number"||!Number.isFinite(i)?null:r(n(i));return this.createVisualScale(t,{map:a,domain:n.domain(),generateTicks:i=>i&&"count"in i?n.ticks(i.count):n.ticks()})}buildDivergingColorScale(e,t,r){const n=(0,se.scaleLinear)().domain(e).range([0,.5,1]).clamp(t.clamp),a=i=>typeof i!="number"||!Number.isFinite(i)?null:r(n(i));return this.createVisualScale(t,{map:a,domain:e,generateTicks:i=>i&&"count"in i?n.ticks(i.count):n.ticks()})}resolveColorDomain(e,t){let r=t.domainMin??e[0],n=t.domainMax??e[1];if(t.nice){const a=(0,se.scaleLinear)().domain([r,n]).nice().domain();r=t.domainMin??a[0],n=t.domainMax??a[1]}return[r,n]}symmetrizeDomain(e,t,r){if(!t.symmetric)return e;const n=Math.max(Math.abs(e[0]-r),Math.abs(e[1]-r));return[t.domainMin??r-n,t.domainMax??r+n]}},Jf=e=>{const[t,r]=e;return t>0&&r>0||t<0&&r<0};function Qf(e){if(!e)return null;const[t,r]=e;return typeof t=="number"&&typeof r=="number"?[t,r]:null}var eg=class extends St{constructor(...e){super(...e),this.compatibleDataTypes=["temporal"]}compile(e,t){if(e.scaleType!=="datetime")throw new l.InternalError({message:"DatetimeScale.compile received non-datetime spec"});const r=$e(e.scaledAesthetic),n=this.computeDataDomain(t);if(!r)throw new l.UserInputError({code:"INCOMPATIBLE_TYPE",message:"Datetime scale is not supported for non-position aesthetics",context:{aesthetic:e.scaledAesthetic},suggestion:"Use a continuous or discrete scale for non-position aesthetics (color, size, alpha, strokeWidth)."});return this.buildScale(n,e,this.collectInputDates(t))}collectInputDates(e){const t=new Set,r=[];for(const n of e){if(!(n instanceof Date))continue;const a=n.getTime();t.has(a)||(t.add(a),r.push(n))}return r.sort((n,a)=>n.getTime()-a.getTime()),r}computeDataDomain(e){let t=1/0,r=-1/0;for(const n of e){if(!(n instanceof Date))continue;const a=n.getTime();a<t&&(t=a),a>r&&(r=a)}return t===1/0?[]:[new Date(t),new Date(r)]}createD3Scale(e,t,r){const n=tg(e)?e:[],a=(0,se.scaleUtc)().domain(n).range(t).clamp(r.clamp);if(r.nice&&a.nice(),l.isDefined(r.domainMin)||l.isDefined(r.domainMax)){const[i,o]=a.domain();i!==void 0&&o!==void 0&&a.domain([r.domainMin??i,r.domainMax??o])}return a}buildScale(e,t,r){const n=t.reverse?[1,0]:[0,1],a=this.createD3Scale(e,n,t),[i,o]=a.domain(),s=i&&o?r.filter(c=>c>=i&&c<=o):[];return this.createPositionScale(t,{map:a,domain:a.domain(),bandwidth:null,generateTicks:c=>c&&"atInputs"in c?s:c&&"interval"in c?i&&o?Am(i,o,c.interval):[]:a.ticks(c?.count)})}},tg=e=>e.length===2&&l.isStrictTemporalDataValue(e[0])&&l.isStrictTemporalDataValue(e[1]),rg=class extends St{constructor(...e){super(...e),this.compatibleDataTypes=["categorical","numeric","temporal"]}compile(e,t){if(e.scaleType!=="discrete")throw new l.InternalError({message:"DiscreteScale.compile received non-discrete spec"});const r=$e(e.scaledAesthetic),n=Go(t,e);return r?this.buildPositionScale(n,e):this.buildVisualScale(n,e)}buildPositionScale(e,t){const r=e.map(String),n=t.padding??l.DISCRETE_SCALE_DEFAULTS.padding,a=t.reverse?[1,0]:[0,1],i=(0,se.scaleBand)().domain(r).range(a).paddingInner(n).paddingOuter(n/2),o=i.bandwidth()/2;return this.createPositionScale(t,{map:s=>(i(String(s))??NaN)+o,domain:e,bandwidth:i.bandwidth(),generateTicks:()=>[...e]})}buildVisualScale(e,t){const r=e.map(String),n=t.range&&t.range.length>0?(0,se.scaleOrdinal)().domain(r).range(t.range).unknown(t.range[0]):null;return this.createVisualScale(t,{map:a=>{const i=String(a);return n?n(i):i},domain:e,generateTicks:()=>e})}},ng=class extends St{constructor(...e){super(...e),this.compatibleDataTypes=["numeric","categorical","temporal"]}compile(e){if(e.scaleType!=="identity")throw new l.InternalError({message:"IdentityScale.compile received non-identity spec"});return{kind:"identity",aesthetic:H(e.scaledAesthetic),spec:e,map:t=>t,domain:[],generateTicks:()=>[]}}},ag=class extends St{constructor(...e){super(...e),this.compatibleDataTypes=["categorical","temporal","numeric"]}compile(e,t,r){if(e.scaleType!=="palette")throw new l.InternalError({message:"PaletteScale.compile received non-palette spec"});const n=$o(t),a=l.resolvePaletteRange(e.palette,{groupCount:n.length,...r}),i=l.applyOverrides(a.length>0?a:[...l.DEFAULT_COLOR_PALETTE],e.overrides),o=(0,se.scaleOrdinal)().domain(n.map(String)).range(i).unknown(i[0]);return this.createVisualScale(e,{map:s=>o(String(s)),domain:n,generateTicks:()=>n})}},ig=class extends l.Registry{constructor(e){super("scale"),this.register("continuous",new Zf(e)),this.register("discrete",new rg),this.register("datetime",new eg),this.register("identity",new ng),this.register("palette",new ag)}},Ss={x:"position",y:"position",ySecondary:"position",color:"color-range",size:"continuous-range",alpha:"continuous-range",strokeWidth:"continuous-range",lineType:"discrete-only"},og={numeric:{position:"continuous","color-range":"continuous","continuous-range":"continuous","discrete-only":"discrete"},categorical:{position:"discrete","color-range":"palette","continuous-range":"discrete","discrete-only":"discrete"},temporal:{position:"datetime","color-range":"continuous","continuous-range":"continuous","discrete-only":"discrete"}};function On(e,t){const{data:r,layers:n,mapping:a,customPalettes:i}=t;return{container:e,data:r,layers:n,mapping:a,customPalettes:i,demands:qr(e.geomRegistry,n)}}function gr(e,t){switch(t.scaleType){case"inferred":return{...gr(e,ug(e,t)),inferredFrom:t};case"continuous":{const r=Ss[t.scaledAesthetic],n=r==="continuous-range"&&t.scaledAesthetic in l.NON_POSITION_RANGE_DEFAULTS?l.NON_POSITION_RANGE_DEFAULTS[t.scaledAesthetic]:null,a=t.scaledAesthetic==="size"&&r==="continuous-range"?"sqrt":l.CONTINUOUS_SCALE_DEFAULTS.transform;return{type:t.type,scaledAesthetic:t.scaledAesthetic,scaleType:t.scaleType,transform:t.transform??a,reverse:t.reverse??l.CONTINUOUS_SCALE_DEFAULTS.reverse,nice:t.nice??l.CONTINUOUS_SCALE_DEFAULTS.nice,zero:t.zero??l.CONTINUOUS_SCALE_DEFAULTS.zero,clamp:t.clamp??r!=="position",domainMin:t.domainMin??l.CONTINUOUS_SCALE_DEFAULTS.domainMin,domainMax:t.domainMax??l.CONTINUOUS_SCALE_DEFAULTS.domainMax,range:t.range??n??null,scheme:dg(e.container,t),interpolate:t.interpolate??l.CONTINUOUS_SCALE_DEFAULTS.interpolate,domainMid:t.domainMid??l.CONTINUOUS_SCALE_DEFAULTS.domainMid,symmetric:t.symmetric??l.isDefined(t.domainMid)}}case"datetime":return{type:t.type,scaledAesthetic:t.scaledAesthetic,scaleType:t.scaleType,domainMin:t.domainMin??l.DATETIME_SCALE_DEFAULTS.domainMin,domainMax:t.domainMax??l.DATETIME_SCALE_DEFAULTS.domainMax,nice:t.nice??l.DATETIME_SCALE_DEFAULTS.nice,reverse:t.reverse??l.DATETIME_SCALE_DEFAULTS.reverse,clamp:t.clamp??!1};case"discrete":return Xr(t,e.demands);case"palette":return{type:t.type,scaledAesthetic:t.scaledAesthetic,scaleType:t.scaleType,palette:l.resolvePaletteConfig(e.container,t.palette,e.customPalettes),overrides:l.resolvePaletteOverrides(e.container,t.overrides,t.palette,e.customPalettes)};case"identity":return{type:t.type,scaledAesthetic:t.scaledAesthetic,scaleType:t.scaleType};default:throw new l.InternalError({message:`Unknown scale type: ${t.scaleType}`})}}function sg(e,t){const{scales:r,layers:n,coords:a}=t,i=On(e,t),o=hg(mg(r,n),i.demands),s=new Map;for(const u of o)s.set(u.scaledAesthetic,u);const c=[...s.values()].map(u=>{const d=lg(i,u);return gr(i,d)});return a.coordType==="polar"?c.map(Mn):c}function Xr(e,t){const r=t?.bandPadding[e.scaledAesthetic];return{type:e.type,scaledAesthetic:e.scaledAesthetic,scaleType:e.scaleType,range:e.range??l.DISCRETE_SCALE_DEFAULTS.range,domain:e.domain??l.DISCRETE_SCALE_DEFAULTS.domain,padding:e.padding??r??l.DISCRETE_SCALE_DEFAULTS.padding,reverse:e.reverse??cg(e.scaledAesthetic,t)}}var Mn=e=>e.scaleType==="discrete"?{...e,padding:0}:e;function lg(e,t){return t.scaleType==="inferred"||t.scaleType==="discrete"||!e.demands.bandedAxes.includes(t.scaledAesthetic)?t:(e.container.diagnostics.addWarning({code:"UNSUPPORTED_SCALE_TYPE",message:`A geom drawn on '${t.scaledAesthetic}' needs it to be a band scale, but the spec declares a '${t.scaleType}' one; the band wins.`,context:{aesthetic:H(t.scaledAesthetic),scaleType:t.scaleType},suggestion:`Declare '${t.scaledAesthetic}' as a discrete scale, or omit it and let the geom's band be inferred.`}),l.discrete(t.scaledAesthetic,{..."reverse"in t&&t.reverse!==void 0&&{reverse:t.reverse}}))}function cg(e,t){return e===t?.discreteCrossAxis?!0:l.DISCRETE_SCALE_DEFAULTS.reverse}function ug({data:e,layers:t,mapping:r,demands:n},a){const i=H(a.scaledAesthetic),o=a.scaledAesthetic==="ySecondary"?pg(t,r):r[i];if(a.scaledAesthetic===n.discreteAxis||a.scaledAesthetic===n.discreteCrossAxis)return l.discrete(a.scaledAesthetic,a.options);const s=n.zeroAxes[a.scaledAesthetic];if(s!==void 0){const p=a.options;return l.continuous(a.scaledAesthetic,{...p,zero:!0,...!s.nice&&{nice:!1}})}const c=l.extractVariableName(o);if(!l.isDefined(c)||!e.hasVariable(c)||e.size()===0)return l.continuous(a.scaledAesthetic,a.options);const u=e.getType(c),d=Ss[a.scaledAesthetic];switch(og[u][d]){case"discrete":return l.discrete(a.scaledAesthetic,a.options);case"palette":return l.palette(a.scaledAesthetic);case"datetime":return l.datetime(a.scaledAesthetic,a.options);case"continuous":return l.continuous(a.scaledAesthetic,a.options);default:return l.identity(a.scaledAesthetic)}}function dg(e,t){const r=t.scheme??l.CONTINUOUS_SCALE_DEFAULTS.scheme;return r===null?null:l.isDefined(t.range)?(e.diagnostics.addWarning({code:"CONFLICTING_COLOR_RAMP",message:`The color scale sets both a 'scheme' ('${r}') and an explicit 'range'; the range wins and the scheme is ignored.`,context:{aesthetic:H(t.scaledAesthetic),scaleType:t.scaleType},suggestion:"Set either a scheme or a range, not both."}),null):(!l.isDefined(t.domainMid)&&zf(r)&&e.diagnostics.addWarning({code:"DIVERGING_SCHEME_WITHOUT_MIDPOINT",message:`The color scale uses a diverging scheme ('${r}') without 'domainMid', so its neutral colour lands at the data midpoint rather than a meaningful centre.`,context:{aesthetic:H(t.scaledAesthetic),scaleType:t.scaleType,actual:r},suggestion:"Set 'domainMid' (e.g. 0) to centre the neutral colour."}),r)}function pg(e,t){const r=e.find(n=>n.yScaleType==="secondary");return r?r.mapping.y??t.y:t.y}function mg(e,t){return!t.some(r=>r.yScaleType==="secondary")||e.some(r=>r.scaledAesthetic==="ySecondary")?e:[...e,l.inferred("ySecondary")]}function hg(e,t){return e.some(r=>r.scaledAesthetic==="color")?e:[...e,t.inferredColor?l.inferred("color"):l.palette("color")]}var fg={top:{x:0,y:-1},bottom:{x:0,y:1},left:{x:-1,y:0},right:{x:1,y:0},"top-left":{x:-1,y:-1},"top-right":{x:1,y:-1},"bottom-left":{x:-1,y:1},"bottom-right":{x:1,y:1}},gg=(e,t,r)=>{const n=yg(e,t),a=Sg(n);return{differenceArrows:(n.differenceArrows??[]).map(i=>Ag(e,i,r)).filter(l.isDefined),shapes:(n.shapes??[]).map(i=>Eg(e,i,a)).filter(l.isDefined),arrows:(n.arrows??[]).map(i=>Cg(e,i,r,a)).filter(l.isDefined),textAnnotations:(n.textAnnotations??[]).map(i=>xg(e,i,r,a)).filter(l.isDefined),stickers:(n.stickers??[]).map(i=>Ig(e,i,r,a)).filter(l.isDefined),images:(n.images??[]).map(i=>wg(e,i,a)).filter(l.isDefined),pinnedNumbers:(n.pinnedNumbers??[]).map(i=>Tg(e,i,r)).filter(l.isDefined),comments:(n.comments??[]).map(i=>Lg(e,i,r)).filter(l.isDefined)}},yg=(e,t)=>{if(t===void 0)return{};if(!vg(t))return t;const r=new Set,n=a=>a.id===void 0?a:r.has(a.id)?(e.diagnostics.addWarning({code:"ANNOTATION_DUPLICATE_ID",message:`More than one annotation declares id "${a.id}" — giving this one a generated id, so references to "${a.id}" point at the first.`,context:{annotationId:a.id},suggestion:"Give each annotation its own id."}),{...a,id:W()}):(r.add(a.id),a);return{differenceArrows:t.differenceArrows?.map(a=>n(a)),shapes:t.shapes?.map(a=>n(a)),arrows:t.arrows?.map(a=>n(a)),textAnnotations:t.textAnnotations?.map(a=>n(a)),images:t.images?.map(a=>n(a)),stickers:t.stickers?.map(a=>n(a)),pinnedNumbers:t.pinnedNumbers?.map(a=>n(a)),comments:t.comments?.map(a=>n(a))}},vg=e=>{const t=new Set;for(const r of bg(e))if(r.id!==void 0){if(t.has(r.id))return!0;t.add(r.id)}return!1},bg=e=>[...e.differenceArrows??[],...e.shapes??[],...e.arrows??[],...e.textAnnotations??[],...e.images??[],...e.stickers??[],...e.pinnedNumbers??[],...e.comments??[]],Sg=e=>{const t=new Set,r=[e.differenceArrows,e.shapes,e.arrows,e.textAnnotations,e.images,e.stickers,e.pinnedNumbers,e.comments];for(const n of r)for(const a of n??[])a.id!==void 0&&t.add(a.id);return t},kn=(e,t,r,n)=>{if(r.has(t))return!0;const a=n===void 0?"An annotation":`Annotation "${n}"`;return e.diagnostics.addWarning({code:"ANNOTATION_REF_NOT_FOUND",message:`${a} references id "${t}" but no annotation declares that id — dropping this annotation.`,context:{ref:t,...n!==void 0?{annotationId:n}:{}},suggestion:"Reference the explicit id of another annotation in the same spec, or set an id on the target."}),!1},xg=(e,t,r,n)=>{const a=Qt(e,t.at,r,n,t.id);return a===null?null:{id:t.id??W(),content:t.content,at:a,width:t.width,align:t.align??l.TEXT_ANNOTATION_DEFAULTS.align}},Ag=(e,t,r)=>{const n=pt(e,t.start,r),a=pt(e,t.end,r);return n===null||a===null?null:{id:t.id??W(),start:n,end:a,label:t.label,labelCrossPosition:t.labelCrossPosition??l.DIFFERENCE_ARROW_DEFAULTS.labelCrossPosition}},pt=(e,t,r)=>{const n=t.align!==void 0?{align:t.align}:{};return t.layerId===void 0?{anchorValue:t.anchorValue,groupValue:t.groupValue,crossValue:t.crossValue,...n}:r.some(a=>a.id===t.layerId)?{layerId:t.layerId,anchorValue:t.anchorValue,groupValue:t.groupValue,crossValue:t.crossValue,...n}:(e.diagnostics.addWarning({code:"UNKNOWN_LAYER_ID",message:`Annotation references layerId "${t.layerId}", which no layer carries — dropping this annotation.`,context:{layerId:t.layerId,available:r.map(a=>a.id)},suggestion:"Reference an existing layer id, or omit layerId to anchor against the data directly."}),null)},Qt=(e,t,r,n,a)=>{if(t.anchorType==="annotation")return kn(e,t.ref,n,a)?t:null;if(t.anchorType==="panel"||t.anchorType==="axis"||t.anchorType==="selection")return t;const i=pt(e,t,r);return i===null?null:{anchorType:"observation",...i,...t.offset!==void 0?{offset:t.offset}:{}}},Ig=(e,t,r,n)=>{const a=Qt(e,t.at,r,n,t.id);return a===null?null:{id:t.id??W(),at:a,sticker:t.sticker}},Tg=(e,t,r)=>{const n=pt(e,t.at,r);return n===null?null:{id:t.id??W(),at:n}},Lg=(e,t,r)=>{const n=pt(e,t.at,r);return n===null?null:{id:t.id??W(),at:n,content:t.content}},Eg=(e,t,r)=>t.region.anchorType==="annotation"&&!kn(e,t.region.ref,r,t.id)?null:{id:t.id??W(),kind:t.kind??l.SHAPE_DEFAULTS.kind,zOrder:t.zOrder??l.SHAPE_DEFAULTS.zOrder,region:Rg(t.region)},wg=(e,t,r)=>t.region.anchorType==="annotation"&&!kn(e,t.region.ref,r,t.id)?null:{id:t.id??W(),src:t.src,zOrder:t.zOrder??l.IMAGE_ANNOTATION_DEFAULTS.zOrder,region:t.region,fit:t.fit??l.IMAGE_ANNOTATION_DEFAULTS.fit},Rg=e=>e.anchorType!=="selection"||e.padding!==void 0?e:{...e,padding:l.SELECTION_PADDING_DEFAULT},ni=e=>{if(e.anchorType==="panel"||e.anchorType==="axis"||e.offset!==void 0||e.align===void 0)return e;const t=fg[e.align];return t===void 0?e:{...e,offset:{x:t.x*4,y:t.y*4,unit:"px"}}},Cg=(e,t,r,n)=>{const a=Qt(e,t.start,r,n,t.id),i=Qt(e,t.end,r,n,t.id);return a===null||i===null?null:{id:t.id??W(),start:ni(a),end:ni(i),startArrowheadStyle:t.startArrowheadStyle??l.ARROW_DEFAULTS.startArrowheadStyle,endArrowheadStyle:t.endArrowheadStyle??l.ARROW_DEFAULTS.endArrowheadStyle}},Vg={parsingLocale:"en-US",legend:{position:"auto",display:"auto",align:"auto"},axes:{x:{isVisible:!0,label:null,position:"bottom",grid:{isVisible:null},ticks:{isVisible:!0,mode:"auto"}},y:{isVisible:!0,label:null,position:"right",grid:{isVisible:null},ticks:{isVisible:!1,mode:"auto"}}},panel:{overflow:{dataLabels:{x:"inside",y:"inside"},differenceArrows:{x:"outside",y:"outside"}}},headline:{show:"none",compareWith:"none",size:"auto",position:"above"},numberFormat:{decimals:"auto",abbreviation:"auto"},content:{title:null,isTitleVisible:!0,subtitle:null,isSubtitleVisible:!0,caption:null,isCaptionVisible:!1,source:null,isSourceVisible:!1,brandMark:{enabled:!1,placement:"footer",variant:"full"},isBrandMarkVisible:!1}};function Dg(e){const t=(0,at.merge)({},Vg,e);return t.content=_g(t.content,e?.content),t}var _g=(e,t)=>{const r=t?.brandMark?.enabled??t?.isBrandMarkVisible??e.brandMark.enabled,n={...e.brandMark,enabled:r};return{...e,brandMark:n,isBrandMarkVisible:r}},Pg={xLimits:null,yLimits:null},Kt={theta:"x",startAngle:0,innerRadius:0};function Zr(e){const t=e??{type:"coord",coordType:"cartesian"},r=(0,jt.default)({},Pg,t.params??{});switch(t.coordType){case"cartesian":case"flip":return{...t,params:r};case"polar":return{...t,params:{...r,theta:t.params?.theta??Kt.theta,startAngle:t.params?.startAngle??Kt.startAngle,innerRadius:(0,Je.default)(t.params?.innerRadius??Kt.innerRadius,0,1)}}}}function Og(e,t,r){const n=[];for(const a of t){if(a.layerId!==void 0&&!r.some(i=>i.id===a.layerId)){e.diagnostics.addWarning({code:"UNKNOWN_LAYER_ID",message:`Highlight references layerId "${a.layerId}", which no layer carries — dropping this highlight.`,context:{layerId:a.layerId,available:r.map(i=>i.id)},suggestion:"Reference an existing layer id, or omit layerId to apply the highlight across all layers."});continue}n.push({type:"highlight",id:a.id??W(),predicate:a.predicate,scope:a.scope??"data-point",...a.layerId!==void 0?{layerId:a.layerId}:{}})}return n}var Mg=class{constructor(){this.diagnostics=[],this.persistent=[]}addWarning(e,t={}){const r={...e,severity:"warning",kind:"user-input"};t.persistent?this.persistent.push(r):this.diagnostics.push(r)}addError(e){this.diagnostics.push({...e,severity:"error",kind:"user-input"})}reset(){this.diagnostics=[]}drain(){const e=this.persistent.length===0?this.diagnostics:[...this.persistent,...this.diagnostics];if(e.length===0)return{errors:[],warnings:[]};const t=ai(e.filter(n=>n.severity==="error")),r=ai(e.filter(n=>n.severity==="warning"));return this.diagnostics=[],{errors:t,warnings:r}}},kg=class{constructor(e,t){this.sink=e,this.baseContext=t}addWarning(e,t){this.sink.addWarning(this.stampBaseContext(e),t)}addError(e){this.sink.addError(this.stampBaseContext(e))}stampBaseContext(e){const t=e.context??{};return{...e,context:{...t,...this.baseContext}}}};function ai(e){const t=new Set;return e.filter(r=>{const n=JSON.stringify(r);return t.has(n)?!1:(t.add(n),!0)})}var Ng={showDataLabels:!1,format:"absolute",showStackTotals:!1,showCategoryLabels:!1,labelSource:{variable:l.POSITION_VARIABLES.yRaw},position:"auto",justify:"end",align:"center",offset:4,categoryPosition:"inside",categoryJustify:"start",categoryAlign:"center",categoryOffset:4};function xs(e,t){const r=e??t,n=typeof r=="string"?r:r.type;if(n==="smooth"){const a=typeof r=="string"?void 0:r;return{type:"smooth",method:a?.method??"linear",order:a?.order??3,bandwidth:a?.bandwidth??.3}}return{type:n}}function Ue(e,t,r,n,a,i){const o=a!==void 0&&i!==void 0?new kg(a,{layerIndex:i}):a,s=e.get(n.geom),c=n.position??s.defaultPosition,u=$g({dataLabels:Ug(e,t,n,c,r),geom:s,position:c,coordType:r,diagnostics:o});return Fg({diagnostics:o,coordType:r,geom:s,position:c,dataLabels:u}),{id:n.id??W(),type:n.type,geom:n.geom,mapping:n.mapping??{},stat:xs(n.stat,"identity"),position:c,yScaleType:n.yScaleType??"primary",params:s.resolveParams({params:n.params,diagnostics:o}),transforms:n.transforms??[],interactive:n.interactive??s.defaultInteractive,dataLabels:u}}function Bg(e,t,r,n,a){const i=n.map((o,s)=>Ue(e,t,r,o,a,s));return Is(e,i)}var As=(e,t,r,n)=>n.label!==void 0?n.label:Vo({geom:e.get(t),position:r,mapping:n,purpose:"label"}),Is=(e,t)=>{const r=new Set;for(const n of t)n.position==="fill"&&r.add(n.yScaleType);return r.size===0?t:Be(t,n=>{if(!r.has(n.yScaleType)||!e.has(n.geom)||!e.get(n.geom).positionRoles.some(o=>o.axis==="y"&&o.role==="scalar"))return n;const a=l.extractConstantValue(n.mapping.y);if(!l.isStrictNumericDataValue(a))return n;const i=(0,at.clamp)(a,0,1);return i===a?n:{...n,mapping:{...n.mapping,y:{value:i}}}})},Fg=({diagnostics:e,coordType:t,geom:r,position:n,dataLabels:a})=>{if(e===void 0)return;const i=r.type==="bar"&&t!=="polar";if(a.showDataLabels&&!r.dataLabelCoordTypes.includes(t)){e.addWarning({code:"DATA_LABELS_UNSUPPORTED",message:`Data labels are not supported for geom '${r.type}' under '${t}' coords; none will render.`,suggestion:"Turn off showDataLabels for this layer."});return}a.showDataLabels&&a.position==="outside"&&i&&U(n)&&e.addWarning({code:"DATA_LABEL_PLACEMENT_COERCED",message:"Stacked bar segments only place data labels inside; position 'outside' will render as 'inside'.",context:{expected:"inside",actual:"outside"},suggestion:"Use position 'inside' or 'auto', or enable showStackTotals for a label above the stack."}),a.showStackTotals&&!(i&&n==="stack")&&e.addWarning({code:"DATA_LABEL_SETTING_IGNORED",message:"showStackTotals only applies to stacked cartesian bars; it will be ignored.",suggestion:"Turn off showStackTotals, or use a bar geom with position 'stack'."})},$g=({dataLabels:e,geom:t,position:r,coordType:n,diagnostics:a})=>{const{justify:i,showDataLabels:o}=e;if(i!=="panel-start"&&i!=="panel-end")return e;const s=Gg(t,r,n);if(s===null)return e;const c=i==="panel-end"?"end":"start";return o&&a?.addWarning({code:"DATA_LABEL_PLACEMENT_COERCED",message:`${s}; justify '${i}' will render as '${c}'.`,context:{expected:c,actual:i},suggestion:`Use justify '${c}' for this layer.`}),{...e,justify:c}},Gg=(e,t,r)=>r==="polar"?"Panel-edge anchors do not apply under polar coords":e.type==="bar"&&U(t)?"Stacked bar segments would all pin their labels to the same panel edge":null,Ug=(e,t,r,n,a)=>{const i={...t,...r.mapping},o=As(e,r.geom,n,i),s=e.get(r.geom);return{...(0,at.merge)({},Ng,s.resolveDataLabelDefaults?.(n)??{},s.dataLabels?.[a]??{},r.dataLabels??{}),labelSource:o}},Hg=e=>{const t=new Set;e!==void 0&&Ts(e,t,new Set);const r={tokens:{},defaults:[],overrides:[]};for(const n of t)Object.assign(r.tokens,n.tokens),r.defaults.push(...n.defaults??[]),r.overrides.push(...n.overrides??[]);return r},Ts=(e,t,r)=>{if(!r.has(e)){r.add(e);for(const n of e.extends??[])Ts(n,t,r);t.delete(e),t.add(e),r.delete(e)}};function Wg(e,t,r){const n=Zr(t.coords),a=Bg(e.geomRegistry,t.mapping,n.coordType,t.layers,e.diagnostics),i=sg(e,{data:t.data,scales:t.scales,layers:a,mapping:t.mapping,coords:n,customPalettes:r}),o=Dg(t.config),s=Og(e,t.highlights,a),c=gg(e,t.annotations,a),u=Hg(t.styles);return{data:t.data,mapping:t.mapping,layers:a,scales:i,transforms:t.transforms,highlights:s,styles:u,annotations:c,coords:n,config:o}}var Ls=class{constructor(e){this.container=e}compile({input:e,dataset:t,customPalettes:r}){return Wg(this.container,{...e,data:t},r)}},Kg=class{constructor(e){this.registry=e}compute(e,t){return this.registry.get(e.type).compute({data:t.data,mapping:t.mapping,spec:e,xScaleIsDiscrete:t.xScaleIsDiscrete})}},xt={differenceArrow:"differenceArrows",shape:"shapes",arrow:"arrows",text:"textAnnotations",image:"images",sticker:"stickers",pinnedNumber:"pinnedNumbers",comment:"comments"},zg={differenceArrow(e){return{type:"annotation",kind:"differenceArrow",annotation:e}},shape(e){return{type:"annotation",kind:"shape",annotation:e}},arrow(e){return{type:"annotation",kind:"arrow",annotation:e}},text(e){return{type:"annotation",kind:"text",annotation:e}},image(e){return{type:"annotation",kind:"image",annotation:e}},sticker(e){return{type:"annotation",kind:"sticker",annotation:e}},pinnedNumber(e){return{type:"annotation",kind:"pinnedNumber",annotation:e}},comment(e){return{type:"annotation",kind:"comment",annotation:e}}},Es=Object.keys(xt),Yg=e=>Object.hasOwn(xt,e),At=(e,t)=>{for(const r of Es){const n=qg(e,r,t);if(n)return n}return null},It=(e,t)=>e[xt[t]],Nn=(e,t,r)=>({...e,[xt[t]]:r}),ws=(e,t)=>{const r=It(e,t.kind);return Nn(e,t.kind,[...r.slice(0,t.index),...r.slice(t.index+1)])},qg=(e,t,r)=>{const n=It(e,t),a=n.findIndex(o=>o.id===r),i=n[a];return i===void 0?null:{kind:t,index:a,annotation:i}},jg=class extends Fe{constructor(e){super(),this.container=e}compile(e){const t=super.compile(e);for(const r of yy(e.styles,t))this.container.diagnostics.addWarning(r);for(const r of by(e.styles))this.container.diagnostics.addWarning(r);for(const r of Sy(e.styles))this.container.diagnostics.addWarning(r);for(const r of t)for(const n of r.styles.warnings)this.container.diagnostics.addWarning(n);return t}dependencies(e){return[e.styles,e.config.parsingLocale]}compileLayer(e,t){const r=ks({layer:e,layerIndex:t.layers.indexOf(e),styles:t.styles,parsingLocale:t.config.parsingLocale});return{...e,styles:r}}},Ve={color:"color",alpha:"unitInterval",saturation:"unitInterval"},er={bar:{...Ve,borderRadius:"radiusToken",borderColor:"color",borderWidth:"pixels"},line:{...Ve,strokeWidth:"pixels",lineType:"lineType",fillAlpha:"unitInterval"},area:{...Ve,strokeWidth:"pixels",lineType:"lineType",strokeAlpha:"unitInterval"},point:{...Ve,size:"pixels",borderColor:"color",borderWidth:"pixels"},rule:{color:"color",strokeWidth:"pixels",lineType:"lineType"},tile:{...Ve,borderRadius:"pixels",borderColor:"color",borderWidth:"pixels"}},ii=1,oi=1e3,Xg="'none' or a shadow object { offsetX, offsetY, blur, color }",si="a non-negative number of pixels, or an object of those per edge",Nt={color:"color",strokeWidth:"pixels",lineType:"lineType"},z={fontFamily:"fontFamily",fontSize:"pixels",fontWeight:"fontWeight",lineHeight:"multiplier",textColor:"color"},Bt={...z,paddingInline:"pixels",paddingBlock:"pixels",background:"color",borderColor:"color",borderWidth:"pixels",borderRadius:"pixels"},li={background:"color",borderColor:"color",borderWidth:"pixels",borderRadius:"pixels",paddingInline:"pixels",paddingBlock:"pixels",shadow:"shadow"},_={panelBorder:{...Nt,borderRadius:"pixels"},panelBorderEdge:Nt,gridLine:Nt,tickLine:{...Nt,length:"pixels"},axisLabel:{...z,margin:"margin"},tickLabel:{...z,offset:"pixels",margin:"margin"},ruleLabel:z,dataLabel:Bt,graph:{background:"color",borderColor:"color",borderWidth:"pixels",borderRadius:"pixels",fontFamily:"fontFamily",fontSize:"pixels",fontWeight:"fontWeight",lineHeight:"multiplier",textColor:"color",textScale:"multiplier",padding:"padding"},heading:z,caption:z,source:z,header:{margin:"margin"},footer:{margin:"margin"},hoverGuide:{color:"color",background:"color"},tooltip:li,tooltipText:z,tooltipPrimaryRow:{background:"color"},headline:{gap:"pixels",margin:"margin"},legend:{gap:"pixels",margin:"margin"},legendPopover:li,legendItem:{...z,paddingInline:"pixels",paddingBlock:"pixels",background:"color",borderColor:"color",borderWidth:"pixels",borderRadius:"pixels"},legendItemSwatch:{size:"pixels",strokeWidth:"pixels"},directLabel:{...z,strokeWidth:"pixels",lineType:"lineType"},annotation:{color:"color",alpha:"unitInterval"},annotationShape:{color:"color",alpha:"unitInterval",borderColor:"color",borderWidth:"pixels"},annotationArrow:{color:"color",strokeWidth:"pixels",lineType:"lineType",borderColor:"color",borderWidth:"pixels",shadow:"shadow"},annotationDifferenceArrow:{color:"color",strokeWidth:"pixels"},annotationDifferenceArrowLabel:Bt,annotationText:{...Bt,alpha:"unitInterval"},annotationImage:{alpha:"unitInterval",borderRadius:"pixels"},annotationCallout:{color:"color",size:"pixels",borderColor:"color",borderWidth:"pixels",shadow:"shadow"},annotationCalloutLabel:{...Bt,shadow:"shadow"}},Rs={number:z,numberCenter:z,caption:z,label:z,swatch:{size:"pixels"},trend:z,trendUp:{textColor:"color"},trendDown:{textColor:"color"},trendFlat:{textColor:"color"}},Zg=new Set([...Object.keys(Ve),...Object.values(er).flatMap(e=>Object.keys(e??{})),...Object.values(_).flatMap(e=>Object.keys(e)),...Object.values(Rs).flatMap(e=>Object.keys(e))]),Cs=["geom","panelBorder","gridLine","tickLine","axisLabel","tickLabel","ruleLabel","dataLabel","graph","heading","caption","source","header","footer","hoverGuide","tooltip","headline","headlineItem","legend","legendItem","directLabel","annotation"],Jg=new Set(["gridLine","tickLine","axisLabel","tickLabel"]),Qg=new Set(["panelBorder","legend","axisLabel","tickLabel"]),ey=(e,t,r="en-US")=>ks({layer:e,layerIndex:0,styles:{tokens:t.tokens??{},defaults:t.defaults??[],overrides:t.overrides??[]},parsingLocale:r}),ty=class extends l.Stage{constructor(e){super(),this.container=e}compile(e){const t=super.compile(e);for(const r of vy(e.styles,e.annotations))this.container.diagnostics.addWarning(r);for(const r of t.warnings)this.container.diagnostics.addWarning(r);return t}dependencies(e){return[e.styles]}run(e){return Vs(e.styles)}},Vs=e=>{const t=[],r={...l.BUILTIN_STYLES.tokens,...e.tokens},n={panelBorder:{defaults:[],overrides:[]},gridLine:{defaults:[],overrides:[]},tickLine:{defaults:[],overrides:[]},axisLabel:{defaults:[],overrides:[]},tickLabel:{defaults:[],overrides:[]},ruleLabel:{defaults:[],overrides:[]},dataLabel:{defaults:[],overrides:[]},graph:{defaults:[],overrides:[]},heading:{defaults:[],overrides:[]},caption:{defaults:[],overrides:[]},source:{defaults:[],overrides:[]},header:{defaults:[],overrides:[]},footer:{defaults:[],overrides:[]},hoverGuide:{defaults:[],overrides:[]},tooltip:{defaults:[],overrides:[]},headline:{defaults:[],overrides:[]},headlineItem:{defaults:[],overrides:[]},legend:{defaults:[],overrides:[]},legendItem:{defaults:[],overrides:[]},directLabel:{defaults:[],overrides:[]},annotation:{defaults:[],overrides:[]},warnings:t},a=(i,o,s,c)=>{if(yr(i))return;const u=i.id===void 0?{}:{styleEntryId:i.id},d=i.select.target;if(!ny(i)){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} targets unknown '${String(d)}'.`,context:{param:"target",actual:String(d),...u},suggestion:`Set 'target' to one of ${Cs.map(m=>`'${m}'`).join(", ")}.`});return}if(i.when!==void 0){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} ignored: chrome entries take no conditions.`,context:{param:"when",...u},suggestion:"Remove the 'when' clause — chrome is chart-scoped, with no observations or states."});return}const p=i.select;if(p.target==="annotation"){const m=p.kind;if(m!==void 0&&!my(m)){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses unknown annotation kind '${String(m)}'.`,context:{param:"kind",actual:String(m),...u},suggestion:`Set 'kind' to one of ${l.ANNOTATION_STYLE_KINDS.map(y=>`'${y}'`).join(", ")}, or omit it to address every annotation.`});return}const f=p.part,g=hy(m);if(f!==void 0&&!(typeof f=="string"&&g.includes(f))){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses unknown part '${String(f)}'.`,context:{param:"part",actual:String(f),...u},suggestion:g.length>0?`Set 'part' to ${g.map(y=>`'${y}'`).join(", ")}, or omit it to address the ${m==="differenceArrow"?"line":"marker"}.`:`Remove 'part' — ${m===void 0?"kind-agnostic":`'${String(m)}'`} entries have none.`});return}const v=p.annotation;if(v!==void 0&&typeof v!="string"){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses an invalid annotation ${Se(v)}.`,context:{param:"annotation",actual:Se(v),...u},suggestion:"Set 'annotation' to the id of an annotation in the spec, or omit it to address every one of the kind."});return}}if(Qg.has(p.target)){const m=p.edge;if(m!==void 0&&!ay(m)){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses unknown edge '${String(m)}'.`,context:{param:"edge",actual:String(m),...u},suggestion:`Set 'edge' to one of ${l.PANEL_BORDER_EDGES.map(f=>`'${f}'`).join(", ")}.`});return}}if(Jg.has(p.target)){const m=p.axis;if(m!==void 0&&!fy(m)){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses unknown axis '${String(m)}'.`,context:{param:"axis",actual:String(m),...u},suggestion:`Set 'axis' to one of ${In.map(f=>`'${f}'`).join(", ")}.`});return}}if(p.target==="ruleLabel"){const m=p.layer;if(m!==void 0&&typeof m!="string"){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses an invalid layer ${Se(m)}.`,context:{param:"layer",actual:Se(m),...u},suggestion:"Set 'layer' to the id of a rule layer in the spec, or omit it to address every rule label."});return}}if(p.target==="tooltip"){const m=p.part;if(m!==void 0&&!sy(m)){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses unknown part '${String(m)}'.`,context:{param:"part",actual:String(m),...u},suggestion:`Set 'part' to one of ${l.TOOLTIP_PARTS.map(f=>`'${f}'`).join(", ")}, or omit it to address the box.`});return}}if(p.target==="heading"){const m=p.part;if(m!==void 0&&!cy(m)){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses unknown part '${String(m)}'.`,context:{param:"part",actual:String(m),...u},suggestion:`Set 'part' to one of ${l.HEADING_PARTS.map(f=>`'${f}'`).join(", ")}, or omit it to address every heading level.`});return}}if(p.target==="source"){const m=p.part;if(m!==void 0&&!ly(m)){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses unknown part '${String(m)}'.`,context:{param:"part",actual:String(m),...u},suggestion:`Set 'part' to one of ${l.SOURCE_PARTS.map(f=>`'${f}'`).join(", ")}, or omit it to address the label.`});return}}if(p.target==="legend"){const m=p.part;if(m!==void 0&&!uy(m)){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses unknown part '${String(m)}'.`,context:{param:"part",actual:String(m),...u},suggestion:`Set 'part' to one of ${l.LEGEND_PARTS.map(f=>`'${f}'`).join(", ")}, or omit it to address the gap.`});return}}if(p.target==="legendItem"){const m=p.part;if(m!==void 0&&!dy(m)){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses unknown part '${String(m)}'.`,context:{param:"part",actual:String(m),...u},suggestion:`Set 'part' to one of ${l.LEGEND_ITEM_PARTS.map(f=>`'${f}'`).join(", ")}, or omit it to address the pill.`});return}}if(p.target==="headlineItem"){const m=p.part;if(!py(m)){t.push({code:"INVALID_STYLE_RULE",message:m===void 0?`Style ${s} ignored: headlineItem entries need a part.`:`Style ${s} addresses unknown part '${String(m)}'.`,context:{param:"part",actual:String(m),...u},suggestion:`Set 'part' to one of ${l.HEADLINE_ITEM_PARTS.map(f=>`'${f}'`).join(", ")}.`});return}}if(p.target==="dataLabel"){const m=p.role;if(m!==void 0&&!iy(m)){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses unknown role '${String(m)}'.`,context:{param:"role",actual:String(m),...u},suggestion:`Set 'role' to one of ${l.DATA_LABEL_ROLES.map(g=>`'${g}'`).join(", ")}.`});return}const f=p.position;if(f!==void 0){if(!oy(f)){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses unknown position '${String(f)}'.`,context:{param:"position",actual:String(f),...u},suggestion:`Set 'position' to one of ${l.DATA_LABEL_POSITIONS.map(g=>`'${g}'`).join(", ")}.`});return}if(m===void 0||m==="aggregate"){t.push({code:"INVALID_STYLE_RULE",message:`Style ${s} addresses a position without a positionable role.`,context:{param:"position",actual:String(f),...u},suggestion:"Set 'role' to 'observation' or 'category', or remove 'position'."});return}}}const h=Fn({declarations:i.declarations,vocabulary:_s(p),tokens:r,location:s,origin:c,warnings:t,entryTarget:p.target});Object.keys(h).length!==0&&n[p.target][o].push({select:p,declarations:h,origin:c})};return l.BUILTIN_STYLES.defaults.forEach((i,o)=>{a(i,"defaults",`builtin[${o}]`,{list:"builtin"})}),e.defaults.forEach((i,o)=>{a(i,"defaults",`defaults[${o}]`,{list:"defaults",index:o,...i.id===void 0?{}:{id:i.id}})}),e.overrides.forEach((i,o)=>{a(i,"overrides",`overrides[${o}]`,{list:"overrides",index:o,...i.id===void 0?{}:{id:i.id}})}),n},ry=(e,t)=>{if(e==="geom"){const r=Object.keys(er).find(n=>er[n]?.[t]!==void 0);return r===void 0?void 0:`style.geom.${r}`}if(e==="annotation"){const r=l.ANNOTATION_STYLE_KINDS.find(n=>_s({target:"annotation",kind:n})[t]!==void 0);return r===void 0?void 0:`style.annotation.${r}`}},yr=e=>e.select.target==="geom",ny=e=>{const t=e.select.target;return t!=="geom"&&Cs.includes(t)},Ds=e=>(e!==void 0?er[e]:void 0)??Ve,_s=e=>{if(e.target==="panelBorder")return e.edge===void 0?_.panelBorder:_.panelBorderEdge;if(e.target==="tooltip")return e.part===void 0?_.tooltip:e.part==="primaryRow"?_.tooltipPrimaryRow:_.tooltipText;if(e.target==="legend")return e.part==="popover"?_.legendPopover:_.legend;if(e.target==="legendItem")return e.part===void 0?_.legendItem:_.legendItemSwatch;if(e.target==="headlineItem")return Rs[e.part];if(e.target==="annotation")switch(e.kind){case"shape":return _.annotationShape;case"arrow":return _.annotationArrow;case"differenceArrow":return e.part==="label"?_.annotationDifferenceArrowLabel:_.annotationDifferenceArrow;case"text":return _.annotationText;case"image":return _.annotationImage;case"pinnedNumber":case"comment":return e.part==="label"?_.annotationCalloutLabel:_.annotationCallout;default:return _.annotation}return _[e.target]},ay=e=>typeof e=="string"&&l.PANEL_BORDER_EDGES.includes(e),iy=e=>typeof e=="string"&&l.DATA_LABEL_ROLES.includes(e),oy=e=>typeof e=="string"&&l.DATA_LABEL_POSITIONS.includes(e),sy=e=>typeof e=="string"&&l.TOOLTIP_PARTS.includes(e),ly=e=>typeof e=="string"&&l.SOURCE_PARTS.includes(e),cy=e=>typeof e=="string"&&l.HEADING_PARTS.includes(e),uy=e=>typeof e=="string"&&l.LEGEND_PARTS.includes(e),dy=e=>typeof e=="string"&&l.LEGEND_ITEM_PARTS.includes(e),py=e=>typeof e=="string"&&l.HEADLINE_ITEM_PARTS.includes(e),my=e=>typeof e=="string"&&l.ANNOTATION_STYLE_KINDS.includes(e),hy=e=>typeof e=="string"&&e in l.ANNOTATION_PARTS?l.ANNOTATION_PARTS[e]:[],fy=e=>typeof e=="string"&&In.includes(e),gy=(e,t,r)=>{const n=[];return l.BUILTIN_STYLES.defaults.forEach((a,i)=>{if(!yr(a))return;const o=a.select.kind;if(o!==void 0&&o!==e)return;const s={list:"builtin"},c=Fn({declarations:a.declarations,vocabulary:Ds(o),tokens:t,location:`builtin[${i}]`,origin:s,warnings:r,entryTarget:"geom"});Object.keys(c).length!==0&&n.push({declarations:c,...a.when?.state===void 0?{}:{state:a.when.state},origin:s})}),n},Bn=(e,t)=>{e.defaults.forEach((r,n)=>t(r,"defaults",n)),e.overrides.forEach((r,n)=>t(r,"overrides",n))},yy=(e,t)=>{const r=new Set(t.map(a=>a.id)),n=[];return Bn(e,(a,i,o)=>{const s=a.select;if(s.target!=="geom"&&s.target!=="ruleLabel")return;const c=s.layer;c===void 0||typeof c!="string"||r.has(c)||n.push({code:"INVALID_STYLE_RULE",message:`Style ${i}[${o}] targets unknown layer '${c}'.`,context:{param:"layer",actual:c,...a.id===void 0?{}:{styleEntryId:a.id}},suggestion:"Set 'layer' to the id of a layer in the spec."})}),n},vy=(e,t)=>{const r=new Map(Es.flatMap(a=>t[xt[a]].map(i=>[i.id,a]))),n=[];return Bn(e,(a,i,o)=>{const s=a.select;if(s.target!=="annotation")return;const c=s.annotation;if(c===void 0||typeof c!="string")return;const u={param:"annotation",actual:c,...a.id===void 0?{}:{styleEntryId:a.id}},d=r.get(c);if(d===void 0){n.push({code:"INVALID_STYLE_RULE",message:`Style ${i}[${o}] targets unknown annotation '${c}'.`,context:u,suggestion:"Set 'annotation' to the id of an annotation in the spec."});return}if(d==="sticker"){n.push({code:"INVALID_STYLE_RULE",message:`Style ${i}[${o}] targets sticker '${c}', which has no style vocabulary.`,context:u,suggestion:"Remove the entry — stickers take no style declarations."});return}const p=s.kind;p!==void 0&&p!==d&&n.push({code:"INVALID_STYLE_RULE",message:`Style ${i}[${o}] targets ${d} '${c}' with an entry addressing kind '${String(p)}'.`,context:u,suggestion:`Set 'kind' to '${d}', or omit it to address the annotation with the shared vocabulary.`})}),n},by=e=>{const t=[];return Bn(e,(r,n,a)=>{if(!yr(r))return;const i=r.when?.state;i===void 0||Ps(i)||t.push({code:"INVALID_STYLE_RULE",message:`Style ${n}[${a}] scopes to unknown state '${i}'.`,context:{param:"state",actual:String(i),...r.id===void 0?{}:{styleEntryId:r.id}},suggestion:`Set 'state' to one of ${l.STYLE_STATES.map(o=>`'${o}'`).join(", ")}.`})}),t},Ps=e=>l.STYLE_STATES.includes(e),Sy=e=>{const t=[];for(const[r,n]of Object.entries(e.tokens))Os(n)||t.push({code:"INVALID_STYLE_RULE",message:`Style token '${r}' has an invalid value: ${Se(n)}.`,context:{param:"tokens",actual:Se(n)},suggestion:`Set '${r}' to a non-empty color string or a { light, dark } pair of colors.`});return t},Os=e=>typeof e=="string"?e.trim().length>0:l.isLightDarkColor(e)&&e.light.trim().length>0&&e.dark.trim().length>0,pe=e=>typeof e=="number"&&Number.isFinite(e),Ms=e=>{if(pe(e)&&e>=0)return{top:e,right:e,bottom:e,left:e};if(typeof e!="object"||e===null)return;const t=e,r={};for(const n of l.PANEL_BORDER_EDGES){const a=t[n];if(a!==void 0){if(!pe(a)||a<0)return;r[n]=a}}return r},xy=e=>{const t=Ms(e);return t===void 0?void 0:{...l.DEFAULT_GRAPH_PADDING_EDGES,...t}},Ay=e=>Ms(e),Se=e=>typeof e=="object"&&e!==null?JSON.stringify(e):String(e),ks=e=>{const{layer:t,layerIndex:r,styles:n,parsingLocale:a}=e,i=vt(t,a),o=[],s={...l.BUILTIN_STYLES.tokens,...n.tokens},c=(u,d)=>{const p=[];return u.forEach((h,m)=>{if(!yr(h))return;const f=h.select.kind;if(f!==void 0&&f!==t.geom||h.select.layer!==void 0&&h.select.layer!==t.id)return;const g=h.when?.state;if(g!==void 0&&!Ps(g))return;const v={list:d,index:m,...h.id===void 0?{}:{id:h.id}},y=h.when?.where;if(y!==void 0){const A=Ae(y,t.data,"style-rule");if(A.length>0){for(const T of A)o.push({...T,code:"INVALID_STYLE_RULE",message:`Style ${d}[${m}]: ${T.message}`,context:{...T.context,layerIndex:r,...h.id===void 0?{}:{styleEntryId:h.id}}});return}}const b=Fn({declarations:h.declarations,vocabulary:Ds(f),tokens:s,location:`${d}[${m}]`,origin:v,warnings:o,entryTarget:"geom"});Object.keys(b).length!==0&&p.push({declarations:b,...y===void 0?{}:{matches:xe(y,i)},...g===void 0?{}:{state:g},origin:v})}),p};return{defaults:[...gy(t.geom,s,o),...c(n.defaults,"defaults")],overrides:c(n.overrides,"overrides"),warnings:o}},Fn=e=>{const{declarations:t,vocabulary:r,tokens:n,location:a,origin:i,warnings:o,entryTarget:s}=e,c={},u=i.list==="builtin"||i.id===void 0?{}:{styleEntryId:i.id},d=(f,g)=>{c[f]=g},p=(f,g,v)=>{o.push({code:"INVALID_STYLE_RULE",message:`Style ${a} declaration '${f}' ignored: expected ${g}, got ${Se(v)}.`,context:{param:f,expected:g,actual:Se(v),...u},suggestion:`Set '${f}' to ${g}.`})},h=(f,g)=>{if(typeof g=="string"){if(g.trim().length>0)return g;p(f,"a non-empty color string",g);return}if(l.isStyleTokenRef(g)){const v=n[g.token];if(v===void 0){o.push({code:"INVALID_STYLE_RULE",message:`Style ${a} declaration '${f}' ignored: unknown token '${g.token}'.`,context:{param:f,actual:g.token,...u},suggestion:`Declare '${g.token}' in the stylesheet's tokens.`});return}return Os(v)?typeof v=="string"?v:{light:v.light,dark:v.dark}:void 0}if(l.isLightDarkColor(g)&&g.light.trim().length>0&&g.dark.trim().length>0)return{light:g.light,dark:g.dark};p(f,"a non-empty color string, a { light, dark } pair, or a token(...) reference",g)},m=f=>{const g=Zg.has(f),v=ry(s,f),y=v===void 0?`Declare '${f}' on a target whose vocabulary carries it.`:`Declare '${f}' on an entry whose kind supports it (e.g. ${v}).`;o.push({code:"INVALID_STYLE_RULE",message:`Style ${a} declaration '${f}' ignored: ${g?"not in this entry's vocabulary":"not a style property"}.`,context:{param:f,...u},suggestion:g?y:`Remove the unknown declaration '${f}'.`})};for(const f of Object.keys(t)){const g=t[f];if(g===void 0)continue;const v=r[f];if(v===void 0){m(f);continue}switch(v){case"color":{const y=h(f,g);y!==void 0&&d(f,y);break}case"unitInterval":pe(g)&&g>=0&&g<=1?d(f,g):p(f,"a number in [0, 1]",g);break;case"pixels":pe(g)&&g>=0?d(f,g):p(f,"a non-negative number of pixels",g);break;case"radiusToken":l.isBorderRadiusToken(g)?d(f,g):p(f,`one of ${l.BORDER_RADIUS_TOKENS.map(y=>`'${y}'`).join(", ")}`,g);break;case"lineType":gn(g)?d(f,g):p(f,`one of ${fn.map(y=>`'${y}'`).join(", ")}`,g);break;case"fontFamily":typeof g=="string"&&g.trim().length>0?d(f,g):p(f,"a non-empty CSS font-family list",g);break;case"fontWeight":pe(g)&&g>=ii&&g<=oi?d(f,g):p(f,`a number in [${ii}, ${oi}]`,g);break;case"multiplier":pe(g)&&g>0?d(f,g):p(f,"a positive multiple of the font size",g);break;case"shadow":{if(g==="none"){d(f,g);break}const y=g;if(!pe(y.offsetX)||!pe(y.offsetY)||!pe(y.blur)||y.blur<0){p(f,Xg,g);break}const b=h(f,y.color);b!==void 0&&d(f,{offsetX:y.offsetX,offsetY:y.offsetY,blur:y.blur,color:b});break}case"padding":{const y=xy(g);y===void 0?p(f,si,g):d(f,y);break}case"margin":{const y=Ay(g);y===void 0?p(f,si,g):d(f,y);break}default:break}}return c},Iy=({layer:e})=>{if(e.position==="stack")return;const t=l.extractVariableName(e.mapping.y);if(t===null)return;let r=0,n=0;for(const a of e.data){const i=a[t];l.isStrictNumericDataValue(i)&&(r+=i,n+=Math.abs(i))}return{grandTotal:r,absoluteGrandTotal:n}},Ty=({layer:e,mainAxis:t})=>{if(e.position!=="stack")return;const r=l.extractVariableName(e.mapping.x);if(r===null||!e.data.hasVariable(l.POSITION_VARIABLES.yMin)||!e.data.hasVariable(l.POSITION_VARIABLES.yMax))return;const n=s=>t==="y"?s.xMax:s.yMax,a=s=>t==="y"?s.xMin:s.yMin,i=new Map;for(const s of e.data){const c=s[r],u=G(s),d=F(s),p=j(s),h=X(s),m=hn(s);if(!l.isDefined(c)||!l.isDefined(u)||!l.isDefined(d)||!l.isDefined(p)||!l.isDefined(h)||!l.isDefined(m))continue;const f=m>=0;if(Math.abs(m)===0)continue;const g=Cn(s,r),v={xMin:p,xMax:h,yMin:u,yMax:d},y=i.get(g);if(y===void 0){i.set(g,{total:m,topPositive:f?v:null,bottomNegative:f?null:v});continue}y.total+=m,f?(y.topPositive===null||n(v)>n(y.topPositive))&&(y.topPositive=v):(y.bottomNegative===null||a(v)<a(y.bottomNegative))&&(y.bottomNegative=v)}const o=[];for(const[s,c]of i){const u=c.topPositive??c.bottomNegative;u!==null&&o.push({xKey:s,total:c.total,anchor:{xMin:u.xMin,xMax:u.xMax,yMin:u.yMin,yMax:u.yMax,direction:c.topPositive!==null?"positive":"negative"}})}return o},Ly=class extends Fe{constructor(e){super(),this.container=e}dependencies(e){return[e.coordSystem]}compileLayer(e,t){const r=this.container.geomRegistry.get(e.geom),n={},a=t.coordSystem.type==="cartesian"?t.coordSystem.mainAxis:"x";if(r.summaries.stackTotals){const i=Ty({layer:e,mainAxis:a});i!==void 0&&(n.stackTotals=i)}if(r.summaries.grandTotal){const i=Iy({layer:e});i!==void 0&&(n.grandTotal=i.grandTotal,n.absoluteGrandTotal=i.absoluteGrandTotal)}return{...e,summary:n}}},Ns=class extends l.Stage{constructor(e){super(),this.registry=e}key(e){return e.data}dependencies(e){return[e.transforms]}run(e){return e.transforms.reduce((t,r)=>this.registry.get(r.transformType).apply(t,r),e.data)}},ci={color:"categorical",size:"numeric",alpha:"numeric",strokeWidth:"numeric",lineType:"categorical"},Ey=["color","size","alpha","strokeWidth","lineType"],wy=class extends Fe{dependencies(e){return Ey.map(t=>e.scales[t])}compileLayer(e,t){let r=e.data;const n=Object.entries(l.VISUAL_VARIABLES);for(const[a,i]of n){const o=l.extractConstantValue(e.mapping[a]);if(o!==void 0){r=r.addConstantVariable(i,ci[a],o);continue}const s=l.extractVariableName(e.mapping[a]),c=t.scales[a];!s||!c||c.kind!=="visual"||(r=r.deriveVariableFrom(s,i,ci[a],Ry(c)))}return{...e,data:r}}},Ry=e=>t=>l.isDefined(t)?e.map(t):null;function Bs(e=new hr){return{diagnostics:new Mg,geomRegistry:e}}var Fs=class{constructor(e,t,r,n,a,i,o,s,c,u,d,p,h,m,f,g){this.container=e,this.dataCompiler=t,this.specCompiler=r,this.transformCompiler=n,this.constantMappingCompiler=a,this.layerPhasedCompiler=i,this.scaleCompiler=o,this.coordCompiler=s,this.positionMapperCompiler=c,this.visualMapperCompiler=u,this.guideCompiler=d,this.summariseCompiler=p,this.stylesCompiler=h,this.chromeStylesCompiler=m,this.highlightsCompiler=f,this.annotationsCompiler=g,this.lastCompile=null,this.lastDiagnostics=null,this.lastData=void 0,this.lastCustomPalettes={},this.stages=[{name:"data",getStats:()=>this.dataCompiler.stats},{name:"transform",getStats:()=>this.transformCompiler.stats},{name:"constantMapping",getStats:()=>this.constantMappingCompiler.stats},{name:"layer",getStats:()=>this.layerPhasedCompiler.stats},{name:"coordSetup",getStats:()=>this.coordCompiler.setupStats},{name:"scale",getStats:()=>this.scaleCompiler.stats},{name:"positionMapper",getStats:()=>this.positionMapperCompiler.stats},{name:"visualMapper",getStats:()=>this.visualMapperCompiler.stats},{name:"coordTransform",getStats:()=>this.coordCompiler.transformStats},{name:"summarise",getStats:()=>this.summariseCompiler.stats},{name:"guide",getStats:()=>this.guideCompiler.stats},{name:"styles",getStats:()=>this.stylesCompiler.stats},{name:"chromeStyles",getStats:()=>this.chromeStylesCompiler.stats},{name:"highlights",getStats:()=>this.highlightsCompiler.stats},{name:"annotations",getStats:()=>this.annotationsCompiler.stats}]}compile(e){try{const t=this.runCompile(()=>(this.lastData=e.data,this.lastCustomPalettes=e.customPalettes??{},this.runPipeline({spec:this.specCompiler.compile({input:e.input,customPalettes:this.lastCustomPalettes,dataset:this.dataCompiler.compile(e.data)}),colorScheme:e.colorScheme??ui})));return this.toOkResult(t)}catch(t){return this.toErrorResult(t)}}recompile(e){try{const t=this.runCompile(()=>{const r=e.colorScheme??ui;if(e.data===void 0)return this.runPipeline({spec:e.spec,colorScheme:r});this.lastData=e.data;const n=this.dataCompiler.compile(e.data),a=this.reResolveInferredScalesIfNeeded(e.spec.data,R(e.spec,{data:n}));return this.runPipeline({spec:a,colorScheme:r})});return this.toOkResult(t)}catch(t){return this.toErrorResult(t)}}getCacheStats(){const e={};for(const{name:t,getStats:r}of this.stages)e[t]={...r()};return e}getLastCompile(){return this.lastCompile}getDiagnostics(){return this.lastDiagnostics}reResolveInferredScalesIfNeeded(e,t){if(e.size()!==0||t.data.size()===0||t.scales.filter(n=>n.inferredFrom!==void 0).length===0)return t;const r=On(this.container,{data:t.data,layers:t.layers,mapping:t.mapping,customPalettes:this.lastCustomPalettes});return R(t,{scales:Be(t.scales,n=>{const a=n.inferredFrom;if(a===void 0)return n;const i=gr(r,a);return t.coords.coordType==="polar"?Mn(i):i})})}runCompile(e){this.container.diagnostics.reset();const t=this.trackCompile(e);return this.lastDiagnostics=this.container.diagnostics.drain(),t}toOkResult(e){return{ok:!0,compiled:e,warnings:this.lastDiagnostics?.warnings??[]}}toErrorResult(e){const t=this.container.diagnostics.drain();return this.lastDiagnostics=t,{ok:!1,errors:t.errors.length>0?t.errors:[Eo(e)],warnings:t.warnings}}trackCompile(e){if(!l.IS_DEV)return e();const t=this.getCacheStats(),r=performance.now(),n=e(),a=performance.now()-r,i={};for(const{name:o,getStats:s}of this.stages){const c=s();i[o]={hits:c.hits-t[o].hits,misses:c.misses-t[o].misses}}return this.lastCompile={stages:i,durationMs:a},n}runPipeline({spec:e,colorScheme:t}){return{...cr({spec:e}).pipe(({spec:r})=>({spec:R(r,{data:this.transformCompiler.compile({data:r.data,transforms:r.transforms})})})).pipe(({spec:r})=>{const n=this.constantMappingCompiler.compile({data:r.data,mapping:r.mapping});return{spec:R(r,{data:n.data,mapping:n.mapping})}}).pipe(({spec:r})=>({layers:this.layerPhasedCompiler.compile({data:r.data,layers:r.layers,mapping:r.mapping,coords:r.coords,scales:r.scales})})).pipe(({spec:r,layers:n})=>this.coordCompiler.setup({coordSpec:r.coords,scales:r.scales,layers:n})).pipe(({layers:r,scales:n})=>({scales:this.scaleCompiler.compile({layers:r,scales:n,colorScheme:t})})).pipe(({spec:r})=>({config:r.config})).pipe(({layers:r,scales:n})=>({layers:this.positionMapperCompiler.compile({layers:r,scales:n})})).pipe(({layers:r,scales:n})=>({layers:this.visualMapperCompiler.compile({layers:r,scales:n})})).pipe(({spec:r,layers:n,coordSystem:a})=>({layers:this.coordCompiler.transform({coordSpec:r.coords,coordSystem:a,layers:n})})).pipe(({layers:r,coordSystem:n})=>({layers:this.summariseCompiler.compile({layers:r,coordSystem:n})})).pipe(({spec:r,scales:n,layers:a,coordSystem:i})=>({guides:this.guideCompiler.compile({scales:n,config:r.config,layers:a,coordSystem:i,originalData:this.lastData})})).pipe(({spec:r,layers:n})=>({layers:this.stylesCompiler.compile({layers:n,styles:r.styles,config:r.config})})).pipe(({spec:r})=>({chrome:this.chromeStylesCompiler.compile({styles:r.styles,annotations:r.annotations})})).pipe(({spec:r,layers:n})=>({layers:this.highlightsCompiler.compile({layers:n,highlights:r.highlights,config:r.config})})).pipe(({spec:r,layers:n,coordSystem:a,scales:i})=>({annotations:this.annotationsCompiler.compile({annotations:r.annotations,layers:n,coordSystem:a,scales:i,config:r.config})})).result(),spec:e}}},Cy=["data","transform","constantMapping","layer","coordSetup","scale","positionMapper","visualMapper","coordTransform","summarise","guide","styles","chromeStyles","highlights","annotations"],ui="light",Vy=({plugins:e=[]}={})=>{const t=cs(e),{geomRegistry:r,statRegistry:n,transformRegistry:a}=bf(t),i=Bs(r),o=new ig(i),s=new Ns(a);for(const c of t.warnings)i.diagnostics.addWarning(c,{persistent:!0});return new Fs(i,new l.DataCompiler,new Ls(i),s,new Wp,new Gh(i,s,n,new Mh(i,s,new Kg(n),new fm,new hm(i),new Af(new Cf))),new Uf(i,o),new Yp(new cm),new Gf(i),new wy,new Eh(i),new Ly(i),new jg(i),new ty(i),new Vh(i),new Vp(i))};function $s(e,t){return e.geom===t}function Gs(...e){let t={},r;const[n,...a]=e;l.isDefined(n)&&!Dy(n)?(t=n,r=a):r=e;const i={mapping:t,layers:[],scales:[],transforms:[],highlights:[],config:{}};return r.reduce((o,s)=>Hs(o,s),i)}function Us(e,...t){return t.reduce((r,n)=>Hs(r,n),e)}function Dy(e){return typeof e=="object"&&e!==null&&"type"in e}function Hs(e,t){switch(t.type){case"scale":return{...e,scales:[...e.scales,t]};case"coord":return{...e,coords:t};case"config":return{...e,config:(0,jt.default)({},e.config,t.config)};case"layer":return{...e,layers:[...e.layers,t]};case"transform":return{...e,transforms:[...e.transforms,t]};case"mapping":return{...e,mapping:{...e.mapping,...t.mapping}};case"highlight":return{...e,highlights:[...e.highlights,t]};case"styles":return{...e,styles:e.styles===void 0?t:{...t,extends:[e.styles,...t.extends??[]]}};case"annotation":return _y(e,t);default:throw new l.InternalError({message:`Unknown spec item type: ${t.type}`})}}function _y(e,t){const r={...e.annotations};switch(t.kind){case"differenceArrow":r.differenceArrows=[...r.differenceArrows??[],t.annotation];break;case"shape":r.shapes=[...r.shapes??[],t.annotation];break;case"arrow":r.arrows=[...r.arrows??[],t.annotation];break;case"text":r.textAnnotations=[...r.textAnnotations??[],t.annotation];break;case"image":r.images=[...r.images??[],t.annotation];break;case"sticker":r.stickers=[...r.stickers??[],t.annotation];break;case"pinnedNumber":r.pinnedNumbers=[...r.pinnedNumbers??[],t.annotation];break;case"comment":r.comments=[...r.comments??[],t.annotation];break;default:throw new Error(`Unknown annotation kind: ${t.kind}`)}return{...e,annotations:r}}function Py(e){const t=e?.plugins??[],r=My(t);return{geom:{...l.geom,...r.geom},stat:{...l.stat,...r.stat},transform:{...l.transform,...r.transform},scale:l.scale,coord:l.coord,createSpec:Gs,pipe:Us,plugins:t}}var Oy=e=>(t={})=>l.buildLayerInput(e,t);function My(e){const{geoms:t,stats:r,transforms:n}=cs(e),a={};for(const s of t)a[s.type]=Oy(s.type);const i={};for(const s of r)i[s.type]=()=>({type:s.type});const o={};for(const s of n)o[s.transformType]=c=>({type:"transform",transformType:s.transformType,options:c?.options});return{geom:a,stat:i,transform:o}}var Pr="…",Ws=(e,t,r)=>{if(t<=0||e.length===0)return"";if(r(e)<=t)return e;if(r(Pr)>t)return"";let n=0,a=e.length-1,i=0;for(;n<=a;){const o=n+a>>>1;r(e.slice(0,o)+Pr)<=t?(i=o,n=o+1):a=o-1}return e.slice(0,i)+Pr};var Y={timeZone:"UTC"},K=e=>t=>{if(!l.isStrictTemporalDataValue(t))return"–";try{return e(t)}catch{return"n/a"}},we=e=>t=>l.isStrictNumericDataValue(t)?e(t):"–",$n=e=>t=>l.isStrictCategoricalDataValue(t)?t:"–",ky=Wr.default.humanizer({language:"en",spacer:"",delimiter:" ",languages:{en:{y:()=>"y",mo:()=>"mo",w:()=>"w",d:()=>"d",h:()=>"h",m:()=>"m",s:()=>"s",ms:()=>"ms"}}}),Ks=({valueFormat:e,locale:t,numberFormat:r,intlOptions:n})=>we(a=>{const i=typeof r.decimals=="number"?r.decimals:2,o=Hn(a,i),{base:s,suffix:c}=Un(a,r.abbreviation),u={...o,...l.isCurrencyValueFormat(e)?{style:"currency",currencyDisplay:"narrowSymbol",currency:e.iso}:{},...n};return`${Intl.NumberFormat(t,u).format(s)}${c}`}),zs=({locale:e,numberFormat:t,intlOptions:r})=>we(n=>{const{base:a,suffix:i}=Un(n,t.abbreviation),o={...Hn(a,t.decimals),...r};return`${Intl.NumberFormat(e,o).format(a)}${i}`}),Gn=e=>we(t=>ky(t)),Ys=({locale:e,intlOptions:t})=>we(r=>Intl.NumberFormat(e,{maximumFractionDigits:0,...t}).format(r)),qs=({locale:e,numberFormat:t,intlOptions:r})=>we(n=>{const a=Hn(n,t.decimals);return Intl.NumberFormat(e,{...a,...r,style:"percent"}).format(n)}),Un=(e,t="none")=>{switch(t){case"none":return{base:e,suffix:""};case"auto":{const r=Ny(e);return Un(e,r)}default:return{base:e/l.SUFFIX_MULTIPLIERS[t],suffix:t}}},Hn=(e,t)=>{if(typeof t=="number")return{minimumFractionDigits:t,maximumFractionDigits:t};const r=Math.ceil(Math.log10(Math.abs(e))),n=r>=3?0:r===2?1:2;return{minimumFractionDigits:t==="auto"?0:n,maximumFractionDigits:n}},Ny=e=>{const t=Math.abs(e);return t>=l.SUFFIX_MULTIPLIERS.b?"b":t>=l.SUFFIX_MULTIPLIERS.m?"m":t>=l.SUFFIX_MULTIPLIERS.k?"k":"none"},By=({locale:e,intlOptions:t})=>K(r=>Intl.DateTimeFormat(e,{dateStyle:"medium",...Y,...t}).format(r)),Fy=({locale:e,intlOptions:t})=>K(r=>{const n=Intl.DateTimeFormat(e,{dateStyle:"medium",timeStyle:"medium",...Y,...t}).formatToParts(r);return $y(n.map(Gy))}),js=({locale:e,intlOptions:t})=>K(r=>Intl.DateTimeFormat(e,{day:"numeric",month:"long",...Y,...t}).format(r)),Xs=({locale:e,intlOptions:t})=>K(r=>Intl.DateTimeFormat(e,{month:"long",...Y,...t}).format(r)),Wn=({locale:e,intlOptions:t})=>K(r=>Intl.DateTimeFormat(e,{month:"short",year:"numeric",...Y,...t}).format(r)),Kn=e=>K(t=>`Q${Math.floor(t.getUTCMonth()/3)+1} ${t.getUTCFullYear()}`),Zs=({locale:e,intlOptions:t})=>K(r=>{const n=(0,ho.addDays)(r,6);return Intl.DateTimeFormat(e,{day:"numeric",month:"long",...Y,...t,year:void 0}).formatRange(r,n)}),Js=({locale:e,intlOptions:t})=>K(r=>{const n=(0,ho.addDays)(r,6);return Intl.DateTimeFormat(e,{dateStyle:"medium",...Y,...t}).formatRange(r,n)}),zn=({locale:e,intlOptions:t})=>K(r=>Intl.DateTimeFormat(e,{year:"numeric",...Y,...t}).format(r)),Qs=({locale:e,intlOptions:t})=>K(r=>Intl.DateTimeFormat(e,{timeStyle:"short",...Y,...t}).format(r)),$y=e=>e.map(t=>t.value).join(""),Gy=e=>e.type!=="literal"||e.value!==", "?e:{type:"literal",value:" • "},di=1e3,Uy=({valueFormat:e,locale:t,tickValues:r,intlOptions:n})=>we(a=>{const i={...qn(a,r),notation:"compact",...l.isCurrencyValueFormat(e)?{style:"currency",currencyDisplay:"narrowSymbol",currency:e.iso}:{},...n};return Yn(a,t,i)}),Hy=({locale:e,tickValues:t,intlOptions:r})=>we(n=>{const a={...qn(n,t),notation:"compact",...r};return Yn(n,e,a)}),Wy=({locale:e,tickValues:t,intlOptions:r})=>we(n=>{const a={...qn(n,t),notation:"compact",...r,style:"percent"};return Yn(n,e,a)}),Yn=(e,t,r)=>Intl.NumberFormat(t,r).formatToParts(e).map(n=>n.type==="compact"?n.value.toLowerCase():n.value).join(""),el=e=>Math.abs(e)>di?el(e/di):Number.isInteger(e),Ky=e=>{if(e.length<2)return!1;const[t,r]=e;return typeof t!="number"||typeof r!="number"?!1:Math.abs(r-t)<1},qn=(e,t)=>el(e)?{minimumFractionDigits:0,maximumFractionDigits:0}:Ky(t)?{minimumFractionDigits:0,maximumFractionDigits:4}:{minimumFractionDigits:0,maximumFractionDigits:1},zy=({locale:e,intlOptions:t})=>K(r=>Intl.DateTimeFormat(e,{day:"numeric",month:"short",...Y,...t}).format(r)),Yy=({locale:e,intlOptions:t})=>K(r=>Intl.DateTimeFormat(e,{month:"short",...Y,...t}).format(r)),qy=({locale:e,intlOptions:t})=>K(r=>Intl.DateTimeFormat(e,{day:"numeric",month:"short",...Y,...t}).format(r)),jy=({locale:e,intlOptions:t})=>K(r=>Intl.DateTimeFormat(e,{timeStyle:"short",...Y,...t}).format(r)),jn=e=>{const{valueFormat:t}=e;switch(t.type){case"currency":return Uy(e);case"date":case"datetime":return zy(e);case"day_month":case"weekly_date_range":case"weekly_date_range_with_year":return qy(e);case"decimal":case"integer":return Hy(e);case"duration":return Gn(e);case"month":return Yy(e);case"month_year":return Wn(e);case"percentage":return Wy(e);case"quarter":return Kn(e);case"text":return $n(e);case"time":return jy(e);case"year":return zn(e);case"lookup":return jn({...e,valueFormat:t.fallback});default:throw new l.InternalError({message:`Unhandled value format: ${t.type}`})}},Xy=.9,Zy=1/3,Jy=1/4,Qy=e=>e.formattedAxis.position==="top"||e.formattedAxis.position==="bottom"?ev(e):tv(e),ev=({formattedAxis:e,bandwidthPx:t,panelRect:r,measureLabel:n})=>{const{widths:a,maxWidth:i,maxHeight:o}=tl(e.ticks,n),s=rv(e.ticks,r.width),c=s*Xy;if(i<=c)return{...e,labelRotation:0,labelMaxWidthPx:null};if(s>=50){const d=Qr(c);return{...e,ticks:Jr(e.ticks,a,d,n),labelRotation:0,labelMaxWidthPx:d}}if(o+8>t)return{...e,ticks:[],labelRotation:0,labelMaxWidthPx:null};const u=Qr(r.height*Zy);return{...e,ticks:Jr(e.ticks,a,u,n),labelRotation:-90,labelMaxWidthPx:u}},tv=({formattedAxis:e,bandwidthPx:t,panelRect:r,measureLabel:n})=>{const{widths:a,maxWidth:i,maxHeight:o}=tl(e.ticks,n);if(o>t)return{...e,ticks:[],labelRotation:0,labelMaxWidthPx:null};const s=Qr(r.width*Jy);return i<=s?{...e,labelRotation:0,labelMaxWidthPx:null}:{...e,ticks:Jr(e.ticks,a,s,n),labelRotation:0,labelMaxWidthPx:s}},rv=(e,t)=>{const r=e[0],n=e[1];return r===void 0||n===void 0?t:Math.abs(n.position-r.position)*t},tl=(e,t)=>{const r=[];let n=0,a=0;for(const i of e){const{width:o,height:s}=t(i.formattedLabel);r.push(o),o>n&&(n=o),s>a&&(a=s)}return{widths:r,maxWidth:n,maxHeight:a}},Jr=(e,t,r,n)=>{const a=i=>n(i).width;return e.map((i,o)=>(t[o]??0)<=r?i:{...i,formattedLabel:Ws(i.formattedLabel,r,a)})},Qr=e=>Math.max(0,Math.floor(e)),nv=(e,t,r,n)=>{if(e.length===0)return!0;const a=t==="top"||t==="bottom",i=a?60:40;let o=r-(e.length-1)*i;for(const s of e){const{width:c,height:u}=n(s);if(o-=a?c:u,o<0)return!1}return!0},av=({axis:e,availableSpacePx:t,measureLabel:r,resolveFormatter:n})=>{const{tickCandidates:a,position:i}=e;if(a.length===0)return[];const o=new Map,s=p=>{const h=o.get(p);if(h)return h;const m=a[p],f=m?iv(m.ticks,n(m)):[];return o.set(p,f),f};let c=0,u=a.length-1,d=-1;for(;c<=u;){const p=c+u>>>1;nv(s(p).map(h=>h.formattedLabel),i,t,r)?(d=p,c=p+1):u=p-1}return d>=0?s(d):s(0)},iv=(e,t)=>e.map(r=>({...r,formattedLabel:t(r.value)})),pi=.5,Tt=e=>({x:0,y:0,width:e.width,height:e.height}),Xn=e=>e==="panel-end"?"end":e==="panel-start"?"start":e,Lt=({box:e,panel:t,frame:r,placement:n,justify:a,align:i,offset:o,alignOffset:s,labelWidth:c,labelHeight:u})=>{const d=a==="panel-start"||a==="panel-end",p=(r.valueAxis==="x"?e.height:e.width)===0,h={anchor:sv(a,r.valueDirectionSign),placement:d?"inside":n,offset:o},m={anchor:lv(i),placement:p?n:"inside",offset:p?s??o:0},f=d?t:e,g=r.valueAxis==="x"?f:e,v=r.valueAxis==="y"?f:e,y=r.valueAxis==="x"?h:m,b=r.valueAxis==="x"?m:h,A=hi(y,{min:g.x,max:g.x+g.width,halfExtent:c/2}),T=hi(b,{min:v.y,max:v.y+v.height,halfExtent:u/2});return{x:A,y:T,position:ov(e,A,T,c,u)}},mi=(e,t,r,n)=>r-n>=e-pi&&r+n<=t+pi,ov=(e,t,r,n,a)=>{if(e.width===0&&e.height===0)return"outside";const i=e.width===0||mi(e.x,e.x+e.width,t,n/2),o=e.height===0||mi(e.y,e.y+e.height,r,a/2);return i&&o?"inside":"outside"},sv=(e,t)=>e==="center"?"center":(e==="end"||e==="panel-end")==(t===1)?"max":"min",lv=e=>e==="center"?"center":e==="start"?"min":"max",hi=({anchor:e,placement:t,offset:r},{min:n,max:a,halfExtent:i})=>{if(e==="center")return(n+a)/2;if(t==="inside"&&n===a)return n;const o=r+i;return e==="min"?t==="inside"?n+o:n-o:t==="inside"?a-o:a+o},cv=(e,t,r,n,a)=>{const i=t??e,o=1-Math.max(e,i);return{box:{x:r*n,y:o*a,width:0,height:Math.abs(e-i)*a},frame:{valueAxis:"y",valueDirectionSign:e>=i?-1:1}}},uv=e=>{const t=[];if(!e.layer.dataLabels.showDataLabels)return{labels:t,droppedCount:0};const{offset:r}=e.layer.dataLabels,n=pv(e.layer);for(const a of e.layer.data){const i=M(a),o=F(a)??D(a);if(i===null||o===null||!et(i,o))continue;const s=e.formatLabel(a);if(s==="")continue;const{width:c,height:u}=e.measureDataLabel("observation","outside",s),{box:d,frame:p}=cv(o,G(a),i,e.panelRect.width,e.panelRect.height),h=Lt({box:d,panel:Tt(e.panelRect),frame:p,...n,offset:r,labelWidth:c,labelHeight:u});t.push({layerId:e.layer.id,x:h.x,y:h.y,text:s,width:c,height:u,isRotated:!1,target:"observation",position:"outside"})}return{labels:t,droppedCount:0}},dv={place:uv,getPercentageValueStrategy:e=>e.position==="fill"?"fill":U(e.position)?"stack":"none"},pv=e=>{const{position:t,justify:r,align:n}=e.dataLabels;return t==="auto"?{placement:"outside",justify:"end",align:"center"}:{placement:t,justify:dr(e.data,e.mapping)?Xn(r):r,align:n}};function Et(e){return e[l.VISUAL_VARIABLES.color]}function rl(e){return e[l.VISUAL_VARIABLES.alpha]}function Zn(e){return e[l.VISUAL_VARIABLES.size]}function en(e){return e[l.VISUAL_VARIABLES.strokeWidth]}function nl(e){return e[l.VISUAL_VARIABLES.lineType]}var mv={color:Et,alpha:rl,strokeWidth:en,lineType:nl,size:Zn,borderWidth:en},ot=(e={})=>{const t=e.colorScheme??"light",r=new WeakMap,n=new WeakMap;return{geomReaders:s=>{const c=r.get(s);if(c!==void 0)return c;const u=fv(s.styles,t);return r.set(s,u),u},chromeReaders:s=>{const c=n.get(s);if(c!==void 0)return c;const u=hv(s,t);return n.set(s,u),u},explain:(s,c,u,d)=>{if(d!==void 0){const f=ct(s.styles.overrides,c,u,d,t);if(f!==void 0)return{value:f.value,tier:"override",origin:f.origin,state:d};const g=ct(s.styles.defaults,c,u,d,t);if(g!==void 0)return{value:g.value,tier:"default",origin:g.origin,state:d}}const p=ct(s.styles.overrides,c,u,void 0,t);if(p!==void 0)return{value:p.value,tier:"override",origin:p.origin};const h=al(c,u);if(h!==void 0)return{value:h,tier:"data"};const m=ct(s.styles.defaults,c,u,void 0,t);return m!==void 0?{value:m.value,tier:"default",origin:m.origin}:{value:void 0,tier:"unresolved"}}}},hv=(e,t)=>{const r=(v,y)=>{const b=w=>fi(v.overrides,w,y)??fi(v.defaults,w,y);return{get:w=>{const C=b(w)?.declarations[w];if(C!==void 0)return Or(C,t)},getSource:w=>{const C=b(w);return C===void 0?"unresolved":C.origin.list==="builtin"?"builtin":"authored"},explain:w=>{const C=b(w),I=C?.declarations[w];return C===void 0||I===void 0?{value:void 0,source:"unresolved"}:{value:Or(I,t),source:C.origin.list==="builtin"?"builtin":"authored",origin:C.origin,select:C.select}},collectAll:w=>{const C=[];for(const I of[v.defaults,v.overrides])for(const V of I){if(!y(V))continue;const O=V.declarations[w];O!==void 0&&C.push(Or(O,t))}return C}}},n=(v,y)=>{const b="edge"in v.select?v.select.edge:void 0;return b===void 0||b===y},a=v=>r(e.panelBorder,y=>n(y,v)),i=v=>r(e.legend,y=>y.select.target!=="legend"||y.select.part!==void 0?!1:n(y,v)),o=v=>(y,b)=>r(e[v],A=>A.select.target!==v||A.select.axis!==void 0&&A.select.axis!==y?!1:n(A,b)),s=v=>r(e.ruleLabel,y=>y.select.target!=="ruleLabel"?!1:y.select.layer===void 0||y.select.layer===v),c=(v,y)=>r(e.dataLabel,b=>b.select.target!=="dataLabel"||b.select.role!==void 0&&b.select.role!==v?!1:b.select.position===void 0||b.select.position===y),u=v=>r(e.tooltip,y=>y.select.target==="tooltip"&&y.select.part===v),d=v=>r(e.source,y=>y.select.target==="source"&&y.select.part===v),p=v=>r(e.heading,y=>y.select.target!=="heading"?!1:y.select.part===void 0||y.select.part===v),h=v=>r(e.legend,y=>y.select.target==="legend"&&y.select.part===v),m=v=>r(e.legendItem,y=>y.select.target==="legendItem"&&y.select.part===v),f=v=>r(e.headlineItem,y=>y.select.target==="headlineItem"&&y.select.part===v),g=(v,y)=>{const b=new Map;return A=>{const T=b.get(A);if(T!==void 0)return T;const L=r(e.annotation,E=>{if(E.select.target!=="annotation")return!1;const w=E.select.kind;return w!==void 0&&w!==v||E.select.part!==y?!1:E.select.annotation===void 0||E.select.annotation===A});return b.set(A,L),L}};return{panelBorder:a,gridLine:o("gridLine"),tickLine:o("tickLine"),axisLabel:o("axisLabel"),tickLabel:o("tickLabel"),ruleLabel:s,dataLabel:c,graph:r(e.graph,()=>!0),heading:{h1:p("h1"),h2:p("h2")},caption:r(e.caption,()=>!0),source:{label:d(void 0),link:d("link")},header:r(e.header,()=>!0),footer:r(e.footer,()=>!0),hoverGuide:r(e.hoverGuide,()=>!0),tooltip:{box:u(void 0),heading:u("heading"),label:u("label"),value:u("value"),primaryRow:u("primaryRow")},headline:r(e.headline,()=>!0),headlineItem:{number:f("number"),numberCenter:f("numberCenter"),caption:f("caption"),label:f("label"),swatch:f("swatch"),trend:f("trend"),trendUp:f("trendUp"),trendDown:f("trendDown"),trendFlat:f("trendFlat")},legend:Object.assign(i,{popover:h("popover")}),legendItem:{item:m(void 0),swatch:m("swatch")},directLabel:r(e.directLabel,()=>!0),annotation:{shape:g("shape"),arrow:g("arrow"),differenceArrow:Object.assign(g("differenceArrow"),{label:g("differenceArrow","label")}),text:g("text"),image:g("image"),pinnedNumber:Object.assign(g("pinnedNumber"),{label:g("pinnedNumber","label")}),comment:Object.assign(g("comment"),{label:g("comment","label")})}}},fi=(e,t,r)=>{for(let n=e.length-1;n>=0;n--){const a=e[n];if(!(a===void 0||!r(a))&&a.declarations[t]!==void 0)return a}},Or=(e,t)=>{if(l.isLightDarkColor(e))return e[t];if(typeof e=="object"&&"offsetX"in e){const{offsetX:r,offsetY:n,blur:a,color:i}=e;return{offsetX:r,offsetY:n,blur:a,color:l.isLightDarkColor(i)?i[t]:i}}return e},fv=(e,t)=>({get:(n,a,i)=>{if(i!==void 0){const c=Ft(e.overrides,n,a,i,t);if(c!==void 0)return c;const u=Ft(e.defaults,n,a,i,t);if(u!==void 0)return u}const o=Ft(e.overrides,n,a,void 0,t);if(o!==void 0)return o;const s=al(n,a);return s!==void 0?s:Ft(e.defaults,n,a,void 0,t)}}),Ft=(e,t,r,n,a)=>ct(e,t,r,n,a)?.value,ct=(e,t,r,n,a)=>{for(let i=e.length-1;i>=0;i--){const o=e[i];if(o===void 0||o.state!==n)continue;const s=o.declarations[t];if(s!==void 0&&gv(o,r))return{value:yv(s,a),origin:o.origin}}},gv=(e,t)=>e.matches===void 0?!0:t!==void 0&&e.matches(t),yv=(e,t)=>l.isLightDarkColor(e)?e[t]:e,al=(e,t)=>{const r=mv[e];if(!(r===void 0||t===void 0))return r(t)??void 0},Jn=(e,t,r)=>{const n={},a=i=>{const o=n[i];if(o!==void 0)return o;const{width:s,height:c}=e(t,i,r),u={width:s,height:c};return n[i]=u,u};return{get inside(){return a("inside")},get outside(){return a("outside")}}},$t=6,vv=.5,bv=e=>{const t=[];let r=0;const n=U(e.layer.position),a=e.coordSystem.mainAxis==="y";if(e.layer.dataLabels.showDataLabels){const{entries:i,shouldRotate:o}=xv({layer:e.layer,mainAxis:e.coordSystem.mainAxis,panelRect:e.panelRect,measureDataLabel:e.measureDataLabel,formatLabel:e.formatLabel,isFlipped:a});for(const s of i){const c=e.layer.dataLabels.position==="auto"?Tv({mainAxis:e.coordSystem.mainAxis,isStacked:n,isNegativeBar:s.isNegative,shouldRotate:o,bounds:s.bounds,boxes:s.boxes,panelWidth:e.panelRect.width,panelHeight:e.panelRect.height,offset:e.layer.dataLabels.offset}):Ev(e.layer.dataLabels,e.coordSystem.mainAxis,n,s,Tt(e.panelRect));if(c===null){r+=1;continue}const u=s.boxes[c.position];t.push({layerId:e.layer.id,x:c.x,y:c.y,text:s.text,width:u.width,height:u.height,isRotated:c.isRotated,target:"observation",position:c.position,...c.position==="inside"?{backdropColor:s.backdropColor}:{}})}}if(e.layer.dataLabels.showCategoryLabels)for(const i of wv(e,n))t.push(i);if(e.layer.dataLabels.showStackTotals){const i=Dv({layer:e.layer,mainAxis:e.coordSystem.mainAxis,panelRect:e.panelRect,measureDataLabel:e.measureDataLabel,formatAbsolute:e.formatAbsolute});for(const o of i)t.push(o)}return{labels:t,droppedCount:r}},Sv={place:bv,getPercentageValueStrategy:e=>e.position==="fill"?"fill":U(e.position)?"stack":"absoluteGrandTotal"},xv=({layer:e,mainAxis:t,panelRect:r,measureDataLabel:n,formatLabel:a,isFlipped:i})=>{const o=[];let s=!1;const c=e.dataLabels.position==="auto",u=l.extractVariableName(e.mapping.y),d=ot().geomReaders(e);for(const p of e.data){const h=ol(t,p);if(h===null)continue;const m=a(p);if(m==="")continue;const f=Jn(n,"observation",m),g=Qn(h,r);c&&f.inside.width>g.width&&(s=!0);const v=u===null?null:p[u],y=l.isStrictNumericDataValue(v)&&v<0;o.push({isNegative:y,text:m,boxes:f,bounds:g,backdropColor:d.get("color",p)})}return{entries:o,shouldRotate:!i&&s}},Qn=(e,t)=>({x:e.x*t.width,y:e.y*t.height,width:e.width*t.width,height:e.height*t.height}),il=(e,t,r,n,a)=>{if(e==="x"){let s=1-a,c=a-n;return c<0&&(s+=c,c=-c),{x:t,y:s,width:r-t,height:c}}let i=t,o=r-t;return o<0&&(i+=o,o=-o),{x:i,y:1-a,width:o,height:a-n}},ol=(e,t)=>{const r=j(t),n=X(t),a=G(t),i=F(t)??D(t);return r===null||n===null||a===null||i===null?null:il(e,r,n,a,i)},Av=(e,t)=>{const{xMin:r,xMax:n,yMin:a,yMax:i}=t.anchor;return il(e,r,n,a,i)},Iv=(e,t)=>e==="x"?t?"bottom":"top":t?"left":"right",tn=(e,t,r)=>r?{width:t,height:e}:{width:e,height:t},Tv=e=>e.isStacked?Rv({bounds:e.bounds,box:e.boxes.inside,isRotated:e.shouldRotate}):Vv({edge:Iv(e.mainAxis,e.isNegativeBar),bounds:e.bounds,boxes:e.boxes,isRotated:e.shouldRotate,panelWidth:e.panelWidth,panelHeight:e.panelHeight,offset:e.offset}),sl=(e,t)=>e==="x"?{valueAxis:"y",valueDirectionSign:t?1:-1}:{valueAxis:"x",valueDirectionSign:t?-1:1},Lv=e=>e==="panel-start"||e==="panel-end",Ev=(e,t,r,n,a)=>{if(e.position==="auto")return null;const i=r&&e.position==="outside"?"inside":e.position,o=n.boxes[i],s=Lt({box:n.bounds,panel:a,frame:sl(t,n.isNegative),placement:i,justify:e.justify,align:e.align,offset:e.offset,labelWidth:o.width,labelHeight:o.height});if(i==="inside"&&!Lv(e.justify)){const c=t==="y",u=c?n.bounds.width:n.bounds.height;return(c?o.width:o.height)>u+vv?null:{x:s.x,y:s.y,isRotated:!1,position:"inside"}}return{x:s.x,y:s.y,isRotated:!1,position:s.position}},wv=(e,t)=>{const r=[],{categoryPosition:n,categoryJustify:a,categoryAlign:i,categoryOffset:o}=e.layer.dataLabels,s=t&&n==="outside"?"inside":n,c=e.coordSystem.mainAxis,u=Tt(e.panelRect),d=l.extractVariableName(e.layer.mapping.y);for(const p of e.layer.data){const h=ol(c,p);if(h===null)continue;const m=e.formatCategory(p);if(m===null||m==="")continue;const f=Jn(e.measureDataLabel,"category",m),g=f[s],v=Qn(h,e.panelRect),y=d===null?null:p[d],b=l.isStrictNumericDataValue(y)&&y<0,A=Lt({box:v,panel:u,frame:sl(c,b),placement:s,justify:a,align:i,offset:o,labelWidth:g.width,labelHeight:g.height}),T=f[A.position];r.push({layerId:e.layer.id,x:A.x,y:A.y,text:m,width:T.width,height:T.height,isRotated:!1,target:"category",position:A.position})}return r},Rv=({bounds:e,box:t,isRotated:r})=>{const n=tn(t.width,t.height,r);return n.width>e.width||n.height>e.height?null:{x:e.x+e.width/2,y:e.y+e.height/2,isRotated:r,position:"inside"}},Cv=(e,t,r,n)=>{switch(e){case"top":return{edgeCoord:t.y,outwardSign:-1,panelExtent:n};case"bottom":return{edgeCoord:t.y+t.height,outwardSign:1,panelExtent:n};case"left":return{edgeCoord:t.x,outwardSign:-1,panelExtent:r};case"right":return{edgeCoord:t.x+t.width,outwardSign:1,panelExtent:r}}},Vv=({edge:e,bounds:t,boxes:r,isRotated:n,panelWidth:a,panelHeight:i,offset:o})=>{const s=e==="top"||e==="bottom",c=t.x+t.width/2,u=t.y+t.height/2,d=s?t.height:t.width,p=s?t.width:t.height,{edgeCoord:h,outwardSign:m,panelExtent:f}=Cv(e,t,a,i),g=tn(r.inside.width,r.inside.height,n),v=s?g.height:g.width,y=s?g.width:g.height,b=v+o<d,A=y<=p;if(s?b:b&&A){if(s&&!A)return null;if(n)return{x:c,y:u,isRotated:!0,position:"inside"};const w=h-m*(v/2+o);return{...s?{x:c,y:w}:{x:w,y:u},isRotated:!1,position:"inside"}}const T=tn(r.outside.width,r.outside.height,n),L=(s?T.height:T.width)/2,E=h+m*(L+o);return E-L<0||E+L>f?null:{...s?{x:c,y:E}:{x:E,y:u},isRotated:n,position:"outside"}},Dv=({layer:e,mainAxis:t,panelRect:r,measureDataLabel:n,formatAbsolute:a})=>{const i=[],o=e.summary.stackTotals;if(o===void 0||o.length===0)return i;const s=t==="y";for(const c of o){const u=Qn(Av(t,c),r),d=a(c.total),{width:p,height:h}=n("aggregate","outside",d),m=c.anchor.direction==="positive";let f,g;s?(f=m?u.x+u.width+$t+p/2:u.x-$t-p/2,g=u.y+u.height/2):(f=u.x+u.width/2,g=m?u.y-$t-h/2:u.y+u.height+$t+h/2),i.push({layerId:e.id,x:f,y:g,text:d,width:p,height:h,isRotated:!1,target:"aggregate",position:"outside"})}return i},_v=e=>{const t=[];if(!e.layer.dataLabels.showDataLabels)return{labels:t,droppedCount:0};const{offset:r}=e.layer.dataLabels,n=Ov(e.layer);for(const a of e.layer.data){const i=M(a),o=D(a);if(i===null||o===null||!et(i,o))continue;const s=e.formatLabel(a);if(s==="")continue;const{width:c,height:u}=e.measureDataLabel("observation","outside",s),d=Lt({box:{x:i*e.panelRect.width,y:(1-o)*e.panelRect.height,width:0,height:0},panel:Tt(e.panelRect),frame:{valueAxis:"y",valueDirectionSign:-1},...n,offset:r,labelWidth:c,labelHeight:u});t.push({layerId:e.layer.id,x:d.x,y:d.y,text:s,width:c,height:u,isRotated:!1,target:"observation",position:d.position})}return{labels:t,droppedCount:0}},Pv={place:_v,getPercentageValueStrategy:()=>"none"},Ov=e=>{const{position:t,justify:r,align:n}=e.dataLabels;return t==="auto"?{placement:"outside",justify:"end",align:"center"}:{placement:t,justify:dr(e.data,e.mapping)?Xn(r):r,align:n}},Mv=e=>{const t=[];if(!e.layer.dataLabels.showDataLabels)return{labels:t,droppedCount:0};const{offset:r}=e.layer.dataLabels,n=Nv(e.layer),a=n.justify==="panel-start"||n.justify==="panel-end",i=ot().geomReaders(e.layer);for(const o of e.layer.data){const s=M(o),c=D(o);if(s===null||c===null||!et(s,c))continue;const u=e.formatLabel(o);if(u==="")continue;const{width:d,height:p}=e.measureDataLabel("observation","outside",u),h=i.get("size",o)/2,m=Lt({box:{x:s*e.panelRect.width,y:(1-c)*e.panelRect.height,width:0,height:0},panel:Tt(e.panelRect),frame:{valueAxis:"y",valueDirectionSign:-1},...n,offset:a?r:r+h,alignOffset:r+h,labelWidth:d,labelHeight:p});t.push({layerId:e.layer.id,x:m.x,y:m.y,text:u,width:d,height:p,isRotated:!1,target:"observation",position:m.position})}return{labels:t,droppedCount:0}},kv={place:Mv,getPercentageValueStrategy:()=>"none"},Nv=e=>{const{position:t,justify:r,align:n}=e.dataLabels;return t==="auto"?{placement:"outside",justify:"end",align:"center"}:{placement:t,justify:r,align:n}},ll=e=>{const t=j(e),r=X(e),n=G(e),a=F(e);if(t===null||r===null||n===null||a===null)return null;const i=Math.min(t,r),o=Math.abs(r-t),s=Math.max(n,a),c=Math.abs(a-n);return{x:i,y:1-s,width:o,height:c}},cl=e=>{const t=ll(e);if(!t)return null;const r=t.width*Kh,n=t.height*zh;return{x:t.x+r,y:t.y+n,width:t.width-r*2,height:t.height-n*2}},gi=4,Bv=e=>{const t=[];if(!e.layer.dataLabels.showDataLabels)return{labels:t,droppedCount:0};const r=ot().geomReaders(e.layer);for(const n of e.layer.data){const a=cl(n);if(a===null||!Et(n))continue;const i=e.formatLabel(n);if(i==="")continue;const{width:o,height:s}=e.measureDataLabel("observation","inside",i),c=a.width*e.panelRect.width,u=a.height*e.panelRect.height;o+gi>c||s+gi>u||t.push({layerId:e.layer.id,x:(a.x+a.width/2)*e.panelRect.width,y:(a.y+a.height/2)*e.panelRect.height,text:i,width:o,height:s,isRotated:!1,target:"observation",position:"inside",backdropColor:r.get("color",n)})}return{labels:t,droppedCount:0}},Fv={place:Bv,getPercentageValueStrategy:()=>"none"};function ea(e){return{startAngle:e[l.POSITION_VARIABLES.xMin],endAngle:e[l.POSITION_VARIABLES.xMax]}}function ta(e){return{innerRadius:e[l.POSITION_VARIABLES.yMin],outerRadius:e[l.POSITION_VARIABLES.yMax]??e[l.POSITION_VARIABLES.y]}}var $v=" · ",Mr=2,mt=(e,t,r,n)=>{const a=Math.abs(e==="radial"?Math.sin(t):Math.cos(t)),i=Math.abs(e==="radial"?Math.cos(t):Math.sin(t));return a*(r/2)+i*(n/2)},Gv=({wedge:e,labelRadius:t,labelAngle:r,labelWidth:n,labelHeight:a})=>{const i=mt("radial",r,n,a);if(!(t-i>=e.innerRadiusPx-Mr&&t+i<=e.outerRadiusPx+Mr)||t<=0)return!1;const o=Math.abs(e.endAngle-e.startAngle)/2,s=mt("tangential",r,n,a)/t,c=Mr/t;return Math.abs(r-e.midAngle)+s<=o+c},Uv=({x:e,y:t,labelWidth:r,labelHeight:n,panelRect:a})=>e-r/2>=0&&e+r/2<=a.width&&t-n/2>=0&&t+n/2<=a.height,yi=({wedge:e,position:t,offset:r,labelWidth:n,labelHeight:a})=>t==="inside"?{labelRadius:(e.innerRadiusPx+e.outerRadiusPx)/2,labelAngle:e.midAngle,position:"inside"}:{labelRadius:e.outerRadiusPx+r+mt("radial",e.midAngle,n,a),labelAngle:e.midAngle,position:"outside"},Hv=({wedge:e,placement:t,justify:r,align:n,offset:a,labelWidth:i,labelHeight:o})=>{const s=n==="start"?e.startAngle:n==="end"?e.endAngle:e.midAngle,c=a+mt("radial",s,i,o);let u;if(r==="center")u=(e.innerRadiusPx+e.outerRadiusPx)/2;else if(r==="end")u=t==="inside"?e.outerRadiusPx-c:e.outerRadiusPx+c;else if(t==="inside")u=e.innerRadiusPx+c;else{const p=e.innerRadiusPx-c;u=p>=0?p:e.innerRadiusPx+c}let d=s;if(n!=="center"&&u>0){const p=mt("tangential",s,i,o)/u;d=s+(n==="start"?1:-1)*p}return{labelRadius:u,labelAngle:d,position:Gv({wedge:e,labelRadius:u,labelAngle:d,labelWidth:i,labelHeight:o})?"inside":"outside"}},Wv=e=>{const t=[];if(!e.layer.dataLabels.showDataLabels)return{labels:t,droppedCount:0};const{position:r,justify:n,align:a,offset:i,showCategoryLabels:o}=e.layer.dataLabels,s=e.coordSystem.bandAxis==="y"?"inside":"outside",c=e.panelRect.width/2,u=e.panelRect.height/2,d=Math.min(e.panelRect.width,e.panelRect.height)/2,p=ot().geomReaders(e.layer);for(const h of e.layer.data){const{startAngle:m,endAngle:f}=ea(h),{innerRadius:g,outerRadius:v}=ta(h);if(m===null||f===null||v===null)continue;const y=e.formatLabel(h);if(y==="")continue;const b=o?e.formatCategory(h):null,A=b===null?y:`${b}${$v}${y}`,T={startAngle:m,endAngle:f,midAngle:(m+f)/2,innerRadiusPx:(g??0)*d,outerRadiusPx:v*d};let L,E;if(r==="auto"){const I=e.measureDataLabel("observation",s,A);E={width:I.width,height:I.height},L=yi({wedge:T,position:s,offset:i,labelWidth:E.width,labelHeight:E.height});const V=c+Math.sin(L.labelAngle)*L.labelRadius,O=u-Math.cos(L.labelAngle)*L.labelRadius;if(L.position==="outside"&&!Uv({x:V,y:O,labelWidth:E.width,labelHeight:E.height,panelRect:e.panelRect})){const ie=e.measureDataLabel("observation","inside",A);E={width:ie.width,height:ie.height},L=yi({wedge:T,position:"inside",offset:i,labelWidth:E.width,labelHeight:E.height})}}else{const I=Jn(e.measureDataLabel,"observation",A),V=I[r];L=Hv({wedge:T,placement:r,justify:Xn(n),align:a,offset:i,labelWidth:V.width,labelHeight:V.height}),E=I[L.position]}const w=c+Math.sin(L.labelAngle)*L.labelRadius,C=u-Math.cos(L.labelAngle)*L.labelRadius;t.push({layerId:e.layer.id,x:w,y:C,text:A,width:E.width,height:E.height,isRotated:!1,target:"observation",position:L.position,...L.position==="inside"?{backdropColor:p.get("color",h)}:{}})}return{labels:t,droppedCount:0}},Kv={place:Wv,getPercentageValueStrategy:()=>"absoluteGrandTotal"},zv=e=>{const t=k({...e,valueFormat:e.valueFormat.fallback}),r={};for(const[a,i]of Object.entries(e.valueFormat.cases))r[a]=k({...e,valueFormat:i});const n=e.valueFormat.byVariable;return(a,i)=>{if(i===void 0||i[n]===void 0)return t(a);const o=l.getStableKey(i[n]),s=r[o];return s!==void 0?s(a,i):t(a)}},k=e=>{switch(e.valueFormat.type){case"currency":return Ks(e);case"date":return By(e);case"datetime":return Fy(e);case"day_month":return js(e);case"decimal":return zs(e);case"duration":return Gn(e);case"integer":return Ys(e);case"month":return Xs(e);case"month_year":return Wn(e);case"percentage":return qs(e);case"quarter":return Kn(e);case"text":return $n(e);case"weekly_date_range":return Zs(e);case"weekly_date_range_with_year":return Js(e);case"year":return zn(e);case"time":return Qs(e);case"lookup":return zv({...e,valueFormat:e.valueFormat});default:{const t=e.valueFormat;throw new l.InternalError({message:`Unhandled value format: ${t.type}`})}}};function ra({layer:e,numberFormat:t,locale:r}){return k({valueFormat:fp(e),locale:r,numberFormat:t})}var Yv=(e,t)=>{const r=l.extractVariableName(t.x);return r!==null&&r!==l.CONSTANT_VARIABLES.x?{read:it(e,t),variable:r}:{read:re,variable:l.GROUP_VARIABLES.group}},ul=({layer:e,coordSystem:t,axes:r,numberFormat:n,panelRect:a,measureDataLabel:i,formattingLocale:o,percentageValueStrategy:s})=>{const c=ra({layer:e,numberFormat:n,locale:o}),u=t.type==="cartesian"&&t.mainAxis==="y";return{layer:e,coordSystem:t,panelRect:a,measureDataLabel:i,formatLabel:Jv({layer:e,numberFormat:n,axes:r,locale:o,absoluteFormatter:c,percentageValueStrategy:s,isFlipped:u}),formatAbsolute:c,formatCategory:qv({layer:e,numberFormat:n,locale:o})}},qv=({layer:e,numberFormat:t,locale:r})=>{const{read:n,variable:a}=Yv(e.data,e.mapping),i=k({valueFormat:e.data.hasVariable(a)?e.data.getValueFormat(a):{type:"text"},locale:r,numberFormat:t});return o=>{const s=n(o);return s===null?null:i(s,o)}},jv=(e,t,r)=>{switch(t){case"stack":return Xv(e);case"fill":return Zv(e,r);case"absoluteGrandTotal":return()=>e.summary.absoluteGrandTotal??null;case"none":return()=>null}},Xv=e=>{const t=l.extractVariableName(e.mapping.x);let r=null,n=!1;return a=>{const i=e.summary.stackTotals;if(i===void 0||i.length===0||t===null)return null;if(!n){r=new Map;for(const c of i)r.set(c.xKey,c);n=!0}const o=a[t];if(o==null)return null;const s=r?.get(Cn(a,t));return s===void 0?null:s.total}},Zv=(e,t)=>{const r=t?j:G,n=t?X:F,a=gt(e);return i=>{const o=r(i),s=n(i);if(!l.isStrictNumericDataValue(o)||!l.isStrictNumericDataValue(s))return null;const c=Math.abs(s-o);if(c===0)return null;const u=a(i);return l.isStrictNumericDataValue(u)?u/c:null}},Jv=({layer:e,numberFormat:t,axes:r,locale:n,absoluteFormatter:a,percentageValueStrategy:i,isFlipped:o})=>{const s=Q(e.data,e.dataLabels.labelSource),c=jv(e,i,o),u=Qv({layer:e,numberFormat:t,axes:r,locale:n,absoluteFormatter:a}),d=k({valueFormat:{type:"percentage"},locale:n,numberFormat:t}),p=e.dataLabels.format==="percentage"&&dl(e);return h=>{const m=s(h);if(m===null)return"";if(!p||!l.isStrictNumericDataValue(m))return u(m,h);const f=c(h);return f===null||f===0?u(m,h):d(m/f)}},Qv=({layer:e,numberFormat:t,axes:r,locale:n,absoluteFormatter:a})=>{const i=e.dataLabels.labelSource,o=l.extractVariableName(i);if(o!==null){if(dl(e))return a;const s=eb(e,r,t,n,o);if(s!==null)return s}return k({valueFormat:tb(e.data,i),locale:n,numberFormat:t})},dl=e=>{const t=l.extractVariableName(e.dataLabels.labelSource);return t===null?!1:t===l.extractVariableName(lr(e.position,e.mapping))},eb=(e,t,r,n,a)=>{const i=l.extractVariableName(e.mapping.x);if(i===null||i!==a)return null;const o=t.find(s=>s.scaleAestheticKey==="x");return o===void 0?null:k({valueFormat:o.valueFormat,locale:n,numberFormat:r})},tb=(e,t)=>{const r=l.extractConstantValue(t);if(r!==void 0)return l.isNumericDataValue(r)?{type:"decimal"}:l.isTemporalDataValue(r)?{type:"date"}:{type:"text"};const n=l.extractVariableName(t);return n===null||!e.hasVariable(n)?{type:"text"}:e.getValueFormat(n)},na={bar:{cartesian:Sv,polar:Kv},line:{cartesian:Pv},point:{cartesian:kv},area:{cartesian:dv},tile:{cartesian:Fv}},rb=(e,t)=>na[e]?.[t]!==void 0,nb=({layers:e,coordSystem:t,axes:r,numberFormat:n,parsingLocale:a,panelRect:i,measureDataLabel:o,formattingLocale:s,plotBottomY:c,isFooterChromeReserved:u})=>{const d=[],p=s??a,h=t.type;let m=0;for(const f of e){if(!f.dataLabels.showDataLabels&&!f.dataLabels.showStackTotals&&!f.dataLabels.showCategoryLabels)continue;const g=f.geom,v=na[g]?.[h];if(v===void 0)continue;const y=ul({layer:f,coordSystem:t,axes:r,numberFormat:n,panelRect:i,measureDataLabel:o,formattingLocale:p,percentageValueStrategy:v.getPercentageValueStrategy(f)}),b=v.place(y);m+=b.droppedCount;for(const A of b.labels)ib(A,h,c,u)||d.push(A)}return{labels:d,warnings:m>0?[ab(m)]:[]}},ab=e=>({code:"DATA_LABELS_DROPPED",severity:"warning",kind:"user-input",message:e===1?"Dropped 1 data label that did not fit under position 'auto'.":`Dropped ${e} data labels that did not fit under position 'auto'.`,suggestion:"Set dataLabels.position to 'outside' to keep labels that do not fit inside the bars.",context:{actual:e}}),ib=(e,t,r,n)=>t==="polar"&&n&&e.position==="outside"&&e.y+e.height/2>r;function*ob({layers:e,coordSystem:t,axes:r,numberFormat:n,panelRect:a,measureDataLabel:i,locale:o}){if(!(t.type!=="cartesian"||a.width<=0||a.height<=0))for(const s of e){if(!s.dataLabels.showDataLabels&&!s.dataLabels.showStackTotals)continue;const c=na[s.geom]?.cartesian;if(c===void 0)continue;const u=ul({layer:s,coordSystem:t,axes:r,numberFormat:n,panelRect:a,measureDataLabel:i,formattingLocale:o,percentageValueStrategy:c.getPercentageValueStrategy(s)});for(const d of c.place(u).labels)yield{x:a.x+d.x-d.width/2,y:a.y+d.y-d.height/2,width:d.width,height:d.height}}}var kr={abbreviation:"none",decimals:"auto"},pl=({locale:e,kind:t,startValue:r,endValue:n,valueFormat:a})=>{if(r===null||n===null)return"n/a";switch(t){case"absolute-difference":return k({valueFormat:a,locale:e,numberFormat:kr,intlOptions:{signDisplay:"always"}})(n-r);case"relative-difference":{const i=n-r;if(i===0)return"0%";const o=i/r;return o===Number.POSITIVE_INFINITY?"∞":o===Number.NEGATIVE_INFINITY?"-∞":k({valueFormat:{type:"percentage"},locale:e,numberFormat:kr,intlOptions:{signDisplay:"always"}})(o)}case"proportion":{if(n-r===0)return"=";const i=n/r;return i===Number.POSITIVE_INFINITY?"∞":i===Number.NEGATIVE_INFINITY?"-∞":`${k({valueFormat:{type:"decimal"},locale:e,numberFormat:kr,intlOptions:{maximumFractionDigits:1}})(i)}x`}}},sb=2,lb=6,cb=6,ub=15,db=15,pb=2.5,mb=.5,hb=.25,ml=e=>{const t=e-sb,r=1+mb*t,n=1+hb*t;return{arrowStartGap:lb*r,arrowEndGap:cb*r,offsetFromHigherObservation:ub*n,arrowheadSize:pb*e,curveRadius:db*n,strokeWidth:e}},fb=(e,t,r,n)=>{const a=n.offsetFromHigherObservation+n.arrowheadSize+n.arrowEndGap;return e?Math.max(t.x,r.x)+a:Math.min(t.y,r.y)-a},gb=(e,t,r,{arrowStartGap:n,arrowEndGap:a,curveRadius:i})=>{const o={x:e.x,y:e.y-n},s={x:e.x,y:r},c={x:t.x,y:r},u={x:t.x,y:t.y-a},d=t.x>e.x?1:-1;return`
2
2
  M ${o.x} ${o.y}
3
3
  L ${s.x} ${s.y+i}
4
4
  Q ${s.x} ${s.y} ${s.x+d*i} ${s.y}
package/dist/index.mjs CHANGED
@@ -14,7 +14,7 @@ import Sp from "humanize-duration";
14
14
  import { arc as Ap, area as Wo, curveCatmullRom as wp, curveLinear as Tp, line as Ho } from "d3-shape";
15
15
  import { Delaunay as Ip } from "d3-delaunay";
16
16
  import zo from "lodash-es/isEqual";
17
- typeof window < "u" && (window.__GRAPHY_SDK__ ??= {}, window.__GRAPHY_SDK__.vizEngine = "1.9.0-beta.1789372403170");
17
+ typeof window < "u" && (window.__GRAPHY_SDK__ ??= {}, window.__GRAPHY_SDK__.vizEngine = "1.9.0-beta.1789377729015");
18
18
  var Lp = 1e6;
19
19
  function de(e) {
20
20
  return String(Math.round(e * Lp));
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "grammar-of-graphics",
12
12
  "compiler"
13
13
  ],
14
- "version": "1.9.0-beta.1789372403170",
14
+ "version": "1.9.0-beta.1789377729015",
15
15
  "type": "module",
16
16
  "sideEffects": [
17
17
  "**/version.ts"