@graphysdk/viz-engine 1.8.1-beta.1786352280463 → 1.8.1-beta.1786354953172
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 +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var lc=Object.create,Ca=Object.defineProperty,cc=Object.getOwnPropertyDescriptor,uc=Object.getOwnPropertyNames,dc=Object.getPrototypeOf,mc=Object.prototype.hasOwnProperty,hc=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(var a=uc(t),i=0,s=a.length,o;i<s;i++)o=a[i],!mc.call(e,o)&&o!==r&&Ca(e,o,{get:(c=>t[c]).bind(null,o),enumerable:!(n=cc(t,o))||n.enumerable});return e},Da=(e,t,r)=>(r=e!=null?lc(dc(e)):{},hc(t||!e||!e.__esModule?Ca(r,"default",{value:e,enumerable:!0}):r,e));const l=require("./config.types-DPdholZ2.cjs");let ka=require("date-fns"),xt=require("lodash-es"),Fe=require("d3-time"),pc=require("date-fns/differenceInDays"),le=require("d3-regression"),Z=require("d3-scale"),Re=require("d3-interpolate"),D=require("d3-scale-chromatic"),mt=require("lodash-es/merge");mt=Da(mt,1);let cr=require("humanize-duration");cr=Da(cr,1);let pe=require("d3-shape"),Vn=require("color2k"),fc=require("d3-delaunay");typeof window<"u"&&(window.__GRAPHY_SDK__??={},window.__GRAPHY_SDK__.vizEngine="1.8.1-beta.1786352280463");var gc=1e6;function z(e){return String(Math.round(e*gc))}var Rn=0;function k(){return Rn+=1,`${Math.random().toString(36).slice(2,6)}${Rn.toString(36)}`}function V(e){return e[l.POSITION_VARIABLES.x]}function E(e){return e[l.POSITION_VARIABLES.y]}function K(e){return e[l.POSITION_VARIABLES.xMin]}function Y(e){return e[l.POSITION_VARIABLES.xMax]}function B(e){return e[l.POSITION_VARIABLES.yMin]}function O(e){return e[l.POSITION_VARIABLES.yMax]}function Tr(e){return e[l.POSITION_VARIABLES.yRaw]}function yc(e,t){return e[l.resolveScaledAestheticVariable(t)]}var vc={xMin:0,xMax:1,yMin:0,yMax:1},ur=(e,t)=>{if(t.type==="polar")return null;const r=K(e)??V(e),n=Y(e)??V(e),a=B(e)??E(e),i=O(e)??E(e);return r===null||n===null||a===null||i===null?null:{xMin:r,xMax:n,yMin:a,yMax:i}},ze=(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}}},Pa=e=>ze(vc,e),ye=e=>{const t=l.extractVariableName(e.mapping.x);return t!==null&&t!==l.CONSTANT_VARIABLES.x?t:l.GROUP_VARIABLES.group},Oa=(e,t)=>e.yScaleType===t.yScaleType&&mr(e.valueFormat)===mr(t.valueFormat),dr=e=>`${e.yScaleType} y axis, ${mr(e.valueFormat)}`,mr=e=>e.type==="currency"?`${e.type}:${e.iso}`:e.type,bc=(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};function Ce(e,t){return e==="x"?t.x:t.y}function At(e,t){return e==="x"?t.y:t.x}function Sc(e,t){return{main:Ce(e,t),cross:At(e,t)}}function Cn(e,t){return e==="x"?{x:t.main,y:t.cross}:{x:t.cross,y:t.main}}function xc(e){return e.type==="cartesian"}var U=e=>e[l.GROUP_VARIABLES.group],It=(e,t)=>{const r=ye(e),n=t[r]??null;if(n===null)return null;const a=r===l.GROUP_VARIABLES.group?null:U(t);return{layerId:e.id,anchorValue:n,...a!==null&&{groupValue:a}}},De=(e,t)=>e>=0&&e<=1&&t>=0&&t<=1,Ac={type:"decimal"};function Ma(e){return e.length>0&&e.every(t=>t.data.size()===0)}function _a(e,t){return t!==null&&e.data.hasVariable(t)?e.data.getValueFormat(t):Ac}function Na(e){return _a(e,l.extractVariableName(e.mapping.y))}var Lr=["solid","dashed","dotted"],Ba=e=>Lr.includes(e);function M(e){return e==="stack"||e==="fill"}var W=(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},Tt=(e,t)=>W(e,t.x),Fa=(e,t)=>W(e,t.y),Ic=(e,t)=>W(e,t.label),$a=(e,t)=>W(e,t.color),Tc=(e,t)=>W(e,t.size),Lc=(e,t)=>W(e,t.alpha),wc=(e,t)=>W(e,t.group),Ec=(e,t)=>W(e,t.strokeWidth),Dn={variable:l.POSITION_VARIABLES.yRaw};function Lt(e,t){return M(e)?Dn:t.y??Dn}function _e(e){return W(e.data,Lt(e.position,e.mapping))}function wt(e){return e[l.VISUAL_VARIABLES.color]}function Ga(e){return e[l.VISUAL_VARIABLES.alpha]}function wr(e){return e[l.VISUAL_VARIABLES.size]}function hr(e){return e[l.VISUAL_VARIABLES.strokeWidth]}function Ua(e){return e[l.VISUAL_VARIABLES.lineType]}var pr=(e,t,r)=>{const n=l.parseValue(e,t,r);return n!==null||!l.isTemporalValueFormat(t)?n:l.readISOInstant(e)},Wa=(e,t)=>{const r=l.toExplicitValueFormat(e.data.getValueFormat(ye(e)));return n=>({...n,anchorValue:pr(n.anchorValue,r,t),...n.groupValue!==void 0&&{groupValue:pr(n.groupValue,l.toExplicitValueFormat(e.data.getValueFormat(l.GROUP_VARIABLES.group)),t)}})},Ha=e=>{const t=l.extractVariableName(e.mapping.y),r=_e(e);return(n,a)=>t!==null&&a===t?r(n):n[a]??null},Vc=["lt","lte","gt","gte","range"],Rc={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"}},Q=()=>!1,xe=()=>!0;function Et(e,t){return{hasVariable:r=>e.data.hasVariable(r),getType:r=>e.data.getType(r),getValueFormat:r=>e.data.getValueFormat(r),readValue:Ha(e),parsingLocale:t}}function ue(e,t){if("and"in e){const r=e.and.map(n=>ue(n,t)).filter(n=>n!==xe);return r.includes(Q)?Q:r.length===0?xe:n=>{for(const a of r)if(!a(n))return!1;return!0}}if("or"in e){const r=e.or.map(n=>ue(n,t)).filter(n=>n!==Q);return r.includes(xe)?xe:r.length===0?Q:n=>{for(const a of r)if(a(n))return!0;return!1}}if("not"in e){const r=ue(e.not,t);return r===Q?xe:r===xe?Q:n=>!r(n)}return Dc(e,t)}function de(e,t,r="highlight"){return"and"in e?e.and.flatMap(n=>de(n,t,r)):"or"in e?e.or.flatMap(n=>de(n,t,r)):"not"in e?de(e.not,t,r):Cc(e,t,r)}function Cc(e,t,r){const{subject:n,effect:a}=Rc[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=kc(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 Dc(e,t){if(!t.hasVariable(e.variable))return Q;const r=l.toExplicitValueFormat(t.getValueFormat(e.variable)),n=a=>pr(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 s=t.readValue(i,e.variable);for(const o of a)if(l.areDataValuesEqual(s,o))return!0;return!1}}if("lt"in e){const a=n(e.lt);return i=>Ae(t.readValue(i,e.variable),a)==="less"}if("lte"in e){const a=n(e.lte);return i=>{const s=Ae(t.readValue(i,e.variable),a);return s==="less"||s==="equal"}}if("gt"in e){const a=n(e.gt);return i=>Ae(t.readValue(i,e.variable),a)==="greater"}if("gte"in e){const a=n(e.gte);return i=>{const s=Ae(t.readValue(i,e.variable),a);return s==="greater"||s==="equal"}}if("range"in e){const[a,i]=e.range,s=n(a),o=n(i);return c=>{const u=t.readValue(c,e.variable),d=Ae(u,s),m=Ae(u,o);return d==="incomparable"||m==="incomparable"?!1:(d==="greater"||d==="equal")&&(m==="less"||m==="equal")}}return Q}function kc(e){for(const t of Vc)if(t in e)return t;return null}function Ae(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 Pc=(e,t,r,n,a,i)=>{const s=Ka(e,t,r.predicate,n,a,i);if(s===null)return null;const o=za(r.padding),c=o===null?_c(s,r.padding):s,u={x:c.xMin,y:c.yMin,width:Math.max(0,c.xMax-c.xMin),height:Math.max(0,c.yMax-c.yMin)};return o===null?u:{...u,defer:o}},Oc=(e,t,r,n,a,i)=>{const s=Ka(e,t,r.predicate,n,a,i);return s===null?null:ze(s,r.align)},za=e=>e===void 0||typeof e=="number"||e.unit!=="px"?null:{type:"px-offset",x:e.x??0,y:e.y??0},Ka=(e,t,r,n,a,i)=>{if(t.has(r))return t.get(r)??null;let s=null,o=!1;const c=new Map;for(const u of n){const d=de(r,u.data,"selection-anchor");if(d.length>0){for(const p of d)c.set(`${p.code}:${p.message}`,p);continue}o=!0;const{resolveAnchorBox:m}=e.geomRegistry.get(u.geom);if(m===void 0)continue;const h=ue(r,Et(u,i));if(h!==Q)for(const p of u.data){if(!h(p))continue;const f=m(p,a);f!==null&&(s=s===null?f:Mc(s,f))}}if(!o)for(const u of c.values())e.diagnostics.addWarning(u);return t.set(r,s),s},Mc=(e,t)=>({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)}),_c=(e,t)=>{if(t===void 0)return e;const{x:r=0,y:n=0}=typeof t=="number"?{x:t,y:t}:t;return{xMin:e.xMin-r,xMax:e.xMax+r,yMin:e.yMin-n,yMax:e.yMax+n}},ht=(e,t,r)=>{const n=Bc(e,t,r);return n===null?null:n.defer?.type==="annotation-ref"?n:Fc(n,t.offset,e.coordSystem)},Ya=(e,t)=>t.anchorType==="selection"?Pc(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},Er=(e,t,r)=>fr(e,t,r)?.point??null,fr=({container:e,layers:t,coordSystem:r,parsingLocale:n},a,i)=>{for(const s of t){const{resolveAnchorPosition:o}=e.geomRegistry.get(s.geom);if(o===void 0||a.layerId!==void 0&&s.id!==a.layerId||a.layerId===void 0&&!s.interactive)continue;const c=_e(s),u=ye(s),{anchorValue:d,groupValue:m}=Wa(s,n)(a);let h=-1;for(const p of s.data){if(h+=1,!l.areDataValuesEqual(p[u]??null,d)||m!==void 0&&!l.areDataValuesEqual(U(p),m))continue;const f=o(p,{coordSystem:r,position:s.position,purpose:i,align:a.align});if(f===null)continue;const g=qa(s,p,c);if(g===null)continue;const y=It(s,p);if(y!==null)return{point:{...f,...g,anchor:a.align===void 0?y:{...y,align:a.align}},layerId:s.id,observationIndex:h}}}return null},Nc=(e,t)=>{const{layers:r,coordSystem:n,scales:a,parsingLocale:i}=e;if(n.type!=="cartesian")return null;const s=a.x,o=a.y;if(s===void 0||o===void 0||s.kind!=="position"||o.kind!=="position")return null;const c=Pn(t.x,"x",r,i),u=Pn(t.y,"y",r,i);if(c===null||u===null)return null;const d=s.map(c),m=o.map(u);if(!De(d,m))return null;const h=kn(d,s,$c(e)),p=kn(m,o),f=Cn(n.mainAxis,{main:h.min,cross:p.min}),g=Cn(n.mainAxis,{main:h.max,cross:p.max});return ze({xMin:f.x,xMax:g.x,yMin:f.y,yMax:g.y},t.align??"center")},qa=(e,t,r)=>{const n=r(t);return l.isStrictNumericDataValue(n)?{geom:e.geom,measurementValue:n,valueFormat:bc(Na(e),t),yScaleType:e.yScaleType,color:wt(t)}:null},Bc=(e,t,r)=>{switch(t.anchorType){case"panel":return{x:t.x,y:1-t.y};case"axis":return Nc(e,t);case"selection":return Oc(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 Er(e,Gc(t),r)}},Fc=(e,t,r)=>{if(t===void 0||r.type==="polar")return e;const n=za(t);return n!==null?{...e,defer:n}:{...e,x:e.x+(t.x??0),y:e.y-(t.y??0)}},kn=(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}},$c=({container:e,layers:t})=>{let r=0;for(const n of t){const a=e.geomRegistry.get(n.geom).resolveBandFraction?.(n.params);a!==void 0&&(r=Math.max(r,a))}return r>0?r:1},Gc=e=>({layerId:e.layerId,anchorValue:e.anchorValue,groupValue:e.groupValue,align:e.align}),Pn=(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},Uc=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,s={container:this.container,layers:r,coordSystem:n,scales:a,selectionBoxCache:new Map,parsingLocale:i.parsingLocale},o={differenceArrows:Qc(s,t.differenceArrows),shapes:Kc(s,t.shapes),arrows:qc(s,t.arrows),textAnnotations:jc(s,t.textAnnotations),images:Yc(s,t.images),stickers:Xc(s,t.stickers),pinnedNumbers:Zc(s,t.pinnedNumbers),comments:Jc(s,t.comments)};return Wc(this.container,o),Hc(this.container,o),o}},ja=(e,t,r)=>e!==null?e:!l.areDataValuesEqual(t.anchor.groupValue??null,r.anchor.groupValue??null)||t.color===void 0||t.color!==r.color?null:t.color,J=(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."})},Wc=(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)}},Hc=(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 zc(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."})},zc=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},Kc=(e,t)=>{const r=[];for(const n of t){const a=Ya(e,n.region);if(a===null){J(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,fillColor:n.fillColor,fillOpacity:n.fillOpacity,strokeWidth:n.strokeWidth,strokeColor:n.strokeColor})}return r},Yc=(e,t)=>{const r=[];for(const n of t){const a=Ya(e,n.region);if(a===null){J(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,opacity:n.opacity})}return r},qc=(e,t)=>{const r=[];for(const n of t){const a=ht(e,n.start,"pin"),i=ht(e,n.end,"pin");if(a===null||i===null){J(e.container,"arrow",n.id,`has ${Xa(a,i)} resolving to nothing`);continue}r.push({id:n.id,start:a,end:i,color:n.color,thickness:n.thickness,startArrowheadStyle:n.startArrowheadStyle,endArrowheadStyle:n.endArrowheadStyle,lineStyle:n.lineStyle,hasStickerStyle:n.hasStickerStyle})}return r},jc=(e,t)=>{const r=[];for(const n of t){const a=ht(e,n.at,"pin");if(a===null){J(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,backgroundColor:n.backgroundColor,backgroundColorStyle:n.backgroundColorStyle})}return r},Xc=(e,t)=>{const r=[];for(const n of t){const a=ht(e,n.at,"pin");if(a===null){J(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},Zc=(e,t)=>{const r=[];for(const n of t){const a=Er(e,n.at,"pin");if(a===null){J(e.container,"pinnedNumber",n.id,"matches no observation");continue}r.push({id:n.id,at:a})}return r},Jc=(e,t)=>{const r=[];for(const n of t){const a=Er(e,n.at,"pin");if(a===null){J(e.container,"comment",n.id,"matches no observation");continue}r.push({id:n.id,at:a,content:n.content})}return r},Qc=(e,t)=>{if(e.coordSystem.type!=="cartesian"){for(const n of t)J(e.container,"differenceArrow",n.id,"needs a cartesian coord system");return[]}const r=[];for(const n of t){const a=fr(e,n.start,"value"),i=fr(e,n.end,"value");if(a===null||i===null){J(e.container,"differenceArrow",n.id,`has ${Xa(a,i)} matching no observation`);continue}if(a.layerId===i.layerId&&a.observationIndex===i.observationIndex){J(e.container,"differenceArrow",n.id,"has both ends on the same observation");continue}eu(e,n,a.point,i.point),r.push({id:n.id,start:a.point,end:i.point,color:ja(n.color,a.point,i.point),ownColor:n.color,size:n.size,label:n.label,labelCrossPosition:n.labelCrossPosition})}return r},Xa=(e,t)=>e===null&&t===null?"start and end anchors":e===null?"a start anchor":"an end anchor",eu=(e,t,r,n)=>{Oa(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:dr(r),actual:dr(n)},suggestion:"Point both ends at observations sharing one y scale and one unit, or label the arrow as a proportion."})};function Za(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 w(e,t){return Qa(e,t)}function I(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 Ja(e,t,r){if(e[t]===r)return e;const n=[...e];return n[t]=r,n}function Qa(e,t){let r=!1;const n={...e};for(const[a,i]of Object.entries(t)){const s=e[a];if(l.isPlainObject(i)&&l.isPlainObject(s)){const o=Qa(s,i);o!==s&&(n[a]=o,r=!0)}else i!==void 0&&i!==s&&(n[a]=i,r=!0)}return r?n:e}function Vt(e){return{pipe:t=>{const r=t(e);return Vt({...e,...r})},result:()=>e}}function tu(e,t,r){const n=au(r);return{...t,background:ru(e,t.background,n),border:nu(e,t.border,n)}}function ru(e,t,r){if(t.type==="tinted"){const n=t.color??r;return n?{type:"tinted",color:n}:(e.diagnostics.addWarning({code:"UNRESOLVABLE_COLOR",message:"Could not resolve a colour for the tinted background — falling back to the theme background.",suggestion:"Set an explicit background colour, or add a colour scale the tint can derive from."}),{type:"theme"})}return t}function nu(e,t,r){if(t.type==="tinted"||t.type==="gradient"){const n=t.color??r;return n?{...t,color:n}:(e.diagnostics.addWarning({code:"UNRESOLVABLE_COLOR",message:`Could not resolve a colour for the ${t.type} border — dropping the border.`,suggestion:"Set an explicit border colour, or add a colour scale the tint can derive from."}),{type:"none"})}return t}function au(e){const t=e.color,r=t?.domain[0];if(!r)return;const n=t.map(r);if(typeof n=="string")return n}var iu=class extends l.Stage{constructor(e){super(),this.container=e}dependencies(e){return[e.scales,e.config]}run(e){const{scales:t,config:r}=e;return{...r,appearance:tu(this.container,r.appearance,t)}}};function su(e,t="kind"){const r=new Map;r.set(t,[]);for(const a of e)for(const i of a.observations)for(const s of Object.keys(i))r.has(s)||r.set(s,[]);for(const a of e)for(const i of a.observations)for(const[s,o]of r)o.push(s===t?a.kind:i[s]??null);const n={};for(const[a,i]of r)n[a]={type:ei(i),values:i};return new l.Dataset(n)}function ei(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 ou=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,ei(a),a),r={...r,[n]:i}}return{data:t,mapping:r}}},lu=(e,t)=>{let r=t;for(const n of Object.keys(t)){const a=t[n];if(typeof a!="string")continue;const i=e.getConstant(a);i!==void 0&&(r={...r,[n]:a===l.CONSTANT_VARIABLES.x?"":{value:i.value}})}return r},ve=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)}},cu=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)}},uu=class extends ve{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}},du=class{constructor(e){this.setupStage=new cu(e),this.transformStage=new uu(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)}},mu=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}},hu=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:fu(e.scales,e.layers)}}transform(e){return e.layers.map(t=>yu(t))}},pu=[[l.POSITION_VARIABLES.x,l.POSITION_VARIABLES.y],[l.POSITION_VARIABLES.xMin,l.POSITION_VARIABLES.yMin],[l.POSITION_VARIABLES.xMax,l.POSITION_VARIABLES.yMax]],On=l.prefixInternalVariable("flipSwap"),fu=(e,t)=>gu(t)?e.map(r=>r.scaledAesthetic!=="x"||r.scaleType!=="continuous"&&r.scaleType!=="datetime"&&r.scaleType!=="discrete"?r:{...r,reverse:!r.reverse}):e,gu=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},yu=e=>{let t=e.data;for(const[r,n]of pu){const a=t.hasVariable(r),i=t.hasVariable(n);a&&i?t=t.renameVariable(r,On).renameVariable(n,r).renameVariable(On,n):a?t=t.renameVariable(r,n):i&&(t=t.renameVariable(n,r))}return{...e,data:t}},me=Math.PI*2,vu=8,bu=1e-9,ti=(e,t)=>Math.abs(t-e)>=me-bu,ke=e=>(e%me+me)%me,ri=(e,t,r)=>{if(ti(t,r))return!0;const n=ke(r-t);return ke(e-t)<=n},pt=(e,t)=>{const r=Math.abs(ke(e)-ke(t));return Math.min(r,me-r)},ni=(e,t,r)=>e*me+t+r,ft=(e,t)=>({x:t*Math.sin(e),y:t*Math.cos(e)}),ai=(e,t)=>({angle:ke(Math.atan2(e,t)),radius:Math.hypot(e,t)}),Vr=(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}},Rt=(e,t)=>{const{x:r,y:n}=Vr(e,t);return ai(r,n)};function ii(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 si=(e,t)=>ii(t.domain!==null&&t.domain.length>0?t.domain:e),Su=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=Iu(t,e.scales,e.layers),a=Lu(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=Au(r,n),i=wu(t);return e.layers.map(s=>Eu(t.theta==="y"?Vu(s):s,a,i))}},xu=[[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 Au(e,t){return r=>ni(r,e,t)}function Iu(e,t,r){const n=t.find(i=>i.scaledAesthetic===e.theta);if(n===void 0||n.scaleType!=="discrete")return 0;const a=Tu(n,e,r);return a===0?0:-Math.PI/a}function Tu(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 s of a.data.getValues(i))n.push(s)}return si(n,e).length}function Lu(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 wu(e){const{innerRadius:t}=e;return r=>t+r*(1-t)}function Eu(e,t,r){let n=e.data;return n=Ie(n,l.POSITION_VARIABLES.x,t),n=Ie(n,l.POSITION_VARIABLES.xMin,t),n=Ie(n,l.POSITION_VARIABLES.xMax,t),n=Ie(n,l.POSITION_VARIABLES.y,r),n=Ie(n,l.POSITION_VARIABLES.yMin,r),n=Ie(n,l.POSITION_VARIABLES.yMax,r),{...e,data:n}}function Ie(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 Vu(e){let t=e.data;for(const[r,n]of xu){const a=t.hasVariable(r),i=t.hasVariable(n);if(!a&&!i)continue;const s=a?t.getValues(r):null,o=i?t.getValues(n):null;s&&(t=t.addVariable(n,"numeric",s)),o&&(t=t.addVariable(r,"numeric",o))}return{...e,data:t}}var Ru=class extends l.Registry{constructor(){super("coord"),this.register("cartesian",new mu),this.register("flip",new hu),this.register("polar",new Su)}},Cu=new Set(["min","max","scalar"]),Du={x:{min:l.POSITION_VARIABLES.xMin,max:l.POSITION_VARIABLES.xMax},y:{min:l.POSITION_VARIABLES.yMin,max:l.POSITION_VARIABLES.yMax}};function ku(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 Pu(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 Ou(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=Du[a.axis][a.role];if(n.hasVariable(i))continue;const s=l.extractVariableName(r[a.aes]);!l.isDefined(s)||!n.hasVariable(s)||(n=n.addVariable(i,"numeric",n.getValues(s,{type:"numeric"})))}return n}var Mu=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:Ou(n.data,r.positionRoles,a)}}},oi=new Set(["x","y","ySecondary"]),Ct=new Set(["color","size","alpha","strokeWidth","lineType"]),Dt=e=>oi.has(e),Rr=e=>Ct.has(e),_u=e=>Dt(e)||Rr(e);function be(e){return e==="secondary"?"ySecondary":"y"}function li(e,t){return e==="y"?be(t):"x"}function $(e){return e==="ySecondary"?"y":e}var Ke=(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 Ct){const i=l.extractVariableName(t[a]);l.isDefined(i)&&(r.has(i)||e.hasVariable(i)&&e.getType(i)==="categorical"&&n.add(i))}return[...n]},kt=(e,t)=>e.hasVariable(l.GROUP_VARIABLES.group)?e.getValues(l.GROUP_VARIABLES.group,{distinct:!0,skipNulls:!0}).length>1:Ke(e,t).some(r=>e.getValues(r,{distinct:!0,skipNulls:!0}).length>1),Nu=class{compute({data:e,mapping:t}){const r=Ke(e,t);if(r.length===0)return{data:e.addConstantVariable(l.GROUP_VARIABLES.group,"categorical",null)};const n=e.size(),a=r.map(s=>e.getValues(s)),i=new Array(n);for(let s=0;s<n;s++)i[s]=l.getStableKey(a.map(o=>o[s]));return{data:e.addVariable(l.GROUP_VARIABLES.group,"categorical",i)}}},Bu=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},Fu=(e,t,r)=>{const n=fe(t,"color");return n===null?{}:(e?.columns??[]).some(a=>a.key===n)?{}:r};function fe(e,t){const r=$(t);for(const n of ci(t,e)){const a=l.extractVariableName(n.mapping[r]);if(l.isDefined(a))return a}return null}var Cr=(e,t)=>e===null?null:t[e]??e,$u=(e,t)=>e===null?null:t[String(e)]??null,ge=({layers:e,scaleType:t,variableName:r})=>{if(r===null)return Wt(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 Uu(i,t)?i:Wt(t)}return Wt(t)},Gu=(e,t)=>t!=="y"&&t!=="ySecondary"?!1:ci(t,e).some(r=>r.position==="fill");function ci(e,t){return e==="ySecondary"?t.filter(r=>r.yScaleType==="secondary"):e==="y"?t.filter(r=>r.yScaleType==="primary"):t}var Wt=e=>{switch(e){case"continuous":return{type:"decimal"};case"datetime":return{type:"date"};case"discrete":case"palette":case"identity":return{type:"text"}}},Uu=(e,t)=>{switch(t){case"continuous":return l.isNumericValueFormat(e);case"datetime":return l.isTemporalValueFormat(e);case"discrete":case"palette":case"identity":return!0}},Wu=[{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}],Mn={year:0,quarter:1,month:2,week:3,day:4,hour:5},Te=40,Hu=(e,t,r)=>{const n=r.unit==="quarter"?r.step*3:r.step;return qu(r.unit).range(e,new Date(t.valueOf()+1),n)},zu=({unit:e,step:t,start:r,stop:n})=>{const a=(0,pc.differenceInDays)(n,r);switch(e){case"hour":return 24*a/t>Te;case"day":return a/t>Te;case"week":return a/(7*t)>Te;case"month":return a/(30*t)>Te;case"quarter":return a/(90*t)>Te;case"year":return a/(365*t)>Te}},Ku=(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"}}},Yu=(e,t)=>{const r=ju(t);return r===null?!1:Mn[e]>Mn[r]},qu=e=>{switch(e){case"hour":return Fe.utcHour;case"day":return Fe.utcDay;case"week":return Fe.utcMonday;case"month":case"quarter":return Fe.utcMonth;case"year":return Fe.utcYear}},ju=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}},ui={left:"right",right:"left",top:"bottom",bottom:"top"},Xu={x:!0,y:!0,ySecondary:!1},Zu=20,_n=new Set(["top","bottom"]),Ju={type:"percentage"};function Qu(e,t){const{scales:r,config:n,layers:a,coordSystem:i,variableLabels:s,geomRegistry:o}=e;if(Ma(a))return[];if(i.type==="polar"&&i.bandAxis===null)return[];const c=rd(o,a,i.type,n),u=new Set(t.map(h=>h.position)),d=ad(di(n.axes.y.position,i.axisMapping.y.position),u),m=[];for(const h of oi){const p=r[h];if(!l.isDefined(p)||p.kind!=="position")continue;const f=ed({scaleAestheticKey:h,scale:p,config:n,layers:a,axisMapping:i.axisMapping,resolvedYPosition:d,gridOverrides:c,variableLabels:s});m.push(f)}return m}function ed(e){const{scaleAestheticKey:t,scale:r,config:n,layers:a,axisMapping:i,resolvedYPosition:s,gridOverrides:o,variableLabels:c}=e,u=$(t),{axisConfig:d,position:m,geometry:h}=nd(t,n,i,s),p=fe(a,t),f=Gu(a,t)?Ju:ge({layers:a,scaleType:r.spec.scaleType,variableName:p});return{scaleAestheticKey:t,aesthetic:u,position:m,geometry:h,label:td(d,p,c),isVisible:d.isVisible,tickCandidates:sd(r,f,d.ticks.mode),valueFormat:f,tickMode:d.ticks.mode,ticksVisible:d.ticks.isVisible,gridVisible:id(d,o,t),gridLineStyle:d.grid.lineStyle,gridLineWidth:d.grid.lineWidth,scaleType:r.spec.scaleType,bandwidth:r.bandwidth??void 0}}function td(e,t,r){return e.label?e.label:t?r[t]??null:null}function rd(e,t,r,n){const a=t.flatMap(o=>{const c=e.get(o.geom).grid[r];return c?[c]:[]}),i=a.some(o=>o.hideGridX),s=a.some(o=>o.hideGridY);return{x:{gridVisible:Nn(i,n.axes.x.grid.isVisible)},y:{gridVisible:Nn(s,n.axes.y.grid.isVisible)}}}function Nn(e,t){if(e&&t===null)return!1}function nd(e,t,r,n){switch(e){case"x":return{axisConfig:t.axes[e],position:di(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=ui[n],i=(0,xt.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 di(e,t){return _n.has(e)===_n.has(t)?e:t}function ad(e,t){return t.has(e)?ui[e]:e}function id(e,t,r){const{gridVisible:n}=r==="x"?t.x:t.y;return n??e.grid.isVisible??Xu[r]}var sd=(e,t,r)=>{const n=e.spec.scaleType==="continuous"||e.spec.scaleType==="datetime";if(r==="edges"&&n){const a=ld(e);if(a)return[a]}if(e.spec.scaleType==="continuous"){const a=new Set,i=[];for(let s=1;s<=Zu;s++){const o=e.generateTicks({count:s}),c=l.getStableKey(o);a.has(c)||(a.add(c),i.push({ticks:o.map(u=>Pe(e,u))}))}return i}return e.spec.scaleType==="datetime"?od(e,t):[{ticks:e.generateTicks().map(a=>Pe(e,a))}]},od=(e,t)=>{const[r,n]=e.domain;if(!l.isStrictTemporalDataValue(r)||!l.isStrictTemporalDataValue(n))return[{ticks:e.generateTicks().map(o=>Pe(e,o))}];const a=new Set,i=[],s=(o,c)=>{if(o.length===0)return;const u=l.getStableKey(o);a.has(u)||(a.add(u),i.push({ticks:o.map(d=>Pe(e,d)),valueFormat:c}))};for(const o of Wu)zu({...o,start:r,stop:n})||Yu(o.unit,t)||s(e.generateTicks({interval:o}),Ku(o,t));return s(e.generateTicks({atInputs:!0})),i.sort((o,c)=>o.ticks.length-c.ticks.length),i},ld=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:[Pe(e,r),Pe(e,n)]}},Pe=(e,t)=>({value:t,position:e.map(t)});function mi({scale:e,aesthetics:t,layers:r}){const n=cd({layers:r,aesthetics:t}),a=hi({layers:r,aesthetics:t});return e.domain.map(i=>({value:i,geom:n(i),owner:a(i)}))}function cd({layers:e,aesthetics:t}){const r=hi({layers:e,aesthetics:t}),n=e.find(i=>t.some(s=>l.isDefined(i.mapping[s]))),a=n?n.geom:"bar";return i=>{const s=r(i);return s?s.layer.geom:a}}function hi({layers:e,aesthetics:t,layerFilter:r}){const n=new Map;for(const[a,i]of e.entries()){if(r&&!r(i))continue;const s=t.find(c=>l.isDefined(i.mapping[c]));if(s===void 0)continue;const o=l.extractVariableName(i.mapping[s]);if(!(o===null||!i.data.hasVariable(o)))for(const c of i.data.getValues(o,{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 Dr=e=>{if(e.kind==="identity")return!1;const t=e.spec.scaleType;return t!=="continuous"&&t!=="datetime"};function ud({scales:e,layers:t,valueLabels:r}){const n=e.color;if(n===void 0||!Dr(n))return[];if(!t.some(o=>l.isDefined(o.mapping.color)))return[];const a=fe(t,"color");if(pi({colorVariableName:a,xVariableName:fe(t,"x"),mapsColorAcrossMultipleLayers:md(t)>1,isMergedWithAnotherAesthetic:dd(e,t,a)}))return[];const i=n.spec.scaleType,s=t.findIndex(o=>l.isDefined(o.mapping.color));return mi({scale:n,aesthetics:["color"],layers:t}).map(({value:o,geom:c,owner:u})=>{const d=u?.layerIndex??s,m=t[d],h=m?l.extractVariableName(m.mapping.color):null;return{value:o,color:String(n.map(o)),geom:c,layerIndex:d,valueFormat:ge({layers:m?[m]:t,scaleType:i,variableName:h}),label:$u(o,r)}})}var pi=({colorVariableName:e,xVariableName:t,mapsColorAcrossMultipleLayers:r,isMergedWithAnotherAesthetic:n})=>n?!1:e===null||l.isInternalVariable(e)?!r:t!==null&&e===t;function dd(e,t,r){if(r===null)return!1;for(const n of Ct){if(n==="color")continue;const a=e[n];if(!(a===void 0||!Dr(a))&&fe(t,n)===r)return!0}return!1}var md=e=>e.filter(t=>l.isDefined(t.mapping.color)).length;function fi(e,t){return e.get(t.geom).summaries.perGroupHeadline===!0}function hd(e,t,r,n){const a=r.findIndex(i=>fi(e,i));return a===-1?[]:t.length<2?[{value:null,swatch:null,layerIndex:a,groupLabelFormat:{type:"text"},label:Cr(l.extractVariableName(r[a]?.mapping.y),n)}]:t.map(i=>({value:i.value,swatch:{color:i.color,geom:i.geom},layerIndex:i.layerIndex,groupLabelFormat:i.valueFormat,label:i.label}))}function Bn(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 gi=e=>e==="none"?"first":e,pd=(e,t)=>{switch(t){case"total":{const{sum:r,count:n}=Fn(e);return n===0?null:r}case"average":{const{sum:r,count:n}=Fn(e);return n===0?null:r/n}case"current":return e.at(-1)??null}},fd=(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}},Fn=e=>e.reduce((t,r)=>r===null?t:{sum:t.sum+r,count:t.count+1},{sum:0,count:0});function gd(e){const{config:t,coordSystem:r}=e,n=t.headline.show;return n==="none"||n==="conversion"?null:r.type==="polar"?yd(e,n):vd(e,n)}function yd(e,t){if(t!=="total")return null;const{scales:r,layers:n}=e,a=n.find(o=>o.summary.grandTotal!==void 0);if(a===void 0)return null;const i=a.summary.grandTotal;if(i===void 0)return null;const s=l.extractVariableName(a.mapping.y);return s===null?null:{kind:"grandTotal",value:i,valueFormat:ge({layers:[a],scaleType:r.y?.spec.scaleType??"continuous",variableName:s})}}function vd(e,t){const{config:r,scales:n,layers:a,variableLabels:i,colorGroups:s,geomRegistry:o}=e;if(!a.some(d=>fi(o,d)))return null;const c=hd(o,s,a,i);if(c.length===0)return null;const u=c.map(d=>bd({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 bd({group:e,show:t,compareWith:r,layers:n,scales:a}){const i=n[e.layerIndex];if(i===void 0)return null;const s=l.extractVariableName(i.mapping.y);if(s===null||t==="total"&&i.position==="fill")return null;const o=l.extractVariableName(i.mapping.x),c=l.extractVariableName(i.mapping.color),u=i.yScaleType==="secondary"?a.ySecondary:a.y,d=ge({layers:[i],scaleType:u?.spec.scaleType??"continuous",variableName:s}),m=Ad(i.data,o),h=ge({layers:[i],scaleType:m?"datetime":a.x?.spec.scaleType??"discrete",variableName:o}),p=Id(i.data,o),f=p.getValues(s,{type:"numeric"}),g=o!==null?p.getValues(o):[],y=c!==null?p.getValues(c):null,v=Bn(f,y,e.value),x=Bn(g,y,e.value);return{value:e.value,swatch:e.swatch,aggregate:pd(v,t),valueFormat:d,groupLabelFormat:e.groupLabelFormat,mainValueFormat:h,label:e.label,observationLabel:Sd(t,m,x),comparison:xd(t,r,m,x,v)}}function Sd(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 xd(e,t,r,n,a){return e!=="current"||!r?null:fd(n.map((i,s)=>({main:i,cross:a[s]??null})),gi(t))}function Ad(e,t){return t!==null&&e.hasVariable(t)&&e.getType(t)==="temporal"}function Id(e,t){return t===null||!["numeric","temporal"].includes(e.getType(t))?e:e.orderBy(t)}function H(e,...t){return e?t.includes(e.geom):!1}function C(e,t){return e.find(r=>r.id===t)}function ne(e,...t){return e.find(r=>t.includes(r.geom))}function Td(e,...t){return e.filter(r=>t.includes(r.geom))}function kr(e,t){return e.interactive?!1:t.some(r=>r!==e&&l.areMappingsEquivalent(r.mapping,e.mapping))}function Pr(e){const t=e.filter(r=>!kr(r,e));return t.length>0?t:e}function yi({legendPosition:e,coordSystem:t,layers:r}){if(e!=="right"||t.type!=="cartesian"||t.mainAxis!=="x")return!1;const n=Pr(r);return n.length===1&&n[0]?.supportsDirectLabels===!0}var Ld=3;function wd({scales:e,config:t,layers:r,coordSystem:n,variableLabels:a,colorGroups:i,geomRegistry:s}){if(t.legend.position==="none")return{drawn:[],position:"none"};const o=new Map(i.map(y=>[l.getStableKey(y.value),y])),c=Od(Cd({scales:e,layers:r})),u=fe(r,"x"),d=c.map(y=>{if(kd(y,u,r))return null;const v=_d({group:y,variableLabels:a,layers:r,colorGroupsByValue:o});return v.items.length===0?null:{group:y,built:v}}).filter(l.isDefined),m=Ed(d),h=Pr(r),p=Ud(s,t.legend.position,m,h,n);if(d.length===0)return{drawn:[],position:p};if(t.legend.position==="auto"&&Gd(s,m,h,n))return{drawn:[],position:p};const f=Wd(t.legend.display,{legendPosition:p,coordSystem:n,layers:r}),g=f==="direct"?Yd(h[0]):null;return{drawn:d.map(({built:y})=>Vd(y,{position:p,display:f,align:t.legend.align},g)),position:p}}function Ed(e){return e.reduce((t,{group:r,built:n})=>t+(r.some(a=>a.guideType!=="discrete")?1:n.items.length),0)}function Vd(e,t,r){const{position:n,display:a}=t,i=Rd(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(s=>({...s,normalizedY:r.get(String(s.value))??null}))}}function Rd(e,t){return e!=="auto"?e:t==="top"||t==="bottom"?"start":"center"}function Cd(e){const{scales:t,layers:r}=e,n=[];for(const a of Ct){const i=t[a];if(i===void 0||i.kind==="identity"||!Dd(a,r))continue;const s=fe(r,a),o=Kd(a,i);n.push({scaleAestheticKey:a,scale:i,variableName:s,guideType:o})}return n}function Dd(e,t){const r=$(e);return t.some(n=>l.isDefined(n.mapping[r]))}function kd(e,t,r){const[n]=e;return n.scaleAestheticKey!=="color"?!1:pi({colorVariableName:n.variableName,xVariableName:t,mapsColorAcrossMultipleLayers:Pd(n.scaleAestheticKey,r),isMergedWithAnotherAesthetic:e.length>1})}function Pd(e,t){const r=$(e);return t.filter(n=>l.isDefined(n.mapping[r])).length>1}function Od(e){const t=new Map;for(const r of e){const n=zd(r),a=t.get(n);a?a.push(r):t.set(n,[r])}return[...t.values()]}function Md(e,t,r){if(t==="lineType"){e.lineType=r;return}if(t==="color"){e.color=String(r);return}e[t]=r}function _d({group:e,variableLabels:t,layers:r,colorGroupsByValue:n}){const a=e[0],i=e.map(c=>$(c.scaleAestheticKey)),s=mi({scale:a.scale,aesthetics:i,layers:r}),o=ge({layers:r,scaleType:a.scale.spec.scaleType,variableName:a.variableName});return{aesthetics:e.map(c=>c.scaleAestheticKey),title:Cr(a.variableName,t),items:s.map(c=>Nd(c,e,i,o,n))}}function Nd(e,t,r,n,a){const i={};for(const o of t)Md(i,o.scaleAestheticKey,o.scale.map(e.value));const s=Fd(e,t,r,n,a);return{value:e.value,label:Bd(t,e,a),visual:i,normalizedY:null,geom:e.geom,valueFormat:s}}function Bd(e,t,r){return e[0].scaleAestheticKey!=="color"?null:r.get(l.getStableKey(t.value))?.label??null}function Fd(e,t,r,n,a){if(t[0].scaleAestheticKey==="color")return a.get(l.getStableKey(e.value))?.valueFormat??n;const i=e.owner?.layer,s=$d(i,r);return i===void 0||s===null?n:ge({layers:[i],scaleType:t[0].scale.spec.scaleType,variableName:s})}function $d(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 Gd(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 Ud(e,t,r,n,a){if(t!=="auto")return t;if(a.type==="polar")return"top";let i=!1,s=!1,o=!1;for(const u of n){const{sidePlacement:d}=e.get(u.geom).legend;d==="whenCrowded"&&(i=!0),d==="whenStackedVertical"&&(s=!0,M(u.position)&&(o=!0))}const c=r>=Ld;return i&&s?"top":i?c?"right":"top":o?Hd(a)?"top":c?"right":"top":"top"}function Wd(e,t){return e==="pill"?"pill":yi(t)?"direct":"pill"}function Hd(e){return e.type==="cartesian"&&e.mainAxis==="y"}function zd(e){const t=e.scale.domain.map(l.getStableKey);return JSON.stringify([e.variableName,e.guideType,...t])}function Kd(e,t){return Dr(t)?"discrete":`continuous:${e}`}function Yd(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(O(c))||l.isDefined(E(c)));if(!n)return;const a=U(n);if(!l.isDefined(a))return;const i=B(n),s=O(n)??E(n);if(!l.isDefined(s))return;const o=l.isDefined(i)?(i+s)/2:s;t.set(String(a),o)}),t}var qd=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.config.panel,e.layers,e.coordSystem,e.originalData]}run(e){const t=Bu(e.originalData),r=ud({scales:e.scales,layers:e.layers,valueLabels:Fu(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=gd(n),i=wd(n),s={...i,drawn:Xd(a,i.drawn)};return{axes:Qu(n,s.drawn),legends:s,headline:a,panel:{border:jd(e.config.panel.border),cornerRadius:e.config.panel.cornerRadius},colorGroups:r,variableLabels:t}}},jd=e=>{const t=r=>({isVisible:e[r].isVisible,lineStyle:e[r].lineStyle,lineWidth:e[r].lineWidth,color:e[r].color});return{top:t("top"),right:t("right"),bottom:t("bottom"),left:t("left")}},Xd=(e,t)=>e?.kind!=="perGroup"||t.some(r=>r.display==="direct")?t:[],Zd=e=>l.getStableKey([U(e)]),Or=(e,t)=>l.getStableKey([t!==null?e[t]??null:null]),Jd=e=>e!=="data-point",gt=(e,t,r)=>{switch(e){case"series":return Zd(t);case"x-value":return Or(t,r)}},Qd={bar:"observation-rerender",rule:null,line:"overlay-anchor",area:"overlay-anchor",point:"overlay-anchor"};function vi(e){const t=Qd[e]??null;return t===null?null:{strategy:t,composition:bi()}}function bi(){return{isDimmed:!1,matchedLayer:null,overlayCandidates:[]}}var em=class extends ve{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=tm({layer:e,highlights:n,parsingLocale:t.config.parsingLocale,strategy:r.strategy,container:this.container});return{...e,highlight:{...r,composition:a}}}};function tm({layer:e,highlights:t,parsingLocale:r,strategy:n,container:a}){const i=t.filter(L=>{const F=de(L.predicate,e.data);for(const j of F)a.diagnostics.addWarning({...j,message:`${j.message} Dropping this highlight.`});return F.length===0}),s=l.extractVariableName(e.mapping.x),o=Et(e,r),c=i.map(L=>({predicate:ue(L.predicate,o),scope:L.scope})),u=c.some(({scope:L})=>L==="series"),d=c.some(({scope:L})=>L==="x-value"),m=n==="overlay-anchor",h=e.data.size(),p=u?new Array(h):null,f=d?new Array(h):null,g=m?new Array(h):null,y=new Uint8Array(h),v=new Set,x=new Set;let T=!1,A=0;for(const L of e.data){let F,j;p!==null&&(F=gt("series",L,s),p[A]=F),f!==null&&(j=gt("x-value",L,s),f[A]=j),g!==null&&(g[A]=L);for(const{predicate:tt,scope:rt}of c)if(tt(L))switch(rt){case"series":F!==void 0&&v.add(F);break;case"x-value":j!==void 0&&x.add(j);break;case"data-point":y[A]=1,T=!0;break}A++}if(v.size===0&&x.size===0&&!T)return bi();const N=new Uint8Array(h),q=[];let te=0;for(let L=0;L<h;L++){const F=p?.[L],j=f?.[L],tt=F!==void 0&&v.has(F),rt=j!==void 0&&x.has(j),wn=y[L]===1;if(n==="observation-rerender")(tt||wn||rt)&&(N[L]=1,te++);else if(tt)N[L]=1,te++;else if(wn||rt){const En=g?.[L];En!==void 0&&q.push({observation:En,observationIndex:L})}}const oe=te>0?{...e,data:e.data.filterByMask(N)}:null;return{isDimmed:(n==="observation-rerender"||v.size>0)&&oe!==null,matchedLayer:oe,overlayCandidates:q}}var rm=l.prefixInternalVariable("__ungrouped__");function nm(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"}),s=new Map,o=i.map((c,u)=>{if(c===null)return null;const d=r[u]??rm;let m=s.get(d);return m||(m=new l.ChronologicalDateManager,s.set(d,m)),m.incrementYearIfNeeded(c)});n=n.addVariable(a,"temporal",o)}return n}var am=()=>({defaults:[],overrides:[],warnings:[]}),im=class extends ve{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,$n(e)]}compileLayer(e,t){const r=this.transformCompiler.compile({data:t.data,transforms:e.transforms}),n={...t.mapping,...e.mapping};return this.runLayerPipeline(e,r,n,$n(t))}runLayerPipeline(e,t,r,n){const a=Vt({data:t,mapping:r}).pipe(({data:s,mapping:o})=>{const c=this.statCompiler.compute(e.stat,{data:s,mapping:o,xScaleIsDiscrete:n});return{data:c.data,mapping:{...o,...c.mapping}}}).pipe(({data:s,mapping:o})=>({data:this.groupCompiler.compute({data:s,mapping:o}).data,mapping:o})).pipe(({data:s,mapping:o})=>({data:nm(s),mapping:o})).pipe(({data:s,mapping:o})=>{const c=this.geomCompiler.compile(e.geom,{data:s,mapping:o,params:e.params});return{data:c.data,mapping:{...o,...c.mapping}}}).pipe(({data:s,mapping:o})=>{const c=this.positionAdjusterCompiler.adjust(e.position,{data:s,mapping:o});return{data:c.data,mapping:{...o,...c.mapping}}}).result(),i=this.container.geomRegistry.get(e.geom);return{...a,id:e.id,geom:e.geom,position:e.position,yScaleType:e.yScaleType,params:e.params,interactive:e.interactive,dataLabels:e.dataLabels,summary:{},spatialKind:i.spatialKind,identityKey:i.identityKey,tooltip:i.tooltip,supportsDirectLabels:i.legend.directLabelSupport?.[e.position]===!0,highlight:vi(e.geom),styles:am()}}};function $n(e){return e.scales.some(t=>t.scaledAesthetic==="x"&&t.scaleType==="discrete")}function Si(e,t){const[r]=t;if(r){for(const n of t)e.addError(n);throw new l.UserInputError(r)}}var sm=new Set(["label","group"]),om=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},s={layerId:r.id,layerIndex:n,geom:r.geom,stat:r.stat,effectiveMapping:i,data:a,coordType:e.coords.coordType,dataLabels:r.dataLabels};t.push(...this.validateLayer(s));const o=[...this.collectUndeclaredAesthetics(s),...this.collectPanelJustifyWarnings(s)];for(const c of o)this.container.diagnostics.addWarning(c)}),Si(this.container.diagnostics,t)}checkPostCompile(e){Ma(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)]}collectPanelJustifyWarnings({geom:e,effectiveMapping:t,data:r,layerIndex:n,coordType:a,dataLabels:i}){const{justify:s,showDataLabels:o}=i;if(!o||s!=="panel-start"&&s!=="panel-end")return[];if(a==="polar"||!this.container.geomRegistry.get(e).isComposite)return[];if(!kt(r,t))return[];const c=s==="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 '${s}' will render as '${c}'.`,context:{layerIndex:n,expected:c,actual:s},suggestion:`Use justify '${c}' for this layer.`}]}validateRequiredAesthetics({layerId:e,layerIndex:t,geom:r,stat:n,effectiveMapping:a}){const i=[],{positionRoles:s,aesthetics:o}=this.container.geomRegistry.get(r),c=[...ku(s),...o.filter(m=>m.required).map(m=>m.name)],{computedVariables:u}=this.statRegistry.get(n.type),d=u;for(const m of c)d.has(m)||l.isDefined(a[m])||i.push({code:"MISSING_AESTHETIC",message:`Layer '${e}': geom '${r}' requires aesthetic '${m}'`,context:{layerIndex:t,aesthetic:m}});return i}validateVariableExistence({layerId:e,layerIndex:t,geom:r,stat:n,effectiveMapping:a,data:i}){const s=[],{computedVariables:o}=this.statRegistry.get(n.type),{derivedVariables:c}=this.container.geomRegistry.get(r),u=o,d=new Set(c);for(const[m,h]of Object.entries(a)){if(u.has(m))continue;const p=l.extractVariableName(h);p===null||p===""||d.has(p)||i.hasVariable(p)||s.push({code:"UNKNOWN_VARIABLE",message:`Layer '${e}': aesthetic '${m}' references variable '${p}' which does not exist in the dataset`,context:{layerIndex:t,aesthetic:m,variableName:p}})}return s}validatePositionalAestheticTypes({layerId:e,layerIndex:t,geom:r,stat:n,effectiveMapping:a,data:i}){const{positionRoles:s}=this.container.geomRegistry.get(r),{computedVariables:o}=this.statRegistry.get(n.type),c=o,u=[];for(const d of s){if(!Cu.has(d.role)||!l.isDefined(d.aes)||c.has(d.aes)||d.role==="scalar"&&d.aes===d.axis)continue;const m=l.extractVariableName(a[d.aes]);if(m===null||!i.hasVariable(m))continue;const h=i.getType(m);h!=="numeric"&&u.push({code:"INCOMPATIBLE_TYPE",message:`Layer '${e}': aesthetic '${d.aes}' must be numeric, but variable '${m}' is ${h}`,context:{layerIndex:t,aesthetic:d.aes,variableName:m,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:s}=this.statRegistry.get(n.type);return i({mapping:a,computedVariables:s}).map(o=>({...o,message:`Layer '${e}': ${o.message}`,context:{...o.context,layerIndex:t}}))}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}}]}collectUndeclaredAesthetics({layerId:e,layerIndex:t,geom:r,stat:n,effectiveMapping:a}){const{positionRoles:i,aesthetics:s}=this.container.geomRegistry.get(r),{computedVariables:o}=this.statRegistry.get(n.type),c=new Set([...Pu(i),...s.map(h=>h.name)]),u=sm,d=o,m=[];for(const h of Object.keys(a))l.isDefined(a[h])&&(c.has(h)||u.has(h)||d.has(h)||m.push({code:"UNDECLARED_AESTHETIC",message:`Layer '${e}': geom '${r}' does not declare aesthetic '${h}'; the mapping is ignored`,context:{layerIndex:t,aesthetic:h}}));return m}},ae=class{constructor(){this.positionRoles=[],this.identityKey="x-group",this.defaultPosition="identity",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,xt.merge)({},this.defaultParams,e.params)}},Mr=(e,t)=>{const r=l.extractVariableName(t.x);return!r||!["numeric","temporal"].includes(e.getType(r))?e:e.orderBy(r,"asc")},_r=(e,{coordSystem:t})=>{if(t.type==="polar")return null;const r=V(e),n=E(e);return!l.isStrictNumericDataValue(r)||!l.isStrictNumericDataValue(n)?null:{x:r,y:n}},lm=class extends ae{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="buckets",this.resolveAnchorPosition=_r}resolveParams(e){const t=super.resolveParams(e);return t.missingValues==="gap"?{...t,missingValues:"zero"}:t}compile({data:e,mapping:t}){return e=Mr(e,t),e.hasVariable(l.POSITION_VARIABLES.yMin)||(e=e.addConstantVariable(l.POSITION_VARIABLES.yMin,"numeric",0)),{data:e,mapping:{}}}},Gn=.7,cm=.1,xi=e=>{const t=e[l.STACK_VARIABLES.role];return t??"solo"},um=class extends ae{constructor(...e){super(...e),this.type="bar",this.defaultParams={width:Gn},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.resolveAnchorBox=ur,this.resolveDataLabelDefaults=t=>M(t)?{justify:"center"}:{},this.resolveBandFraction=t=>t.width,this.resolveAnchorPosition=(t,{coordSystem:r,position:n,purpose:a,align:i})=>{if(r.type==="polar")return dm(t);if(i!==void 0){const m=ur(t,r);return m===null?null:ze(m,i)}const s=M(n),o={isSolo:!s||xi(t)==="solo",isNegative:s&&mm(t),purpose:a};if(r.mainAxis==="x"){const m=K(t),h=Y(t),p=Un({lowerBound:B(t),upperBound:O(t)??E(t),options:o});return m===null||h===null||p===null?null:{x:(m+h)/2,y:p}}const c=B(t),u=O(t),d=Un({lowerBound:K(t),upperBound:Y(t)??V(t),options:o});return c===null||u===null||d===null?null:{x:d,y:(c+u)/2}}}resolveParams(e){const t=super.resolveParams(e),{diagnostics:r}=e;return{...t,width:this.resolveWidthParam(t.width,r)}}compile({data:e,mapping:t,params:r}){const{width:n}=r;e=Mr(e,t),e.hasVariable(l.POSITION_VARIABLES.yMin)||(e=e.addConstantVariable(l.POSITION_VARIABLES.yMin,"numeric",0));const a=n/2;return e=e.addConstantVariable(l.POSITION_VARIABLES.xMin,"numeric",-a).addConstantVariable(l.POSITION_VARIABLES.xMax,"numeric",a),{data:e,mapping:{}}}resolveWidthParam(e,t){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:Gn;return t?.addWarning({code:"INVALID_GEOM_PARAM",message:`Bar width must be a fraction in (0, 1], got ${String(e)}; falling back to ${n}.`,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}},dm=e=>{const t=K(e),r=Y(e),n=B(e),a=O(e);if(t===null||r===null||n===null||a===null)return null;const i=(t+r)/2,s=(n+a)/2;return{x:.5+.5*s*Math.sin(i),y:.5-.5*s*Math.cos(i)}},mm=e=>{const t=Tr(e);return l.isStrictNumericDataValue(t)&&t<0},Un=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},hm=class extends ae{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.resolveAnchorBox=ur,this.resolveAnchorPosition=_r}compile(e){return{data:Mr(e.data,e.mapping),mapping:{}}}},pm=class extends ae{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=_r,this.resolveDefaultLabelSource=t=>{const r=l.extractVariableName(t.size);return r!==null?{variable:r}:null}}compile({data:e}){return{data:e,mapping:{}}}},fm=class extends ae{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=Wn(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=Wn(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}}}},Wn=(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},Ai=[new um,new pm,new hm,new lm,new fm],Ye=class extends l.Registry{constructor(){super("geom");for(const e of Ai)this.register(e.type,e)}},Ne=class{compute(e){return e.data.size()===0?{data:e.data,mapping:{}}:this.computeStat(e)}},gm=class extends Ne{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,...Ke(e,t)])];return{data:e.groupBy(...n).rollup({[l.STAT_VARIABLES.count]:{variableName:r,aggregation:"count"}}),mapping:{y:l.STAT_VARIABLES.count}}}},ym=class extends Ne{constructor(...e){super(...e),this.type="identity",this.computedVariables=new Set}computeStat({data:e}){return{data:e,mapping:{}}}},vm=class extends Ne{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}}}},bm=2,Ii=1440*60*1e3,Sm=class extends Ne{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 s=e.getType(a),o=e.getType(i);if(o!=="numeric")throw new l.UserInputError({code:"INCOMPATIBLE_TYPE",message:`'smooth' stat requires a numeric 'y' (got '${o}' for variable '${i}')`,context:{aesthetic:"y",variableName:i,variableType:o}});const c=Ke(e,t),u=Em(a,s,i,c,e);return c.length===0?Hn({data:e,xVariable:a,xType:s,yVariable:i,spec:r,output:u,groupObservation:{},xScaleIsDiscrete:n}):e.groupBy(...c).forEach(d=>{const m=Vm(d,c);Hn({data:d,xVariable:a,xType:s,yVariable:i,spec:r,output:u,groupObservation:m,xScaleIsDiscrete:n})}),{data:u.build(),mapping:{}}}},Hn=({data:e,xVariable:t,xType:r,yVariable:n,spec:a,output:i,groupObservation:s,xScaleIsDiscrete:o})=>{const{observations:c,temporalOrigin:u}=xm({data:e,xVariable:t,yVariable:n,xType:r});c.length<bm||(o?wm({observations:c,spec:a,output:i,groupObservation:s}):Tm({observations:c,xType:r,temporalOrigin:u,spec:a,output:i,groupObservation:s}))},xm=({data:e,xVariable:t,yVariable:r,xType:n})=>{const a=e.getValues(t),i=e.getValues(r,{type:"numeric"}),s=n==="temporal"?Am(a):null,o=[],c=new Map;for(let u=0;u<a.length;u++){const d=a[u],m=i[u];if(!l.isDefined(d)||!l.isDefined(m)||!Number.isFinite(m))continue;const h=Im({xValue:d,xType:n,categoryRank:c,temporalOrigin:s});h!==null&&o.push({x:h,y:m,originalX:d})}return{observations:o,temporalOrigin:s}},Am=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},Im=({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)/Ii+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}`})}},Tm=({observations:e,xType:t,temporalOrigin:r,spec:n,output:a,groupObservation:i})=>{const s=Ti(n,e);for(const[o,c]of s){if(!Number.isFinite(o)||!Number.isFinite(c))continue;const u=t==="temporal"?Lm(o,r):o;a.push({x:u,y:c,groupObservation:i})}},Lm=(e,t)=>t===null?new Date(e):new Date((e-1)*Ii+t),wm=({observations:e,spec:t,output:r,groupObservation:n})=>{const a=new Map;for(const o of e)a.has(o.x)||a.set(o.x,o.originalX);const i=[...a.keys()].sort((o,c)=>o-c);if(t.method==="loess"){const o=Ti(t,e),c=new Map;for(const[u,d]of o)Number.isFinite(d)&&(c.has(u)||c.set(u,d));for(const u of i){const d=c.get(u),m=a.get(u);d===void 0||m===void 0||r.push({x:m,y:d,groupObservation:n})}return}const s=Li(t,e);for(const o of i){const c=a.get(o),u=s.predict(o);c===void 0||!Number.isFinite(u)||r.push({x:c,y:u,groupObservation:n})}},Ti=(e,t)=>e.method==="loess"?(0,le.regressionLoess)().x(r=>r.x).y(r=>r.y).bandwidth(e.bandwidth)(t):Li(e,t),Li=(e,t)=>{const r=a=>a.x,n=a=>a.y;switch(e.method){case"linear":return(0,le.regressionLinear)().x(r).y(n)(t);case"exponential":return(0,le.regressionExp)().x(r).y(n)(t);case"logarithmic":return(0,le.regressionLog)().x(r).y(n)(t);case"quadratic":return(0,le.regressionQuad)().x(r).y(n)(t);case"power":return(0,le.regressionPow)().x(r).y(n)(t);case"polynomial":return(0,le.regressionPoly)().x(r).y(n).order(e.order)(t);case"loess":throw new l.InternalError({message:"'loess' does not expose a 'predict' function"})}},Em=(e,t,r,n,a)=>{const i=[],s=[],o=Object.fromEntries(n.map(c=>[c,[]]));return{push:({x:c,y:u,groupObservation:d})=>{i.push(c),s.push(u);for(const m of n)o[m]?.push(d[m]??null)},build:()=>{const c={[e]:{type:t,values:i,valueFormat:a.getValueFormat(e)},[r]:{type:"numeric",values:s,valueFormat:a.getValueFormat(r)}};for(const u of n)c[u]={type:a.getType(u),values:o[u]??[],valueFormat:a.getValueFormat(u)};return new l.Dataset(c)}}},Vm=(e,t)=>{const r={};for(const n of t)r[n]=e.getValues(n)[0]??null;return r},Rm=[new ym,new gm,new Sm,new vm],Cm=class extends l.Registry{constructor(){super("stat");for(const e of Rm)this.register(e.type,e)}};function Dm({geoms:e,stats:t,transforms:r}){const n=new Ye,a=new Cm,i=new l.TransformRegistry;for(const s of e)n.register(s.type,s);for(const s of t)a.register(s.type,s);for(const s of r)i.register(s.transformType,s);return{geomRegistry:n,statRegistry:a,transformRegistry:i}}function Nr(e){if("definition"in e)return e.definition;if(Ei(e)||Vi(e)||Ri(e))return e}function wi(e){const t=[],r=[],n=[];for(const a of e){const i=Nr(a);i&&(Ei(i)?t.push(i):Vi(i)?r.push(i):Ri(i)&&n.push(i))}return{geoms:t,stats:r,transforms:n,warnings:[...Ht("geom",t,a=>a.type),...Ht("stat",r,a=>a.type),...Ht("transform",n,a=>a.transformType),...km(t)]}}function km(e){const t=[];for(const r of e)r.spatialKind!=="render-hit-test"||r.identityKey!=="x-group"||t.push({code:"RENDER_HIT_TEST_IDENTITY",message:`The render-hit-test geom '${r.type}' uses the default 'x-group' 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 Ht(e,t,r){const n=new Map;for(const i of t){const s=r(i),o=n.get(s);o?o.add(i):n.set(s,new Set([i]))}const a=[];for(const[i,s]of n)s.size<2||a.push({code:"DUPLICATE_REGISTERED_TYPE",message:`Multiple plugins register the ${e} '${i}' (${s.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 Ei=e=>e instanceof ae,Vi=e=>e instanceof Ne,Ri=e=>"transformType"in e&&typeof e.apply=="function",Pm=class{constructor(e){this.registry=e}adjust(e,t){return this.registry.get(e).adjust(t)}},Pt=class{},Om=class extends Pt{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=Mm(e)??[-.7/2,.7/2],s=r.length>1?cm:0,o=(0,Z.scaleBand)().domain(r.map(String)).range(i).paddingInner(s).paddingOuter(0),c=o.bandwidth(),u=new Array(n).fill(null),d=new Array(n).fill(null);for(let m=0;m<n;m++){const h=a[m];if(!l.isDefined(h))continue;const p=o(String(h));l.isDefined(p)&&(u[m]=p,d[m]=p+c)}return{data:e.addVariable(l.POSITION_VARIABLES.xMin,"numeric",u).addVariable(l.POSITION_VARIABLES.xMax,"numeric",d),mapping:{}}}},Mm=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]},zn=l.prefixInternalVariable("__ungrouped__"),Ci=(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,s=i?[zn]:a,o=e.getValues(r),c=e.getValues(n,{type:"numeric"}),u=e.getValues(l.GROUP_VARIABLES.group,{type:"categorical"}),d=e.size(),m=new Map;for(let h=0;h<d;h++){const p=l.getStableKey(o[h]??null),f=u[h],g=i?zn:f;if(!l.isDefined(g))continue;let y=m.get(p);y||(y=new Map,m.set(p,y));let v=y.get(g);v||(v=[],y.set(g,v)),v.push(h)}return{yValues:c,observationIndicesByXAndGroup:m,uniqueGroupKeys:s,observationCount:d}},Di=(e,t,r,n)=>{const a=new Array(n).fill(null);for(const[,i]of r){const s=[];let o=-1,c=1/0,u=-1/0,d=-1,m=1/0,h=-1/0;for(const p of i.values())for(const f of p){const g=e[f],y=t[f];!l.isDefined(g)||!l.isDefined(y)||(s.push(f),(g<c||g===c&&y>u)&&(o=f,c=g,u=y),(y>h||y===h&&g<m)&&(d=f,m=g,h=y))}for(const p of s)a[p]=_m(p===o,p===d)}return a},_m=(e,t)=>e&&t?"solo":e?"floor":t?"ceiling":"middle",Nm=class extends Pt{constructor(...e){super(...e),this.type="fill"}adjust({data:e,mapping:t}){const r=Ci(e,t);if(r===null)return{data:e,mapping:{}};const{yValues:n,observationIndicesByXAndGroup:a,uniqueGroupKeys:i,observationCount:s}=r,o=[...n],c=new Array(s).fill(0);for(const[,d]of a){let m=0,h=0;for(const g of i){const y=d.get(g);if(y!==void 0)for(const v of y){const x=n[v];x!=null&&(x>=0?m+=x:h-=x)}}let p=0,f=0;for(const g of i){const y=d.get(g);if(y!==void 0)for(const v of y){const x=n[v];if(x===void 0)continue;if(x===null){c[v]=null,o[v]=null;continue}const T=x>=0?m:h;if(T===0){c[v]=0,o[v]=0;continue}const A=x/T;x>=0?(c[v]=p,o[v]=p+=A):(o[v]=f,c[v]=f+=A)}}}const u=Di(c,o,a,s);return{data:e.addVariable(l.POSITION_VARIABLES.yMin,"numeric",c).addVariable(l.POSITION_VARIABLES.yMax,"numeric",o).addVariable(l.POSITION_VARIABLES.yRaw,"numeric",n).addVariable(l.STACK_VARIABLES.role,"categorical",u),mapping:{}}}},Bm=class extends Pt{constructor(...e){super(...e),this.type="identity"}adjust({data:e}){return{data:e,mapping:{}}}},Fm=class extends Pt{constructor(...e){super(...e),this.type="stack"}adjust({data:e,mapping:t}){const r=Ci(e,t);if(r===null)return{data:e,mapping:{}};const{yValues:n,observationIndicesByXAndGroup:a,uniqueGroupKeys:i,observationCount:s}=r,o=[...n],c=new Array(s).fill(0);for(const[,h]of a){let p=0,f=0;for(const g of i){const y=h.get(g);if(y!==void 0)for(const v of y){const x=n[v];if(x!==void 0){if(x===null){c[v]=null,o[v]=null;continue}x>=0?(c[v]=p,o[v]=p+=x):(o[v]=f,c[v]=f+=x)}}}}const u=Di(c,o,a,s);let d=e.addVariable(l.POSITION_VARIABLES.yMin,"numeric",c).addVariable(l.POSITION_VARIABLES.yMax,"numeric",o).addVariable(l.POSITION_VARIABLES.yRaw,"numeric",n).addVariable(l.STACK_VARIABLES.role,"categorical",u);const m=l.extractVariableName(t.y);return m!==null&&(d=d.addVariable(m,"numeric",o)),{data:d,mapping:{}}}},$m=class extends l.Registry{constructor(){super("position"),this.register("identity",new Bm),this.register("stack",new Fm),this.register("fill",new Nm),this.register("dodge",new Om)}},Gm=class{map({data:e,layer:t,getPositionScale:r,geomRegistry:n}){let a=e;const i=n.get(t.geom);for(const s of i.positionRoles){if(s.role!=="scalar"||!l.isDefined(s.aes)||Rr(s.aes))continue;const o=l.extractVariableName(t.mapping[s.aes]);if(!l.isDefined(o)||!a.hasVariable(o))continue;const c=r(li(s.axis,t.yScaleType));if(!c)continue;const u=a.getValues(o,{type:"numeric"}).map(d=>l.isDefined(d)?c.map(d):null);a=a.addVariable(l.resolveScaledAestheticVariable(s.aes),"numeric",u)}return a}},Um=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(s=>l.isDefined(s)?a.map(s):null);return e.addVariable(l.POSITION_VARIABLES.x,"numeric",i)}},Wm=class{map({data:e,getPositionScale:t}){const r=t("x");if(!r?.bandwidth||!e.hasVariable(l.POSITION_VARIABLES.x)||!e.hasVariable(l.POSITION_VARIABLES.xMin)||!e.hasVariable(l.POSITION_VARIABLES.xMax))return e;const n="reverse"in r.spec&&r.spec.reverse===!0,a=e.getValues(l.POSITION_VARIABLES.x,{type:"numeric"}),i=e.getValues(l.POSITION_VARIABLES.xMin,{type:"numeric"}),s=e.getValues(l.POSITION_VARIABLES.xMax,{type:"numeric"}),o=e.size(),c=new Array(o),u=new Array(o);for(let d=0;d<o;d++){const m=a[d],h=i[d],p=s[d];if(l.isDefined(m)&&l.isDefined(h)&&l.isDefined(p)){const f=n?-p:h,g=n?-h:p;c[d]=m+f*r.bandwidth,u[d]=m+g*r.bandwidth}else c[d]=null,u[d]=null}return e.addVariable(l.POSITION_VARIABLES.xMin,"numeric",c).addVariable(l.POSITION_VARIABLES.xMax,"numeric",u)}},Hm=class{map({data:e,layer:t,getPositionScale:r}){const n=l.extractVariableName(t.mapping.y),a=r(be(t.yScaleType));if(!n||!a)return e;const i=e.getValues(n).map(s=>l.isDefined(s)?a.map(s):null);return e.addVariable(l.POSITION_VARIABLES.y,"numeric",i)}},zm=class{map({data:e,layer:t,getPositionScale:r}){const n=r(be(t.yScaleType));if(!n||!e.hasVariable(l.POSITION_VARIABLES.yMin)||!e.hasVariable(l.POSITION_VARIABLES.yMax))return e;const a=e.getValues(l.POSITION_VARIABLES.yMin,{type:"numeric"}),i=e.getValues(l.POSITION_VARIABLES.yMax,{type:"numeric"}),s=e.size(),o=new Array(s),c=new Array(s);for(let u=0;u<s;u++){const d=a[u],m=i[u];l.isDefined(d)&&l.isDefined(m)?(o[u]=n.map(d),c[u]=n.map(m)):(o[u]=null,c[u]=null)}return e.addVariable(l.POSITION_VARIABLES.yMin,"numeric",o).addVariable(l.POSITION_VARIABLES.yMax,"numeric",c)}},Km=[new Um,new Hm,new Wm,new zm,new Gm];function Ym(e,t){const r=e[t];return r?.kind==="position"?r:null}var qm=class extends ve{constructor(e,t=Km){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=>Ym(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}}},jm=class extends l.Stage{constructor(e,t){super(),this.container=e,this.registry=t}dependencies(e){return[e.layers,e.scales]}run(e){this.validateScaleTypeCompatibility(e);const t=new Map;for(const a of e.scales)t.set(a.scaledAesthetic,a);const r=this.collectValues(e.layers,t),n={};for(const[a,i]of t){const s=r.get(a)??[];n[a]=this.registry.get(i.scaleType).compile(i,s)}return n}validateScaleTypeCompatibility(e){const t=[];for(const r of e.scales){const{compatibleDataTypes:n}=this.registry.get(r.scaleType),a=$(r.scaledAesthetic),i=e.layers.find(c=>l.isDefined(c.mapping[a]));if(!i)continue;const s=l.extractVariableName(i.mapping[a]);if(!l.isDefined(s)||!i.data.hasVariable(s))continue;const o=i.data.getType(s);if(n.includes(o)||t.push({code:"INCOMPATIBLE_TYPE",message:`Scale '${r.scaledAesthetic}' (${r.scaleType}) is incompatible with variable '${s}' (${o})`,context:{aesthetic:a,variableName:s,scaleType:r.scaleType,variableType:o}}),r.scaledAesthetic==="lineType"&&o!=="categorical"){const c=o==="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 ${o} variable '${s}'. ${c}`,context:{aesthetic:a,variableName:s,scaleType:r.scaleType,variableType:o},suggestion:c})}}Si(this.container.diagnostics,t)}collectValues(e,t){const r=new Map;for(const n of e){const a=this.resolveCustomPositionalAxes(n);for(const[i,s]of Object.entries(n.mapping)){if(!l.isDefined(s))continue;const o=i==="y"?be(n.yScaleType):i,c=a.get(i)??(_u(o)?o:void 0);if(!l.isDefined(c)||!t.has(c))continue;const u=this.resolveVariables(i,s,n.data);this.collectFromVariables(n.data,u,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)||Rr(n.aes)||t.set(n.aes,li(n.axis,e.yScaleType));return t}resolveVariables(e,t,r){if(e==="y"&&this.hasPositionAdjustedY(r))return[l.POSITION_VARIABLES.yMin,l.POSITION_VARIABLES.yMax];const n=l.extractVariableName(t);return!n||!r.hasVariable(n)?[]:[n]}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 s of t)a=a.concat(e.getValues(s));const i=n.get(r);n.set(r,i?i.concat(a):a)}},Xm=["rgb","lab","hcl","hsl"],Zm=["viridis","magma","inferno","plasma","cividis","turbo","Blues","Greens","Greys","Oranges","Purples","Reds"],ki=["RdBu","BrBG","PuOr","Spectral"],Pi={"red-blue":"RdBu","brown-teal":"BrBG","purple-orange":"PuOr",spectral:"Spectral"},Jm=new Set(ki.map(e=>e.toLowerCase()));function Oi(e){const t=e.toLowerCase(),r=Pi[t];return r?r.toLowerCase():t}function Qm(e){return Jm.has(Oi(e))}var eh={rgb:Re.interpolateRgb,lab:Re.interpolateLab,hcl:Re.interpolateHcl,hsl:Re.interpolateHsl},th={viridis:D.interpolateViridis,magma:D.interpolateMagma,inferno:D.interpolateInferno,plasma:D.interpolatePlasma,cividis:D.interpolateCividis,turbo:D.interpolateTurbo,blues:D.interpolateBlues,greens:D.interpolateGreens,greys:D.interpolateGreys,oranges:D.interpolateOranges,purples:D.interpolatePurples,reds:D.interpolateReds,rdbu:D.interpolateRdBu,brbg:D.interpolateBrBG,puor:D.interpolatePuOr,spectral:D.interpolateSpectral};function Br(e){const t=nh(e);return e.reverse?r=>t(1-r):t}function rh(e={},t=2){const r=Br({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 nh(e){const t=eh[e.interpolate];if(e.range&&e.range.length>=2)return(0,Re.piecewise)(t,e.range.map(r=>String(r)));if(e.scheme){const r=th[Oi(e.scheme)];if(r)return r}return(0,Re.piecewise)(t,[...l.DEFAULT_SEQUENTIAL_RAMP])}var qe=class{createPositionScale(e,t){return{kind:"position",aesthetic:$(e.scaledAesthetic),spec:e,...t}}createVisualScale(e,t){return{kind:"visual",aesthetic:$(e.scaledAesthetic),spec:e,...t}}},ah=class extends qe{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=Dt(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"&&ih(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:$(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,Z.scaleLog)():r.transform==="sqrt"?(0,Z.scaleSqrt)():(0,Z.scaleLinear)();r.nice&&!a&&(n=i.copy().domain(n).nice().domain());const s=r.domainMin??n[0],o=r.domainMax??n[1];return i.domain([s,o]).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=sh(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=Br(t),n=t.domainMid;if(n!==null){const[a,i]=this.resolveColorDomain(e,t);if(n>a&&n<i){const[s,o]=this.symmetrizeDomain([a,i],t,n);return this.buildDivergingColorScale([s,n,o],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,Z.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,Z.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]}},ih=e=>{const[t,r]=e;return t>0&&r>0||t<0&&r<0};function sh(e){if(!e)return null;const[t,r]=e;return typeof t=="number"&&typeof r=="number"?[t,r]:null}var oh=class extends qe{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=Dt(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=lh(e)?e:[],a=(0,Z.scaleUtc)().domain(n).range(t).clamp(r.clamp);if(r.nice&&a.nice(),l.isDefined(r.domainMin)||l.isDefined(r.domainMax)){const[i,s]=a.domain();i!==void 0&&s!==void 0&&a.domain([r.domainMin??i,r.domainMax??s])}return a}buildScale(e,t,r){const n=t.reverse?[1,0]:[0,1],a=this.createD3Scale(e,n,t),[i,s]=a.domain(),o=i&&s?r.filter(c=>c>=i&&c<=s):[];return this.createPositionScale(t,{map:a,domain:a.domain(),bandwidth:null,generateTicks:c=>c&&"atInputs"in c?o:c&&"interval"in c?i&&s?Hu(i,s,c.interval):[]:a.ticks(c?.count)})}},lh=e=>e.length===2&&l.isStrictTemporalDataValue(e[0])&&l.isStrictTemporalDataValue(e[1]),ch=class extends qe{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=Dt(e.scaledAesthetic),n=si(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,Z.scaleBand)().domain(r).range(a).paddingInner(n).paddingOuter(n/2),s=i.bandwidth()/2;return this.createPositionScale(t,{map:o=>(i(String(o))??NaN)+s,domain:e,bandwidth:i.bandwidth(),generateTicks:()=>[...e]})}buildVisualScale(e,t){const r=e.map(String),n=t.range&&t.range.length>0?(0,Z.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})}},uh=class extends qe{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:$(e.scaledAesthetic),spec:e,map:t=>t,domain:[],generateTicks:()=>[]}}},dh=class extends qe{constructor(...e){super(...e),this.compatibleDataTypes=["categorical","temporal","numeric"]}compile(e,t){if(e.scaleType!=="palette")throw new l.InternalError({message:"PaletteScale.compile received non-palette spec"});const r=ii(t),n=l.resolvePaletteRange(e.palette,r.length),a=l.applyOverrides(n.length>0?n:[...l.DEFAULT_COLOR_PALETTE],e.overrides),i=(0,Z.scaleOrdinal)().domain(r.map(String)).range(a).unknown(a[0]);return this.createVisualScale(e,{map:s=>i(String(s)),domain:r,generateTicks:()=>r})}},mh=class extends l.Registry{constructor(e){super("scale"),this.register("continuous",new ah(e)),this.register("discrete",new ch),this.register("datetime",new oh),this.register("identity",new uh),this.register("palette",new dh)}},lt={color:null,size:"small",labelCrossPosition:.5},Le={kind:"rectangle",zOrder:"foreground",fillColor:"transparent",fillOpacity:1,strokeWidth:1,strokeColor:null},zt={zOrder:"foreground",fit:"contain",opacity:1},hh={x:8,y:8,unit:"px"},Kt={align:"center",backgroundColor:null,backgroundColorStyle:"opaque"},we={color:null,thickness:"medium",startArrowheadStyle:"none",endArrowheadStyle:"line-arrow",lineStyle:"solid",hasStickerStyle:!1},ph={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}},fh=(e,t,r)=>{const n=gh(e,t),a=bh(n);return{differenceArrows:(n.differenceArrows??[]).map(i=>xh(e,i,r)).filter(l.isDefined),shapes:(n.shapes??[]).map(i=>Lh(e,i,a)).filter(l.isDefined),arrows:(n.arrows??[]).map(i=>Vh(e,i,r,a)).filter(l.isDefined),textAnnotations:(n.textAnnotations??[]).map(i=>Sh(e,i,r,a)).filter(l.isDefined),stickers:(n.stickers??[]).map(i=>Ah(e,i,r,a)).filter(l.isDefined),images:(n.images??[]).map(i=>wh(e,i,a)).filter(l.isDefined),pinnedNumbers:(n.pinnedNumbers??[]).map(i=>Ih(e,i,r)).filter(l.isDefined),comments:(n.comments??[]).map(i=>Th(e,i,r)).filter(l.isDefined)}},gh=(e,t)=>{if(t===void 0)return{};if(!yh(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:k()}):(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))}},yh=e=>{const t=new Set;for(const r of vh(e))if(r.id!==void 0){if(t.has(r.id))return!0;t.add(r.id)}return!1},vh=e=>[...e.differenceArrows??[],...e.shapes??[],...e.arrows??[],...e.textAnnotations??[],...e.images??[],...e.stickers??[],...e.pinnedNumbers??[],...e.comments??[]],bh=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},Fr=(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},Sh=(e,t,r,n)=>{const a=yt(e,t.at,r,n,t.id);return a===null?null:{id:t.id??k(),content:t.content,at:a,width:t.width,align:t.align??Kt.align,backgroundColor:t.backgroundColor??Kt.backgroundColor,backgroundColorStyle:t.backgroundColorStyle??Kt.backgroundColorStyle}},xh=(e,t,r)=>{const n=We(e,t.start,r),a=We(e,t.end,r);return n===null||a===null?null:{id:t.id??k(),start:n,end:a,label:t.label,color:t.color??lt.color,size:t.size??lt.size,labelCrossPosition:t.labelCrossPosition??lt.labelCrossPosition}},We=(e,t,r)=>{const n=t.align!==void 0?{align:t.align}:{};return t.layerId===void 0?{anchorValue:t.anchorValue,groupValue:t.groupValue,...n}:r.some(a=>a.id===t.layerId)?{layerId:t.layerId,anchorValue:t.anchorValue,groupValue:t.groupValue,...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)},yt=(e,t,r,n,a)=>{if(t.anchorType==="annotation")return Fr(e,t.ref,n,a)?t:null;if(t.anchorType==="panel"||t.anchorType==="axis"||t.anchorType==="selection")return t;const i=We(e,t,r);return i===null?null:{anchorType:"observation",...i,...t.offset!==void 0?{offset:t.offset}:{}}},Ah=(e,t,r,n)=>{const a=yt(e,t.at,r,n,t.id);return a===null?null:{id:t.id??k(),at:a,sticker:t.sticker}},Ih=(e,t,r)=>{const n=We(e,t.at,r);return n===null?null:{id:t.id??k(),at:n}},Th=(e,t,r)=>{const n=We(e,t.at,r);return n===null?null:{id:t.id??k(),at:n,content:t.content}},Lh=(e,t,r)=>t.region.anchorType==="annotation"&&!Fr(e,t.region.ref,r,t.id)?null:{id:t.id??k(),kind:t.kind??Le.kind,zOrder:t.zOrder??Le.zOrder,region:Eh(t.region),fillColor:t.fillColor??Le.fillColor,fillOpacity:t.fillOpacity??Le.fillOpacity,strokeWidth:t.strokeWidth??Le.strokeWidth,strokeColor:t.strokeColor??Le.strokeColor},wh=(e,t,r)=>t.region.anchorType==="annotation"&&!Fr(e,t.region.ref,r,t.id)?null:{id:t.id??k(),src:t.src,zOrder:t.zOrder??zt.zOrder,region:t.region,fit:t.fit??zt.fit,opacity:t.opacity??zt.opacity},Eh=e=>e.anchorType!=="selection"||e.padding!==void 0?e:{...e,padding:hh},Kn=e=>{if(e.anchorType==="panel"||e.anchorType==="axis"||e.offset!==void 0||e.align===void 0)return e;const t=ph[e.align];return t===void 0?e:{...e,offset:{x:t.x*4,y:t.y*4,unit:"px"}}},Vh=(e,t,r,n)=>{const a=yt(e,t.start,r,n,t.id),i=yt(e,t.end,r,n,t.id);return a===null||i===null?null:{id:t.id??k(),start:Kn(a),end:Kn(i),color:t.color??we.color,thickness:t.thickness??we.thickness,startArrowheadStyle:t.startArrowheadStyle??we.startArrowheadStyle,endArrowheadStyle:t.endArrowheadStyle??we.endArrowheadStyle,lineStyle:t.lineStyle??we.lineStyle,hasStickerStyle:t.hasStickerStyle??we.hasStickerStyle}},Rh={parsingLocale:"en-US",legend:{position:"auto",display:"auto",align:"auto"},axes:{x:{isVisible:!0,label:null,position:"bottom",grid:{isVisible:null,lineStyle:"dashed",lineWidth:null},ticks:{isVisible:!0,mode:"auto"}},y:{isVisible:!0,label:null,position:"right",grid:{isVisible:null,lineStyle:"dashed",lineWidth:null},ticks:{isVisible:!1,mode:"auto"}}},panel:{border:{top:{isVisible:!0,lineStyle:"dashed",lineWidth:null,color:null},right:{isVisible:!0,lineStyle:"dashed",lineWidth:null,color:null},bottom:{isVisible:!0,lineStyle:"dashed",lineWidth:null,color:null},left:{isVisible:!0,lineStyle:"dashed",lineWidth:null,color:null}},cornerRadius:8,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},appearance:{textScale:1,background:{type:"theme"},border:{type:"none"},cornerRadius:8},layout:{padding:null,gaps:{}}};function Ch(e){const t=(0,xt.merge)({},Rh,e);return t.content=Dh(t.content,e?.content),t}var Dh=(e,t)=>{const r=t?.brandMark?.enabled??t?.isBrandMarkVisible??e.brandMark.enabled,n={...e.brandMark,enabled:r};return{...e,brandMark:n,isBrandMarkVisible:r}},kh={xLimits:null,yLimits:null},Yt={theta:"x",startAngle:0,innerRadius:0};function Ph(e){const t=e??{type:"coord",coordType:"cartesian"},r=(0,mt.default)({},kh,t.params??{});switch(t.coordType){case"cartesian":case"flip":return{...t,params:r};case"polar":return{...t,params:{...r,theta:t.params?.theta??Yt.theta,startAngle:t.params?.startAngle??Yt.startAngle,innerRadius:t.params?.innerRadius??Yt.innerRadius}}}}function Oh(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??k(),predicate:a.predicate,scope:a.scope??"data-point",...a.layerId!==void 0?{layerId:a.layerId}:{}})}return n}var Mh=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=Yn(e.filter(n=>n.severity==="error")),r=Yn(e.filter(n=>n.severity==="warning"));return this.diagnostics=[],{errors:t,warnings:r}}},_h=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 Yn(e){const t=new Set;return e.filter(r=>{const n=JSON.stringify(r);return t.has(n)?!1:(t.add(n),!0)})}var Nh={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 Mi(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 $r(e,t,r,n,a,i){const s=a!==void 0&&i!==void 0?new _h(a,{layerIndex:i}):a,o=e.get(n.geom),c=n.position??o.defaultPosition,u=Gh({dataLabels:Wh(e,t,n,c,r),geom:o,position:c,coordType:r,diagnostics:s});return $h({diagnostics:s,coordType:r,geom:o,position:c,dataLabels:u}),{id:n.id??k(),type:n.type,geom:n.geom,mapping:n.mapping??{},stat:Mi(n.stat,"identity"),position:c,yScaleType:n.yScaleType??"primary",params:o.resolveParams({params:n.params,diagnostics:s}),transforms:n.transforms??[],interactive:n.interactive??o.defaultInteractive,dataLabels:u}}function Bh(e,t,r,n,a){const i=n.map((s,o)=>$r(e,t,r,s,a,o));return Hh(e,i)}var Fh=(e,t,r,n)=>n.label!==void 0?n.label:zh(e,t,r,n),$h=({diagnostics:e,coordType:t,geom:r,position:n,dataLabels:a})=>{if(e===void 0)return;const i=r.type==="bar"&&t==="polar",s=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"&&s&&M(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&&!(s&&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'."}),a.showCategoryLabels&&a.showDataLabels&&!i&&e.addWarning({code:"DATA_LABEL_SETTING_IGNORED",message:"showCategoryLabels only applies to polar bars (pie / donut); it will be ignored.",suggestion:"Turn off showCategoryLabels for this layer."})},Gh=({dataLabels:e,geom:t,position:r,coordType:n,diagnostics:a})=>{const{justify:i,showDataLabels:s}=e;if(i!=="panel-start"&&i!=="panel-end")return e;const o=Uh(t,r,n);if(o===null)return e;const c=i==="panel-end"?"end":"start";return s&&a?.addWarning({code:"DATA_LABEL_PLACEMENT_COERCED",message:`${o}; justify '${i}' will render as '${c}'.`,context:{expected:c,actual:i},suggestion:`Use justify '${c}' for this layer.`}),{...e,justify:c}},Uh=(e,t,r)=>r==="polar"?"Panel-edge anchors do not apply under polar coords":e.type==="bar"&&M(t)?"Stacked bar segments would all pin their labels to the same panel edge":null,Wh=(e,t,r,n,a)=>{const i={...t,...r.mapping},s=Fh(e,r.geom,n,i),o=e.get(r.geom);return{...(0,xt.merge)({},Nh,o.resolveDataLabelDefaults?.(n)??{},o.dataLabels?.[a]??{},r.dataLabels??{}),labelSource:s}},Hh=(e,t)=>{const r=new Set;for(const n of t)n.position==="fill"&&r.add(n.yScaleType);return r.size===0?t:t.map(n=>{if(!r.has(n.yScaleType)||!e.get(n.geom).positionRoles.some(s=>s.axis==="y"&&s.role==="scalar"))return n;const a=l.extractConstantValue(n.mapping.y);if(!l.isStrictNumericDataValue(a))return n;const i=Math.min(1,Math.max(0,a));return{...n,mapping:{...n.mapping,y:{value:i}}}})},zh=(e,t,r,n)=>e.get(t).resolveDefaultLabelSource?.(n)??Lt(r,n),_i={x:"position",y:"position",ySecondary:"position",color:"color-range",size:"continuous-range",alpha:"continuous-range",strokeWidth:"continuous-range",lineType:"discrete-only"},Kh={numeric:{position:"continuous","color-range":"continuous","continuous-range":"continuous","discrete-only":"discrete"},categorical:{position:"discrete","color-range":"discrete","continuous-range":"discrete","discrete-only":"discrete"},temporal:{position:"datetime","color-range":"continuous","continuous-range":"continuous","discrete-only":"discrete"}};function Ni(e,t,r,n,a,i){switch(t.scaleType){case"inferred":return Ni(e,jh(e,t,r,n,a),r,n,a,i);case"continuous":{const s=_i[t.scaledAesthetic],o=s==="continuous-range"&&t.scaledAesthetic in l.NON_POSITION_RANGE_DEFAULTS?l.NON_POSITION_RANGE_DEFAULTS[t.scaledAesthetic]:null,c=t.scaledAesthetic==="size"&&s==="continuous-range"?"sqrt":l.CONTINUOUS_SCALE_DEFAULTS.transform;return{type:t.type,scaledAesthetic:t.scaledAesthetic,scaleType:t.scaleType,transform:t.transform??c,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??s!=="position",domainMin:t.domainMin??l.CONTINUOUS_SCALE_DEFAULTS.domainMin,domainMax:t.domainMax??l.CONTINUOUS_SCALE_DEFAULTS.domainMax,range:t.range??o??null,scheme:Xh(e,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{type:t.type,scaledAesthetic:t.scaledAesthetic,scaleType:t.scaleType,range:t.range??l.DISCRETE_SCALE_DEFAULTS.range,domain:t.domain??l.DISCRETE_SCALE_DEFAULTS.domain,padding:t.padding??l.DISCRETE_SCALE_DEFAULTS.padding,reverse:t.reverse??l.DISCRETE_SCALE_DEFAULTS.reverse};case"palette":return{type:t.type,scaledAesthetic:t.scaledAesthetic,scaleType:t.scaleType,palette:l.resolvePaletteConfig(e,t.palette,i),overrides:l.resolvePaletteOverrides(e,t.overrides,t.palette,i)};case"identity":return{type:t.type,scaledAesthetic:t.scaledAesthetic,scaleType:t.scaleType};default:throw new l.InternalError({message:`Unknown scale type: ${t.scaleType}`})}}function Yh(e,t,r,n,a,i,s){const o=ep(Qh(r,n)),c=new Map;for(const d of o)c.set(d.scaledAesthetic,d);const u=[...c.values()].map(d=>Ni(e,d,t,n,a,s));return i.coordType==="polar"?qh(u):u}var qh=e=>e.map(t=>t.scaleType==="discrete"?{...t,padding:0}:t);function jh(e,t,r,n,a){const i=$(t.scaledAesthetic),s=t.scaledAesthetic==="ySecondary"?Jh(n,a):a[i],{layer:o,scaleConstraints:c}=Zh(e,n);if(t.scaledAesthetic==="x"&&c?.discreteMainAxis)return l.discrete(t.scaledAesthetic,t.options);const u=o?.yScaleType==="secondary"?"ySecondary":"y";if(c?.zeroBaseline&&o&&t.scaledAesthetic===u){const p=t.options,f=o.position==="fill";return l.continuous(t.scaledAesthetic,{...p,zero:!0,...f&&{nice:!1}})}const d=l.extractVariableName(s);if(!l.isDefined(d)||!r.hasVariable(d))return l.continuous(t.scaledAesthetic,t.options);const m=r.getType(d),h=_i[t.scaledAesthetic];switch(Kh[m][h]){case"discrete":return l.discrete(t.scaledAesthetic,t.options);case"datetime":return l.datetime(t.scaledAesthetic,t.options);case"continuous":return l.continuous(t.scaledAesthetic,t.options);default:return l.identity(t.scaledAesthetic)}}function Xh(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:$(t.scaledAesthetic),scaleType:t.scaleType},suggestion:"Set either a scheme or a range, not both."}),null):(!l.isDefined(t.domainMid)&&Qm(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:$(t.scaledAesthetic),scaleType:t.scaleType,actual:r},suggestion:"Set 'domainMid' (e.g. 0) to centre the neutral colour."}),r)}function Zh(e,t){for(const r of t){const{scaleConstraints:n}=e.geomRegistry.get(r.geom);if(n!==void 0)return{layer:r,scaleConstraints:n}}return{}}function Jh(e,t){const r=e.find(n=>n.yScaleType==="secondary");return r?r.mapping.y??t.y:t.y}function Qh(e,t){return!t.some(r=>r.yScaleType==="secondary")||e.some(r=>r.scaledAesthetic==="ySecondary")?e:[...e,l.inferred("ySecondary")]}function ep(e){return e.some(t=>t.scaledAesthetic==="color")?e:[...e,l.palette("color")]}var tp=e=>{const t=new Set;e!==void 0&&Bi(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},Bi=(e,t,r)=>{if(!r.has(e)){r.add(e);for(const n of e.extends??[])Bi(n,t,r);t.delete(e),t.add(e),r.delete(e)}};function rp(e,t,r){const n=Ph(t.coords),a=Bh(e.geomRegistry,t.mapping,n.coordType,t.layers,e.diagnostics),i=Yh(e,t.data,t.scales,a,t.mapping,n,r),s=Ch(t.config),o=Oh(e,t.highlights,a),c=fh(e,t.annotations,a),u=tp(t.styles);return{data:t.data,mapping:t.mapping,layers:a,scales:i,transforms:t.transforms,highlights:o,styles:u,annotations:c,coords:n,config:s}}var Fi=class{constructor(e){this.container=e}compile({input:e,dataset:t,customPalettes:r}){return rp(this.container,{...e,data:t},r)}},np=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})}},ap=class extends ve{constructor(e){super(),this.container=e}compile(e){const t=super.compile(e);for(const r of lp(e.styles,t))this.container.diagnostics.addWarning(r);for(const r of cp(e.styles))this.container.diagnostics.addWarning(r);for(const r of up(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=Ki({layer:e,layerIndex:t.layers.indexOf(e),styles:t.styles,parsingLocale:t.config.parsingLocale});return{...e,styles:r}}},$i=["color","alpha","saturation"],Gi={bar:["color","alpha","saturation","borderRadius","borderColor","borderWidth"],line:["color","alpha","saturation","strokeWidth","lineType","fillAlpha"],area:["color","alpha","saturation","strokeWidth","lineType","strokeAlpha"],point:["color","alpha","saturation","size","borderColor","borderWidth"],rule:["color","strokeWidth","lineType"]},ip=[...new Set([...$i,...Object.values(Gi).flatMap(e=>e??[])])],sp=(e,t,r="en-US")=>Ki({layer:e,layerIndex:0,styles:{tokens:t.tokens??{},defaults:t.defaults??[],overrides:t.overrides??[]},parsingLocale:r}),Ui=e=>(e!==void 0?Gi[e]:void 0)??$i,op=(e,t,r)=>{const n=[];return l.BUILTIN_STYLES.defaults.forEach((a,i)=>{const s=a.select.kind;if(s!==void 0&&s!==e)return;const o={list:"builtin"},c=Yi({declarations:a.declarations,vocabulary:Ui(s),tokens:t,location:`builtin[${i}]`,origin:o,warnings:r});Object.keys(c).length!==0&&n.push({declarations:c,...a.when?.state===void 0?{}:{state:a.when.state},origin:o})}),n},Wi=(e,t)=>{e.defaults.forEach((r,n)=>t(r,"defaults",n)),e.overrides.forEach((r,n)=>t(r,"overrides",n))},lp=(e,t)=>{const r=new Set(t.map(a=>a.id)),n=[];return Wi(e,(a,i,s)=>{const o=a.select.layer;o===void 0||r.has(o)||n.push({code:"INVALID_STYLE_RULE",message:`Style ${i}[${s}] targets unknown layer '${o}'.`,context:{param:"layer",actual:o,...a.id===void 0?{}:{styleEntryId:a.id}},suggestion:"Set 'layer' to the id of a layer in the spec."})}),n},cp=e=>{const t=[];return Wi(e,(r,n,a)=>{const i=r.when?.state;i===void 0||Hi(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(s=>`'${s}'`).join(", ")}.`})}),t},Hi=e=>l.STYLE_STATES.includes(e),up=e=>{const t=[];for(const[r,n]of Object.entries(e.tokens))zi(n)||t.push({code:"INVALID_STYLE_RULE",message:`Style token '${r}' has an invalid value: ${vt(n)}.`,context:{param:"tokens",actual:vt(n)},suggestion:`Set '${r}' to a non-empty color string or a { light, dark } pair of colors.`});return t},zi=e=>typeof e=="string"?e.trim().length>0:l.isLightDarkColor(e)&&e.light.trim().length>0&&e.dark.trim().length>0,vt=e=>typeof e=="object"&&e!==null?JSON.stringify(e):String(e),Ki=e=>{const{layer:t,layerIndex:r,styles:n,parsingLocale:a}=e,i=Et(t,a),s=[],o={...l.BUILTIN_STYLES.tokens,...n.tokens},c=(u,d)=>{const m=[];return u.forEach((h,p)=>{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&&!Hi(g))return;const y={list:d,index:p,...h.id===void 0?{}:{id:h.id}},v=h.when?.where;if(v!==void 0){const T=de(v,t.data,"style-rule");if(T.length>0){for(const A of T)s.push({...A,code:"INVALID_STYLE_RULE",message:`Style ${d}[${p}]: ${A.message}`,context:{...A.context,layerIndex:r,...h.id===void 0?{}:{styleEntryId:h.id}}});return}}const x=Yi({declarations:h.declarations,vocabulary:Ui(f),tokens:o,location:`${d}[${p}]`,origin:y,warnings:s});Object.keys(x).length!==0&&m.push({declarations:x,...v===void 0?{}:{matches:ue(v,i)},...g===void 0?{}:{state:g},origin:y})}),m};return{defaults:[...op(t.geom,o,s),...c(n.defaults,"defaults")],overrides:c(n.overrides,"overrides"),warnings:s}},Yi=e=>{const{declarations:t,vocabulary:r,tokens:n,location:a,origin:i,warnings:s}=e,o={},c=i.list==="builtin"||i.id===void 0?{}:{styleEntryId:i.id},u=(p,f,g)=>{s.push({code:"INVALID_STYLE_RULE",message:`Style ${a} declaration '${p}' ignored: expected ${f}, got ${vt(g)}.`,context:{param:p,expected:f,actual:vt(g),...c},suggestion:`Set '${p}' to ${f}.`})},d=(p,f)=>{if(typeof f=="string"){if(f.trim().length>0)return f;u(p,"a non-empty color string",f);return}if(l.isStyleTokenRef(f)){const g=n[f.token];if(g===void 0){s.push({code:"INVALID_STYLE_RULE",message:`Style ${a} declaration '${p}' ignored: unknown token '${f.token}'.`,context:{param:p,actual:f.token,...c},suggestion:`Declare '${f.token}' in the stylesheet's tokens.`});return}return zi(g)?typeof g=="string"?g:{light:g.light,dark:g.dark}:void 0}if(l.isLightDarkColor(f)&&f.light.trim().length>0&&f.dark.trim().length>0)return{light:f.light,dark:f.dark};u(p,"a non-empty color string, a { light, dark } pair, or a token(...) reference",f)};for(const p of Object.keys(t)){if(t[p]===void 0||r.includes(p))continue;const f=ip.includes(p);s.push({code:"INVALID_STYLE_RULE",message:`Style ${a} declaration '${p}' ignored: ${f?"not in this entry's vocabulary":"not a style property"}.`,context:{param:p,...c},suggestion:f?`Declare '${p}' on an entry whose kind supports it (e.g. style.geom.bar).`:`Remove the unknown declaration '${p}'.`})}for(const p of["color","borderColor"]){const f=t[p];if(f===void 0||!r.includes(p))continue;const g=d(p,f);g!==void 0&&(o[p]=g)}for(const p of["alpha","saturation","strokeAlpha","fillAlpha"]){const f=t[p];f===void 0||!r.includes(p)||(Number.isFinite(f)&&f>=0&&f<=1?o[p]=f:u(p,"a number in [0, 1]",f))}for(const p of["borderWidth","strokeWidth","size"]){const f=t[p];f===void 0||!r.includes(p)||(Number.isFinite(f)&&f>=0?o[p]=f:u(p,"a non-negative number of pixels",f))}const{borderRadius:m,lineType:h}=t;return m!==void 0&&r.includes("borderRadius")&&(l.isBorderRadiusToken(m)?o.borderRadius=m:u("borderRadius",`one of ${l.BORDER_RADIUS_TOKENS.map(p=>`'${p}'`).join(", ")}`,m)),h!==void 0&&r.includes("lineType")&&(Ba(h)?o.lineType=h:u("lineType",`one of ${Lr.map(p=>`'${p}'`).join(", ")}`,h)),o},dp=({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}},mp=({layer:e})=>{if(e.position!=="stack")return;const t=l.extractVariableName(e.mapping.x);if(t===null||!e.data.hasVariable(l.POSITION_VARIABLES.yMin)||!e.data.hasVariable(l.POSITION_VARIABLES.yMax))return;const r=new Map;for(const a of e.data){const i=a[t],s=B(a),o=O(a),c=K(a),u=Y(a),d=Tr(a);if(!l.isDefined(i)||!l.isDefined(s)||!l.isDefined(o)||!l.isDefined(c)||!l.isDefined(u)||!l.isDefined(d))continue;const m=d>=0;if(Math.abs(d)===0)continue;const h=Or(a,t),p={yMin:s,yMax:o},f=r.get(h);if(f===void 0){r.set(h,{total:d,topPositive:m?p:null,bottomNegative:m?null:p,anchorXMin:c,anchorXMax:u});continue}f.total+=d,m?(f.topPositive===null||o>f.topPositive.yMax)&&(f.topPositive=p):(f.bottomNegative===null||s<f.bottomNegative.yMin)&&(f.bottomNegative=p)}const n=[];for(const[a,i]of r){const s=i.topPositive??i.bottomNegative;s!==null&&n.push({xKey:a,total:i.total,anchor:{xMin:i.anchorXMin,xMax:i.anchorXMax,yMin:s.yMin,yMax:s.yMax,direction:i.topPositive!==null?"positive":"negative"}})}return n},hp=class extends ve{constructor(e){super(),this.container=e}dependencies(){return[]}compileLayer(e){const t=this.container.geomRegistry.get(e.geom),r={};if(t.summaries.stackTotals){const n=mp({layer:e});n!==void 0&&(r.stackTotals=n)}if(t.summaries.grandTotal){const n=dp({layer:e});n!==void 0&&(r.grandTotal=n.grandTotal,r.absoluteGrandTotal=n.absoluteGrandTotal)}return{...e,summary:r}}},pp=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)}},qn={color:"categorical",size:"numeric",alpha:"numeric",strokeWidth:"numeric",lineType:"categorical"},fp=["color","size","alpha","strokeWidth","lineType"],gp=class extends ve{dependencies(e){return fp.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 s=l.extractConstantValue(e.mapping[a]);if(s!==void 0){r=r.deriveVariable(i,qn[a],()=>s);continue}const o=l.extractVariableName(e.mapping[a]),c=t.scales[a];if(!c||c.kind!=="visual")continue;const u=yp(o,c);u&&(r=r.deriveVariable(i,qn[a],u))}return{...e,data:r}}},yp=(e,t)=>e?r=>l.isDefined(r[e])?t.map(r[e]):null:null;function vp(e=new Ye){return{diagnostics:new Mh,geomRegistry:e}}var qi=class{constructor(e,t,r,n,a,i,s,o,c,u,d,m,h,p,f,g){this.container=e,this.dataCompiler=t,this.specCompiler=r,this.transformCompiler=n,this.constantMappingCompiler=a,this.layerPhasedCompiler=i,this.scaleCompiler=s,this.coordCompiler=o,this.positionMapperCompiler=c,this.visualMapperCompiler=u,this.guideCompiler=d,this.summariseCompiler=m,this.stylesCompiler=h,this.highlightsCompiler=p,this.configCompiler=f,this.annotationsCompiler=g,this.lastCompile=null,this.lastDiagnostics=null,this.lastData=void 0,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:"highlights",getStats:()=>this.highlightsCompiler.stats},{name:"config",getStats:()=>this.configCompiler.stats},{name:"annotations",getStats:()=>this.annotationsCompiler.stats}]}compile(e){try{const t=this.runCompile(()=>(this.lastData=e.data,this.runPipeline({spec:this.specCompiler.compile({input:e.input,customPalettes:e.customPalettes??{},dataset:this.dataCompiler.compile(e.data)})})));return this.toOkResult(t)}catch(t){return this.toErrorResult(t)}}recompile(e){try{const t=this.runCompile(()=>{if(e.data===void 0)return this.runPipeline({spec:e.spec});this.lastData=e.data;const r=lu(e.spec.data,e.spec.mapping);return this.runPipeline({spec:I(e.spec,{data:this.dataCompiler.compile(e.data),mapping: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}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:[Za(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:s,getStats:o}of this.stages){const c=o();i[s]={hits:c.hits-t[s].hits,misses:c.misses-t[s].misses}}return this.lastCompile={stages:i,durationMs:a},n}runPipeline({spec:e}){return Vt({spec:e}).pipe(({spec:t})=>({spec:I(t,{data:this.transformCompiler.compile({data:t.data,transforms:t.transforms})})})).pipe(({spec:t})=>{const r=this.constantMappingCompiler.compile({data:t.data,mapping:t.mapping});return{spec:I(t,{data:r.data,mapping:r.mapping})}}).pipe(({spec:t})=>({layers:this.layerPhasedCompiler.compile({data:t.data,layers:t.layers,mapping:t.mapping,coords:t.coords,scales:t.scales})})).pipe(({spec:t,layers:r})=>this.coordCompiler.setup({coordSpec:t.coords,scales:t.scales,layers:r})).pipe(({layers:t,scales:r})=>({scales:this.scaleCompiler.compile({layers:t,scales:r})})).pipe(({spec:t,scales:r})=>({config:this.configCompiler.compile({config:t.config,scales:r})})).pipe(({layers:t,scales:r})=>({layers:this.positionMapperCompiler.compile({layers:t,scales:r})})).pipe(({layers:t,scales:r})=>({layers:this.visualMapperCompiler.compile({layers:t,scales:r})})).pipe(({spec:t,layers:r,coordSystem:n})=>({layers:this.coordCompiler.transform({coordSpec:t.coords,coordSystem:n,layers:r})})).pipe(({layers:t})=>({layers:this.summariseCompiler.compile({layers:t})})).pipe(({spec:t,scales:r,layers:n,coordSystem:a})=>({guides:this.guideCompiler.compile({scales:r,config:t.config,layers:n,coordSystem:a,originalData:this.lastData})})).pipe(({spec:t,layers:r})=>({layers:this.stylesCompiler.compile({layers:r,styles:t.styles,config:t.config})})).pipe(({spec:t,layers:r})=>({layers:this.highlightsCompiler.compile({layers:r,highlights:t.highlights,config:t.config})})).pipe(({spec:t,layers:r,coordSystem:n,scales:a})=>({annotations:this.annotationsCompiler.compile({annotations:t.annotations,layers:r,coordSystem:n,scales:a,config:t.config})})).result()}},bp=["data","transform","constantMapping","layer","coordSetup","scale","positionMapper","visualMapper","coordTransform","summarise","guide","styles","highlights","config","annotations"],Sp=({plugins:e=[]}={})=>{const t=wi(e),{geomRegistry:r,statRegistry:n,transformRegistry:a}=Dm(t),i=vp(r),s=new mh(i),o=new pp(a);for(const c of t.warnings)i.diagnostics.addWarning(c,{persistent:!0});return new qi(i,new l.DataCompiler,new Fi(i),o,new ou,new om(i,o,n,new im(i,o,new np(n),new Nu,new Mu(i),new Pm(new $m))),new jm(i,s),new du(new Ru),new qm(i),new gp,new qd(i),new hp(i),new ap(i),new em(i),new iu(i),new Uc(i))};function xp(e,t){return e.geom===t}function ji(...e){let t={},r;const[n,...a]=e;l.isDefined(n)&&!Ap(n)?(t=n,r=a):r=e;const i={mapping:t,layers:[],scales:[],transforms:[],highlights:[],config:{}};return r.reduce((s,o)=>Zi(s,o),i)}function Xi(e,...t){return t.reduce((r,n)=>Zi(r,n),e)}function Ap(e){return typeof e=="object"&&e!==null&&"type"in e}function Zi(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,mt.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 Ip(e,t);default:throw new l.InternalError({message:`Unknown spec item type: ${t.type}`})}}function Ip(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 Tp(e){const t=e?.plugins??[],r=wp(t);return{geom:{...l.geom,...r.geom},stat:{...l.stat,...r.stat},transform:{...l.transform,...r.transform},scale:l.scale,coord:l.coord,createSpec:ji,pipe:Xi,plugins:t}}var Lp=e=>(t={})=>l.buildLayerInput(e,t);function wp(e){const{geoms:t,stats:r,transforms:n}=wi(e),a={};for(const o of t)a[o.type]=Lp(o.type);const i={};for(const o of r)i[o.type]=()=>({type:o.type});const s={};for(const o of n)s[o.transformType]=c=>({type:"transform",transformType:o.transformType,options:c?.options});return{geom:a,stat:i,transform:s}}var Ep=24,Vp={header:{after:10,before:0},headline:{after:4,before:0},topLegend:{after:8,before:0},topAxisLabel:{after:8,before:0},topAxis:{after:0,before:0},bottomAxis:{after:4,before:0},bottomAxisLabel:{after:16,before:0},bottomLegend:{after:10,before:16},footer:{after:0,before:16}},Rp={leftLegend:{after:10,before:0},leftAxis:{after:4,before:0},rightAxis:{after:10,before:4}},qt="…",Ji=(e,t,r)=>{if(t<=0||e.length===0)return"";if(r(e)<=t)return e;if(r(qt)>t)return"";let n=0,a=e.length-1,i=0;for(;n<=a;){const s=n+a>>>1;r(e.slice(0,s)+qt)<=t?(i=s,n=s+1):a=s-1}return e.slice(0,i)+qt};var _={timeZone:"UTC"},P=e=>t=>{if(!l.isStrictTemporalDataValue(t))return"–";try{return e(t)}catch{return"n/a"}},ie=e=>t=>l.isStrictNumericDataValue(t)?e(t):"–",Gr=e=>t=>l.isStrictCategoricalDataValue(t)?t:"–",Cp=cr.default.humanizer({language:"en",spacer:"",delimiter:" ",languages:{en:{y:()=>"y",mo:()=>"mo",w:()=>"w",d:()=>"d",h:()=>"h",m:()=>"m",s:()=>"s",ms:()=>"ms"}}}),Qi=({valueFormat:e,locale:t,numberFormat:r,intlOptions:n})=>ie(a=>{const i=typeof r.decimals=="number"?r.decimals:2,s=Hr(a,i),{base:o,suffix:c}=Wr(a,r.abbreviation),u={...s,...l.isCurrencyValueFormat(e)?{style:"currency",currencyDisplay:"narrowSymbol",currency:e.iso}:{},...n};return`${Intl.NumberFormat(t,u).format(o)}${c}`}),es=({locale:e,numberFormat:t,intlOptions:r})=>ie(n=>{const{base:a,suffix:i}=Wr(n,t.abbreviation),s={...Hr(a,t.decimals),...r};return`${Intl.NumberFormat(e,s).format(a)}${i}`}),Ur=e=>ie(t=>Cp(t)),ts=({locale:e,intlOptions:t})=>ie(r=>Intl.NumberFormat(e,{maximumFractionDigits:0,...t}).format(r)),rs=({locale:e,numberFormat:t,intlOptions:r})=>ie(n=>{const a=Hr(n,t.decimals);return Intl.NumberFormat(e,{...a,...r,style:"percent"}).format(n)}),Wr=(e,t="none")=>{switch(t){case"none":return{base:e,suffix:""};case"auto":{const r=Dp(e);return Wr(e,r)}default:return{base:e/l.SUFFIX_MULTIPLIERS[t],suffix:t}}},Hr=(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}},Dp=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"},kp=({locale:e,intlOptions:t})=>P(r=>Intl.DateTimeFormat(e,{dateStyle:"medium",..._,...t}).format(r)),Pp=({locale:e,intlOptions:t})=>P(r=>{const n=Intl.DateTimeFormat(e,{dateStyle:"medium",timeStyle:"medium",..._,...t}).formatToParts(r);return Op(n.map(Mp))}),ns=({locale:e,intlOptions:t})=>P(r=>Intl.DateTimeFormat(e,{day:"numeric",month:"long",..._,...t}).format(r)),as=({locale:e,intlOptions:t})=>P(r=>Intl.DateTimeFormat(e,{month:"long",..._,...t}).format(r)),zr=({locale:e,intlOptions:t})=>P(r=>Intl.DateTimeFormat(e,{month:"short",year:"numeric",..._,...t}).format(r)),Kr=e=>P(t=>`Q${Math.floor(t.getUTCMonth()/3)+1} ${t.getUTCFullYear()}`),is=({locale:e,intlOptions:t})=>P(r=>{const n=(0,ka.addDays)(r,6);return Intl.DateTimeFormat(e,{day:"numeric",month:"long",..._,...t,year:void 0}).formatRange(r,n)}),ss=({locale:e,intlOptions:t})=>P(r=>{const n=(0,ka.addDays)(r,6);return Intl.DateTimeFormat(e,{dateStyle:"medium",..._,...t}).formatRange(r,n)}),Yr=({locale:e,intlOptions:t})=>P(r=>Intl.DateTimeFormat(e,{year:"numeric",..._,...t}).format(r)),os=({locale:e,intlOptions:t})=>P(r=>Intl.DateTimeFormat(e,{timeStyle:"short",..._,...t}).format(r)),Op=e=>e.map(t=>t.value).join(""),Mp=e=>e.type!=="literal"||e.value!==", "?e:{type:"literal",value:" • "},jn=1e3,_p=({valueFormat:e,locale:t,tickValues:r,intlOptions:n})=>ie(a=>{const i={...jr(a,r),notation:"compact",...l.isCurrencyValueFormat(e)?{style:"currency",currencyDisplay:"narrowSymbol",currency:e.iso}:{},...n};return qr(a,t,i)}),Np=({locale:e,tickValues:t,intlOptions:r})=>ie(n=>{const a={...jr(n,t),notation:"compact",...r};return qr(n,e,a)}),Bp=({locale:e,tickValues:t,intlOptions:r})=>ie(n=>{const a={...jr(n,t),notation:"compact",...r,style:"percent"};return qr(n,e,a)}),qr=(e,t,r)=>Intl.NumberFormat(t,r).formatToParts(e).map(n=>n.type==="compact"?n.value.toLowerCase():n.value).join(""),ls=e=>Math.abs(e)>jn?ls(e/jn):Number.isInteger(e),Fp=e=>{if(e.length<2)return!1;const[t,r]=e;return typeof t!="number"||typeof r!="number"?!1:Math.abs(r-t)<1},jr=(e,t)=>ls(e)?{minimumFractionDigits:0,maximumFractionDigits:0}:Fp(t)?{minimumFractionDigits:0,maximumFractionDigits:4}:{minimumFractionDigits:0,maximumFractionDigits:1},$p=({locale:e,intlOptions:t})=>P(r=>Intl.DateTimeFormat(e,{day:"numeric",month:"short",..._,...t}).format(r)),Gp=({locale:e,intlOptions:t})=>P(r=>Intl.DateTimeFormat(e,{month:"short",..._,...t}).format(r)),Up=({locale:e,intlOptions:t})=>P(r=>Intl.DateTimeFormat(e,{day:"numeric",month:"short",..._,...t}).format(r)),Wp=({locale:e,intlOptions:t})=>P(r=>Intl.DateTimeFormat(e,{timeStyle:"short",..._,...t}).format(r)),Xr=e=>{const{valueFormat:t}=e;switch(t.type){case"currency":return _p(e);case"date":case"datetime":return $p(e);case"day_month":case"weekly_date_range":case"weekly_date_range_with_year":return Up(e);case"decimal":case"integer":return Np(e);case"duration":return Ur(e);case"month":return Gp(e);case"month_year":return zr(e);case"percentage":return Bp(e);case"quarter":return Kr(e);case"text":return Gr(e);case"time":return Wp(e);case"year":return Yr(e);case"lookup":return Xr({...e,valueFormat:t.fallback});default:throw new l.InternalError({message:`Unhandled value format: ${t.type}`})}},Hp=.9,zp=1/3,Kp=1/4,Yp=e=>e.formattedAxis.position==="top"||e.formattedAxis.position==="bottom"?qp(e):jp(e),qp=({formattedAxis:e,bandwidthPx:t,panelRect:r,measureLabel:n})=>{const{widths:a,maxWidth:i,maxHeight:s}=cs(e.ticks,n),o=Xp(e.ticks,r.width),c=o*Hp;if(i<=c)return{...e,labelRotation:0,labelMaxWidthPx:null};if(o>=50){const d=yr(c);return{...e,ticks:gr(e.ticks,a,d,n),labelRotation:0,labelMaxWidthPx:d}}if(s+8>t)return{...e,ticks:[],labelRotation:0,labelMaxWidthPx:null};const u=yr(r.height*zp);return{...e,ticks:gr(e.ticks,a,u,n),labelRotation:-90,labelMaxWidthPx:u}},jp=({formattedAxis:e,bandwidthPx:t,panelRect:r,measureLabel:n})=>{const{widths:a,maxWidth:i,maxHeight:s}=cs(e.ticks,n);if(s>t)return{...e,ticks:[],labelRotation:0,labelMaxWidthPx:null};const o=yr(r.width*Kp);return i<=o?{...e,labelRotation:0,labelMaxWidthPx:null}:{...e,ticks:gr(e.ticks,a,o,n),labelRotation:0,labelMaxWidthPx:o}},Xp=(e,t)=>{const r=e[0],n=e[1];return r===void 0||n===void 0?t:Math.abs(n.position-r.position)*t},cs=(e,t)=>{const r=[];let n=0,a=0;for(const i of e){const{width:s,height:o}=t(i.formattedLabel);r.push(s),s>n&&(n=s),o>a&&(a=o)}return{widths:r,maxWidth:n,maxHeight:a}},gr=(e,t,r,n)=>{const a=i=>n(i).width;return e.map((i,s)=>(t[s]??0)<=r?i:{...i,formattedLabel:Ji(i.formattedLabel,r,a)})},yr=e=>Math.max(0,Math.floor(e)),Zp=(e,t,r,n)=>{if(e.length===0)return!0;const a=t==="top"||t==="bottom",i=a?60:40;let s=r-(e.length-1)*i;for(const o of e){const{width:c,height:u}=n(o);if(s-=a?c:u,s<0)return!1}return!0},Jp=({axis:e,availableSpacePx:t,measureLabel:r,resolveFormatter:n})=>{const{tickCandidates:a,position:i}=e;if(a.length===0)return[];const s=new Map,o=m=>{const h=s.get(m);if(h)return h;const p=a[m],f=p?Qp(p.ticks,n(p)):[];return s.set(m,f),f};let c=0,u=a.length-1,d=-1;for(;c<=u;){const m=c+u>>>1;Zp(o(m).map(h=>h.formattedLabel),i,t,r)?(d=m,c=m+1):u=m-1}return d>=0?o(d):o(0)},Qp=(e,t)=>e.map(r=>({...r,formattedLabel:t(r.value)})),Xn=.5,je=e=>({x:0,y:0,width:e.width,height:e.height}),Zr=e=>e==="panel-end"?"end":e==="panel-start"?"start":e,Xe=({box:e,panel:t,frame:r,placement:n,justify:a,align:i,offset:s,alignOffset:o,labelWidth:c,labelHeight:u})=>{const d=a==="panel-start"||a==="panel-end",m=(r.valueAxis==="x"?e.height:e.width)===0,h={anchor:tf(a,r.valueDirectionSign),placement:d?"inside":n,offset:s},p={anchor:rf(i),placement:m?n:"inside",offset:m?o??s:0},f=d?t:e,g=r.valueAxis==="x"?f:e,y=r.valueAxis==="y"?f:e,v=r.valueAxis==="x"?h:p,x=r.valueAxis==="x"?p:h,T=Jn(v,{min:g.x,max:g.x+g.width,halfExtent:c/2}),A=Jn(x,{min:y.y,max:y.y+y.height,halfExtent:u/2});return{x:T,y:A,position:ef(e,T,A,c,u)}},Zn=(e,t,r,n)=>r-n>=e-Xn&&r+n<=t+Xn,ef=(e,t,r,n,a)=>{if(e.width===0&&e.height===0)return"outside";const i=e.width===0||Zn(e.x,e.x+e.width,t,n/2),s=e.height===0||Zn(e.y,e.y+e.height,r,a/2);return i&&s?"inside":"outside"},tf=(e,t)=>e==="center"?"center":(e==="end"||e==="panel-end")==(t===1)?"max":"min",rf=e=>e==="center"?"center":e==="start"?"min":"max",Jn=({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 s=r+i;return e==="min"?t==="inside"?n+s:n-s:t==="inside"?a-s:a+s},nf=(e,t,r,n,a)=>{const i=t??e,s=1-Math.max(e,i);return{box:{x:r*n,y:s*a,width:0,height:Math.abs(e-i)*a},frame:{valueAxis:"y",valueDirectionSign:e>=i?-1:1}}},af=e=>{const t=[];if(!e.layer.dataLabels.showDataLabels)return t;const{offset:r}=e.layer.dataLabels,n=of(e.layer);for(const a of e.layer.data){const i=V(a),s=O(a)??E(a);if(i===null||s===null||!De(i,s))continue;const o=e.formatLabel(a);if(o==="")continue;const{width:c,height:u}=e.measureDataLabel("dataLabel",o),{box:d,frame:m}=nf(s,B(a),i,e.panelRect.width,e.panelRect.height),h=Xe({box:d,panel:je(e.panelRect),frame:m,...n,offset:r,labelWidth:c,labelHeight:u});t.push({layerId:e.layer.id,x:h.x,y:h.y,text:o,width:c,height:u,isRotated:!1,target:"observation",position:"outside"})}return t},sf={place:af,getPercentageValueStrategy:e=>e.position==="fill"?"fill":M(e.position)?"stack":"none"},of=e=>{const{position:t,justify:r,align:n}=e.dataLabels;return t==="auto"?{placement:"outside",justify:"end",align:"center"}:{placement:t,justify:kt(e.data,e.mapping)?Zr(r):r,align:n}},nt=6,lf=e=>{const t=[],r=M(e.layer.position),n=e.coordSystem.mainAxis==="y";if(e.layer.dataLabels.showDataLabels){const{entries:a,shouldRotate:i}=uf({layer:e.layer,mainAxis:e.coordSystem.mainAxis,panelRect:e.panelRect,measureDataLabel:e.measureDataLabel,formatLabel:e.formatLabel,isFlipped:n});for(const s of a){const o=e.layer.dataLabels.position==="auto"?hf({mainAxis:e.coordSystem.mainAxis,isStacked:r,isNegativeBar:s.isNegative,shouldRotate:i,bounds:s.bounds,labelWidth:s.labelWidth,labelHeight:s.labelHeight,panelWidth:e.panelRect.width,panelHeight:e.panelRect.height,offset:e.layer.dataLabels.offset}):pf(e.layer.dataLabels,e.coordSystem.mainAxis,r,s,je(e.panelRect));o!==null&&t.push({layerId:e.layer.id,x:o.x,y:o.y,text:s.text,width:s.labelWidth,height:s.labelHeight,isRotated:o.isRotated,target:"observation",position:o.position})}}if(e.layer.dataLabels.showCategoryLabels)for(const a of ff(e,r))t.push(a);if(e.layer.dataLabels.showStackTotals){const a=bf({layer:e.layer,mainAxis:e.coordSystem.mainAxis,panelRect:e.panelRect,measureDataLabel:e.measureDataLabel,formatAbsolute:e.formatAbsolute});for(const i of a)t.push(i)}return t},cf={place:lf,getPercentageValueStrategy:e=>e.position==="fill"?"fill":M(e.position)?"stack":"absoluteGrandTotal"},uf=({layer:e,mainAxis:t,panelRect:r,measureDataLabel:n,formatLabel:a,isFlipped:i})=>{const s=[];let o=!1;const c=l.extractVariableName(e.mapping.y);for(const u of e.data){const d=ds(t,u);if(d===null)continue;const m=a(u);if(m==="")continue;const{width:h,height:p}=n("dataLabel",m),f=Jr(d,r);h>f.width&&(o=!0);const g=c===null?null:u[c],y=l.isStrictNumericDataValue(g)&&g<0;s.push({isNegative:y,text:m,labelWidth:h,labelHeight:p,bounds:f})}return{entries:s,shouldRotate:!i&&o}},Jr=(e,t)=>({x:e.x*t.width,y:e.y*t.height,width:e.width*t.width,height:e.height*t.height}),us=(e,t,r,n,a)=>{if(e==="x"){let o=1-a,c=a-n;return c<0&&(o+=c,c=-c),{x:t,y:o,width:r-t,height:c}}let i=t,s=r-t;return s<0&&(i+=s,s=-s),{x:i,y:1-a,width:s,height:a-n}},ds=(e,t)=>{const r=K(t),n=Y(t),a=B(t),i=O(t)??E(t);return r===null||n===null||a===null||i===null?null:us(e,r,n,a,i)},df=(e,t)=>{const{xMin:r,xMax:n,yMin:a,yMax:i}=t.anchor;return us(e,r,n,a,i)},mf=(e,t)=>e==="x"?t?"bottom":"top":t?"left":"right",ms=(e,t,r)=>r?{width:t,height:e}:{width:e,height:t},hf=e=>e.isStacked?gf({bounds:e.bounds,labelWidth:e.labelWidth,labelHeight:e.labelHeight,isRotated:e.shouldRotate}):vf({edge:mf(e.mainAxis,e.isNegativeBar),bounds:e.bounds,labelWidth:e.labelWidth,labelHeight:e.labelHeight,isRotated:e.shouldRotate,panelWidth:e.panelWidth,panelHeight:e.panelHeight,offset:e.offset}),hs=(e,t)=>e==="x"?{valueAxis:"y",valueDirectionSign:t?1:-1}:{valueAxis:"x",valueDirectionSign:t?-1:1},pf=(e,t,r,n,a)=>{if(e.position==="auto")return null;const i=r&&e.position==="outside"?"inside":e.position,s=Xe({box:n.bounds,panel:a,frame:hs(t,n.isNegative),placement:i,justify:e.justify,align:e.align,offset:e.offset,labelWidth:n.labelWidth,labelHeight:n.labelHeight});return{x:s.x,y:s.y,isRotated:!1,position:s.position}},ff=(e,t)=>{const r=[],{categoryPosition:n,categoryJustify:a,categoryAlign:i,categoryOffset:s}=e.layer.dataLabels,o=t&&n==="outside"?"inside":n,c=e.coordSystem.mainAxis,u=je(e.panelRect),d=l.extractVariableName(e.layer.mapping.y);for(const m of e.layer.data){const h=ds(c,m);if(h===null)continue;const p=e.formatCategory(m);if(p===null||p==="")continue;const{width:f,height:g}=e.measureDataLabel("categoryLabel",p),y=Jr(h,e.panelRect),v=d===null?null:m[d],x=l.isStrictNumericDataValue(v)&&v<0,T=Xe({box:y,panel:u,frame:hs(c,x),placement:o,justify:a,align:i,offset:s,labelWidth:f,labelHeight:g});r.push({layerId:e.layer.id,x:T.x,y:T.y,text:p,width:f,height:g,isRotated:!1,target:"category",position:T.position})}return r},gf=({bounds:e,labelWidth:t,labelHeight:r,isRotated:n})=>{const a=ms(t,r,n);return a.width>e.width||a.height>e.height?null:{x:e.x+e.width/2,y:e.y+e.height/2,isRotated:n,position:"inside"}},yf=(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}}},vf=({edge:e,bounds:t,labelWidth:r,labelHeight:n,isRotated:a,panelWidth:i,panelHeight:s,offset:o})=>{const c=e==="top"||e==="bottom",u=t.x+t.width/2,d=t.y+t.height/2,m=ms(r,n,a),h=c?m.height:m.width,p=c?m.width:m.height,f=c?t.height:t.width,g=c?t.width:t.height,y=h/2,{edgeCoord:v,outwardSign:x,panelExtent:T}=yf(e,t,i,s);if(h+o<f){if(p>g)return null;if(a)return{x:u,y:d,isRotated:!0,position:"inside"};const N=v-x*(y+o);return{...c?{x:u,y:N}:{x:N,y:d},isRotated:!1,position:"inside"}}const A=v+x*(y+o);return A-y<0||A+y>T?null:{...c?{x:u,y:A}:{x:A,y:d},isRotated:a,position:"outside"}},bf=({layer:e,mainAxis:t,panelRect:r,measureDataLabel:n,formatAbsolute:a})=>{const i=[],s=e.summary.stackTotals;if(s===void 0||s.length===0)return i;const o=t==="y";for(const c of s){const u=Jr(df(t,c),r),d=a(c.total),{width:m,height:h}=n("stackTotal",d),p=c.anchor.direction==="positive";let f,g;o?(f=p?u.x+u.width+nt+m/2:u.x-nt-m/2,g=u.y+u.height/2):(f=u.x+u.width/2,g=p?u.y-nt-h/2:u.y+u.height+nt+h/2),i.push({layerId:e.id,x:f,y:g,text:d,width:m,height:h,isRotated:!1,target:"aggregate",position:"outside"})}return i},Sf=e=>{const t=[];if(!e.layer.dataLabels.showDataLabels)return t;const{offset:r}=e.layer.dataLabels,n=Af(e.layer);for(const a of e.layer.data){const i=V(a),s=E(a);if(i===null||s===null||!De(i,s))continue;const o=e.formatLabel(a);if(o==="")continue;const{width:c,height:u}=e.measureDataLabel("dataLabel",o),d=Xe({box:{x:i*e.panelRect.width,y:(1-s)*e.panelRect.height,width:0,height:0},panel:je(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:o,width:c,height:u,isRotated:!1,target:"observation",position:d.position})}return t},xf={place:Sf,getPercentageValueStrategy:()=>"none"},Af=e=>{const{position:t,justify:r,align:n}=e.dataLabels;return t==="auto"?{placement:"outside",justify:"end",align:"center"}:{placement:t,justify:kt(e.data,e.mapping)?Zr(r):r,align:n}},If={color:wt,alpha:Ga,strokeWidth:hr,lineType:Ua,size:wr,borderWidth:hr},Qr=(e={})=>{const t=e.colorScheme??"light",r=new WeakMap;return{geomReaders:i=>{const s=r.get(i);if(s!==void 0)return s;const o=Tf(i.styles,t);return r.set(i,o),o},explain:(i,s,o,c)=>{if(c!==void 0){const h=Ue(i.styles.overrides,s,o,c,t);if(h!==void 0)return{value:h.value,tier:"override",origin:h.origin,state:c};const p=Ue(i.styles.defaults,s,o,c,t);if(p!==void 0)return{value:p.value,tier:"default",origin:p.origin,state:c}}const u=Ue(i.styles.overrides,s,o,void 0,t);if(u!==void 0)return{value:u.value,tier:"override",origin:u.origin};const d=ps(s,o);if(d!==void 0)return{value:d,tier:"data"};const m=Ue(i.styles.defaults,s,o,void 0,t);return m!==void 0?{value:m.value,tier:"default",origin:m.origin}:{value:void 0,tier:"unresolved"}}}},Tf=(e,t)=>({get:(n,a,i)=>{if(i!==void 0){const c=at(e.overrides,n,a,i,t);if(c!==void 0)return c;const u=at(e.defaults,n,a,i,t);if(u!==void 0)return u}const s=at(e.overrides,n,a,void 0,t);if(s!==void 0)return s;const o=ps(n,a);return o!==void 0?o:at(e.defaults,n,a,void 0,t)}}),at=(e,t,r,n,a)=>Ue(e,t,r,n,a)?.value,Ue=(e,t,r,n,a)=>{for(let i=e.length-1;i>=0;i--){const s=e[i];if(s===void 0||s.state!==n)continue;const o=s.declarations[t];if(o!==void 0&&Lf(s,r))return{value:wf(o,a),origin:s.origin}}},Lf=(e,t)=>e.matches===void 0?!0:t!==void 0&&e.matches(t),wf=(e,t)=>l.isLightDarkColor(e)?e[t]:e,ps=(e,t)=>{const r=If[e];if(!(r===void 0||t===void 0))return r(t)??void 0},Ef=e=>{const t=[];if(!e.layer.dataLabels.showDataLabels)return t;const{offset:r}=e.layer.dataLabels,n=Rf(e.layer),a=n.justify==="panel-start"||n.justify==="panel-end",i=Qr().geomReaders(e.layer);for(const s of e.layer.data){const o=V(s),c=E(s);if(o===null||c===null||!De(o,c))continue;const u=e.formatLabel(s);if(u==="")continue;const{width:d,height:m}=e.measureDataLabel("dataLabel",u),h=i.get("size",s)/2,p=Xe({box:{x:o*e.panelRect.width,y:(1-c)*e.panelRect.height,width:0,height:0},panel:je(e.panelRect),frame:{valueAxis:"y",valueDirectionSign:-1},...n,offset:a?r:r+h,alignOffset:r+h,labelWidth:d,labelHeight:m});t.push({layerId:e.layer.id,x:p.x,y:p.y,text:u,width:d,height:m,isRotated:!1,target:"observation",position:p.position})}return t},Vf={place:Ef,getPercentageValueStrategy:()=>"none"},Rf=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}};function en(e){return{startAngle:e[l.POSITION_VARIABLES.xMin],endAngle:e[l.POSITION_VARIABLES.xMax]}}function tn(e){return{innerRadius:e[l.POSITION_VARIABLES.yMin],outerRadius:e[l.POSITION_VARIABLES.yMax]??e[l.POSITION_VARIABLES.y]}}var Cf=" · ",jt=2,He=(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)},Df=({wedge:e,labelRadius:t,labelAngle:r,labelWidth:n,labelHeight:a})=>{const i=He("radial",r,n,a);if(!(t-i>=e.innerRadiusPx-jt&&t+i<=e.outerRadiusPx+jt)||t<=0)return!1;const s=Math.abs(e.endAngle-e.startAngle)/2,o=He("tangential",r,n,a)/t,c=jt/t;return Math.abs(r-e.midAngle)+o<=s+c},kf=({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,Pf=({wedge:e,isRadialBar:t,offset:r,labelWidth:n,labelHeight:a})=>t?{labelRadius:(e.innerRadiusPx+e.outerRadiusPx)/2,labelAngle:e.midAngle,position:"inside"}:{labelRadius:e.outerRadiusPx+r+He("radial",e.midAngle,n,a),labelAngle:e.midAngle,position:"outside"},Of=({wedge:e,placement:t,justify:r,align:n,offset:a,labelWidth:i,labelHeight:s})=>{const o=n==="start"?e.startAngle:n==="end"?e.endAngle:e.midAngle,c=a+He("radial",o,i,s);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 m=e.innerRadiusPx-c;u=m>=0?m:e.innerRadiusPx+c}let d=o;if(n!=="center"&&u>0){const m=He("tangential",o,i,s)/u;d=o+(n==="start"?1:-1)*m}return{labelRadius:u,labelAngle:d,position:Df({wedge:e,labelRadius:u,labelAngle:d,labelWidth:i,labelHeight:s})?"inside":"outside"}},Mf=e=>{const t=[];if(!e.layer.dataLabels.showDataLabels)return t;const{position:r,justify:n,align:a,offset:i,showCategoryLabels:s}=e.layer.dataLabels,o=e.coordSystem.bandAxis==="y",c=e.panelRect.width/2,u=e.panelRect.height/2,d=Math.min(e.panelRect.width,e.panelRect.height)/2;for(const m of e.layer.data){const{startAngle:h,endAngle:p}=en(m),{innerRadius:f,outerRadius:g}=tn(m);if(h===null||p===null||g===null)continue;const y=e.formatLabel(m);if(y==="")continue;const v=s?e.formatCategory(m):null,x=v===null?y:`${v}${Cf}${y}`,{width:T,height:A}=e.measureDataLabel("dataLabel",x),N={startAngle:h,endAngle:p,midAngle:(h+p)/2,innerRadiusPx:(f??0)*d,outerRadiusPx:g*d},{labelRadius:q,labelAngle:te,position:oe}=r==="auto"?Pf({wedge:N,isRadialBar:o,offset:i,labelWidth:T,labelHeight:A}):Of({wedge:N,placement:r,justify:Zr(n),align:a,offset:i,labelWidth:T,labelHeight:A}),L=c+Math.sin(te)*q,F=u-Math.cos(te)*q;r==="auto"&&!kf({x:L,y:F,labelWidth:T,labelHeight:A,panelRect:e.panelRect})||t.push({layerId:e.layer.id,x:L,y:F,text:x,width:T,height:A,isRotated:!1,target:"observation",position:oe})}return t},_f={place:Mf,getPercentageValueStrategy:()=>"absoluteGrandTotal"},Nf=e=>{const t=R({...e,valueFormat:e.valueFormat.fallback}),r={};for(const[a,i]of Object.entries(e.valueFormat.cases))r[a]=R({...e,valueFormat:i});const n=e.valueFormat.byVariable;return(a,i)=>{if(i===void 0||i[n]===void 0)return t(a);const s=l.getStableKey(i[n]),o=r[s];return o!==void 0?o(a,i):t(a)}},R=e=>{switch(e.valueFormat.type){case"currency":return Qi(e);case"date":return kp(e);case"datetime":return Pp(e);case"day_month":return ns(e);case"decimal":return es(e);case"duration":return Ur(e);case"integer":return ts(e);case"month":return as(e);case"month_year":return zr(e);case"percentage":return rs(e);case"quarter":return Kr(e);case"text":return Gr(e);case"weekly_date_range":return is(e);case"weekly_date_range_with_year":return ss(e);case"year":return Yr(e);case"time":return os(e);case"lookup":return Nf({...e,valueFormat:e.valueFormat});default:{const t=e.valueFormat;throw new l.InternalError({message:`Unhandled value format: ${t.type}`})}}};function rn({layer:e,numberFormat:t,locale:r}){return R({valueFormat:Na(e),locale:r,numberFormat:t})}var Bf=(e,t)=>{const r=l.extractVariableName(t.x);return r!==null&&r!==l.CONSTANT_VARIABLES.x?{read:Tt(e,t),variable:r}:{read:U,variable:l.GROUP_VARIABLES.group}},fs=({layer:e,coordSystem:t,axes:r,numberFormat:n,panelRect:a,measureDataLabel:i,formattingLocale:s,percentageValueStrategy:o})=>{const c=rn({layer:e,numberFormat:n,locale:s});return{layer:e,coordSystem:t,panelRect:a,measureDataLabel:i,formatLabel:Wf({layer:e,numberFormat:n,axes:r,locale:s,absoluteFormatter:c,percentageValueStrategy:o}),formatAbsolute:c,formatCategory:Ff({layer:e,numberFormat:n,locale:s})}},Ff=({layer:e,numberFormat:t,locale:r})=>{const{read:n,variable:a}=Bf(e.data,e.mapping),i=R({valueFormat:e.data.hasVariable(a)?e.data.getValueFormat(a):{type:"text"},locale:r,numberFormat:t});return s=>{const o=n(s);return o===null?null:i(o,s)}},$f=(e,t)=>{switch(t){case"stack":return Gf(e);case"fill":return Uf(e);case"absoluteGrandTotal":return()=>e.summary.absoluteGrandTotal??null;case"none":return()=>null}},Gf=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 s=a[t];if(s==null)return null;const o=r?.get(Or(a,t));return o===void 0?null:o.total}},Uf=e=>{const t=_e(e);return r=>{const n=B(r),a=O(r);if(!l.isStrictNumericDataValue(n)||!l.isStrictNumericDataValue(a))return null;const i=Math.abs(a-n);if(i===0)return null;const s=t(r);return l.isStrictNumericDataValue(s)?s/i:null}},Wf=({layer:e,numberFormat:t,axes:r,locale:n,absoluteFormatter:a,percentageValueStrategy:i})=>{const s=W(e.data,e.dataLabels.labelSource),o=$f(e,i),c=Hf({layer:e,numberFormat:t,axes:r,locale:n,absoluteFormatter:a}),u=R({valueFormat:{type:"percentage"},locale:n,numberFormat:t}),d=e.dataLabels.format==="percentage"&&gs(e);return m=>{const h=s(m);if(h===null)return"";if(!d||!l.isStrictNumericDataValue(h))return c(h,m);const p=o(m);return p===null||p===0?c(h,m):u(h/p)}},Hf=({layer:e,numberFormat:t,axes:r,locale:n,absoluteFormatter:a})=>{const i=e.dataLabels.labelSource,s=l.extractVariableName(i);if(s!==null){if(gs(e))return a;const o=zf(e,r,t,n,s);if(o!==null)return o}return R({valueFormat:Kf(e.data,i),locale:n,numberFormat:t})},gs=e=>{const t=l.extractVariableName(e.dataLabels.labelSource);return t===null?!1:t===l.extractVariableName(Lt(e.position,e.mapping))},zf=(e,t,r,n,a)=>{const i=l.extractVariableName(e.mapping.x);if(i===null||i!==a)return null;const s=t.find(o=>o.scaleAestheticKey==="x");return s===void 0?null:R({valueFormat:s.valueFormat,locale:n,numberFormat:r})},Kf=(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)},nn={bar:{cartesian:cf,polar:_f},line:{cartesian:xf},point:{cartesian:Vf},area:{cartesian:sf}},Yf=(e,t)=>nn[e]?.[t]!==void 0,qf=({layers:e,coordSystem:t,axes:r,numberFormat:n,parsingLocale:a,panelRect:i,measureDataLabel:s,formattingLocale:o,plotBottomY:c,isFooterChromeReserved:u})=>{const d=[],m=o??a,h=t.type;for(const p of e){if(!p.dataLabels.showDataLabels&&!p.dataLabels.showStackTotals&&!p.dataLabels.showCategoryLabels)continue;const f=p.geom,g=nn[f]?.[h];if(g===void 0)continue;const y=fs({layer:p,coordSystem:t,axes:r,numberFormat:n,panelRect:i,measureDataLabel:s,formattingLocale:m,percentageValueStrategy:g.getPercentageValueStrategy(p)}),v=g.place(y);for(const x of v)jf(x,h,c,u)||d.push(x)}return{labels:d}},jf=(e,t,r,n)=>t==="polar"&&n&&e.position==="outside"&&e.y+e.height/2>r;function*Xf({layers:e,coordSystem:t,axes:r,numberFormat:n,panelRect:a,measureDataLabel:i,locale:s}){if(!(t.type!=="cartesian"||a.width<=0||a.height<=0))for(const o of e){if(!o.dataLabels.showDataLabels&&!o.dataLabels.showStackTotals)continue;const c=nn[o.geom]?.cartesian;if(c===void 0)continue;const u=fs({layer:o,coordSystem:t,axes:r,numberFormat:n,panelRect:a,measureDataLabel:i,formattingLocale:s,percentageValueStrategy:c.getPercentageValueStrategy(o)});for(const d of c.place(u))yield{x:a.x+d.x-d.width/2,y:a.y+d.y-d.height/2,width:d.width,height:d.height}}}var Xt={abbreviation:"none",decimals:"auto"},ys=({locale:e,kind:t,startValue:r,endValue:n,valueFormat:a})=>{if(r===null||n===null)return"n/a";switch(t){case"absolute-difference":return R({valueFormat:a,locale:e,numberFormat:Xt,intlOptions:{signDisplay:"always"}})(n-r);case"relative-difference":{const i=n-r;if(i===0)return"0%";const s=i/r;return s===Number.POSITIVE_INFINITY?"∞":s===Number.NEGATIVE_INFINITY?"-∞":R({valueFormat:{type:"percentage"},locale:e,numberFormat:Xt,intlOptions:{signDisplay:"always"}})(s)}case"proportion":{if(n-r===0)return"=";const i=n/r;return i===Number.POSITIVE_INFINITY?"∞":i===Number.NEGATIVE_INFINITY?"-∞":`${R({valueFormat:{type:"decimal"},locale:e,numberFormat:Xt,intlOptions:{maximumFractionDigits:1}})(i)}x`}}},Zt=6,Jt=6,Qt=15,er=5,tr=15,vs=(e,t)=>{switch(e){case"small":return{arrowStartGap:Zt,arrowEndGap:Jt,offsetFromHigherObservation:Qt,arrowheadSize:er,curveRadius:tr,strokeWidth:2,labelLineHeight:12*t,labelPaddingX:6,labelPaddingY:3,labelStrokeWidth:1,labelFontWeight:500};case"medium":return{arrowStartGap:Zt*1.5,arrowEndGap:Jt*1.5,offsetFromHigherObservation:Qt*1.25,arrowheadSize:er*1.5,curveRadius:tr*1.25,strokeWidth:3,labelLineHeight:16*t,labelPaddingX:8,labelPaddingY:4,labelStrokeWidth:1.5,labelFontWeight:500};case"large":return{arrowStartGap:Zt*2,arrowEndGap:Jt*2,offsetFromHigherObservation:Qt*1.75,arrowheadSize:er*2.5,curveRadius:tr*1.5,strokeWidth:5,labelLineHeight:20*t,labelPaddingX:10,labelPaddingY:5,labelStrokeWidth:2,labelFontWeight:600}}},Zf=(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},Jf=(e,t,r,{arrowStartGap:n,arrowEndGap:a,curveRadius:i})=>{const s={x:e.x,y:e.y-n},o={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 lc=Object.create,Ca=Object.defineProperty,cc=Object.getOwnPropertyDescriptor,uc=Object.getOwnPropertyNames,dc=Object.getPrototypeOf,mc=Object.prototype.hasOwnProperty,hc=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(var a=uc(t),i=0,s=a.length,o;i<s;i++)o=a[i],!mc.call(e,o)&&o!==r&&Ca(e,o,{get:(c=>t[c]).bind(null,o),enumerable:!(n=cc(t,o))||n.enumerable});return e},Da=(e,t,r)=>(r=e!=null?lc(dc(e)):{},hc(t||!e||!e.__esModule?Ca(r,"default",{value:e,enumerable:!0}):r,e));const l=require("./config.types-DPdholZ2.cjs");let ka=require("date-fns"),xt=require("lodash-es"),Fe=require("d3-time"),pc=require("date-fns/differenceInDays"),le=require("d3-regression"),Z=require("d3-scale"),Re=require("d3-interpolate"),D=require("d3-scale-chromatic"),mt=require("lodash-es/merge");mt=Da(mt,1);let cr=require("humanize-duration");cr=Da(cr,1);let pe=require("d3-shape"),Vn=require("color2k"),fc=require("d3-delaunay");typeof window<"u"&&(window.__GRAPHY_SDK__??={},window.__GRAPHY_SDK__.vizEngine="1.8.1-beta.1786354953172");var gc=1e6;function z(e){return String(Math.round(e*gc))}var Rn=0;function k(){return Rn+=1,`${Math.random().toString(36).slice(2,6)}${Rn.toString(36)}`}function V(e){return e[l.POSITION_VARIABLES.x]}function E(e){return e[l.POSITION_VARIABLES.y]}function K(e){return e[l.POSITION_VARIABLES.xMin]}function Y(e){return e[l.POSITION_VARIABLES.xMax]}function B(e){return e[l.POSITION_VARIABLES.yMin]}function O(e){return e[l.POSITION_VARIABLES.yMax]}function Tr(e){return e[l.POSITION_VARIABLES.yRaw]}function yc(e,t){return e[l.resolveScaledAestheticVariable(t)]}var vc={xMin:0,xMax:1,yMin:0,yMax:1},ur=(e,t)=>{if(t.type==="polar")return null;const r=K(e)??V(e),n=Y(e)??V(e),a=B(e)??E(e),i=O(e)??E(e);return r===null||n===null||a===null||i===null?null:{xMin:r,xMax:n,yMin:a,yMax:i}},ze=(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}}},Pa=e=>ze(vc,e),ye=e=>{const t=l.extractVariableName(e.mapping.x);return t!==null&&t!==l.CONSTANT_VARIABLES.x?t:l.GROUP_VARIABLES.group},Oa=(e,t)=>e.yScaleType===t.yScaleType&&mr(e.valueFormat)===mr(t.valueFormat),dr=e=>`${e.yScaleType} y axis, ${mr(e.valueFormat)}`,mr=e=>e.type==="currency"?`${e.type}:${e.iso}`:e.type,bc=(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};function Ce(e,t){return e==="x"?t.x:t.y}function At(e,t){return e==="x"?t.y:t.x}function Sc(e,t){return{main:Ce(e,t),cross:At(e,t)}}function Cn(e,t){return e==="x"?{x:t.main,y:t.cross}:{x:t.cross,y:t.main}}function xc(e){return e.type==="cartesian"}var U=e=>e[l.GROUP_VARIABLES.group],It=(e,t)=>{const r=ye(e),n=t[r]??null;if(n===null)return null;const a=r===l.GROUP_VARIABLES.group?null:U(t);return{layerId:e.id,anchorValue:n,...a!==null&&{groupValue:a}}},De=(e,t)=>e>=0&&e<=1&&t>=0&&t<=1,Ac={type:"decimal"};function Ma(e){return e.length>0&&e.every(t=>t.data.size()===0)}function _a(e,t){return t!==null&&e.data.hasVariable(t)?e.data.getValueFormat(t):Ac}function Na(e){return _a(e,l.extractVariableName(e.mapping.y))}var Lr=["solid","dashed","dotted"],Ba=e=>Lr.includes(e);function M(e){return e==="stack"||e==="fill"}var W=(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},Tt=(e,t)=>W(e,t.x),Fa=(e,t)=>W(e,t.y),Ic=(e,t)=>W(e,t.label),$a=(e,t)=>W(e,t.color),Tc=(e,t)=>W(e,t.size),Lc=(e,t)=>W(e,t.alpha),wc=(e,t)=>W(e,t.group),Ec=(e,t)=>W(e,t.strokeWidth),Dn={variable:l.POSITION_VARIABLES.yRaw};function Lt(e,t){return M(e)?Dn:t.y??Dn}function _e(e){return W(e.data,Lt(e.position,e.mapping))}function wt(e){return e[l.VISUAL_VARIABLES.color]}function Ga(e){return e[l.VISUAL_VARIABLES.alpha]}function wr(e){return e[l.VISUAL_VARIABLES.size]}function hr(e){return e[l.VISUAL_VARIABLES.strokeWidth]}function Ua(e){return e[l.VISUAL_VARIABLES.lineType]}var pr=(e,t,r)=>{const n=l.parseValue(e,t,r);return n!==null||!l.isTemporalValueFormat(t)?n:l.readISOInstant(e)},Wa=(e,t)=>{const r=l.toExplicitValueFormat(e.data.getValueFormat(ye(e)));return n=>({...n,anchorValue:pr(n.anchorValue,r,t),...n.groupValue!==void 0&&{groupValue:pr(n.groupValue,l.toExplicitValueFormat(e.data.getValueFormat(l.GROUP_VARIABLES.group)),t)}})},Ha=e=>{const t=l.extractVariableName(e.mapping.y),r=_e(e);return(n,a)=>t!==null&&a===t?r(n):n[a]??null},Vc=["lt","lte","gt","gte","range"],Rc={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"}},Q=()=>!1,xe=()=>!0;function Et(e,t){return{hasVariable:r=>e.data.hasVariable(r),getType:r=>e.data.getType(r),getValueFormat:r=>e.data.getValueFormat(r),readValue:Ha(e),parsingLocale:t}}function ue(e,t){if("and"in e){const r=e.and.map(n=>ue(n,t)).filter(n=>n!==xe);return r.includes(Q)?Q:r.length===0?xe:n=>{for(const a of r)if(!a(n))return!1;return!0}}if("or"in e){const r=e.or.map(n=>ue(n,t)).filter(n=>n!==Q);return r.includes(xe)?xe:r.length===0?Q:n=>{for(const a of r)if(a(n))return!0;return!1}}if("not"in e){const r=ue(e.not,t);return r===Q?xe:r===xe?Q:n=>!r(n)}return Dc(e,t)}function de(e,t,r="highlight"){return"and"in e?e.and.flatMap(n=>de(n,t,r)):"or"in e?e.or.flatMap(n=>de(n,t,r)):"not"in e?de(e.not,t,r):Cc(e,t,r)}function Cc(e,t,r){const{subject:n,effect:a}=Rc[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=kc(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 Dc(e,t){if(!t.hasVariable(e.variable))return Q;const r=l.toExplicitValueFormat(t.getValueFormat(e.variable)),n=a=>pr(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 s=t.readValue(i,e.variable);for(const o of a)if(l.areDataValuesEqual(s,o))return!0;return!1}}if("lt"in e){const a=n(e.lt);return i=>Ae(t.readValue(i,e.variable),a)==="less"}if("lte"in e){const a=n(e.lte);return i=>{const s=Ae(t.readValue(i,e.variable),a);return s==="less"||s==="equal"}}if("gt"in e){const a=n(e.gt);return i=>Ae(t.readValue(i,e.variable),a)==="greater"}if("gte"in e){const a=n(e.gte);return i=>{const s=Ae(t.readValue(i,e.variable),a);return s==="greater"||s==="equal"}}if("range"in e){const[a,i]=e.range,s=n(a),o=n(i);return c=>{const u=t.readValue(c,e.variable),d=Ae(u,s),m=Ae(u,o);return d==="incomparable"||m==="incomparable"?!1:(d==="greater"||d==="equal")&&(m==="less"||m==="equal")}}return Q}function kc(e){for(const t of Vc)if(t in e)return t;return null}function Ae(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 Pc=(e,t,r,n,a,i)=>{const s=Ka(e,t,r.predicate,n,a,i);if(s===null)return null;const o=za(r.padding),c=o===null?_c(s,r.padding):s,u={x:c.xMin,y:c.yMin,width:Math.max(0,c.xMax-c.xMin),height:Math.max(0,c.yMax-c.yMin)};return o===null?u:{...u,defer:o}},Oc=(e,t,r,n,a,i)=>{const s=Ka(e,t,r.predicate,n,a,i);return s===null?null:ze(s,r.align)},za=e=>e===void 0||typeof e=="number"||e.unit!=="px"?null:{type:"px-offset",x:e.x??0,y:e.y??0},Ka=(e,t,r,n,a,i)=>{if(t.has(r))return t.get(r)??null;let s=null,o=!1;const c=new Map;for(const u of n){const d=de(r,u.data,"selection-anchor");if(d.length>0){for(const p of d)c.set(`${p.code}:${p.message}`,p);continue}o=!0;const{resolveAnchorBox:m}=e.geomRegistry.get(u.geom);if(m===void 0)continue;const h=ue(r,Et(u,i));if(h!==Q)for(const p of u.data){if(!h(p))continue;const f=m(p,a);f!==null&&(s=s===null?f:Mc(s,f))}}if(!o)for(const u of c.values())e.diagnostics.addWarning(u);return t.set(r,s),s},Mc=(e,t)=>({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)}),_c=(e,t)=>{if(t===void 0)return e;const{x:r=0,y:n=0}=typeof t=="number"?{x:t,y:t}:t;return{xMin:e.xMin-r,xMax:e.xMax+r,yMin:e.yMin-n,yMax:e.yMax+n}},ht=(e,t,r)=>{const n=Bc(e,t,r);return n===null?null:n.defer?.type==="annotation-ref"?n:Fc(n,t.offset,e.coordSystem)},Ya=(e,t)=>t.anchorType==="selection"?Pc(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},Er=(e,t,r)=>fr(e,t,r)?.point??null,fr=({container:e,layers:t,coordSystem:r,parsingLocale:n},a,i)=>{for(const s of t){const{resolveAnchorPosition:o}=e.geomRegistry.get(s.geom);if(o===void 0||a.layerId!==void 0&&s.id!==a.layerId||a.layerId===void 0&&!s.interactive)continue;const c=_e(s),u=ye(s),{anchorValue:d,groupValue:m}=Wa(s,n)(a);let h=-1;for(const p of s.data){if(h+=1,!l.areDataValuesEqual(p[u]??null,d)||m!==void 0&&!l.areDataValuesEqual(U(p),m))continue;const f=o(p,{coordSystem:r,position:s.position,purpose:i,align:a.align});if(f===null)continue;const g=qa(s,p,c);if(g===null)continue;const y=It(s,p);if(y!==null)return{point:{...f,...g,anchor:a.align===void 0?y:{...y,align:a.align}},layerId:s.id,observationIndex:h}}}return null},Nc=(e,t)=>{const{layers:r,coordSystem:n,scales:a,parsingLocale:i}=e;if(n.type!=="cartesian")return null;const s=a.x,o=a.y;if(s===void 0||o===void 0||s.kind!=="position"||o.kind!=="position")return null;const c=Pn(t.x,"x",r,i),u=Pn(t.y,"y",r,i);if(c===null||u===null)return null;const d=s.map(c),m=o.map(u);if(!De(d,m))return null;const h=kn(d,s,$c(e)),p=kn(m,o),f=Cn(n.mainAxis,{main:h.min,cross:p.min}),g=Cn(n.mainAxis,{main:h.max,cross:p.max});return ze({xMin:f.x,xMax:g.x,yMin:f.y,yMax:g.y},t.align??"center")},qa=(e,t,r)=>{const n=r(t);return l.isStrictNumericDataValue(n)?{geom:e.geom,measurementValue:n,valueFormat:bc(Na(e),t),yScaleType:e.yScaleType,color:wt(t)}:null},Bc=(e,t,r)=>{switch(t.anchorType){case"panel":return{x:t.x,y:1-t.y};case"axis":return Nc(e,t);case"selection":return Oc(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 Er(e,Gc(t),r)}},Fc=(e,t,r)=>{if(t===void 0||r.type==="polar")return e;const n=za(t);return n!==null?{...e,defer:n}:{...e,x:e.x+(t.x??0),y:e.y-(t.y??0)}},kn=(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}},$c=({container:e,layers:t})=>{let r=0;for(const n of t){const a=e.geomRegistry.get(n.geom).resolveBandFraction?.(n.params);a!==void 0&&(r=Math.max(r,a))}return r>0?r:1},Gc=e=>({layerId:e.layerId,anchorValue:e.anchorValue,groupValue:e.groupValue,align:e.align}),Pn=(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},Uc=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,s={container:this.container,layers:r,coordSystem:n,scales:a,selectionBoxCache:new Map,parsingLocale:i.parsingLocale},o={differenceArrows:Qc(s,t.differenceArrows),shapes:Kc(s,t.shapes),arrows:qc(s,t.arrows),textAnnotations:jc(s,t.textAnnotations),images:Yc(s,t.images),stickers:Xc(s,t.stickers),pinnedNumbers:Zc(s,t.pinnedNumbers),comments:Jc(s,t.comments)};return Wc(this.container,o),Hc(this.container,o),o}},ja=(e,t,r)=>e!==null?e:!l.areDataValuesEqual(t.anchor.groupValue??null,r.anchor.groupValue??null)||t.color===void 0||t.color!==r.color?null:t.color,J=(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."})},Wc=(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)}},Hc=(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 zc(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."})},zc=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},Kc=(e,t)=>{const r=[];for(const n of t){const a=Ya(e,n.region);if(a===null){J(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,fillColor:n.fillColor,fillOpacity:n.fillOpacity,strokeWidth:n.strokeWidth,strokeColor:n.strokeColor})}return r},Yc=(e,t)=>{const r=[];for(const n of t){const a=Ya(e,n.region);if(a===null){J(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,opacity:n.opacity})}return r},qc=(e,t)=>{const r=[];for(const n of t){const a=ht(e,n.start,"pin"),i=ht(e,n.end,"pin");if(a===null||i===null){J(e.container,"arrow",n.id,`has ${Xa(a,i)} resolving to nothing`);continue}r.push({id:n.id,start:a,end:i,color:n.color,thickness:n.thickness,startArrowheadStyle:n.startArrowheadStyle,endArrowheadStyle:n.endArrowheadStyle,lineStyle:n.lineStyle,hasStickerStyle:n.hasStickerStyle})}return r},jc=(e,t)=>{const r=[];for(const n of t){const a=ht(e,n.at,"pin");if(a===null){J(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,backgroundColor:n.backgroundColor,backgroundColorStyle:n.backgroundColorStyle})}return r},Xc=(e,t)=>{const r=[];for(const n of t){const a=ht(e,n.at,"pin");if(a===null){J(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},Zc=(e,t)=>{const r=[];for(const n of t){const a=Er(e,n.at,"pin");if(a===null){J(e.container,"pinnedNumber",n.id,"matches no observation");continue}r.push({id:n.id,at:a})}return r},Jc=(e,t)=>{const r=[];for(const n of t){const a=Er(e,n.at,"pin");if(a===null){J(e.container,"comment",n.id,"matches no observation");continue}r.push({id:n.id,at:a,content:n.content})}return r},Qc=(e,t)=>{if(e.coordSystem.type!=="cartesian"){for(const n of t)J(e.container,"differenceArrow",n.id,"needs a cartesian coord system");return[]}const r=[];for(const n of t){const a=fr(e,n.start,"value"),i=fr(e,n.end,"value");if(a===null||i===null){J(e.container,"differenceArrow",n.id,`has ${Xa(a,i)} matching no observation`);continue}if(a.layerId===i.layerId&&a.observationIndex===i.observationIndex){J(e.container,"differenceArrow",n.id,"has both ends on the same observation");continue}eu(e,n,a.point,i.point),r.push({id:n.id,start:a.point,end:i.point,color:ja(n.color,a.point,i.point),ownColor:n.color,size:n.size,label:n.label,labelCrossPosition:n.labelCrossPosition})}return r},Xa=(e,t)=>e===null&&t===null?"start and end anchors":e===null?"a start anchor":"an end anchor",eu=(e,t,r,n)=>{Oa(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:dr(r),actual:dr(n)},suggestion:"Point both ends at observations sharing one y scale and one unit, or label the arrow as a proportion."})};function Za(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 w(e,t){return Qa(e,t)}function I(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 Ja(e,t,r){if(e[t]===r)return e;const n=[...e];return n[t]=r,n}function Qa(e,t){let r=!1;const n={...e};for(const[a,i]of Object.entries(t)){const s=e[a];if(l.isPlainObject(i)&&l.isPlainObject(s)){const o=Qa(s,i);o!==s&&(n[a]=o,r=!0)}else i!==void 0&&i!==s&&(n[a]=i,r=!0)}return r?n:e}function Vt(e){return{pipe:t=>{const r=t(e);return Vt({...e,...r})},result:()=>e}}function tu(e,t,r){const n=au(r);return{...t,background:ru(e,t.background,n),border:nu(e,t.border,n)}}function ru(e,t,r){if(t.type==="tinted"){const n=t.color??r;return n?{type:"tinted",color:n}:(e.diagnostics.addWarning({code:"UNRESOLVABLE_COLOR",message:"Could not resolve a colour for the tinted background — falling back to the theme background.",suggestion:"Set an explicit background colour, or add a colour scale the tint can derive from."}),{type:"theme"})}return t}function nu(e,t,r){if(t.type==="tinted"||t.type==="gradient"){const n=t.color??r;return n?{...t,color:n}:(e.diagnostics.addWarning({code:"UNRESOLVABLE_COLOR",message:`Could not resolve a colour for the ${t.type} border — dropping the border.`,suggestion:"Set an explicit border colour, or add a colour scale the tint can derive from."}),{type:"none"})}return t}function au(e){const t=e.color,r=t?.domain[0];if(!r)return;const n=t.map(r);if(typeof n=="string")return n}var iu=class extends l.Stage{constructor(e){super(),this.container=e}dependencies(e){return[e.scales,e.config]}run(e){const{scales:t,config:r}=e;return{...r,appearance:tu(this.container,r.appearance,t)}}};function su(e,t="kind"){const r=new Map;r.set(t,[]);for(const a of e)for(const i of a.observations)for(const s of Object.keys(i))r.has(s)||r.set(s,[]);for(const a of e)for(const i of a.observations)for(const[s,o]of r)o.push(s===t?a.kind:i[s]??null);const n={};for(const[a,i]of r)n[a]={type:ei(i),values:i};return new l.Dataset(n)}function ei(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 ou=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,ei(a),a),r={...r,[n]:i}}return{data:t,mapping:r}}},lu=(e,t)=>{let r=t;for(const n of Object.keys(t)){const a=t[n];if(typeof a!="string")continue;const i=e.getConstant(a);i!==void 0&&(r={...r,[n]:a===l.CONSTANT_VARIABLES.x?"":{value:i.value}})}return r},ve=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)}},cu=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)}},uu=class extends ve{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}},du=class{constructor(e){this.setupStage=new cu(e),this.transformStage=new uu(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)}},mu=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}},hu=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:fu(e.scales,e.layers)}}transform(e){return e.layers.map(t=>yu(t))}},pu=[[l.POSITION_VARIABLES.x,l.POSITION_VARIABLES.y],[l.POSITION_VARIABLES.xMin,l.POSITION_VARIABLES.yMin],[l.POSITION_VARIABLES.xMax,l.POSITION_VARIABLES.yMax]],On=l.prefixInternalVariable("flipSwap"),fu=(e,t)=>gu(t)?e.map(r=>r.scaledAesthetic!=="x"||r.scaleType!=="continuous"&&r.scaleType!=="datetime"&&r.scaleType!=="discrete"?r:{...r,reverse:!r.reverse}):e,gu=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},yu=e=>{let t=e.data;for(const[r,n]of pu){const a=t.hasVariable(r),i=t.hasVariable(n);a&&i?t=t.renameVariable(r,On).renameVariable(n,r).renameVariable(On,n):a?t=t.renameVariable(r,n):i&&(t=t.renameVariable(n,r))}return{...e,data:t}},me=Math.PI*2,vu=8,bu=1e-9,ti=(e,t)=>Math.abs(t-e)>=me-bu,ke=e=>(e%me+me)%me,ri=(e,t,r)=>{if(ti(t,r))return!0;const n=ke(r-t);return ke(e-t)<=n},pt=(e,t)=>{const r=Math.abs(ke(e)-ke(t));return Math.min(r,me-r)},ni=(e,t,r)=>e*me+t+r,ft=(e,t)=>({x:t*Math.sin(e),y:t*Math.cos(e)}),ai=(e,t)=>({angle:ke(Math.atan2(e,t)),radius:Math.hypot(e,t)}),Vr=(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}},Rt=(e,t)=>{const{x:r,y:n}=Vr(e,t);return ai(r,n)};function ii(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 si=(e,t)=>ii(t.domain!==null&&t.domain.length>0?t.domain:e),Su=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=Iu(t,e.scales,e.layers),a=Lu(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=Au(r,n),i=wu(t);return e.layers.map(s=>Eu(t.theta==="y"?Vu(s):s,a,i))}},xu=[[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 Au(e,t){return r=>ni(r,e,t)}function Iu(e,t,r){const n=t.find(i=>i.scaledAesthetic===e.theta);if(n===void 0||n.scaleType!=="discrete")return 0;const a=Tu(n,e,r);return a===0?0:-Math.PI/a}function Tu(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 s of a.data.getValues(i))n.push(s)}return si(n,e).length}function Lu(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 wu(e){const{innerRadius:t}=e;return r=>t+r*(1-t)}function Eu(e,t,r){let n=e.data;return n=Ie(n,l.POSITION_VARIABLES.x,t),n=Ie(n,l.POSITION_VARIABLES.xMin,t),n=Ie(n,l.POSITION_VARIABLES.xMax,t),n=Ie(n,l.POSITION_VARIABLES.y,r),n=Ie(n,l.POSITION_VARIABLES.yMin,r),n=Ie(n,l.POSITION_VARIABLES.yMax,r),{...e,data:n}}function Ie(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 Vu(e){let t=e.data;for(const[r,n]of xu){const a=t.hasVariable(r),i=t.hasVariable(n);if(!a&&!i)continue;const s=a?t.getValues(r):null,o=i?t.getValues(n):null;s&&(t=t.addVariable(n,"numeric",s)),o&&(t=t.addVariable(r,"numeric",o))}return{...e,data:t}}var Ru=class extends l.Registry{constructor(){super("coord"),this.register("cartesian",new mu),this.register("flip",new hu),this.register("polar",new Su)}},Cu=new Set(["min","max","scalar"]),Du={x:{min:l.POSITION_VARIABLES.xMin,max:l.POSITION_VARIABLES.xMax},y:{min:l.POSITION_VARIABLES.yMin,max:l.POSITION_VARIABLES.yMax}};function ku(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 Pu(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 Ou(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=Du[a.axis][a.role];if(n.hasVariable(i))continue;const s=l.extractVariableName(r[a.aes]);!l.isDefined(s)||!n.hasVariable(s)||(n=n.addVariable(i,"numeric",n.getValues(s,{type:"numeric"})))}return n}var Mu=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:Ou(n.data,r.positionRoles,a)}}},oi=new Set(["x","y","ySecondary"]),Ct=new Set(["color","size","alpha","strokeWidth","lineType"]),Dt=e=>oi.has(e),Rr=e=>Ct.has(e),_u=e=>Dt(e)||Rr(e);function be(e){return e==="secondary"?"ySecondary":"y"}function li(e,t){return e==="y"?be(t):"x"}function $(e){return e==="ySecondary"?"y":e}var Ke=(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 Ct){const i=l.extractVariableName(t[a]);l.isDefined(i)&&(r.has(i)||e.hasVariable(i)&&e.getType(i)==="categorical"&&n.add(i))}return[...n]},kt=(e,t)=>e.hasVariable(l.GROUP_VARIABLES.group)?e.getValues(l.GROUP_VARIABLES.group,{distinct:!0,skipNulls:!0}).length>1:Ke(e,t).some(r=>e.getValues(r,{distinct:!0,skipNulls:!0}).length>1),Nu=class{compute({data:e,mapping:t}){const r=Ke(e,t);if(r.length===0)return{data:e.addConstantVariable(l.GROUP_VARIABLES.group,"categorical",null)};const n=e.size(),a=r.map(s=>e.getValues(s)),i=new Array(n);for(let s=0;s<n;s++)i[s]=l.getStableKey(a.map(o=>o[s]));return{data:e.addVariable(l.GROUP_VARIABLES.group,"categorical",i)}}},Bu=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},Fu=(e,t,r)=>{const n=fe(t,"color");return n===null?{}:(e?.columns??[]).some(a=>a.key===n)?{}:r};function fe(e,t){const r=$(t);for(const n of ci(t,e)){const a=l.extractVariableName(n.mapping[r]);if(l.isDefined(a))return a}return null}var Cr=(e,t)=>e===null?null:t[e]??e,$u=(e,t)=>e===null?null:t[String(e)]??null,ge=({layers:e,scaleType:t,variableName:r})=>{if(r===null)return Wt(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 Uu(i,t)?i:Wt(t)}return Wt(t)},Gu=(e,t)=>t!=="y"&&t!=="ySecondary"?!1:ci(t,e).some(r=>r.position==="fill");function ci(e,t){return e==="ySecondary"?t.filter(r=>r.yScaleType==="secondary"):e==="y"?t.filter(r=>r.yScaleType==="primary"):t}var Wt=e=>{switch(e){case"continuous":return{type:"decimal"};case"datetime":return{type:"date"};case"discrete":case"palette":case"identity":return{type:"text"}}},Uu=(e,t)=>{switch(t){case"continuous":return l.isNumericValueFormat(e);case"datetime":return l.isTemporalValueFormat(e);case"discrete":case"palette":case"identity":return!0}},Wu=[{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}],Mn={year:0,quarter:1,month:2,week:3,day:4,hour:5},Te=40,Hu=(e,t,r)=>{const n=r.unit==="quarter"?r.step*3:r.step;return qu(r.unit).range(e,new Date(t.valueOf()+1),n)},zu=({unit:e,step:t,start:r,stop:n})=>{const a=(0,pc.differenceInDays)(n,r);switch(e){case"hour":return 24*a/t>Te;case"day":return a/t>Te;case"week":return a/(7*t)>Te;case"month":return a/(30*t)>Te;case"quarter":return a/(90*t)>Te;case"year":return a/(365*t)>Te}},Ku=(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"}}},Yu=(e,t)=>{const r=ju(t);return r===null?!1:Mn[e]>Mn[r]},qu=e=>{switch(e){case"hour":return Fe.utcHour;case"day":return Fe.utcDay;case"week":return Fe.utcMonday;case"month":case"quarter":return Fe.utcMonth;case"year":return Fe.utcYear}},ju=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}},ui={left:"right",right:"left",top:"bottom",bottom:"top"},Xu={x:!0,y:!0,ySecondary:!1},Zu=20,_n=new Set(["top","bottom"]),Ju={type:"percentage"};function Qu(e,t){const{scales:r,config:n,layers:a,coordSystem:i,variableLabels:s,geomRegistry:o}=e;if(Ma(a))return[];if(i.type==="polar"&&i.bandAxis===null)return[];const c=rd(o,a,i.type,n),u=new Set(t.map(h=>h.position)),d=ad(di(n.axes.y.position,i.axisMapping.y.position),u),m=[];for(const h of oi){const p=r[h];if(!l.isDefined(p)||p.kind!=="position")continue;const f=ed({scaleAestheticKey:h,scale:p,config:n,layers:a,axisMapping:i.axisMapping,resolvedYPosition:d,gridOverrides:c,variableLabels:s});m.push(f)}return m}function ed(e){const{scaleAestheticKey:t,scale:r,config:n,layers:a,axisMapping:i,resolvedYPosition:s,gridOverrides:o,variableLabels:c}=e,u=$(t),{axisConfig:d,position:m,geometry:h}=nd(t,n,i,s),p=fe(a,t),f=Gu(a,t)?Ju:ge({layers:a,scaleType:r.spec.scaleType,variableName:p});return{scaleAestheticKey:t,aesthetic:u,position:m,geometry:h,label:td(d,p,c),isVisible:d.isVisible,tickCandidates:sd(r,f,d.ticks.mode),valueFormat:f,tickMode:d.ticks.mode,ticksVisible:d.ticks.isVisible,gridVisible:id(d,o,t),gridLineStyle:d.grid.lineStyle,gridLineWidth:d.grid.lineWidth,scaleType:r.spec.scaleType,bandwidth:r.bandwidth??void 0}}function td(e,t,r){return e.label?e.label:t?r[t]??null:null}function rd(e,t,r,n){const a=t.flatMap(o=>{const c=e.get(o.geom).grid[r];return c?[c]:[]}),i=a.some(o=>o.hideGridX),s=a.some(o=>o.hideGridY);return{x:{gridVisible:Nn(i,n.axes.x.grid.isVisible)},y:{gridVisible:Nn(s,n.axes.y.grid.isVisible)}}}function Nn(e,t){if(e&&t===null)return!1}function nd(e,t,r,n){switch(e){case"x":return{axisConfig:t.axes[e],position:di(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=ui[n],i=(0,xt.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 di(e,t){return _n.has(e)===_n.has(t)?e:t}function ad(e,t){return t.has(e)?ui[e]:e}function id(e,t,r){const{gridVisible:n}=r==="x"?t.x:t.y;return n??e.grid.isVisible??Xu[r]}var sd=(e,t,r)=>{const n=e.spec.scaleType==="continuous"||e.spec.scaleType==="datetime";if(r==="edges"&&n){const a=ld(e);if(a)return[a]}if(e.spec.scaleType==="continuous"){const a=new Set,i=[];for(let s=1;s<=Zu;s++){const o=e.generateTicks({count:s}),c=l.getStableKey(o);a.has(c)||(a.add(c),i.push({ticks:o.map(u=>Pe(e,u))}))}return i}return e.spec.scaleType==="datetime"?od(e,t):[{ticks:e.generateTicks().map(a=>Pe(e,a))}]},od=(e,t)=>{const[r,n]=e.domain;if(!l.isStrictTemporalDataValue(r)||!l.isStrictTemporalDataValue(n))return[{ticks:e.generateTicks().map(o=>Pe(e,o))}];const a=new Set,i=[],s=(o,c)=>{if(o.length===0)return;const u=l.getStableKey(o);a.has(u)||(a.add(u),i.push({ticks:o.map(d=>Pe(e,d)),valueFormat:c}))};for(const o of Wu)zu({...o,start:r,stop:n})||Yu(o.unit,t)||s(e.generateTicks({interval:o}),Ku(o,t));return s(e.generateTicks({atInputs:!0})),i.sort((o,c)=>o.ticks.length-c.ticks.length),i},ld=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:[Pe(e,r),Pe(e,n)]}},Pe=(e,t)=>({value:t,position:e.map(t)});function mi({scale:e,aesthetics:t,layers:r}){const n=cd({layers:r,aesthetics:t}),a=hi({layers:r,aesthetics:t});return e.domain.map(i=>({value:i,geom:n(i),owner:a(i)}))}function cd({layers:e,aesthetics:t}){const r=hi({layers:e,aesthetics:t}),n=e.find(i=>t.some(s=>l.isDefined(i.mapping[s]))),a=n?n.geom:"bar";return i=>{const s=r(i);return s?s.layer.geom:a}}function hi({layers:e,aesthetics:t,layerFilter:r}){const n=new Map;for(const[a,i]of e.entries()){if(r&&!r(i))continue;const s=t.find(c=>l.isDefined(i.mapping[c]));if(s===void 0)continue;const o=l.extractVariableName(i.mapping[s]);if(!(o===null||!i.data.hasVariable(o)))for(const c of i.data.getValues(o,{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 Dr=e=>{if(e.kind==="identity")return!1;const t=e.spec.scaleType;return t!=="continuous"&&t!=="datetime"};function ud({scales:e,layers:t,valueLabels:r}){const n=e.color;if(n===void 0||!Dr(n))return[];if(!t.some(o=>l.isDefined(o.mapping.color)))return[];const a=fe(t,"color");if(pi({colorVariableName:a,xVariableName:fe(t,"x"),mapsColorAcrossMultipleLayers:md(t)>1,isMergedWithAnotherAesthetic:dd(e,t,a)}))return[];const i=n.spec.scaleType,s=t.findIndex(o=>l.isDefined(o.mapping.color));return mi({scale:n,aesthetics:["color"],layers:t}).map(({value:o,geom:c,owner:u})=>{const d=u?.layerIndex??s,m=t[d],h=m?l.extractVariableName(m.mapping.color):null;return{value:o,color:String(n.map(o)),geom:c,layerIndex:d,valueFormat:ge({layers:m?[m]:t,scaleType:i,variableName:h}),label:$u(o,r)}})}var pi=({colorVariableName:e,xVariableName:t,mapsColorAcrossMultipleLayers:r,isMergedWithAnotherAesthetic:n})=>n?!1:e===null||l.isInternalVariable(e)?!r:t!==null&&e===t;function dd(e,t,r){if(r===null)return!1;for(const n of Ct){if(n==="color")continue;const a=e[n];if(!(a===void 0||!Dr(a))&&fe(t,n)===r)return!0}return!1}var md=e=>e.filter(t=>l.isDefined(t.mapping.color)).length;function fi(e,t){return e.get(t.geom).summaries.perGroupHeadline===!0}function hd(e,t,r,n){const a=r.findIndex(i=>fi(e,i));return a===-1?[]:t.length<2?[{value:null,swatch:null,layerIndex:a,groupLabelFormat:{type:"text"},label:Cr(l.extractVariableName(r[a]?.mapping.y),n)}]:t.map(i=>({value:i.value,swatch:{color:i.color,geom:i.geom},layerIndex:i.layerIndex,groupLabelFormat:i.valueFormat,label:i.label}))}function Bn(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 gi=e=>e==="none"?"first":e,pd=(e,t)=>{switch(t){case"total":{const{sum:r,count:n}=Fn(e);return n===0?null:r}case"average":{const{sum:r,count:n}=Fn(e);return n===0?null:r/n}case"current":return e.at(-1)??null}},fd=(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}},Fn=e=>e.reduce((t,r)=>r===null?t:{sum:t.sum+r,count:t.count+1},{sum:0,count:0});function gd(e){const{config:t,coordSystem:r}=e,n=t.headline.show;return n==="none"||n==="conversion"?null:r.type==="polar"?yd(e,n):vd(e,n)}function yd(e,t){if(t!=="total")return null;const{scales:r,layers:n}=e,a=n.find(o=>o.summary.grandTotal!==void 0);if(a===void 0)return null;const i=a.summary.grandTotal;if(i===void 0)return null;const s=l.extractVariableName(a.mapping.y);return s===null?null:{kind:"grandTotal",value:i,valueFormat:ge({layers:[a],scaleType:r.y?.spec.scaleType??"continuous",variableName:s})}}function vd(e,t){const{config:r,scales:n,layers:a,variableLabels:i,colorGroups:s,geomRegistry:o}=e;if(!a.some(d=>fi(o,d)))return null;const c=hd(o,s,a,i);if(c.length===0)return null;const u=c.map(d=>bd({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 bd({group:e,show:t,compareWith:r,layers:n,scales:a}){const i=n[e.layerIndex];if(i===void 0)return null;const s=l.extractVariableName(i.mapping.y);if(s===null||t==="total"&&i.position==="fill")return null;const o=l.extractVariableName(i.mapping.x),c=l.extractVariableName(i.mapping.color),u=i.yScaleType==="secondary"?a.ySecondary:a.y,d=ge({layers:[i],scaleType:u?.spec.scaleType??"continuous",variableName:s}),m=Ad(i.data,o),h=ge({layers:[i],scaleType:m?"datetime":a.x?.spec.scaleType??"discrete",variableName:o}),p=Id(i.data,o),f=p.getValues(s,{type:"numeric"}),g=o!==null?p.getValues(o):[],y=c!==null?p.getValues(c):null,v=Bn(f,y,e.value),x=Bn(g,y,e.value);return{value:e.value,swatch:e.swatch,aggregate:pd(v,t),valueFormat:d,groupLabelFormat:e.groupLabelFormat,mainValueFormat:h,label:e.label,observationLabel:Sd(t,m,x),comparison:xd(t,r,m,x,v)}}function Sd(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 xd(e,t,r,n,a){return e!=="current"||!r?null:fd(n.map((i,s)=>({main:i,cross:a[s]??null})),gi(t))}function Ad(e,t){return t!==null&&e.hasVariable(t)&&e.getType(t)==="temporal"}function Id(e,t){return t===null||!["numeric","temporal"].includes(e.getType(t))?e:e.orderBy(t)}function H(e,...t){return e?t.includes(e.geom):!1}function C(e,t){return e.find(r=>r.id===t)}function ne(e,...t){return e.find(r=>t.includes(r.geom))}function Td(e,...t){return e.filter(r=>t.includes(r.geom))}function kr(e,t){return e.interactive?!1:t.some(r=>r!==e&&l.areMappingsEquivalent(r.mapping,e.mapping))}function Pr(e){const t=e.filter(r=>!kr(r,e));return t.length>0?t:e}function yi({legendPosition:e,coordSystem:t,layers:r}){if(e!=="right"||t.type!=="cartesian"||t.mainAxis!=="x")return!1;const n=Pr(r);return n.length===1&&n[0]?.supportsDirectLabels===!0}var Ld=3;function wd({scales:e,config:t,layers:r,coordSystem:n,variableLabels:a,colorGroups:i,geomRegistry:s}){if(t.legend.position==="none")return{drawn:[],position:"none"};const o=new Map(i.map(y=>[l.getStableKey(y.value),y])),c=Od(Cd({scales:e,layers:r})),u=fe(r,"x"),d=c.map(y=>{if(kd(y,u,r))return null;const v=_d({group:y,variableLabels:a,layers:r,colorGroupsByValue:o});return v.items.length===0?null:{group:y,built:v}}).filter(l.isDefined),m=Ed(d),h=Pr(r),p=Ud(s,t.legend.position,m,h,n);if(d.length===0)return{drawn:[],position:p};if(t.legend.position==="auto"&&Gd(s,m,h,n))return{drawn:[],position:p};const f=Wd(t.legend.display,{legendPosition:p,coordSystem:n,layers:r}),g=f==="direct"?Yd(h[0]):null;return{drawn:d.map(({built:y})=>Vd(y,{position:p,display:f,align:t.legend.align},g)),position:p}}function Ed(e){return e.reduce((t,{group:r,built:n})=>t+(r.some(a=>a.guideType!=="discrete")?1:n.items.length),0)}function Vd(e,t,r){const{position:n,display:a}=t,i=Rd(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(s=>({...s,normalizedY:r.get(String(s.value))??null}))}}function Rd(e,t){return e!=="auto"?e:t==="top"||t==="bottom"?"start":"center"}function Cd(e){const{scales:t,layers:r}=e,n=[];for(const a of Ct){const i=t[a];if(i===void 0||i.kind==="identity"||!Dd(a,r))continue;const s=fe(r,a),o=Kd(a,i);n.push({scaleAestheticKey:a,scale:i,variableName:s,guideType:o})}return n}function Dd(e,t){const r=$(e);return t.some(n=>l.isDefined(n.mapping[r]))}function kd(e,t,r){const[n]=e;return n.scaleAestheticKey!=="color"?!1:pi({colorVariableName:n.variableName,xVariableName:t,mapsColorAcrossMultipleLayers:Pd(n.scaleAestheticKey,r),isMergedWithAnotherAesthetic:e.length>1})}function Pd(e,t){const r=$(e);return t.filter(n=>l.isDefined(n.mapping[r])).length>1}function Od(e){const t=new Map;for(const r of e){const n=zd(r),a=t.get(n);a?a.push(r):t.set(n,[r])}return[...t.values()]}function Md(e,t,r){if(t==="lineType"){e.lineType=r;return}if(t==="color"){e.color=String(r);return}e[t]=r}function _d({group:e,variableLabels:t,layers:r,colorGroupsByValue:n}){const a=e[0],i=e.map(c=>$(c.scaleAestheticKey)),s=mi({scale:a.scale,aesthetics:i,layers:r}),o=ge({layers:r,scaleType:a.scale.spec.scaleType,variableName:a.variableName});return{aesthetics:e.map(c=>c.scaleAestheticKey),title:Cr(a.variableName,t),items:s.map(c=>Nd(c,e,i,o,n))}}function Nd(e,t,r,n,a){const i={};for(const o of t)Md(i,o.scaleAestheticKey,o.scale.map(e.value));const s=Fd(e,t,r,n,a);return{value:e.value,label:Bd(t,e,a),visual:i,normalizedY:null,geom:e.geom,valueFormat:s}}function Bd(e,t,r){return e[0].scaleAestheticKey!=="color"?null:r.get(l.getStableKey(t.value))?.label??null}function Fd(e,t,r,n,a){if(t[0].scaleAestheticKey==="color")return a.get(l.getStableKey(e.value))?.valueFormat??n;const i=e.owner?.layer,s=$d(i,r);return i===void 0||s===null?n:ge({layers:[i],scaleType:t[0].scale.spec.scaleType,variableName:s})}function $d(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 Gd(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 Ud(e,t,r,n,a){if(t!=="auto")return t;if(a.type==="polar")return"top";let i=!1,s=!1,o=!1;for(const u of n){const{sidePlacement:d}=e.get(u.geom).legend;d==="whenCrowded"&&(i=!0),d==="whenStackedVertical"&&(s=!0,M(u.position)&&(o=!0))}const c=r>=Ld;return i&&s?"top":i?c?"right":"top":o?Hd(a)?"top":c?"right":"top":"top"}function Wd(e,t){return e==="pill"?"pill":yi(t)?"direct":"pill"}function Hd(e){return e.type==="cartesian"&&e.mainAxis==="y"}function zd(e){const t=e.scale.domain.map(l.getStableKey);return JSON.stringify([e.variableName,e.guideType,...t])}function Kd(e,t){return Dr(t)?"discrete":`continuous:${e}`}function Yd(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(O(c))||l.isDefined(E(c)));if(!n)return;const a=U(n);if(!l.isDefined(a))return;const i=B(n),s=O(n)??E(n);if(!l.isDefined(s))return;const o=l.isDefined(i)?(i+s)/2:s;t.set(String(a),o)}),t}var qd=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.config.panel,e.layers,e.coordSystem,e.originalData]}run(e){const t=Bu(e.originalData),r=ud({scales:e.scales,layers:e.layers,valueLabels:Fu(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=gd(n),i=wd(n),s={...i,drawn:Xd(a,i.drawn)};return{axes:Qu(n,s.drawn),legends:s,headline:a,panel:{border:jd(e.config.panel.border),cornerRadius:e.config.panel.cornerRadius},colorGroups:r,variableLabels:t}}},jd=e=>{const t=r=>({isVisible:e[r].isVisible,lineStyle:e[r].lineStyle,lineWidth:e[r].lineWidth,color:e[r].color});return{top:t("top"),right:t("right"),bottom:t("bottom"),left:t("left")}},Xd=(e,t)=>e?.kind!=="perGroup"||t.some(r=>r.display==="direct")?t:[],Zd=e=>l.getStableKey([U(e)]),Or=(e,t)=>l.getStableKey([t!==null?e[t]??null:null]),Jd=e=>e!=="data-point",gt=(e,t,r)=>{switch(e){case"series":return Zd(t);case"x-value":return Or(t,r)}},Qd={bar:"observation-rerender",rule:null,line:"overlay-anchor",area:"overlay-anchor",point:"overlay-anchor"};function vi(e){const t=Qd[e]??null;return t===null?null:{strategy:t,composition:bi()}}function bi(){return{isDimmed:!1,matchedLayer:null,overlayCandidates:[]}}var em=class extends ve{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=tm({layer:e,highlights:n,parsingLocale:t.config.parsingLocale,strategy:r.strategy,container:this.container});return{...e,highlight:{...r,composition:a}}}};function tm({layer:e,highlights:t,parsingLocale:r,strategy:n,container:a}){const i=t.filter(L=>{const F=de(L.predicate,e.data);for(const j of F)a.diagnostics.addWarning({...j,message:`${j.message} Dropping this highlight.`});return F.length===0}),s=l.extractVariableName(e.mapping.x),o=Et(e,r),c=i.map(L=>({predicate:ue(L.predicate,o),scope:L.scope})),u=c.some(({scope:L})=>L==="series"),d=c.some(({scope:L})=>L==="x-value"),m=n==="overlay-anchor",h=e.data.size(),p=u?new Array(h):null,f=d?new Array(h):null,g=m?new Array(h):null,y=new Uint8Array(h),v=new Set,x=new Set;let T=!1,A=0;for(const L of e.data){let F,j;p!==null&&(F=gt("series",L,s),p[A]=F),f!==null&&(j=gt("x-value",L,s),f[A]=j),g!==null&&(g[A]=L);for(const{predicate:tt,scope:rt}of c)if(tt(L))switch(rt){case"series":F!==void 0&&v.add(F);break;case"x-value":j!==void 0&&x.add(j);break;case"data-point":y[A]=1,T=!0;break}A++}if(v.size===0&&x.size===0&&!T)return bi();const N=new Uint8Array(h),q=[];let te=0;for(let L=0;L<h;L++){const F=p?.[L],j=f?.[L],tt=F!==void 0&&v.has(F),rt=j!==void 0&&x.has(j),wn=y[L]===1;if(n==="observation-rerender")(tt||wn||rt)&&(N[L]=1,te++);else if(tt)N[L]=1,te++;else if(wn||rt){const En=g?.[L];En!==void 0&&q.push({observation:En,observationIndex:L})}}const oe=te>0?{...e,data:e.data.filterByMask(N)}:null;return{isDimmed:(n==="observation-rerender"||v.size>0)&&oe!==null,matchedLayer:oe,overlayCandidates:q}}var rm=l.prefixInternalVariable("__ungrouped__");function nm(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"}),s=new Map,o=i.map((c,u)=>{if(c===null)return null;const d=r[u]??rm;let m=s.get(d);return m||(m=new l.ChronologicalDateManager,s.set(d,m)),m.incrementYearIfNeeded(c)});n=n.addVariable(a,"temporal",o)}return n}var am=()=>({defaults:[],overrides:[],warnings:[]}),im=class extends ve{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,$n(e)]}compileLayer(e,t){const r=this.transformCompiler.compile({data:t.data,transforms:e.transforms}),n={...t.mapping,...e.mapping};return this.runLayerPipeline(e,r,n,$n(t))}runLayerPipeline(e,t,r,n){const a=Vt({data:t,mapping:r}).pipe(({data:s,mapping:o})=>{const c=this.statCompiler.compute(e.stat,{data:s,mapping:o,xScaleIsDiscrete:n});return{data:c.data,mapping:{...o,...c.mapping}}}).pipe(({data:s,mapping:o})=>({data:this.groupCompiler.compute({data:s,mapping:o}).data,mapping:o})).pipe(({data:s,mapping:o})=>({data:nm(s),mapping:o})).pipe(({data:s,mapping:o})=>{const c=this.geomCompiler.compile(e.geom,{data:s,mapping:o,params:e.params});return{data:c.data,mapping:{...o,...c.mapping}}}).pipe(({data:s,mapping:o})=>{const c=this.positionAdjusterCompiler.adjust(e.position,{data:s,mapping:o});return{data:c.data,mapping:{...o,...c.mapping}}}).result(),i=this.container.geomRegistry.get(e.geom);return{...a,id:e.id,geom:e.geom,position:e.position,yScaleType:e.yScaleType,params:e.params,interactive:e.interactive,dataLabels:e.dataLabels,summary:{},spatialKind:i.spatialKind,identityKey:i.identityKey,tooltip:i.tooltip,supportsDirectLabels:i.legend.directLabelSupport?.[e.position]===!0,highlight:vi(e.geom),styles:am()}}};function $n(e){return e.scales.some(t=>t.scaledAesthetic==="x"&&t.scaleType==="discrete")}function Si(e,t){const[r]=t;if(r){for(const n of t)e.addError(n);throw new l.UserInputError(r)}}var sm=new Set(["label","group"]),om=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},s={layerId:r.id,layerIndex:n,geom:r.geom,stat:r.stat,effectiveMapping:i,data:a,coordType:e.coords.coordType,dataLabels:r.dataLabels};t.push(...this.validateLayer(s));const o=[...this.collectUndeclaredAesthetics(s),...this.collectPanelJustifyWarnings(s)];for(const c of o)this.container.diagnostics.addWarning(c)}),Si(this.container.diagnostics,t)}checkPostCompile(e){Ma(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)]}collectPanelJustifyWarnings({geom:e,effectiveMapping:t,data:r,layerIndex:n,coordType:a,dataLabels:i}){const{justify:s,showDataLabels:o}=i;if(!o||s!=="panel-start"&&s!=="panel-end")return[];if(a==="polar"||!this.container.geomRegistry.get(e).isComposite)return[];if(!kt(r,t))return[];const c=s==="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 '${s}' will render as '${c}'.`,context:{layerIndex:n,expected:c,actual:s},suggestion:`Use justify '${c}' for this layer.`}]}validateRequiredAesthetics({layerId:e,layerIndex:t,geom:r,stat:n,effectiveMapping:a}){const i=[],{positionRoles:s,aesthetics:o}=this.container.geomRegistry.get(r),c=[...ku(s),...o.filter(m=>m.required).map(m=>m.name)],{computedVariables:u}=this.statRegistry.get(n.type),d=u;for(const m of c)d.has(m)||l.isDefined(a[m])||i.push({code:"MISSING_AESTHETIC",message:`Layer '${e}': geom '${r}' requires aesthetic '${m}'`,context:{layerIndex:t,aesthetic:m}});return i}validateVariableExistence({layerId:e,layerIndex:t,geom:r,stat:n,effectiveMapping:a,data:i}){const s=[],{computedVariables:o}=this.statRegistry.get(n.type),{derivedVariables:c}=this.container.geomRegistry.get(r),u=o,d=new Set(c);for(const[m,h]of Object.entries(a)){if(u.has(m))continue;const p=l.extractVariableName(h);p===null||p===""||d.has(p)||i.hasVariable(p)||s.push({code:"UNKNOWN_VARIABLE",message:`Layer '${e}': aesthetic '${m}' references variable '${p}' which does not exist in the dataset`,context:{layerIndex:t,aesthetic:m,variableName:p}})}return s}validatePositionalAestheticTypes({layerId:e,layerIndex:t,geom:r,stat:n,effectiveMapping:a,data:i}){const{positionRoles:s}=this.container.geomRegistry.get(r),{computedVariables:o}=this.statRegistry.get(n.type),c=o,u=[];for(const d of s){if(!Cu.has(d.role)||!l.isDefined(d.aes)||c.has(d.aes)||d.role==="scalar"&&d.aes===d.axis)continue;const m=l.extractVariableName(a[d.aes]);if(m===null||!i.hasVariable(m))continue;const h=i.getType(m);h!=="numeric"&&u.push({code:"INCOMPATIBLE_TYPE",message:`Layer '${e}': aesthetic '${d.aes}' must be numeric, but variable '${m}' is ${h}`,context:{layerIndex:t,aesthetic:d.aes,variableName:m,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:s}=this.statRegistry.get(n.type);return i({mapping:a,computedVariables:s}).map(o=>({...o,message:`Layer '${e}': ${o.message}`,context:{...o.context,layerIndex:t}}))}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}}]}collectUndeclaredAesthetics({layerId:e,layerIndex:t,geom:r,stat:n,effectiveMapping:a}){const{positionRoles:i,aesthetics:s}=this.container.geomRegistry.get(r),{computedVariables:o}=this.statRegistry.get(n.type),c=new Set([...Pu(i),...s.map(h=>h.name)]),u=sm,d=o,m=[];for(const h of Object.keys(a))l.isDefined(a[h])&&(c.has(h)||u.has(h)||d.has(h)||m.push({code:"UNDECLARED_AESTHETIC",message:`Layer '${e}': geom '${r}' does not declare aesthetic '${h}'; the mapping is ignored`,context:{layerIndex:t,aesthetic:h}}));return m}},ae=class{constructor(){this.positionRoles=[],this.identityKey="x-group",this.defaultPosition="identity",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,xt.merge)({},this.defaultParams,e.params)}},Mr=(e,t)=>{const r=l.extractVariableName(t.x);return!r||!["numeric","temporal"].includes(e.getType(r))?e:e.orderBy(r,"asc")},_r=(e,{coordSystem:t})=>{if(t.type==="polar")return null;const r=V(e),n=E(e);return!l.isStrictNumericDataValue(r)||!l.isStrictNumericDataValue(n)?null:{x:r,y:n}},lm=class extends ae{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="buckets",this.resolveAnchorPosition=_r}resolveParams(e){const t=super.resolveParams(e);return t.missingValues==="gap"?{...t,missingValues:"zero"}:t}compile({data:e,mapping:t}){return e=Mr(e,t),e.hasVariable(l.POSITION_VARIABLES.yMin)||(e=e.addConstantVariable(l.POSITION_VARIABLES.yMin,"numeric",0)),{data:e,mapping:{}}}},Gn=.7,cm=.1,xi=e=>{const t=e[l.STACK_VARIABLES.role];return t??"solo"},um=class extends ae{constructor(...e){super(...e),this.type="bar",this.defaultParams={width:Gn},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.resolveAnchorBox=ur,this.resolveDataLabelDefaults=t=>M(t)?{justify:"center"}:{},this.resolveBandFraction=t=>t.width,this.resolveAnchorPosition=(t,{coordSystem:r,position:n,purpose:a,align:i})=>{if(r.type==="polar")return dm(t);if(i!==void 0){const m=ur(t,r);return m===null?null:ze(m,i)}const s=M(n),o={isSolo:!s||xi(t)==="solo",isNegative:s&&mm(t),purpose:a};if(r.mainAxis==="x"){const m=K(t),h=Y(t),p=Un({lowerBound:B(t),upperBound:O(t)??E(t),options:o});return m===null||h===null||p===null?null:{x:(m+h)/2,y:p}}const c=B(t),u=O(t),d=Un({lowerBound:K(t),upperBound:Y(t)??V(t),options:o});return c===null||u===null||d===null?null:{x:d,y:(c+u)/2}}}resolveParams(e){const t=super.resolveParams(e),{diagnostics:r}=e;return{...t,width:this.resolveWidthParam(t.width,r)}}compile({data:e,mapping:t,params:r}){const{width:n}=r;e=Mr(e,t),e.hasVariable(l.POSITION_VARIABLES.yMin)||(e=e.addConstantVariable(l.POSITION_VARIABLES.yMin,"numeric",0));const a=n/2;return e=e.addConstantVariable(l.POSITION_VARIABLES.xMin,"numeric",-a).addConstantVariable(l.POSITION_VARIABLES.xMax,"numeric",a),{data:e,mapping:{}}}resolveWidthParam(e,t){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:Gn;return t?.addWarning({code:"INVALID_GEOM_PARAM",message:`Bar width must be a fraction in (0, 1], got ${String(e)}; falling back to ${n}.`,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}},dm=e=>{const t=K(e),r=Y(e),n=B(e),a=O(e);if(t===null||r===null||n===null||a===null)return null;const i=(t+r)/2,s=(n+a)/2;return{x:.5+.5*s*Math.sin(i),y:.5-.5*s*Math.cos(i)}},mm=e=>{const t=Tr(e);return l.isStrictNumericDataValue(t)&&t<0},Un=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},hm=class extends ae{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.resolveAnchorBox=ur,this.resolveAnchorPosition=_r}compile(e){return{data:Mr(e.data,e.mapping),mapping:{}}}},pm=class extends ae{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=_r,this.resolveDefaultLabelSource=t=>{const r=l.extractVariableName(t.size);return r!==null?{variable:r}:null}}compile({data:e}){return{data:e,mapping:{}}}},fm=class extends ae{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=Wn(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=Wn(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}}}},Wn=(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},Ai=[new um,new pm,new hm,new lm,new fm],Ye=class extends l.Registry{constructor(){super("geom");for(const e of Ai)this.register(e.type,e)}},Ne=class{compute(e){return e.data.size()===0?{data:e.data,mapping:{}}:this.computeStat(e)}},gm=class extends Ne{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,...Ke(e,t)])];return{data:e.groupBy(...n).rollup({[l.STAT_VARIABLES.count]:{variableName:r,aggregation:"count"}}),mapping:{y:l.STAT_VARIABLES.count}}}},ym=class extends Ne{constructor(...e){super(...e),this.type="identity",this.computedVariables=new Set}computeStat({data:e}){return{data:e,mapping:{}}}},vm=class extends Ne{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}}}},bm=2,Ii=1440*60*1e3,Sm=class extends Ne{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 s=e.getType(a),o=e.getType(i);if(o!=="numeric")throw new l.UserInputError({code:"INCOMPATIBLE_TYPE",message:`'smooth' stat requires a numeric 'y' (got '${o}' for variable '${i}')`,context:{aesthetic:"y",variableName:i,variableType:o}});const c=Ke(e,t),u=Em(a,s,i,c,e);return c.length===0?Hn({data:e,xVariable:a,xType:s,yVariable:i,spec:r,output:u,groupObservation:{},xScaleIsDiscrete:n}):e.groupBy(...c).forEach(d=>{const m=Vm(d,c);Hn({data:d,xVariable:a,xType:s,yVariable:i,spec:r,output:u,groupObservation:m,xScaleIsDiscrete:n})}),{data:u.build(),mapping:{}}}},Hn=({data:e,xVariable:t,xType:r,yVariable:n,spec:a,output:i,groupObservation:s,xScaleIsDiscrete:o})=>{const{observations:c,temporalOrigin:u}=xm({data:e,xVariable:t,yVariable:n,xType:r});c.length<bm||(o?wm({observations:c,spec:a,output:i,groupObservation:s}):Tm({observations:c,xType:r,temporalOrigin:u,spec:a,output:i,groupObservation:s}))},xm=({data:e,xVariable:t,yVariable:r,xType:n})=>{const a=e.getValues(t),i=e.getValues(r,{type:"numeric"}),s=n==="temporal"?Am(a):null,o=[],c=new Map;for(let u=0;u<a.length;u++){const d=a[u],m=i[u];if(!l.isDefined(d)||!l.isDefined(m)||!Number.isFinite(m))continue;const h=Im({xValue:d,xType:n,categoryRank:c,temporalOrigin:s});h!==null&&o.push({x:h,y:m,originalX:d})}return{observations:o,temporalOrigin:s}},Am=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},Im=({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)/Ii+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}`})}},Tm=({observations:e,xType:t,temporalOrigin:r,spec:n,output:a,groupObservation:i})=>{const s=Ti(n,e);for(const[o,c]of s){if(!Number.isFinite(o)||!Number.isFinite(c))continue;const u=t==="temporal"?Lm(o,r):o;a.push({x:u,y:c,groupObservation:i})}},Lm=(e,t)=>t===null?new Date(e):new Date((e-1)*Ii+t),wm=({observations:e,spec:t,output:r,groupObservation:n})=>{const a=new Map;for(const o of e)a.has(o.x)||a.set(o.x,o.originalX);const i=[...a.keys()].sort((o,c)=>o-c);if(t.method==="loess"){const o=Ti(t,e),c=new Map;for(const[u,d]of o)Number.isFinite(d)&&(c.has(u)||c.set(u,d));for(const u of i){const d=c.get(u),m=a.get(u);d===void 0||m===void 0||r.push({x:m,y:d,groupObservation:n})}return}const s=Li(t,e);for(const o of i){const c=a.get(o),u=s.predict(o);c===void 0||!Number.isFinite(u)||r.push({x:c,y:u,groupObservation:n})}},Ti=(e,t)=>e.method==="loess"?(0,le.regressionLoess)().x(r=>r.x).y(r=>r.y).bandwidth(e.bandwidth)(t):Li(e,t),Li=(e,t)=>{const r=a=>a.x,n=a=>a.y;switch(e.method){case"linear":return(0,le.regressionLinear)().x(r).y(n)(t);case"exponential":return(0,le.regressionExp)().x(r).y(n)(t);case"logarithmic":return(0,le.regressionLog)().x(r).y(n)(t);case"quadratic":return(0,le.regressionQuad)().x(r).y(n)(t);case"power":return(0,le.regressionPow)().x(r).y(n)(t);case"polynomial":return(0,le.regressionPoly)().x(r).y(n).order(e.order)(t);case"loess":throw new l.InternalError({message:"'loess' does not expose a 'predict' function"})}},Em=(e,t,r,n,a)=>{const i=[],s=[],o=Object.fromEntries(n.map(c=>[c,[]]));return{push:({x:c,y:u,groupObservation:d})=>{i.push(c),s.push(u);for(const m of n)o[m]?.push(d[m]??null)},build:()=>{const c={[e]:{type:t,values:i,valueFormat:a.getValueFormat(e)},[r]:{type:"numeric",values:s,valueFormat:a.getValueFormat(r)}};for(const u of n)c[u]={type:a.getType(u),values:o[u]??[],valueFormat:a.getValueFormat(u)};return new l.Dataset(c)}}},Vm=(e,t)=>{const r={};for(const n of t)r[n]=e.getValues(n)[0]??null;return r},Rm=[new ym,new gm,new Sm,new vm],Cm=class extends l.Registry{constructor(){super("stat");for(const e of Rm)this.register(e.type,e)}};function Dm({geoms:e,stats:t,transforms:r}){const n=new Ye,a=new Cm,i=new l.TransformRegistry;for(const s of e)n.register(s.type,s);for(const s of t)a.register(s.type,s);for(const s of r)i.register(s.transformType,s);return{geomRegistry:n,statRegistry:a,transformRegistry:i}}function Nr(e){if("definition"in e)return e.definition;if(Ei(e)||Vi(e)||Ri(e))return e}function wi(e){const t=[],r=[],n=[];for(const a of e){const i=Nr(a);i&&(Ei(i)?t.push(i):Vi(i)?r.push(i):Ri(i)&&n.push(i))}return{geoms:t,stats:r,transforms:n,warnings:[...Ht("geom",t,a=>a.type),...Ht("stat",r,a=>a.type),...Ht("transform",n,a=>a.transformType),...km(t)]}}function km(e){const t=[];for(const r of e)r.spatialKind!=="render-hit-test"||r.identityKey!=="x-group"||t.push({code:"RENDER_HIT_TEST_IDENTITY",message:`The render-hit-test geom '${r.type}' uses the default 'x-group' 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 Ht(e,t,r){const n=new Map;for(const i of t){const s=r(i),o=n.get(s);o?o.add(i):n.set(s,new Set([i]))}const a=[];for(const[i,s]of n)s.size<2||a.push({code:"DUPLICATE_REGISTERED_TYPE",message:`Multiple plugins register the ${e} '${i}' (${s.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 Ei=e=>e instanceof ae,Vi=e=>e instanceof Ne,Ri=e=>"transformType"in e&&typeof e.apply=="function",Pm=class{constructor(e){this.registry=e}adjust(e,t){return this.registry.get(e).adjust(t)}},Pt=class{},Om=class extends Pt{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=Mm(e)??[-.7/2,.7/2],s=r.length>1?cm:0,o=(0,Z.scaleBand)().domain(r.map(String)).range(i).paddingInner(s).paddingOuter(0),c=o.bandwidth(),u=new Array(n).fill(null),d=new Array(n).fill(null);for(let m=0;m<n;m++){const h=a[m];if(!l.isDefined(h))continue;const p=o(String(h));l.isDefined(p)&&(u[m]=p,d[m]=p+c)}return{data:e.addVariable(l.POSITION_VARIABLES.xMin,"numeric",u).addVariable(l.POSITION_VARIABLES.xMax,"numeric",d),mapping:{}}}},Mm=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]},zn=l.prefixInternalVariable("__ungrouped__"),Ci=(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,s=i?[zn]:a,o=e.getValues(r),c=e.getValues(n,{type:"numeric"}),u=e.getValues(l.GROUP_VARIABLES.group,{type:"categorical"}),d=e.size(),m=new Map;for(let h=0;h<d;h++){const p=l.getStableKey(o[h]??null),f=u[h],g=i?zn:f;if(!l.isDefined(g))continue;let y=m.get(p);y||(y=new Map,m.set(p,y));let v=y.get(g);v||(v=[],y.set(g,v)),v.push(h)}return{yValues:c,observationIndicesByXAndGroup:m,uniqueGroupKeys:s,observationCount:d}},Di=(e,t,r,n)=>{const a=new Array(n).fill(null);for(const[,i]of r){const s=[];let o=-1,c=1/0,u=-1/0,d=-1,m=1/0,h=-1/0;for(const p of i.values())for(const f of p){const g=e[f],y=t[f];!l.isDefined(g)||!l.isDefined(y)||(s.push(f),(g<c||g===c&&y>u)&&(o=f,c=g,u=y),(y>h||y===h&&g<m)&&(d=f,m=g,h=y))}for(const p of s)a[p]=_m(p===o,p===d)}return a},_m=(e,t)=>e&&t?"solo":e?"floor":t?"ceiling":"middle",Nm=class extends Pt{constructor(...e){super(...e),this.type="fill"}adjust({data:e,mapping:t}){const r=Ci(e,t);if(r===null)return{data:e,mapping:{}};const{yValues:n,observationIndicesByXAndGroup:a,uniqueGroupKeys:i,observationCount:s}=r,o=[...n],c=new Array(s).fill(0);for(const[,d]of a){let m=0,h=0;for(const g of i){const y=d.get(g);if(y!==void 0)for(const v of y){const x=n[v];x!=null&&(x>=0?m+=x:h-=x)}}let p=0,f=0;for(const g of i){const y=d.get(g);if(y!==void 0)for(const v of y){const x=n[v];if(x===void 0)continue;if(x===null){c[v]=null,o[v]=null;continue}const T=x>=0?m:h;if(T===0){c[v]=0,o[v]=0;continue}const A=x/T;x>=0?(c[v]=p,o[v]=p+=A):(o[v]=f,c[v]=f+=A)}}}const u=Di(c,o,a,s);return{data:e.addVariable(l.POSITION_VARIABLES.yMin,"numeric",c).addVariable(l.POSITION_VARIABLES.yMax,"numeric",o).addVariable(l.POSITION_VARIABLES.yRaw,"numeric",n).addVariable(l.STACK_VARIABLES.role,"categorical",u),mapping:{}}}},Bm=class extends Pt{constructor(...e){super(...e),this.type="identity"}adjust({data:e}){return{data:e,mapping:{}}}},Fm=class extends Pt{constructor(...e){super(...e),this.type="stack"}adjust({data:e,mapping:t}){const r=Ci(e,t);if(r===null)return{data:e,mapping:{}};const{yValues:n,observationIndicesByXAndGroup:a,uniqueGroupKeys:i,observationCount:s}=r,o=[...n],c=new Array(s).fill(0);for(const[,h]of a){let p=0,f=0;for(const g of i){const y=h.get(g);if(y!==void 0)for(const v of y){const x=n[v];if(x!==void 0){if(x===null){c[v]=null,o[v]=null;continue}x>=0?(c[v]=p,o[v]=p+=x):(o[v]=f,c[v]=f+=x)}}}}const u=Di(c,o,a,s);let d=e.addVariable(l.POSITION_VARIABLES.yMin,"numeric",c).addVariable(l.POSITION_VARIABLES.yMax,"numeric",o).addVariable(l.POSITION_VARIABLES.yRaw,"numeric",n).addVariable(l.STACK_VARIABLES.role,"categorical",u);const m=l.extractVariableName(t.y);return m!==null&&(d=d.addVariable(m,"numeric",o)),{data:d,mapping:{}}}},$m=class extends l.Registry{constructor(){super("position"),this.register("identity",new Bm),this.register("stack",new Fm),this.register("fill",new Nm),this.register("dodge",new Om)}},Gm=class{map({data:e,layer:t,getPositionScale:r,geomRegistry:n}){let a=e;const i=n.get(t.geom);for(const s of i.positionRoles){if(s.role!=="scalar"||!l.isDefined(s.aes)||Rr(s.aes))continue;const o=l.extractVariableName(t.mapping[s.aes]);if(!l.isDefined(o)||!a.hasVariable(o))continue;const c=r(li(s.axis,t.yScaleType));if(!c)continue;const u=a.getValues(o,{type:"numeric"}).map(d=>l.isDefined(d)?c.map(d):null);a=a.addVariable(l.resolveScaledAestheticVariable(s.aes),"numeric",u)}return a}},Um=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(s=>l.isDefined(s)?a.map(s):null);return e.addVariable(l.POSITION_VARIABLES.x,"numeric",i)}},Wm=class{map({data:e,getPositionScale:t}){const r=t("x");if(!r?.bandwidth||!e.hasVariable(l.POSITION_VARIABLES.x)||!e.hasVariable(l.POSITION_VARIABLES.xMin)||!e.hasVariable(l.POSITION_VARIABLES.xMax))return e;const n="reverse"in r.spec&&r.spec.reverse===!0,a=e.getValues(l.POSITION_VARIABLES.x,{type:"numeric"}),i=e.getValues(l.POSITION_VARIABLES.xMin,{type:"numeric"}),s=e.getValues(l.POSITION_VARIABLES.xMax,{type:"numeric"}),o=e.size(),c=new Array(o),u=new Array(o);for(let d=0;d<o;d++){const m=a[d],h=i[d],p=s[d];if(l.isDefined(m)&&l.isDefined(h)&&l.isDefined(p)){const f=n?-p:h,g=n?-h:p;c[d]=m+f*r.bandwidth,u[d]=m+g*r.bandwidth}else c[d]=null,u[d]=null}return e.addVariable(l.POSITION_VARIABLES.xMin,"numeric",c).addVariable(l.POSITION_VARIABLES.xMax,"numeric",u)}},Hm=class{map({data:e,layer:t,getPositionScale:r}){const n=l.extractVariableName(t.mapping.y),a=r(be(t.yScaleType));if(!n||!a)return e;const i=e.getValues(n).map(s=>l.isDefined(s)?a.map(s):null);return e.addVariable(l.POSITION_VARIABLES.y,"numeric",i)}},zm=class{map({data:e,layer:t,getPositionScale:r}){const n=r(be(t.yScaleType));if(!n||!e.hasVariable(l.POSITION_VARIABLES.yMin)||!e.hasVariable(l.POSITION_VARIABLES.yMax))return e;const a=e.getValues(l.POSITION_VARIABLES.yMin,{type:"numeric"}),i=e.getValues(l.POSITION_VARIABLES.yMax,{type:"numeric"}),s=e.size(),o=new Array(s),c=new Array(s);for(let u=0;u<s;u++){const d=a[u],m=i[u];l.isDefined(d)&&l.isDefined(m)?(o[u]=n.map(d),c[u]=n.map(m)):(o[u]=null,c[u]=null)}return e.addVariable(l.POSITION_VARIABLES.yMin,"numeric",o).addVariable(l.POSITION_VARIABLES.yMax,"numeric",c)}},Km=[new Um,new Hm,new Wm,new zm,new Gm];function Ym(e,t){const r=e[t];return r?.kind==="position"?r:null}var qm=class extends ve{constructor(e,t=Km){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=>Ym(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}}},jm=class extends l.Stage{constructor(e,t){super(),this.container=e,this.registry=t}dependencies(e){return[e.layers,e.scales]}run(e){this.validateScaleTypeCompatibility(e);const t=new Map;for(const a of e.scales)t.set(a.scaledAesthetic,a);const r=this.collectValues(e.layers,t),n={};for(const[a,i]of t){const s=r.get(a)??[];n[a]=this.registry.get(i.scaleType).compile(i,s)}return n}validateScaleTypeCompatibility(e){const t=[];for(const r of e.scales){const{compatibleDataTypes:n}=this.registry.get(r.scaleType),a=$(r.scaledAesthetic),i=e.layers.find(c=>l.isDefined(c.mapping[a]));if(!i)continue;const s=l.extractVariableName(i.mapping[a]);if(!l.isDefined(s)||!i.data.hasVariable(s))continue;const o=i.data.getType(s);if(n.includes(o)||t.push({code:"INCOMPATIBLE_TYPE",message:`Scale '${r.scaledAesthetic}' (${r.scaleType}) is incompatible with variable '${s}' (${o})`,context:{aesthetic:a,variableName:s,scaleType:r.scaleType,variableType:o}}),r.scaledAesthetic==="lineType"&&o!=="categorical"){const c=o==="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 ${o} variable '${s}'. ${c}`,context:{aesthetic:a,variableName:s,scaleType:r.scaleType,variableType:o},suggestion:c})}}Si(this.container.diagnostics,t)}collectValues(e,t){const r=new Map;for(const n of e){const a=this.resolveCustomPositionalAxes(n);for(const[i,s]of Object.entries(n.mapping)){if(!l.isDefined(s))continue;const o=i==="y"?be(n.yScaleType):i,c=a.get(i)??(_u(o)?o:void 0);if(!l.isDefined(c)||!t.has(c))continue;const u=this.resolveVariables(i,s,n.data);this.collectFromVariables(n.data,u,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)||Rr(n.aes)||t.set(n.aes,li(n.axis,e.yScaleType));return t}resolveVariables(e,t,r){if(e==="y"&&this.hasPositionAdjustedY(r))return[l.POSITION_VARIABLES.yMin,l.POSITION_VARIABLES.yMax];const n=l.extractVariableName(t);return!n||!r.hasVariable(n)?[]:[n]}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 s of t)a=a.concat(e.getValues(s));const i=n.get(r);n.set(r,i?i.concat(a):a)}},Xm=["rgb","lab","hcl","hsl"],Zm=["viridis","magma","inferno","plasma","cividis","turbo","Blues","Greens","Greys","Oranges","Purples","Reds"],ki=["RdBu","BrBG","PuOr","Spectral"],Pi={"red-blue":"RdBu","brown-teal":"BrBG","purple-orange":"PuOr",spectral:"Spectral"},Jm=new Set(ki.map(e=>e.toLowerCase()));function Oi(e){const t=e.toLowerCase(),r=Pi[t];return r?r.toLowerCase():t}function Qm(e){return Jm.has(Oi(e))}var eh={rgb:Re.interpolateRgb,lab:Re.interpolateLab,hcl:Re.interpolateHcl,hsl:Re.interpolateHsl},th={viridis:D.interpolateViridis,magma:D.interpolateMagma,inferno:D.interpolateInferno,plasma:D.interpolatePlasma,cividis:D.interpolateCividis,turbo:D.interpolateTurbo,blues:D.interpolateBlues,greens:D.interpolateGreens,greys:D.interpolateGreys,oranges:D.interpolateOranges,purples:D.interpolatePurples,reds:D.interpolateReds,rdbu:D.interpolateRdBu,brbg:D.interpolateBrBG,puor:D.interpolatePuOr,spectral:D.interpolateSpectral};function Br(e){const t=nh(e);return e.reverse?r=>t(1-r):t}function rh(e={},t=2){const r=Br({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 nh(e){const t=eh[e.interpolate];if(e.range&&e.range.length>=2)return(0,Re.piecewise)(t,e.range.map(r=>String(r)));if(e.scheme){const r=th[Oi(e.scheme)];if(r)return r}return(0,Re.piecewise)(t,[...l.DEFAULT_SEQUENTIAL_RAMP])}var qe=class{createPositionScale(e,t){return{kind:"position",aesthetic:$(e.scaledAesthetic),spec:e,...t}}createVisualScale(e,t){return{kind:"visual",aesthetic:$(e.scaledAesthetic),spec:e,...t}}},ah=class extends qe{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=Dt(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"&&ih(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:$(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,Z.scaleLog)():r.transform==="sqrt"?(0,Z.scaleSqrt)():(0,Z.scaleLinear)();r.nice&&!a&&(n=i.copy().domain(n).nice().domain());const s=r.domainMin??n[0],o=r.domainMax??n[1];return i.domain([s,o]).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=sh(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=Br(t),n=t.domainMid;if(n!==null){const[a,i]=this.resolveColorDomain(e,t);if(n>a&&n<i){const[s,o]=this.symmetrizeDomain([a,i],t,n);return this.buildDivergingColorScale([s,n,o],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,Z.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,Z.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]}},ih=e=>{const[t,r]=e;return t>0&&r>0||t<0&&r<0};function sh(e){if(!e)return null;const[t,r]=e;return typeof t=="number"&&typeof r=="number"?[t,r]:null}var oh=class extends qe{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=Dt(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=lh(e)?e:[],a=(0,Z.scaleUtc)().domain(n).range(t).clamp(r.clamp);if(r.nice&&a.nice(),l.isDefined(r.domainMin)||l.isDefined(r.domainMax)){const[i,s]=a.domain();i!==void 0&&s!==void 0&&a.domain([r.domainMin??i,r.domainMax??s])}return a}buildScale(e,t,r){const n=t.reverse?[1,0]:[0,1],a=this.createD3Scale(e,n,t),[i,s]=a.domain(),o=i&&s?r.filter(c=>c>=i&&c<=s):[];return this.createPositionScale(t,{map:a,domain:a.domain(),bandwidth:null,generateTicks:c=>c&&"atInputs"in c?o:c&&"interval"in c?i&&s?Hu(i,s,c.interval):[]:a.ticks(c?.count)})}},lh=e=>e.length===2&&l.isStrictTemporalDataValue(e[0])&&l.isStrictTemporalDataValue(e[1]),ch=class extends qe{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=Dt(e.scaledAesthetic),n=si(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,Z.scaleBand)().domain(r).range(a).paddingInner(n).paddingOuter(n/2),s=i.bandwidth()/2;return this.createPositionScale(t,{map:o=>(i(String(o))??NaN)+s,domain:e,bandwidth:i.bandwidth(),generateTicks:()=>[...e]})}buildVisualScale(e,t){const r=e.map(String),n=t.range&&t.range.length>0?(0,Z.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})}},uh=class extends qe{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:$(e.scaledAesthetic),spec:e,map:t=>t,domain:[],generateTicks:()=>[]}}},dh=class extends qe{constructor(...e){super(...e),this.compatibleDataTypes=["categorical","temporal","numeric"]}compile(e,t){if(e.scaleType!=="palette")throw new l.InternalError({message:"PaletteScale.compile received non-palette spec"});const r=ii(t),n=l.resolvePaletteRange(e.palette,r.length),a=l.applyOverrides(n.length>0?n:[...l.DEFAULT_COLOR_PALETTE],e.overrides),i=(0,Z.scaleOrdinal)().domain(r.map(String)).range(a).unknown(a[0]);return this.createVisualScale(e,{map:s=>i(String(s)),domain:r,generateTicks:()=>r})}},mh=class extends l.Registry{constructor(e){super("scale"),this.register("continuous",new ah(e)),this.register("discrete",new ch),this.register("datetime",new oh),this.register("identity",new uh),this.register("palette",new dh)}},lt={color:null,size:"small",labelCrossPosition:.5},Le={kind:"rectangle",zOrder:"foreground",fillColor:"transparent",fillOpacity:1,strokeWidth:1,strokeColor:null},zt={zOrder:"foreground",fit:"contain",opacity:1},hh={x:8,y:8,unit:"px"},Kt={align:"center",backgroundColor:null,backgroundColorStyle:"opaque"},we={color:null,thickness:"medium",startArrowheadStyle:"none",endArrowheadStyle:"line-arrow",lineStyle:"solid",hasStickerStyle:!1},ph={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}},fh=(e,t,r)=>{const n=gh(e,t),a=bh(n);return{differenceArrows:(n.differenceArrows??[]).map(i=>xh(e,i,r)).filter(l.isDefined),shapes:(n.shapes??[]).map(i=>Lh(e,i,a)).filter(l.isDefined),arrows:(n.arrows??[]).map(i=>Vh(e,i,r,a)).filter(l.isDefined),textAnnotations:(n.textAnnotations??[]).map(i=>Sh(e,i,r,a)).filter(l.isDefined),stickers:(n.stickers??[]).map(i=>Ah(e,i,r,a)).filter(l.isDefined),images:(n.images??[]).map(i=>wh(e,i,a)).filter(l.isDefined),pinnedNumbers:(n.pinnedNumbers??[]).map(i=>Ih(e,i,r)).filter(l.isDefined),comments:(n.comments??[]).map(i=>Th(e,i,r)).filter(l.isDefined)}},gh=(e,t)=>{if(t===void 0)return{};if(!yh(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:k()}):(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))}},yh=e=>{const t=new Set;for(const r of vh(e))if(r.id!==void 0){if(t.has(r.id))return!0;t.add(r.id)}return!1},vh=e=>[...e.differenceArrows??[],...e.shapes??[],...e.arrows??[],...e.textAnnotations??[],...e.images??[],...e.stickers??[],...e.pinnedNumbers??[],...e.comments??[]],bh=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},Fr=(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},Sh=(e,t,r,n)=>{const a=yt(e,t.at,r,n,t.id);return a===null?null:{id:t.id??k(),content:t.content,at:a,width:t.width,align:t.align??Kt.align,backgroundColor:t.backgroundColor??Kt.backgroundColor,backgroundColorStyle:t.backgroundColorStyle??Kt.backgroundColorStyle}},xh=(e,t,r)=>{const n=We(e,t.start,r),a=We(e,t.end,r);return n===null||a===null?null:{id:t.id??k(),start:n,end:a,label:t.label,color:t.color??lt.color,size:t.size??lt.size,labelCrossPosition:t.labelCrossPosition??lt.labelCrossPosition}},We=(e,t,r)=>{const n=t.align!==void 0?{align:t.align}:{};return t.layerId===void 0?{anchorValue:t.anchorValue,groupValue:t.groupValue,...n}:r.some(a=>a.id===t.layerId)?{layerId:t.layerId,anchorValue:t.anchorValue,groupValue:t.groupValue,...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)},yt=(e,t,r,n,a)=>{if(t.anchorType==="annotation")return Fr(e,t.ref,n,a)?t:null;if(t.anchorType==="panel"||t.anchorType==="axis"||t.anchorType==="selection")return t;const i=We(e,t,r);return i===null?null:{anchorType:"observation",...i,...t.offset!==void 0?{offset:t.offset}:{}}},Ah=(e,t,r,n)=>{const a=yt(e,t.at,r,n,t.id);return a===null?null:{id:t.id??k(),at:a,sticker:t.sticker}},Ih=(e,t,r)=>{const n=We(e,t.at,r);return n===null?null:{id:t.id??k(),at:n}},Th=(e,t,r)=>{const n=We(e,t.at,r);return n===null?null:{id:t.id??k(),at:n,content:t.content}},Lh=(e,t,r)=>t.region.anchorType==="annotation"&&!Fr(e,t.region.ref,r,t.id)?null:{id:t.id??k(),kind:t.kind??Le.kind,zOrder:t.zOrder??Le.zOrder,region:Eh(t.region),fillColor:t.fillColor??Le.fillColor,fillOpacity:t.fillOpacity??Le.fillOpacity,strokeWidth:t.strokeWidth??Le.strokeWidth,strokeColor:t.strokeColor??Le.strokeColor},wh=(e,t,r)=>t.region.anchorType==="annotation"&&!Fr(e,t.region.ref,r,t.id)?null:{id:t.id??k(),src:t.src,zOrder:t.zOrder??zt.zOrder,region:t.region,fit:t.fit??zt.fit,opacity:t.opacity??zt.opacity},Eh=e=>e.anchorType!=="selection"||e.padding!==void 0?e:{...e,padding:hh},Kn=e=>{if(e.anchorType==="panel"||e.anchorType==="axis"||e.offset!==void 0||e.align===void 0)return e;const t=ph[e.align];return t===void 0?e:{...e,offset:{x:t.x*4,y:t.y*4,unit:"px"}}},Vh=(e,t,r,n)=>{const a=yt(e,t.start,r,n,t.id),i=yt(e,t.end,r,n,t.id);return a===null||i===null?null:{id:t.id??k(),start:Kn(a),end:Kn(i),color:t.color??we.color,thickness:t.thickness??we.thickness,startArrowheadStyle:t.startArrowheadStyle??we.startArrowheadStyle,endArrowheadStyle:t.endArrowheadStyle??we.endArrowheadStyle,lineStyle:t.lineStyle??we.lineStyle,hasStickerStyle:t.hasStickerStyle??we.hasStickerStyle}},Rh={parsingLocale:"en-US",legend:{position:"auto",display:"auto",align:"auto"},axes:{x:{isVisible:!0,label:null,position:"bottom",grid:{isVisible:null,lineStyle:"dashed",lineWidth:null},ticks:{isVisible:!0,mode:"auto"}},y:{isVisible:!0,label:null,position:"right",grid:{isVisible:null,lineStyle:"dashed",lineWidth:null},ticks:{isVisible:!1,mode:"auto"}}},panel:{border:{top:{isVisible:!0,lineStyle:"dashed",lineWidth:null,color:null},right:{isVisible:!0,lineStyle:"dashed",lineWidth:null,color:null},bottom:{isVisible:!0,lineStyle:"dashed",lineWidth:null,color:null},left:{isVisible:!0,lineStyle:"dashed",lineWidth:null,color:null}},cornerRadius:8,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},appearance:{textScale:1,background:{type:"theme"},border:{type:"none"},cornerRadius:8},layout:{padding:null,gaps:{}}};function Ch(e){const t=(0,xt.merge)({},Rh,e);return t.content=Dh(t.content,e?.content),t}var Dh=(e,t)=>{const r=t?.brandMark?.enabled??t?.isBrandMarkVisible??e.brandMark.enabled,n={...e.brandMark,enabled:r};return{...e,brandMark:n,isBrandMarkVisible:r}},kh={xLimits:null,yLimits:null},Yt={theta:"x",startAngle:0,innerRadius:0};function Ph(e){const t=e??{type:"coord",coordType:"cartesian"},r=(0,mt.default)({},kh,t.params??{});switch(t.coordType){case"cartesian":case"flip":return{...t,params:r};case"polar":return{...t,params:{...r,theta:t.params?.theta??Yt.theta,startAngle:t.params?.startAngle??Yt.startAngle,innerRadius:t.params?.innerRadius??Yt.innerRadius}}}}function Oh(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??k(),predicate:a.predicate,scope:a.scope??"data-point",...a.layerId!==void 0?{layerId:a.layerId}:{}})}return n}var Mh=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=Yn(e.filter(n=>n.severity==="error")),r=Yn(e.filter(n=>n.severity==="warning"));return this.diagnostics=[],{errors:t,warnings:r}}},_h=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 Yn(e){const t=new Set;return e.filter(r=>{const n=JSON.stringify(r);return t.has(n)?!1:(t.add(n),!0)})}var Nh={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 Mi(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 $r(e,t,r,n,a,i){const s=a!==void 0&&i!==void 0?new _h(a,{layerIndex:i}):a,o=e.get(n.geom),c=n.position??o.defaultPosition,u=Gh({dataLabels:Wh(e,t,n,c,r),geom:o,position:c,coordType:r,diagnostics:s});return $h({diagnostics:s,coordType:r,geom:o,position:c,dataLabels:u}),{id:n.id??k(),type:n.type,geom:n.geom,mapping:n.mapping??{},stat:Mi(n.stat,"identity"),position:c,yScaleType:n.yScaleType??"primary",params:o.resolveParams({params:n.params,diagnostics:s}),transforms:n.transforms??[],interactive:n.interactive??o.defaultInteractive,dataLabels:u}}function Bh(e,t,r,n,a){const i=n.map((s,o)=>$r(e,t,r,s,a,o));return Hh(e,i)}var Fh=(e,t,r,n)=>n.label!==void 0?n.label:zh(e,t,r,n),$h=({diagnostics:e,coordType:t,geom:r,position:n,dataLabels:a})=>{if(e===void 0)return;const i=r.type==="bar"&&t==="polar",s=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"&&s&&M(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&&!(s&&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'."}),a.showCategoryLabels&&a.showDataLabels&&!i&&e.addWarning({code:"DATA_LABEL_SETTING_IGNORED",message:"showCategoryLabels only applies to polar bars (pie / donut); it will be ignored.",suggestion:"Turn off showCategoryLabels for this layer."})},Gh=({dataLabels:e,geom:t,position:r,coordType:n,diagnostics:a})=>{const{justify:i,showDataLabels:s}=e;if(i!=="panel-start"&&i!=="panel-end")return e;const o=Uh(t,r,n);if(o===null)return e;const c=i==="panel-end"?"end":"start";return s&&a?.addWarning({code:"DATA_LABEL_PLACEMENT_COERCED",message:`${o}; justify '${i}' will render as '${c}'.`,context:{expected:c,actual:i},suggestion:`Use justify '${c}' for this layer.`}),{...e,justify:c}},Uh=(e,t,r)=>r==="polar"?"Panel-edge anchors do not apply under polar coords":e.type==="bar"&&M(t)?"Stacked bar segments would all pin their labels to the same panel edge":null,Wh=(e,t,r,n,a)=>{const i={...t,...r.mapping},s=Fh(e,r.geom,n,i),o=e.get(r.geom);return{...(0,xt.merge)({},Nh,o.resolveDataLabelDefaults?.(n)??{},o.dataLabels?.[a]??{},r.dataLabels??{}),labelSource:s}},Hh=(e,t)=>{const r=new Set;for(const n of t)n.position==="fill"&&r.add(n.yScaleType);return r.size===0?t:t.map(n=>{if(!r.has(n.yScaleType)||!e.get(n.geom).positionRoles.some(s=>s.axis==="y"&&s.role==="scalar"))return n;const a=l.extractConstantValue(n.mapping.y);if(!l.isStrictNumericDataValue(a))return n;const i=Math.min(1,Math.max(0,a));return{...n,mapping:{...n.mapping,y:{value:i}}}})},zh=(e,t,r,n)=>e.get(t).resolveDefaultLabelSource?.(n)??Lt(r,n),_i={x:"position",y:"position",ySecondary:"position",color:"color-range",size:"continuous-range",alpha:"continuous-range",strokeWidth:"continuous-range",lineType:"discrete-only"},Kh={numeric:{position:"continuous","color-range":"continuous","continuous-range":"continuous","discrete-only":"discrete"},categorical:{position:"discrete","color-range":"discrete","continuous-range":"discrete","discrete-only":"discrete"},temporal:{position:"datetime","color-range":"continuous","continuous-range":"continuous","discrete-only":"discrete"}};function Ni(e,t,r,n,a,i){switch(t.scaleType){case"inferred":return Ni(e,jh(e,t,r,n,a),r,n,a,i);case"continuous":{const s=_i[t.scaledAesthetic],o=s==="continuous-range"&&t.scaledAesthetic in l.NON_POSITION_RANGE_DEFAULTS?l.NON_POSITION_RANGE_DEFAULTS[t.scaledAesthetic]:null,c=t.scaledAesthetic==="size"&&s==="continuous-range"?"sqrt":l.CONTINUOUS_SCALE_DEFAULTS.transform;return{type:t.type,scaledAesthetic:t.scaledAesthetic,scaleType:t.scaleType,transform:t.transform??c,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??s!=="position",domainMin:t.domainMin??l.CONTINUOUS_SCALE_DEFAULTS.domainMin,domainMax:t.domainMax??l.CONTINUOUS_SCALE_DEFAULTS.domainMax,range:t.range??o??null,scheme:Xh(e,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{type:t.type,scaledAesthetic:t.scaledAesthetic,scaleType:t.scaleType,range:t.range??l.DISCRETE_SCALE_DEFAULTS.range,domain:t.domain??l.DISCRETE_SCALE_DEFAULTS.domain,padding:t.padding??l.DISCRETE_SCALE_DEFAULTS.padding,reverse:t.reverse??l.DISCRETE_SCALE_DEFAULTS.reverse};case"palette":return{type:t.type,scaledAesthetic:t.scaledAesthetic,scaleType:t.scaleType,palette:l.resolvePaletteConfig(e,t.palette,i),overrides:l.resolvePaletteOverrides(e,t.overrides,t.palette,i)};case"identity":return{type:t.type,scaledAesthetic:t.scaledAesthetic,scaleType:t.scaleType};default:throw new l.InternalError({message:`Unknown scale type: ${t.scaleType}`})}}function Yh(e,t,r,n,a,i,s){const o=ep(Qh(r,n)),c=new Map;for(const d of o)c.set(d.scaledAesthetic,d);const u=[...c.values()].map(d=>Ni(e,d,t,n,a,s));return i.coordType==="polar"?qh(u):u}var qh=e=>e.map(t=>t.scaleType==="discrete"?{...t,padding:0}:t);function jh(e,t,r,n,a){const i=$(t.scaledAesthetic),s=t.scaledAesthetic==="ySecondary"?Jh(n,a):a[i],{layer:o,scaleConstraints:c}=Zh(e,n);if(t.scaledAesthetic==="x"&&c?.discreteMainAxis)return l.discrete(t.scaledAesthetic,t.options);const u=o?.yScaleType==="secondary"?"ySecondary":"y";if(c?.zeroBaseline&&o&&t.scaledAesthetic===u){const p=t.options,f=o.position==="fill";return l.continuous(t.scaledAesthetic,{...p,zero:!0,...f&&{nice:!1}})}const d=l.extractVariableName(s);if(!l.isDefined(d)||!r.hasVariable(d))return l.continuous(t.scaledAesthetic,t.options);const m=r.getType(d),h=_i[t.scaledAesthetic];switch(Kh[m][h]){case"discrete":return l.discrete(t.scaledAesthetic,t.options);case"datetime":return l.datetime(t.scaledAesthetic,t.options);case"continuous":return l.continuous(t.scaledAesthetic,t.options);default:return l.identity(t.scaledAesthetic)}}function Xh(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:$(t.scaledAesthetic),scaleType:t.scaleType},suggestion:"Set either a scheme or a range, not both."}),null):(!l.isDefined(t.domainMid)&&Qm(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:$(t.scaledAesthetic),scaleType:t.scaleType,actual:r},suggestion:"Set 'domainMid' (e.g. 0) to centre the neutral colour."}),r)}function Zh(e,t){for(const r of t){const{scaleConstraints:n}=e.geomRegistry.get(r.geom);if(n!==void 0)return{layer:r,scaleConstraints:n}}return{}}function Jh(e,t){const r=e.find(n=>n.yScaleType==="secondary");return r?r.mapping.y??t.y:t.y}function Qh(e,t){return!t.some(r=>r.yScaleType==="secondary")||e.some(r=>r.scaledAesthetic==="ySecondary")?e:[...e,l.inferred("ySecondary")]}function ep(e){return e.some(t=>t.scaledAesthetic==="color")?e:[...e,l.palette("color")]}var tp=e=>{const t=new Set;e!==void 0&&Bi(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},Bi=(e,t,r)=>{if(!r.has(e)){r.add(e);for(const n of e.extends??[])Bi(n,t,r);t.delete(e),t.add(e),r.delete(e)}};function rp(e,t,r){const n=Ph(t.coords),a=Bh(e.geomRegistry,t.mapping,n.coordType,t.layers,e.diagnostics),i=Yh(e,t.data,t.scales,a,t.mapping,n,r),s=Ch(t.config),o=Oh(e,t.highlights,a),c=fh(e,t.annotations,a),u=tp(t.styles);return{data:t.data,mapping:t.mapping,layers:a,scales:i,transforms:t.transforms,highlights:o,styles:u,annotations:c,coords:n,config:s}}var Fi=class{constructor(e){this.container=e}compile({input:e,dataset:t,customPalettes:r}){return rp(this.container,{...e,data:t},r)}},np=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})}},ap=class extends ve{constructor(e){super(),this.container=e}compile(e){const t=super.compile(e);for(const r of lp(e.styles,t))this.container.diagnostics.addWarning(r);for(const r of cp(e.styles))this.container.diagnostics.addWarning(r);for(const r of up(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=Ki({layer:e,layerIndex:t.layers.indexOf(e),styles:t.styles,parsingLocale:t.config.parsingLocale});return{...e,styles:r}}},$i=["color","alpha","saturation"],Gi={bar:["color","alpha","saturation","borderRadius","borderColor","borderWidth"],line:["color","alpha","saturation","strokeWidth","lineType","fillAlpha"],area:["color","alpha","saturation","strokeWidth","lineType","strokeAlpha"],point:["color","alpha","saturation","size","borderColor","borderWidth"],rule:["color","strokeWidth","lineType"]},ip=[...new Set([...$i,...Object.values(Gi).flatMap(e=>e??[])])],sp=(e,t,r="en-US")=>Ki({layer:e,layerIndex:0,styles:{tokens:t.tokens??{},defaults:t.defaults??[],overrides:t.overrides??[]},parsingLocale:r}),Ui=e=>(e!==void 0?Gi[e]:void 0)??$i,op=(e,t,r)=>{const n=[];return l.BUILTIN_STYLES.defaults.forEach((a,i)=>{const s=a.select.kind;if(s!==void 0&&s!==e)return;const o={list:"builtin"},c=Yi({declarations:a.declarations,vocabulary:Ui(s),tokens:t,location:`builtin[${i}]`,origin:o,warnings:r});Object.keys(c).length!==0&&n.push({declarations:c,...a.when?.state===void 0?{}:{state:a.when.state},origin:o})}),n},Wi=(e,t)=>{e.defaults.forEach((r,n)=>t(r,"defaults",n)),e.overrides.forEach((r,n)=>t(r,"overrides",n))},lp=(e,t)=>{const r=new Set(t.map(a=>a.id)),n=[];return Wi(e,(a,i,s)=>{const o=a.select.layer;o===void 0||r.has(o)||n.push({code:"INVALID_STYLE_RULE",message:`Style ${i}[${s}] targets unknown layer '${o}'.`,context:{param:"layer",actual:o,...a.id===void 0?{}:{styleEntryId:a.id}},suggestion:"Set 'layer' to the id of a layer in the spec."})}),n},cp=e=>{const t=[];return Wi(e,(r,n,a)=>{const i=r.when?.state;i===void 0||Hi(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(s=>`'${s}'`).join(", ")}.`})}),t},Hi=e=>l.STYLE_STATES.includes(e),up=e=>{const t=[];for(const[r,n]of Object.entries(e.tokens))zi(n)||t.push({code:"INVALID_STYLE_RULE",message:`Style token '${r}' has an invalid value: ${vt(n)}.`,context:{param:"tokens",actual:vt(n)},suggestion:`Set '${r}' to a non-empty color string or a { light, dark } pair of colors.`});return t},zi=e=>typeof e=="string"?e.trim().length>0:l.isLightDarkColor(e)&&e.light.trim().length>0&&e.dark.trim().length>0,vt=e=>typeof e=="object"&&e!==null?JSON.stringify(e):String(e),Ki=e=>{const{layer:t,layerIndex:r,styles:n,parsingLocale:a}=e,i=Et(t,a),s=[],o={...l.BUILTIN_STYLES.tokens,...n.tokens},c=(u,d)=>{const m=[];return u.forEach((h,p)=>{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&&!Hi(g))return;const y={list:d,index:p,...h.id===void 0?{}:{id:h.id}},v=h.when?.where;if(v!==void 0){const T=de(v,t.data,"style-rule");if(T.length>0){for(const A of T)s.push({...A,code:"INVALID_STYLE_RULE",message:`Style ${d}[${p}]: ${A.message}`,context:{...A.context,layerIndex:r,...h.id===void 0?{}:{styleEntryId:h.id}}});return}}const x=Yi({declarations:h.declarations,vocabulary:Ui(f),tokens:o,location:`${d}[${p}]`,origin:y,warnings:s});Object.keys(x).length!==0&&m.push({declarations:x,...v===void 0?{}:{matches:ue(v,i)},...g===void 0?{}:{state:g},origin:y})}),m};return{defaults:[...op(t.geom,o,s),...c(n.defaults,"defaults")],overrides:c(n.overrides,"overrides"),warnings:s}},Yi=e=>{const{declarations:t,vocabulary:r,tokens:n,location:a,origin:i,warnings:s}=e,o={},c=i.list==="builtin"||i.id===void 0?{}:{styleEntryId:i.id},u=(p,f,g)=>{s.push({code:"INVALID_STYLE_RULE",message:`Style ${a} declaration '${p}' ignored: expected ${f}, got ${vt(g)}.`,context:{param:p,expected:f,actual:vt(g),...c},suggestion:`Set '${p}' to ${f}.`})},d=(p,f)=>{if(typeof f=="string"){if(f.trim().length>0)return f;u(p,"a non-empty color string",f);return}if(l.isStyleTokenRef(f)){const g=n[f.token];if(g===void 0){s.push({code:"INVALID_STYLE_RULE",message:`Style ${a} declaration '${p}' ignored: unknown token '${f.token}'.`,context:{param:p,actual:f.token,...c},suggestion:`Declare '${f.token}' in the stylesheet's tokens.`});return}return zi(g)?typeof g=="string"?g:{light:g.light,dark:g.dark}:void 0}if(l.isLightDarkColor(f)&&f.light.trim().length>0&&f.dark.trim().length>0)return{light:f.light,dark:f.dark};u(p,"a non-empty color string, a { light, dark } pair, or a token(...) reference",f)};for(const p of Object.keys(t)){if(t[p]===void 0||r.includes(p))continue;const f=ip.includes(p);s.push({code:"INVALID_STYLE_RULE",message:`Style ${a} declaration '${p}' ignored: ${f?"not in this entry's vocabulary":"not a style property"}.`,context:{param:p,...c},suggestion:f?`Declare '${p}' on an entry whose kind supports it (e.g. style.geom.bar).`:`Remove the unknown declaration '${p}'.`})}for(const p of["color","borderColor"]){const f=t[p];if(f===void 0||!r.includes(p))continue;const g=d(p,f);g!==void 0&&(o[p]=g)}for(const p of["alpha","saturation","strokeAlpha","fillAlpha"]){const f=t[p];f===void 0||!r.includes(p)||(Number.isFinite(f)&&f>=0&&f<=1?o[p]=f:u(p,"a number in [0, 1]",f))}for(const p of["borderWidth","strokeWidth","size"]){const f=t[p];f===void 0||!r.includes(p)||(Number.isFinite(f)&&f>=0?o[p]=f:u(p,"a non-negative number of pixels",f))}const{borderRadius:m,lineType:h}=t;return m!==void 0&&r.includes("borderRadius")&&(l.isBorderRadiusToken(m)?o.borderRadius=m:u("borderRadius",`one of ${l.BORDER_RADIUS_TOKENS.map(p=>`'${p}'`).join(", ")}`,m)),h!==void 0&&r.includes("lineType")&&(Ba(h)?o.lineType=h:u("lineType",`one of ${Lr.map(p=>`'${p}'`).join(", ")}`,h)),o},dp=({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}},mp=({layer:e})=>{if(e.position!=="stack")return;const t=l.extractVariableName(e.mapping.x);if(t===null||!e.data.hasVariable(l.POSITION_VARIABLES.yMin)||!e.data.hasVariable(l.POSITION_VARIABLES.yMax))return;const r=new Map;for(const a of e.data){const i=a[t],s=B(a),o=O(a),c=K(a),u=Y(a),d=Tr(a);if(!l.isDefined(i)||!l.isDefined(s)||!l.isDefined(o)||!l.isDefined(c)||!l.isDefined(u)||!l.isDefined(d))continue;const m=d>=0;if(Math.abs(d)===0)continue;const h=Or(a,t),p={yMin:s,yMax:o},f=r.get(h);if(f===void 0){r.set(h,{total:d,topPositive:m?p:null,bottomNegative:m?null:p,anchorXMin:c,anchorXMax:u});continue}f.total+=d,m?(f.topPositive===null||o>f.topPositive.yMax)&&(f.topPositive=p):(f.bottomNegative===null||s<f.bottomNegative.yMin)&&(f.bottomNegative=p)}const n=[];for(const[a,i]of r){const s=i.topPositive??i.bottomNegative;s!==null&&n.push({xKey:a,total:i.total,anchor:{xMin:i.anchorXMin,xMax:i.anchorXMax,yMin:s.yMin,yMax:s.yMax,direction:i.topPositive!==null?"positive":"negative"}})}return n},hp=class extends ve{constructor(e){super(),this.container=e}dependencies(){return[]}compileLayer(e){const t=this.container.geomRegistry.get(e.geom),r={};if(t.summaries.stackTotals){const n=mp({layer:e});n!==void 0&&(r.stackTotals=n)}if(t.summaries.grandTotal){const n=dp({layer:e});n!==void 0&&(r.grandTotal=n.grandTotal,r.absoluteGrandTotal=n.absoluteGrandTotal)}return{...e,summary:r}}},pp=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)}},qn={color:"categorical",size:"numeric",alpha:"numeric",strokeWidth:"numeric",lineType:"categorical"},fp=["color","size","alpha","strokeWidth","lineType"],gp=class extends ve{dependencies(e){return fp.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 s=l.extractConstantValue(e.mapping[a]);if(s!==void 0){r=r.deriveVariable(i,qn[a],()=>s);continue}const o=l.extractVariableName(e.mapping[a]),c=t.scales[a];if(!c||c.kind!=="visual")continue;const u=yp(o,c);u&&(r=r.deriveVariable(i,qn[a],u))}return{...e,data:r}}},yp=(e,t)=>e?r=>l.isDefined(r[e])?t.map(r[e]):null:null;function vp(e=new Ye){return{diagnostics:new Mh,geomRegistry:e}}var qi=class{constructor(e,t,r,n,a,i,s,o,c,u,d,m,h,p,f,g){this.container=e,this.dataCompiler=t,this.specCompiler=r,this.transformCompiler=n,this.constantMappingCompiler=a,this.layerPhasedCompiler=i,this.scaleCompiler=s,this.coordCompiler=o,this.positionMapperCompiler=c,this.visualMapperCompiler=u,this.guideCompiler=d,this.summariseCompiler=m,this.stylesCompiler=h,this.highlightsCompiler=p,this.configCompiler=f,this.annotationsCompiler=g,this.lastCompile=null,this.lastDiagnostics=null,this.lastData=void 0,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:"highlights",getStats:()=>this.highlightsCompiler.stats},{name:"config",getStats:()=>this.configCompiler.stats},{name:"annotations",getStats:()=>this.annotationsCompiler.stats}]}compile(e){try{const t=this.runCompile(()=>(this.lastData=e.data,this.runPipeline({spec:this.specCompiler.compile({input:e.input,customPalettes:e.customPalettes??{},dataset:this.dataCompiler.compile(e.data)})})));return this.toOkResult(t)}catch(t){return this.toErrorResult(t)}}recompile(e){try{const t=this.runCompile(()=>{if(e.data===void 0)return this.runPipeline({spec:e.spec});this.lastData=e.data;const r=lu(e.spec.data,e.spec.mapping);return this.runPipeline({spec:I(e.spec,{data:this.dataCompiler.compile(e.data),mapping: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}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:[Za(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:s,getStats:o}of this.stages){const c=o();i[s]={hits:c.hits-t[s].hits,misses:c.misses-t[s].misses}}return this.lastCompile={stages:i,durationMs:a},n}runPipeline({spec:e}){return Vt({spec:e}).pipe(({spec:t})=>({spec:I(t,{data:this.transformCompiler.compile({data:t.data,transforms:t.transforms})})})).pipe(({spec:t})=>{const r=this.constantMappingCompiler.compile({data:t.data,mapping:t.mapping});return{spec:I(t,{data:r.data,mapping:r.mapping})}}).pipe(({spec:t})=>({layers:this.layerPhasedCompiler.compile({data:t.data,layers:t.layers,mapping:t.mapping,coords:t.coords,scales:t.scales})})).pipe(({spec:t,layers:r})=>this.coordCompiler.setup({coordSpec:t.coords,scales:t.scales,layers:r})).pipe(({layers:t,scales:r})=>({scales:this.scaleCompiler.compile({layers:t,scales:r})})).pipe(({spec:t,scales:r})=>({config:this.configCompiler.compile({config:t.config,scales:r})})).pipe(({layers:t,scales:r})=>({layers:this.positionMapperCompiler.compile({layers:t,scales:r})})).pipe(({layers:t,scales:r})=>({layers:this.visualMapperCompiler.compile({layers:t,scales:r})})).pipe(({spec:t,layers:r,coordSystem:n})=>({layers:this.coordCompiler.transform({coordSpec:t.coords,coordSystem:n,layers:r})})).pipe(({layers:t})=>({layers:this.summariseCompiler.compile({layers:t})})).pipe(({spec:t,scales:r,layers:n,coordSystem:a})=>({guides:this.guideCompiler.compile({scales:r,config:t.config,layers:n,coordSystem:a,originalData:this.lastData})})).pipe(({spec:t,layers:r})=>({layers:this.stylesCompiler.compile({layers:r,styles:t.styles,config:t.config})})).pipe(({spec:t,layers:r})=>({layers:this.highlightsCompiler.compile({layers:r,highlights:t.highlights,config:t.config})})).pipe(({spec:t,layers:r,coordSystem:n,scales:a})=>({annotations:this.annotationsCompiler.compile({annotations:t.annotations,layers:r,coordSystem:n,scales:a,config:t.config})})).result()}},bp=["data","transform","constantMapping","layer","coordSetup","scale","positionMapper","visualMapper","coordTransform","summarise","guide","styles","highlights","config","annotations"],Sp=({plugins:e=[]}={})=>{const t=wi(e),{geomRegistry:r,statRegistry:n,transformRegistry:a}=Dm(t),i=vp(r),s=new mh(i),o=new pp(a);for(const c of t.warnings)i.diagnostics.addWarning(c,{persistent:!0});return new qi(i,new l.DataCompiler,new Fi(i),o,new ou,new om(i,o,n,new im(i,o,new np(n),new Nu,new Mu(i),new Pm(new $m))),new jm(i,s),new du(new Ru),new qm(i),new gp,new qd(i),new hp(i),new ap(i),new em(i),new iu(i),new Uc(i))};function xp(e,t){return e.geom===t}function ji(...e){let t={},r;const[n,...a]=e;l.isDefined(n)&&!Ap(n)?(t=n,r=a):r=e;const i={mapping:t,layers:[],scales:[],transforms:[],highlights:[],config:{}};return r.reduce((s,o)=>Zi(s,o),i)}function Xi(e,...t){return t.reduce((r,n)=>Zi(r,n),e)}function Ap(e){return typeof e=="object"&&e!==null&&"type"in e}function Zi(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,mt.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 Ip(e,t);default:throw new l.InternalError({message:`Unknown spec item type: ${t.type}`})}}function Ip(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 Tp(e){const t=e?.plugins??[],r=wp(t);return{geom:{...l.geom,...r.geom},stat:{...l.stat,...r.stat},transform:{...l.transform,...r.transform},scale:l.scale,coord:l.coord,createSpec:ji,pipe:Xi,plugins:t}}var Lp=e=>(t={})=>l.buildLayerInput(e,t);function wp(e){const{geoms:t,stats:r,transforms:n}=wi(e),a={};for(const o of t)a[o.type]=Lp(o.type);const i={};for(const o of r)i[o.type]=()=>({type:o.type});const s={};for(const o of n)s[o.transformType]=c=>({type:"transform",transformType:o.transformType,options:c?.options});return{geom:a,stat:i,transform:s}}var Ep=24,Vp={header:{after:10,before:0},headline:{after:4,before:0},topLegend:{after:8,before:0},topAxisLabel:{after:8,before:0},topAxis:{after:0,before:0},bottomAxis:{after:4,before:0},bottomAxisLabel:{after:16,before:0},bottomLegend:{after:10,before:16},footer:{after:0,before:16}},Rp={leftLegend:{after:10,before:0},leftAxis:{after:4,before:0},rightAxis:{after:10,before:4}},qt="…",Ji=(e,t,r)=>{if(t<=0||e.length===0)return"";if(r(e)<=t)return e;if(r(qt)>t)return"";let n=0,a=e.length-1,i=0;for(;n<=a;){const s=n+a>>>1;r(e.slice(0,s)+qt)<=t?(i=s,n=s+1):a=s-1}return e.slice(0,i)+qt};var _={timeZone:"UTC"},P=e=>t=>{if(!l.isStrictTemporalDataValue(t))return"–";try{return e(t)}catch{return"n/a"}},ie=e=>t=>l.isStrictNumericDataValue(t)?e(t):"–",Gr=e=>t=>l.isStrictCategoricalDataValue(t)?t:"–",Cp=cr.default.humanizer({language:"en",spacer:"",delimiter:" ",languages:{en:{y:()=>"y",mo:()=>"mo",w:()=>"w",d:()=>"d",h:()=>"h",m:()=>"m",s:()=>"s",ms:()=>"ms"}}}),Qi=({valueFormat:e,locale:t,numberFormat:r,intlOptions:n})=>ie(a=>{const i=typeof r.decimals=="number"?r.decimals:2,s=Hr(a,i),{base:o,suffix:c}=Wr(a,r.abbreviation),u={...s,...l.isCurrencyValueFormat(e)?{style:"currency",currencyDisplay:"narrowSymbol",currency:e.iso}:{},...n};return`${Intl.NumberFormat(t,u).format(o)}${c}`}),es=({locale:e,numberFormat:t,intlOptions:r})=>ie(n=>{const{base:a,suffix:i}=Wr(n,t.abbreviation),s={...Hr(a,t.decimals),...r};return`${Intl.NumberFormat(e,s).format(a)}${i}`}),Ur=e=>ie(t=>Cp(t)),ts=({locale:e,intlOptions:t})=>ie(r=>Intl.NumberFormat(e,{maximumFractionDigits:0,...t}).format(r)),rs=({locale:e,numberFormat:t,intlOptions:r})=>ie(n=>{const a=Hr(n,t.decimals);return Intl.NumberFormat(e,{...a,...r,style:"percent"}).format(n)}),Wr=(e,t="none")=>{switch(t){case"none":return{base:e,suffix:""};case"auto":{const r=Dp(e);return Wr(e,r)}default:return{base:e/l.SUFFIX_MULTIPLIERS[t],suffix:t}}},Hr=(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}},Dp=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"},kp=({locale:e,intlOptions:t})=>P(r=>Intl.DateTimeFormat(e,{dateStyle:"medium",..._,...t}).format(r)),Pp=({locale:e,intlOptions:t})=>P(r=>{const n=Intl.DateTimeFormat(e,{dateStyle:"medium",timeStyle:"medium",..._,...t}).formatToParts(r);return Op(n.map(Mp))}),ns=({locale:e,intlOptions:t})=>P(r=>Intl.DateTimeFormat(e,{day:"numeric",month:"long",..._,...t}).format(r)),as=({locale:e,intlOptions:t})=>P(r=>Intl.DateTimeFormat(e,{month:"long",..._,...t}).format(r)),zr=({locale:e,intlOptions:t})=>P(r=>Intl.DateTimeFormat(e,{month:"short",year:"numeric",..._,...t}).format(r)),Kr=e=>P(t=>`Q${Math.floor(t.getUTCMonth()/3)+1} ${t.getUTCFullYear()}`),is=({locale:e,intlOptions:t})=>P(r=>{const n=(0,ka.addDays)(r,6);return Intl.DateTimeFormat(e,{day:"numeric",month:"long",..._,...t,year:void 0}).formatRange(r,n)}),ss=({locale:e,intlOptions:t})=>P(r=>{const n=(0,ka.addDays)(r,6);return Intl.DateTimeFormat(e,{dateStyle:"medium",..._,...t}).formatRange(r,n)}),Yr=({locale:e,intlOptions:t})=>P(r=>Intl.DateTimeFormat(e,{year:"numeric",..._,...t}).format(r)),os=({locale:e,intlOptions:t})=>P(r=>Intl.DateTimeFormat(e,{timeStyle:"short",..._,...t}).format(r)),Op=e=>e.map(t=>t.value).join(""),Mp=e=>e.type!=="literal"||e.value!==", "?e:{type:"literal",value:" • "},jn=1e3,_p=({valueFormat:e,locale:t,tickValues:r,intlOptions:n})=>ie(a=>{const i={...jr(a,r),notation:"compact",...l.isCurrencyValueFormat(e)?{style:"currency",currencyDisplay:"narrowSymbol",currency:e.iso}:{},...n};return qr(a,t,i)}),Np=({locale:e,tickValues:t,intlOptions:r})=>ie(n=>{const a={...jr(n,t),notation:"compact",...r};return qr(n,e,a)}),Bp=({locale:e,tickValues:t,intlOptions:r})=>ie(n=>{const a={...jr(n,t),notation:"compact",...r,style:"percent"};return qr(n,e,a)}),qr=(e,t,r)=>Intl.NumberFormat(t,r).formatToParts(e).map(n=>n.type==="compact"?n.value.toLowerCase():n.value).join(""),ls=e=>Math.abs(e)>jn?ls(e/jn):Number.isInteger(e),Fp=e=>{if(e.length<2)return!1;const[t,r]=e;return typeof t!="number"||typeof r!="number"?!1:Math.abs(r-t)<1},jr=(e,t)=>ls(e)?{minimumFractionDigits:0,maximumFractionDigits:0}:Fp(t)?{minimumFractionDigits:0,maximumFractionDigits:4}:{minimumFractionDigits:0,maximumFractionDigits:1},$p=({locale:e,intlOptions:t})=>P(r=>Intl.DateTimeFormat(e,{day:"numeric",month:"short",..._,...t}).format(r)),Gp=({locale:e,intlOptions:t})=>P(r=>Intl.DateTimeFormat(e,{month:"short",..._,...t}).format(r)),Up=({locale:e,intlOptions:t})=>P(r=>Intl.DateTimeFormat(e,{day:"numeric",month:"short",..._,...t}).format(r)),Wp=({locale:e,intlOptions:t})=>P(r=>Intl.DateTimeFormat(e,{timeStyle:"short",..._,...t}).format(r)),Xr=e=>{const{valueFormat:t}=e;switch(t.type){case"currency":return _p(e);case"date":case"datetime":return $p(e);case"day_month":case"weekly_date_range":case"weekly_date_range_with_year":return Up(e);case"decimal":case"integer":return Np(e);case"duration":return Ur(e);case"month":return Gp(e);case"month_year":return zr(e);case"percentage":return Bp(e);case"quarter":return Kr(e);case"text":return Gr(e);case"time":return Wp(e);case"year":return Yr(e);case"lookup":return Xr({...e,valueFormat:t.fallback});default:throw new l.InternalError({message:`Unhandled value format: ${t.type}`})}},Hp=.9,zp=1/3,Kp=1/4,Yp=e=>e.formattedAxis.position==="top"||e.formattedAxis.position==="bottom"?qp(e):jp(e),qp=({formattedAxis:e,bandwidthPx:t,panelRect:r,measureLabel:n})=>{const{widths:a,maxWidth:i,maxHeight:s}=cs(e.ticks,n),o=Xp(e.ticks,r.width),c=o*Hp;if(i<=c)return{...e,labelRotation:0,labelMaxWidthPx:null};if(o>=50){const d=yr(c);return{...e,ticks:gr(e.ticks,a,d,n),labelRotation:0,labelMaxWidthPx:d}}if(s+8>t)return{...e,ticks:[],labelRotation:0,labelMaxWidthPx:null};const u=yr(r.height*zp);return{...e,ticks:gr(e.ticks,a,u,n),labelRotation:-90,labelMaxWidthPx:u}},jp=({formattedAxis:e,bandwidthPx:t,panelRect:r,measureLabel:n})=>{const{widths:a,maxWidth:i,maxHeight:s}=cs(e.ticks,n);if(s>t)return{...e,ticks:[],labelRotation:0,labelMaxWidthPx:null};const o=yr(r.width*Kp);return i<=o?{...e,labelRotation:0,labelMaxWidthPx:null}:{...e,ticks:gr(e.ticks,a,o,n),labelRotation:0,labelMaxWidthPx:o}},Xp=(e,t)=>{const r=e[0],n=e[1];return r===void 0||n===void 0?t:Math.abs(n.position-r.position)*t},cs=(e,t)=>{const r=[];let n=0,a=0;for(const i of e){const{width:s,height:o}=t(i.formattedLabel);r.push(s),s>n&&(n=s),o>a&&(a=o)}return{widths:r,maxWidth:n,maxHeight:a}},gr=(e,t,r,n)=>{const a=i=>n(i).width;return e.map((i,s)=>(t[s]??0)<=r?i:{...i,formattedLabel:Ji(i.formattedLabel,r,a)})},yr=e=>Math.max(0,Math.floor(e)),Zp=(e,t,r,n)=>{if(e.length===0)return!0;const a=t==="top"||t==="bottom",i=a?60:40;let s=r-(e.length-1)*i;for(const o of e){const{width:c,height:u}=n(o);if(s-=a?c:u,s<0)return!1}return!0},Jp=({axis:e,availableSpacePx:t,measureLabel:r,resolveFormatter:n})=>{const{tickCandidates:a,position:i}=e;if(a.length===0)return[];const s=new Map,o=m=>{const h=s.get(m);if(h)return h;const p=a[m],f=p?Qp(p.ticks,n(p)):[];return s.set(m,f),f};let c=0,u=a.length-1,d=-1;for(;c<=u;){const m=c+u>>>1;Zp(o(m).map(h=>h.formattedLabel),i,t,r)?(d=m,c=m+1):u=m-1}return d>=0?o(d):o(0)},Qp=(e,t)=>e.map(r=>({...r,formattedLabel:t(r.value)})),Xn=.5,je=e=>({x:0,y:0,width:e.width,height:e.height}),Zr=e=>e==="panel-end"?"end":e==="panel-start"?"start":e,Xe=({box:e,panel:t,frame:r,placement:n,justify:a,align:i,offset:s,alignOffset:o,labelWidth:c,labelHeight:u})=>{const d=a==="panel-start"||a==="panel-end",m=(r.valueAxis==="x"?e.height:e.width)===0,h={anchor:tf(a,r.valueDirectionSign),placement:d?"inside":n,offset:s},p={anchor:rf(i),placement:m?n:"inside",offset:m?o??s:0},f=d?t:e,g=r.valueAxis==="x"?f:e,y=r.valueAxis==="y"?f:e,v=r.valueAxis==="x"?h:p,x=r.valueAxis==="x"?p:h,T=Jn(v,{min:g.x,max:g.x+g.width,halfExtent:c/2}),A=Jn(x,{min:y.y,max:y.y+y.height,halfExtent:u/2});return{x:T,y:A,position:ef(e,T,A,c,u)}},Zn=(e,t,r,n)=>r-n>=e-Xn&&r+n<=t+Xn,ef=(e,t,r,n,a)=>{if(e.width===0&&e.height===0)return"outside";const i=e.width===0||Zn(e.x,e.x+e.width,t,n/2),s=e.height===0||Zn(e.y,e.y+e.height,r,a/2);return i&&s?"inside":"outside"},tf=(e,t)=>e==="center"?"center":(e==="end"||e==="panel-end")==(t===1)?"max":"min",rf=e=>e==="center"?"center":e==="start"?"min":"max",Jn=({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 s=r+i;return e==="min"?t==="inside"?n+s:n-s:t==="inside"?a-s:a+s},nf=(e,t,r,n,a)=>{const i=t??e,s=1-Math.max(e,i);return{box:{x:r*n,y:s*a,width:0,height:Math.abs(e-i)*a},frame:{valueAxis:"y",valueDirectionSign:e>=i?-1:1}}},af=e=>{const t=[];if(!e.layer.dataLabels.showDataLabels)return t;const{offset:r}=e.layer.dataLabels,n=of(e.layer);for(const a of e.layer.data){const i=V(a),s=O(a)??E(a);if(i===null||s===null||!De(i,s))continue;const o=e.formatLabel(a);if(o==="")continue;const{width:c,height:u}=e.measureDataLabel("dataLabel",o),{box:d,frame:m}=nf(s,B(a),i,e.panelRect.width,e.panelRect.height),h=Xe({box:d,panel:je(e.panelRect),frame:m,...n,offset:r,labelWidth:c,labelHeight:u});t.push({layerId:e.layer.id,x:h.x,y:h.y,text:o,width:c,height:u,isRotated:!1,target:"observation",position:"outside"})}return t},sf={place:af,getPercentageValueStrategy:e=>e.position==="fill"?"fill":M(e.position)?"stack":"none"},of=e=>{const{position:t,justify:r,align:n}=e.dataLabels;return t==="auto"?{placement:"outside",justify:"end",align:"center"}:{placement:t,justify:kt(e.data,e.mapping)?Zr(r):r,align:n}},nt=6,lf=e=>{const t=[],r=M(e.layer.position),n=e.coordSystem.mainAxis==="y";if(e.layer.dataLabels.showDataLabels){const{entries:a,shouldRotate:i}=uf({layer:e.layer,mainAxis:e.coordSystem.mainAxis,panelRect:e.panelRect,measureDataLabel:e.measureDataLabel,formatLabel:e.formatLabel,isFlipped:n});for(const s of a){const o=e.layer.dataLabels.position==="auto"?hf({mainAxis:e.coordSystem.mainAxis,isStacked:r,isNegativeBar:s.isNegative,shouldRotate:i,bounds:s.bounds,labelWidth:s.labelWidth,labelHeight:s.labelHeight,panelWidth:e.panelRect.width,panelHeight:e.panelRect.height,offset:e.layer.dataLabels.offset}):pf(e.layer.dataLabels,e.coordSystem.mainAxis,r,s,je(e.panelRect));o!==null&&t.push({layerId:e.layer.id,x:o.x,y:o.y,text:s.text,width:s.labelWidth,height:s.labelHeight,isRotated:o.isRotated,target:"observation",position:o.position})}}if(e.layer.dataLabels.showCategoryLabels)for(const a of ff(e,r))t.push(a);if(e.layer.dataLabels.showStackTotals){const a=bf({layer:e.layer,mainAxis:e.coordSystem.mainAxis,panelRect:e.panelRect,measureDataLabel:e.measureDataLabel,formatAbsolute:e.formatAbsolute});for(const i of a)t.push(i)}return t},cf={place:lf,getPercentageValueStrategy:e=>e.position==="fill"?"fill":M(e.position)?"stack":"absoluteGrandTotal"},uf=({layer:e,mainAxis:t,panelRect:r,measureDataLabel:n,formatLabel:a,isFlipped:i})=>{const s=[];let o=!1;const c=l.extractVariableName(e.mapping.y);for(const u of e.data){const d=ds(t,u);if(d===null)continue;const m=a(u);if(m==="")continue;const{width:h,height:p}=n("dataLabel",m),f=Jr(d,r);h>f.width&&(o=!0);const g=c===null?null:u[c],y=l.isStrictNumericDataValue(g)&&g<0;s.push({isNegative:y,text:m,labelWidth:h,labelHeight:p,bounds:f})}return{entries:s,shouldRotate:!i&&o}},Jr=(e,t)=>({x:e.x*t.width,y:e.y*t.height,width:e.width*t.width,height:e.height*t.height}),us=(e,t,r,n,a)=>{if(e==="x"){let o=1-a,c=a-n;return c<0&&(o+=c,c=-c),{x:t,y:o,width:r-t,height:c}}let i=t,s=r-t;return s<0&&(i+=s,s=-s),{x:i,y:1-a,width:s,height:a-n}},ds=(e,t)=>{const r=K(t),n=Y(t),a=B(t),i=O(t)??E(t);return r===null||n===null||a===null||i===null?null:us(e,r,n,a,i)},df=(e,t)=>{const{xMin:r,xMax:n,yMin:a,yMax:i}=t.anchor;return us(e,r,n,a,i)},mf=(e,t)=>e==="x"?t?"bottom":"top":t?"left":"right",ms=(e,t,r)=>r?{width:t,height:e}:{width:e,height:t},hf=e=>e.isStacked?gf({bounds:e.bounds,labelWidth:e.labelWidth,labelHeight:e.labelHeight,isRotated:e.shouldRotate}):vf({edge:mf(e.mainAxis,e.isNegativeBar),bounds:e.bounds,labelWidth:e.labelWidth,labelHeight:e.labelHeight,isRotated:e.shouldRotate,panelWidth:e.panelWidth,panelHeight:e.panelHeight,offset:e.offset}),hs=(e,t)=>e==="x"?{valueAxis:"y",valueDirectionSign:t?1:-1}:{valueAxis:"x",valueDirectionSign:t?-1:1},pf=(e,t,r,n,a)=>{if(e.position==="auto")return null;const i=r&&e.position==="outside"?"inside":e.position,s=Xe({box:n.bounds,panel:a,frame:hs(t,n.isNegative),placement:i,justify:e.justify,align:e.align,offset:e.offset,labelWidth:n.labelWidth,labelHeight:n.labelHeight});return{x:s.x,y:s.y,isRotated:!1,position:s.position}},ff=(e,t)=>{const r=[],{categoryPosition:n,categoryJustify:a,categoryAlign:i,categoryOffset:s}=e.layer.dataLabels,o=t&&n==="outside"?"inside":n,c=e.coordSystem.mainAxis,u=je(e.panelRect),d=l.extractVariableName(e.layer.mapping.y);for(const m of e.layer.data){const h=ds(c,m);if(h===null)continue;const p=e.formatCategory(m);if(p===null||p==="")continue;const{width:f,height:g}=e.measureDataLabel("categoryLabel",p),y=Jr(h,e.panelRect),v=d===null?null:m[d],x=l.isStrictNumericDataValue(v)&&v<0,T=Xe({box:y,panel:u,frame:hs(c,x),placement:o,justify:a,align:i,offset:s,labelWidth:f,labelHeight:g});r.push({layerId:e.layer.id,x:T.x,y:T.y,text:p,width:f,height:g,isRotated:!1,target:"category",position:T.position})}return r},gf=({bounds:e,labelWidth:t,labelHeight:r,isRotated:n})=>{const a=ms(t,r,n);return a.width>e.width||a.height>e.height?null:{x:e.x+e.width/2,y:e.y+e.height/2,isRotated:n,position:"inside"}},yf=(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}}},vf=({edge:e,bounds:t,labelWidth:r,labelHeight:n,isRotated:a,panelWidth:i,panelHeight:s,offset:o})=>{const c=e==="top"||e==="bottom",u=t.x+t.width/2,d=t.y+t.height/2,m=ms(r,n,a),h=c?m.height:m.width,p=c?m.width:m.height,f=c?t.height:t.width,g=c?t.width:t.height,y=h/2,{edgeCoord:v,outwardSign:x,panelExtent:T}=yf(e,t,i,s);if(h+o<f){if(p>g)return null;if(a)return{x:u,y:d,isRotated:!0,position:"inside"};const N=v-x*(y+o);return{...c?{x:u,y:N}:{x:N,y:d},isRotated:!1,position:"inside"}}const A=v+x*(y+o);return A-y<0||A+y>T?null:{...c?{x:u,y:A}:{x:A,y:d},isRotated:a,position:"outside"}},bf=({layer:e,mainAxis:t,panelRect:r,measureDataLabel:n,formatAbsolute:a})=>{const i=[],s=e.summary.stackTotals;if(s===void 0||s.length===0)return i;const o=t==="y";for(const c of s){const u=Jr(df(t,c),r),d=a(c.total),{width:m,height:h}=n("stackTotal",d),p=c.anchor.direction==="positive";let f,g;o?(f=p?u.x+u.width+nt+m/2:u.x-nt-m/2,g=u.y+u.height/2):(f=u.x+u.width/2,g=p?u.y-nt-h/2:u.y+u.height+nt+h/2),i.push({layerId:e.id,x:f,y:g,text:d,width:m,height:h,isRotated:!1,target:"aggregate",position:"outside"})}return i},Sf=e=>{const t=[];if(!e.layer.dataLabels.showDataLabels)return t;const{offset:r}=e.layer.dataLabels,n=Af(e.layer);for(const a of e.layer.data){const i=V(a),s=E(a);if(i===null||s===null||!De(i,s))continue;const o=e.formatLabel(a);if(o==="")continue;const{width:c,height:u}=e.measureDataLabel("dataLabel",o),d=Xe({box:{x:i*e.panelRect.width,y:(1-s)*e.panelRect.height,width:0,height:0},panel:je(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:o,width:c,height:u,isRotated:!1,target:"observation",position:d.position})}return t},xf={place:Sf,getPercentageValueStrategy:()=>"none"},Af=e=>{const{position:t,justify:r,align:n}=e.dataLabels;return t==="auto"?{placement:"outside",justify:"end",align:"center"}:{placement:t,justify:kt(e.data,e.mapping)?Zr(r):r,align:n}},If={color:wt,alpha:Ga,strokeWidth:hr,lineType:Ua,size:wr,borderWidth:hr},Qr=(e={})=>{const t=e.colorScheme??"light",r=new WeakMap;return{geomReaders:i=>{const s=r.get(i);if(s!==void 0)return s;const o=Tf(i.styles,t);return r.set(i,o),o},explain:(i,s,o,c)=>{if(c!==void 0){const h=Ue(i.styles.overrides,s,o,c,t);if(h!==void 0)return{value:h.value,tier:"override",origin:h.origin,state:c};const p=Ue(i.styles.defaults,s,o,c,t);if(p!==void 0)return{value:p.value,tier:"default",origin:p.origin,state:c}}const u=Ue(i.styles.overrides,s,o,void 0,t);if(u!==void 0)return{value:u.value,tier:"override",origin:u.origin};const d=ps(s,o);if(d!==void 0)return{value:d,tier:"data"};const m=Ue(i.styles.defaults,s,o,void 0,t);return m!==void 0?{value:m.value,tier:"default",origin:m.origin}:{value:void 0,tier:"unresolved"}}}},Tf=(e,t)=>({get:(n,a,i)=>{if(i!==void 0){const c=at(e.overrides,n,a,i,t);if(c!==void 0)return c;const u=at(e.defaults,n,a,i,t);if(u!==void 0)return u}const s=at(e.overrides,n,a,void 0,t);if(s!==void 0)return s;const o=ps(n,a);return o!==void 0?o:at(e.defaults,n,a,void 0,t)}}),at=(e,t,r,n,a)=>Ue(e,t,r,n,a)?.value,Ue=(e,t,r,n,a)=>{for(let i=e.length-1;i>=0;i--){const s=e[i];if(s===void 0||s.state!==n)continue;const o=s.declarations[t];if(o!==void 0&&Lf(s,r))return{value:wf(o,a),origin:s.origin}}},Lf=(e,t)=>e.matches===void 0?!0:t!==void 0&&e.matches(t),wf=(e,t)=>l.isLightDarkColor(e)?e[t]:e,ps=(e,t)=>{const r=If[e];if(!(r===void 0||t===void 0))return r(t)??void 0},Ef=e=>{const t=[];if(!e.layer.dataLabels.showDataLabels)return t;const{offset:r}=e.layer.dataLabels,n=Rf(e.layer),a=n.justify==="panel-start"||n.justify==="panel-end",i=Qr().geomReaders(e.layer);for(const s of e.layer.data){const o=V(s),c=E(s);if(o===null||c===null||!De(o,c))continue;const u=e.formatLabel(s);if(u==="")continue;const{width:d,height:m}=e.measureDataLabel("dataLabel",u),h=i.get("size",s)/2,p=Xe({box:{x:o*e.panelRect.width,y:(1-c)*e.panelRect.height,width:0,height:0},panel:je(e.panelRect),frame:{valueAxis:"y",valueDirectionSign:-1},...n,offset:a?r:r+h,alignOffset:r+h,labelWidth:d,labelHeight:m});t.push({layerId:e.layer.id,x:p.x,y:p.y,text:u,width:d,height:m,isRotated:!1,target:"observation",position:p.position})}return t},Vf={place:Ef,getPercentageValueStrategy:()=>"none"},Rf=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}};function en(e){return{startAngle:e[l.POSITION_VARIABLES.xMin],endAngle:e[l.POSITION_VARIABLES.xMax]}}function tn(e){return{innerRadius:e[l.POSITION_VARIABLES.yMin],outerRadius:e[l.POSITION_VARIABLES.yMax]??e[l.POSITION_VARIABLES.y]}}var Cf=" · ",jt=2,He=(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)},Df=({wedge:e,labelRadius:t,labelAngle:r,labelWidth:n,labelHeight:a})=>{const i=He("radial",r,n,a);if(!(t-i>=e.innerRadiusPx-jt&&t+i<=e.outerRadiusPx+jt)||t<=0)return!1;const s=Math.abs(e.endAngle-e.startAngle)/2,o=He("tangential",r,n,a)/t,c=jt/t;return Math.abs(r-e.midAngle)+o<=s+c},kf=({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,Pf=({wedge:e,isRadialBar:t,offset:r,labelWidth:n,labelHeight:a})=>t?{labelRadius:(e.innerRadiusPx+e.outerRadiusPx)/2,labelAngle:e.midAngle,position:"inside"}:{labelRadius:e.outerRadiusPx+r+He("radial",e.midAngle,n,a),labelAngle:e.midAngle,position:"outside"},Of=({wedge:e,placement:t,justify:r,align:n,offset:a,labelWidth:i,labelHeight:s})=>{const o=n==="start"?e.startAngle:n==="end"?e.endAngle:e.midAngle,c=a+He("radial",o,i,s);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 m=e.innerRadiusPx-c;u=m>=0?m:e.innerRadiusPx+c}let d=o;if(n!=="center"&&u>0){const m=He("tangential",o,i,s)/u;d=o+(n==="start"?1:-1)*m}return{labelRadius:u,labelAngle:d,position:Df({wedge:e,labelRadius:u,labelAngle:d,labelWidth:i,labelHeight:s})?"inside":"outside"}},Mf=e=>{const t=[];if(!e.layer.dataLabels.showDataLabels)return t;const{position:r,justify:n,align:a,offset:i,showCategoryLabels:s}=e.layer.dataLabels,o=e.coordSystem.bandAxis==="y",c=e.panelRect.width/2,u=e.panelRect.height/2,d=Math.min(e.panelRect.width,e.panelRect.height)/2;for(const m of e.layer.data){const{startAngle:h,endAngle:p}=en(m),{innerRadius:f,outerRadius:g}=tn(m);if(h===null||p===null||g===null)continue;const y=e.formatLabel(m);if(y==="")continue;const v=s?e.formatCategory(m):null,x=v===null?y:`${v}${Cf}${y}`,{width:T,height:A}=e.measureDataLabel("dataLabel",x),N={startAngle:h,endAngle:p,midAngle:(h+p)/2,innerRadiusPx:(f??0)*d,outerRadiusPx:g*d},{labelRadius:q,labelAngle:te,position:oe}=r==="auto"?Pf({wedge:N,isRadialBar:o,offset:i,labelWidth:T,labelHeight:A}):Of({wedge:N,placement:r,justify:Zr(n),align:a,offset:i,labelWidth:T,labelHeight:A}),L=c+Math.sin(te)*q,F=u-Math.cos(te)*q;r==="auto"&&!kf({x:L,y:F,labelWidth:T,labelHeight:A,panelRect:e.panelRect})||t.push({layerId:e.layer.id,x:L,y:F,text:x,width:T,height:A,isRotated:!1,target:"observation",position:oe})}return t},_f={place:Mf,getPercentageValueStrategy:()=>"absoluteGrandTotal"},Nf=e=>{const t=R({...e,valueFormat:e.valueFormat.fallback}),r={};for(const[a,i]of Object.entries(e.valueFormat.cases))r[a]=R({...e,valueFormat:i});const n=e.valueFormat.byVariable;return(a,i)=>{if(i===void 0||i[n]===void 0)return t(a);const s=l.getStableKey(i[n]),o=r[s];return o!==void 0?o(a,i):t(a)}},R=e=>{switch(e.valueFormat.type){case"currency":return Qi(e);case"date":return kp(e);case"datetime":return Pp(e);case"day_month":return ns(e);case"decimal":return es(e);case"duration":return Ur(e);case"integer":return ts(e);case"month":return as(e);case"month_year":return zr(e);case"percentage":return rs(e);case"quarter":return Kr(e);case"text":return Gr(e);case"weekly_date_range":return is(e);case"weekly_date_range_with_year":return ss(e);case"year":return Yr(e);case"time":return os(e);case"lookup":return Nf({...e,valueFormat:e.valueFormat});default:{const t=e.valueFormat;throw new l.InternalError({message:`Unhandled value format: ${t.type}`})}}};function rn({layer:e,numberFormat:t,locale:r}){return R({valueFormat:Na(e),locale:r,numberFormat:t})}var Bf=(e,t)=>{const r=l.extractVariableName(t.x);return r!==null&&r!==l.CONSTANT_VARIABLES.x?{read:Tt(e,t),variable:r}:{read:U,variable:l.GROUP_VARIABLES.group}},fs=({layer:e,coordSystem:t,axes:r,numberFormat:n,panelRect:a,measureDataLabel:i,formattingLocale:s,percentageValueStrategy:o})=>{const c=rn({layer:e,numberFormat:n,locale:s});return{layer:e,coordSystem:t,panelRect:a,measureDataLabel:i,formatLabel:Wf({layer:e,numberFormat:n,axes:r,locale:s,absoluteFormatter:c,percentageValueStrategy:o}),formatAbsolute:c,formatCategory:Ff({layer:e,numberFormat:n,locale:s})}},Ff=({layer:e,numberFormat:t,locale:r})=>{const{read:n,variable:a}=Bf(e.data,e.mapping),i=R({valueFormat:e.data.hasVariable(a)?e.data.getValueFormat(a):{type:"text"},locale:r,numberFormat:t});return s=>{const o=n(s);return o===null?null:i(o,s)}},$f=(e,t)=>{switch(t){case"stack":return Gf(e);case"fill":return Uf(e);case"absoluteGrandTotal":return()=>e.summary.absoluteGrandTotal??null;case"none":return()=>null}},Gf=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 s=a[t];if(s==null)return null;const o=r?.get(Or(a,t));return o===void 0?null:o.total}},Uf=e=>{const t=_e(e);return r=>{const n=B(r),a=O(r);if(!l.isStrictNumericDataValue(n)||!l.isStrictNumericDataValue(a))return null;const i=Math.abs(a-n);if(i===0)return null;const s=t(r);return l.isStrictNumericDataValue(s)?s/i:null}},Wf=({layer:e,numberFormat:t,axes:r,locale:n,absoluteFormatter:a,percentageValueStrategy:i})=>{const s=W(e.data,e.dataLabels.labelSource),o=$f(e,i),c=Hf({layer:e,numberFormat:t,axes:r,locale:n,absoluteFormatter:a}),u=R({valueFormat:{type:"percentage"},locale:n,numberFormat:t}),d=e.dataLabels.format==="percentage"&&gs(e);return m=>{const h=s(m);if(h===null)return"";if(!d||!l.isStrictNumericDataValue(h))return c(h,m);const p=o(m);return p===null||p===0?c(h,m):u(h/p)}},Hf=({layer:e,numberFormat:t,axes:r,locale:n,absoluteFormatter:a})=>{const i=e.dataLabels.labelSource,s=l.extractVariableName(i);if(s!==null){if(gs(e))return a;const o=zf(e,r,t,n,s);if(o!==null)return o}return R({valueFormat:Kf(e.data,i),locale:n,numberFormat:t})},gs=e=>{const t=l.extractVariableName(e.dataLabels.labelSource);return t===null?!1:t===l.extractVariableName(Lt(e.position,e.mapping))},zf=(e,t,r,n,a)=>{const i=l.extractVariableName(e.mapping.x);if(i===null||i!==a)return null;const s=t.find(o=>o.scaleAestheticKey==="x");return s===void 0?null:R({valueFormat:s.valueFormat,locale:n,numberFormat:r})},Kf=(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)},nn={bar:{cartesian:cf,polar:_f},line:{cartesian:xf},point:{cartesian:Vf},area:{cartesian:sf}},Yf=(e,t)=>nn[e]?.[t]!==void 0,qf=({layers:e,coordSystem:t,axes:r,numberFormat:n,parsingLocale:a,panelRect:i,measureDataLabel:s,formattingLocale:o,plotBottomY:c,isFooterChromeReserved:u})=>{const d=[],m=o??a,h=t.type;for(const p of e){if(!p.dataLabels.showDataLabels&&!p.dataLabels.showStackTotals&&!p.dataLabels.showCategoryLabels)continue;const f=p.geom,g=nn[f]?.[h];if(g===void 0)continue;const y=fs({layer:p,coordSystem:t,axes:r,numberFormat:n,panelRect:i,measureDataLabel:s,formattingLocale:m,percentageValueStrategy:g.getPercentageValueStrategy(p)}),v=g.place(y);for(const x of v)jf(x,h,c,u)||d.push(x)}return{labels:d}},jf=(e,t,r,n)=>t==="polar"&&n&&e.position==="outside"&&e.y+e.height/2>r;function*Xf({layers:e,coordSystem:t,axes:r,numberFormat:n,panelRect:a,measureDataLabel:i,locale:s}){if(!(t.type!=="cartesian"||a.width<=0||a.height<=0))for(const o of e){if(!o.dataLabels.showDataLabels&&!o.dataLabels.showStackTotals)continue;const c=nn[o.geom]?.cartesian;if(c===void 0)continue;const u=fs({layer:o,coordSystem:t,axes:r,numberFormat:n,panelRect:a,measureDataLabel:i,formattingLocale:s,percentageValueStrategy:c.getPercentageValueStrategy(o)});for(const d of c.place(u))yield{x:a.x+d.x-d.width/2,y:a.y+d.y-d.height/2,width:d.width,height:d.height}}}var Xt={abbreviation:"none",decimals:"auto"},ys=({locale:e,kind:t,startValue:r,endValue:n,valueFormat:a})=>{if(r===null||n===null)return"n/a";switch(t){case"absolute-difference":return R({valueFormat:a,locale:e,numberFormat:Xt,intlOptions:{signDisplay:"always"}})(n-r);case"relative-difference":{const i=n-r;if(i===0)return"0%";const s=i/r;return s===Number.POSITIVE_INFINITY?"∞":s===Number.NEGATIVE_INFINITY?"-∞":R({valueFormat:{type:"percentage"},locale:e,numberFormat:Xt,intlOptions:{signDisplay:"always"}})(s)}case"proportion":{if(n-r===0)return"=";const i=n/r;return i===Number.POSITIVE_INFINITY?"∞":i===Number.NEGATIVE_INFINITY?"-∞":`${R({valueFormat:{type:"decimal"},locale:e,numberFormat:Xt,intlOptions:{maximumFractionDigits:1}})(i)}x`}}},Zt=6,Jt=6,Qt=15,er=5,tr=15,vs=(e,t)=>{switch(e){case"small":return{arrowStartGap:Zt,arrowEndGap:Jt,offsetFromHigherObservation:Qt,arrowheadSize:er,curveRadius:tr,strokeWidth:2,labelLineHeight:12*t,labelPaddingX:6,labelPaddingY:3,labelStrokeWidth:1,labelFontWeight:500};case"medium":return{arrowStartGap:Zt*1.5,arrowEndGap:Jt*1.5,offsetFromHigherObservation:Qt*1.25,arrowheadSize:er*1.5,curveRadius:tr*1.25,strokeWidth:3,labelLineHeight:16*t,labelPaddingX:8,labelPaddingY:4,labelStrokeWidth:1.5,labelFontWeight:500};case"large":return{arrowStartGap:Zt*2,arrowEndGap:Jt*2,offsetFromHigherObservation:Qt*1.75,arrowheadSize:er*2.5,curveRadius:tr*1.5,strokeWidth:5,labelLineHeight:20*t,labelPaddingX:10,labelPaddingY:5,labelStrokeWidth:2,labelFontWeight:600}}},Zf=(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},Jf=(e,t,r,{arrowStartGap:n,arrowEndGap:a,curveRadius:i})=>{const s={x:e.x,y:e.y-n},o={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 ${s.x} ${s.y}
|
|
3
3
|
L ${o.x} ${o.y+i}
|
|
4
4
|
Q ${o.x} ${o.y} ${o.x+d*i} ${o.y}
|
package/dist/index.mjs
CHANGED
|
@@ -12,7 +12,7 @@ import yc from "humanize-duration";
|
|
|
12
12
|
import { arc as vc, area as Ha, curveCatmullRom as bc, curveLinear as xc, line as Ka } from "d3-shape";
|
|
13
13
|
import { getContrast as Ln } from "color2k";
|
|
14
14
|
import { Delaunay as Sc } from "d3-delaunay";
|
|
15
|
-
typeof window < "u" && (window.__GRAPHY_SDK__ ??= {}, window.__GRAPHY_SDK__.vizEngine = "1.8.1-beta.
|
|
15
|
+
typeof window < "u" && (window.__GRAPHY_SDK__ ??= {}, window.__GRAPHY_SDK__.vizEngine = "1.8.1-beta.1786354953172");
|
|
16
16
|
var wc = 1e6;
|
|
17
17
|
function ee(e) {
|
|
18
18
|
return String(Math.round(e * wc));
|