chart-factory 0.1.2
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/LICENSE +21 -0
- package/README.md +162 -0
- package/dist/chart-factory-table.js +1400 -0
- package/dist/chart-factory.css +2368 -0
- package/dist/chart-factory.js +11398 -0
- package/dist/chart-factory.min.js +7 -0
- package/docs/API.md +1815 -0
- package/docs/chart-guide.md +872 -0
- package/docs/color-guide.md +134 -0
- package/docs/conformance-matrix.md +864 -0
- package/docs/theming.md +107 -0
- package/index.d.ts +10453 -0
- package/package.json +83 -0
- package/src/core/base.css +508 -0
- package/src/core/builder-metadata.generated.mjs +406 -0
- package/src/core/d3-base.js +249 -0
- package/src/core/d3-chart-factory.js +18547 -0
- package/src/core/d3-data.js +0 -0
- package/src/core/d3-suggest.js +565 -0
- package/src/core/example-nav.css +62 -0
- package/src/core/example-nav.js +249 -0
- package/src/core/palettes.js +310 -0
- package/src/core/theme-toggle.js +126 -0
- package/src/core/tokens.css +792 -0
- package/src/table/d3-table.js +1570 -0
- package/src/table/table.css +899 -0
- package/src/table/tokens.css +157 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
(()=>{var Ja=Object.create;var ea=Object.defineProperty;var to=Object.getOwnPropertyDescriptor;var eo=Object.getOwnPropertyNames;var ao=Object.getPrototypeOf,oo=Object.prototype.hasOwnProperty;var ro=(e,a)=>()=>(a||e((a={exports:{}}).exports,a),a.exports);var so=(e,a,r,t)=>{if(a&&typeof a=="object"||typeof a=="function")for(let s of eo(a))!oo.call(e,s)&&s!==r&&ea(e,s,{get:()=>a[s],enumerable:!(t=to(a,s))||t.enumerable});return e};var De=(e,a,r)=>(r=e!=null?Ja(ao(e)):{},so(a||!e||!e.__esModule?ea(r,"default",{value:e,enumerable:!0}):r,e));var he=ro((Qr,aa)=>{if(!globalThis.d3)throw new Error("chart-factory: the global `d3` is missing. Load d3 v7 before this bundle.");aa.exports=globalThis.d3});var o=De(he(),1);function me(e,a=""){return getComputedStyle(document.documentElement).getPropertyValue(e).trim()||a}var fe=null;function Lt(e={}){fe||(fe=document.createElement("canvas").getContext("2d"));let a=e.family||me("--font-family","system-ui, sans-serif"),r=e.size||me("--font-size-md","13px"),t=e.weight||"normal";return function(n,l=t,i=r,c=a){return fe.font=`${l} ${i} ${c}`,fe.measureText(String(n)).width}}var Zt={"Area.createBasic":{options:["axisTicks","labelFormat","pointRadius","showPoints","valueFormat","xAccessor","yAccessor"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"supported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"supported",logX:"supported",logY:"unsupported",niceX:"supported",linkGroup:"supported",brush:"supported",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{series:[1,1],points:[2,500]}},"Area.createDiverging":{options:["axisTicks","baseline","curve","labelFormat","negativeColor","pointRadius","positiveColor","showPoints","valueFormat","xAccessor","yAccessor"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"na",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"supported",logX:"supported",logY:"unsupported",niceX:"supported",linkGroup:"supported",brush:"supported",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{series:[1,1],points:[2,500]}},"Area.createNormalized":{options:["axisTicks","keys","labelFormat","labels","xAccessor"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"na",colors:"supported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"supported",logX:"supported",logY:"na",niceX:"supported",linkGroup:"supported",brush:"supported",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{series:[2,6],points:[3,200]}},"Area.createSmoothed":{options:["axisTicks","labelFormat","pointRadius","showPoints","tension","valueFormat","xAccessor","yAccessor"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"supported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"supported",logX:"supported",logY:"unsupported",niceX:"supported",linkGroup:"supported",brush:"supported",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{series:[1,1],points:[10,500]}},"Area.createStacked":{options:["axisTicks","keys","labelFormat","labels","showTotal","totalFormat","valueFormat","xAccessor"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"na",colors:"supported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"supported",logX:"supported",logY:"unsupported",niceX:"supported",linkGroup:"supported",brush:"supported",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{series:[2,6],points:[3,200]}},"Area.createStreamgraph":{options:["axisTicks","keys","labelFormat","labels","showLabels","showTotal","totalFormat","valueFormat","xAccessor"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"na",xLabel:"supported",yLabel:"na",color:"na",colors:"supported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"supported",logX:"supported",logY:"na",niceX:"supported",linkGroup:"supported",brush:"supported",showXAxis:"supported",showYAxis:"na",showGridX:"supported",showGridY:"na",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"na"},cardinality:{series:[4,12],points:[10,200]}},"Bar.createBasic":{options:["allowNonZeroBaseline","barGap","barHeight","borderRadius","categoryAccessor","labelAlign","valueAccessor","valueFormat"],universal:{xDomain:"supported",yDomain:"na",xFormat:"na",yFormat:"na",xLabel:"unsupported",yLabel:"unsupported",color:"supported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"na",logY:"na",niceX:"unsupported",linkGroup:"na",brush:"na",showXAxis:"na",showYAxis:"supported",showGridX:"na",showGridY:"na",showAxisLabels:"supported",xTickValues:"na",yTickValues:"na"},cardinality:{rows:[2,20]}},"Bar.createBullet":{options:["allowNonZeroBaseline","barGap","barHeight","borderRadius","categoryAccessor","labelAlign","rangesAccessor","targetAccessor","targetColor","valueAccessor","valueFormat"],universal:{xDomain:"supported",yDomain:"na",xFormat:"na",yFormat:"na",xLabel:"unsupported",yLabel:"unsupported",color:"supported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"na",logY:"na",niceX:"unsupported",linkGroup:"na",brush:"na",showXAxis:"na",showYAxis:"supported",showGridX:"na",showGridY:"na",showAxisLabels:"supported",xTickValues:"na",yTickValues:"na"},cardinality:{rows:[1,8]}},"Bar.createDiverging":{options:["barGap","barHeight","borderRadius","categoryAccessor","negativeColor","positiveColor","valueAccessor","valueFormat"],universal:{xDomain:"supported",yDomain:"na",xFormat:"na",yFormat:"na",xLabel:"unsupported",yLabel:"unsupported",color:"unsupported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"na",logY:"na",niceX:"unsupported",linkGroup:"na",brush:"na",showXAxis:"na",showYAxis:"supported",showGridX:"na",showGridY:"na",showAxisLabels:"supported",xTickValues:"na",yTickValues:"na"},cardinality:{rows:[2,20]}},"Bar.createGantt":{options:["barGap","barHeight","borderRadius","colorAccessor","dateFormat","endAccessor","groupAccessor","labelAccessor","labelAlign","maxTime","milestones","minTime","rightLabelAccessor","startAccessor","tickCount"],universal:{xDomain:"supported",yDomain:"na",xFormat:"supported",yFormat:"na",xLabel:"unsupported",yLabel:"unsupported",color:"unsupported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"unsupported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"na",logY:"na",niceX:"unsupported",linkGroup:"unsupported",brush:"unsupported",showXAxis:"supported",showYAxis:"supported",showGridX:"supported",showGridY:"na",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"na"},cardinality:{rows:[2,25]}},"Bar.createGrouped":{options:["allowNonZeroBaseline","barGap","barHeight","borderRadius","categoryAccessor","keys","labelAlign","labels","maxValue","showTrack","valueFormat"],universal:{xDomain:"supported",yDomain:"na",xFormat:"na",yFormat:"na",xLabel:"unsupported",yLabel:"unsupported",color:"unsupported",colors:"supported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"na",logY:"na",niceX:"unsupported",linkGroup:"na",brush:"na",showXAxis:"na",showYAxis:"supported",showGridX:"na",showGridY:"na",showAxisLabels:"supported",xTickValues:"na",yTickValues:"na"},cardinality:{rows:[2,8],series:[2,4]}},"Bar.createInline":{options:["allowNonZeroBaseline","barGap","barHeight","borderRadius","categoryAccessor","valueAccessor","valueFormat"],universal:{xDomain:"supported",yDomain:"na",xFormat:"na",yFormat:"na",xLabel:"unsupported",yLabel:"unsupported",color:"supported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"na",logY:"na",niceX:"unsupported",linkGroup:"na",brush:"na",showXAxis:"na",showYAxis:"na",showGridX:"na",showGridY:"na",showAxisLabels:"na",xTickValues:"na",yTickValues:"na"},cardinality:{rows:[2,15]}},"Bar.createLabelAbove":{options:["allowNonZeroBaseline","barGap","barHeight","borderRadius","categoryAccessor","valueAccessor","valueFormat"],universal:{xDomain:"supported",yDomain:"na",xFormat:"na",yFormat:"na",xLabel:"unsupported",yLabel:"unsupported",color:"supported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"na",logY:"na",niceX:"unsupported",linkGroup:"na",brush:"na",showXAxis:"na",showYAxis:"na",showGridX:"na",showGridY:"na",showAxisLabels:"na",xTickValues:"na",yTickValues:"na"},cardinality:{rows:[2,12]}},"Bar.createLikert":{options:["barGap","barHeight","borderRadius","categoryAccessor","contextLabels","keys","labelAlign","labels","maxExtent","showSegmentLabels","valueFormat"],universal:{xDomain:"supported",yDomain:"na",xFormat:"na",yFormat:"na",xLabel:"unsupported",yLabel:"unsupported",color:"unsupported",colors:"supported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"na",logY:"na",niceX:"unsupported",linkGroup:"na",brush:"na",showXAxis:"na",showYAxis:"supported",showGridX:"supported",showGridY:"na",showAxisLabels:"supported",xTickValues:"na",yTickValues:"na"},cardinality:{rows:[1,12],series:[3,7]}},"Bar.createProgress":{options:["allowNonZeroBaseline","barGap","barHeight","borderRadius","categoryAccessor","colorScale","labelAlign","maxValue","valueAccessor","valueFormat"],universal:{xDomain:"supported",yDomain:"na",xFormat:"na",yFormat:"na",xLabel:"unsupported",yLabel:"unsupported",color:"unsupported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"na",logY:"na",niceX:"unsupported",linkGroup:"na",brush:"na",showXAxis:"na",showYAxis:"supported",showGridX:"na",showGridY:"na",showAxisLabels:"supported",xTickValues:"na",yTickValues:"na"},cardinality:{rows:[1,15]}},"Bar.createPyramid":{options:["barGap","barHeight","borderRadius","categoryAccessor","contextLabels","labelAlign","labels","leftAccessor","leftKey","leftLabel","maxExtent","rightAccessor","rightKey","rightLabel","showSegmentLabels","valueFormat"],universal:{xDomain:"supported",yDomain:"na",xFormat:"na",yFormat:"na",xLabel:"unsupported",yLabel:"unsupported",color:"unsupported",colors:"supported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"na",logY:"na",niceX:"unsupported",linkGroup:"na",brush:"na",showXAxis:"na",showYAxis:"supported",showGridX:"supported",showGridY:"na",showAxisLabels:"supported",xTickValues:"na",yTickValues:"na"},cardinality:{rows:[3,25],series:[2,2]}},"Bar.createRange":{options:["barGap","barHeight","borderRadius","colorAccessor","highAccessor","labelAlign","lowAccessor","nameAccessor","rightLabelAccessor","tickCount","valueFormat"],universal:{xDomain:"supported",yDomain:"na",xFormat:"supported",yFormat:"na",xLabel:"unsupported",yLabel:"unsupported",color:"supported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"unsupported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"unsupported",logY:"na",niceX:"unsupported",linkGroup:"na",brush:"na",showXAxis:"supported",showYAxis:"supported",showGridX:"supported",showGridY:"na",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"na"},cardinality:{rows:[2,20]}},"Bar.createStacked":{options:["allowNonZeroBaseline","barGap","barHeight","borderRadius","categoryAccessor","keys","labelAlign","labels","showSegmentLabels","valueFormat"],universal:{xDomain:"supported",yDomain:"na",xFormat:"na",yFormat:"na",xLabel:"unsupported",yLabel:"unsupported",color:"unsupported",colors:"supported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"na",logY:"na",niceX:"unsupported",linkGroup:"na",brush:"na",showXAxis:"na",showYAxis:"supported",showGridX:"na",showGridY:"na",showAxisLabels:"supported",xTickValues:"na",yTickValues:"na"},cardinality:{rows:[2,15],series:[2,6]}},"Bar.createVertical":{options:["allowNonZeroBaseline","axisTicks","borderRadius","rotateXLabels","showLabels","valueFormat","xAccessor","yAccessor"],universal:{xDomain:"na",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"unsupported",yLabel:"unsupported",color:"supported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"na",logY:"na",niceX:"na",linkGroup:"na",brush:"na",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"na",yTickValues:"supported"},cardinality:{categories:[2,60]}},"Bar.createVerticalNormalized":{options:["borderRadius","keys","labels","showSegmentLabels","valueFormat","xAccessor"],universal:{xDomain:"na",yDomain:"na",xFormat:"supported",yFormat:"unsupported",xLabel:"unsupported",yLabel:"unsupported",color:"unsupported",colors:"supported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"na",logY:"na",niceX:"na",linkGroup:"na",brush:"na",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"na",yTickValues:"unsupported"},cardinality:{categories:[2,30],series:[2,6]}},"Bar.createVerticalStacked":{options:["allowNonZeroBaseline","axisTicks","borderRadius","keys","labels","showSegmentLabels","valueFormat","xAccessor"],universal:{xDomain:"na",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"unsupported",yLabel:"unsupported",color:"unsupported",colors:"supported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"na",logY:"na",niceX:"na",linkGroup:"na",brush:"na",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"na",yTickValues:"supported"},cardinality:{categories:[2,30],series:[2,6]}},"Bar.createWaterfall":{options:["barGap","barHeight","borderRadius","colorAccessor","connectorColor","deltaFormat","downColor","labelAlign","nameAccessor","showConnectors","showValueLabels","tickCount","totalAccessor","totalColor","upColor","valueAccessor","valueFormat"],universal:{xDomain:"supported",yDomain:"na",xFormat:"supported",yFormat:"na",xLabel:"unsupported",yLabel:"unsupported",color:"unsupported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"na",logY:"na",niceX:"unsupported",linkGroup:"na",brush:"na",showXAxis:"supported",showYAxis:"supported",showGridX:"supported",showGridY:"na",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"na"},cardinality:{steps:[3,15]}},"BoxPlot.createBasic":{options:["categoryAccessor","jitter","orientation","valueAccessor","valueFormat","whiskers"],universal:{xDomain:"na",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"unsupported",yLabel:"unsupported",color:"supported",colors:"unsupported",colorMap:"supported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"na",logX:"na",logY:"unsupported",niceX:"na",linkGroup:"na",brush:"na",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"na",yTickValues:"supported"},cardinality:{categories:[1,15],points:[5,null]}},"Calendar.createHeatmap":{options:["aggregate","colorDomain","colorScheme","dateAccessor","dateFormat","layout","monthFormat","monthGap","valueAccessor","valueFormat","weekStart"],universal:{xDomain:"na",yDomain:"na",xFormat:"na",yFormat:"na",xLabel:"na",yLabel:"na",color:"na",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"na",extraLayers:"na",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"na",logX:"na",logY:"na",niceX:"na",linkGroup:"na",brush:"na",showXAxis:"na",showYAxis:"na",showGridX:"na",showGridY:"na",showAxisLabels:"na",xTickValues:"na",yTickValues:"na"},cardinality:{days:[30,1100]}},"Donut.createBasic":{options:["centerLabel","innerRatio","labelAccessor","labels","minLabelShare","minSlice","otherLabel","shareFormat","showTotal","sort","totalFormat","valueAccessor","valueFormat"],universal:{xDomain:"na",yDomain:"na",xFormat:"na",yFormat:"na",xLabel:"na",yLabel:"na",color:"na",colors:"supported",colorMap:"supported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"na",extraLayers:"na",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"na",logY:"na",niceX:"na",linkGroup:"na",brush:"na",showXAxis:"na",showYAxis:"na",showGridX:"na",showGridY:"na",showAxisLabels:"na",xTickValues:"na",yTickValues:"na"},cardinality:{slices:[2,6]}},"Dot.createBasic":{options:["axisTicks","categories","dotRadius","nameAccessor","rowLabel","valueFormat","valueLabel"],universal:{xDomain:"supported",yDomain:"na",xFormat:"supported",yFormat:"na",xLabel:"unsupported",yLabel:"unsupported",color:"unsupported",colors:"unsupported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"na",logX:"unsupported",logY:"na",niceX:"unsupported",linkGroup:"na",brush:"na",showXAxis:"supported",showYAxis:"supported",showGridX:"supported",showGridY:"na",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"na"},cardinality:{rows:[2,20],series:[2,5]}},"Dot.createComet":{options:["afterAccessor","afterLabel","beforeAccessor","beforeLabel","downColor","nameAccessor","rowLabel","sortBy","upColor","valueFormat","valueLabel","valuePrefix"],universal:{xDomain:"supported",yDomain:"na",xFormat:"supported",yFormat:"na",xLabel:"unsupported",yLabel:"unsupported",color:"unsupported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"unsupported",logY:"na",niceX:"unsupported",linkGroup:"na",brush:"na",showXAxis:"supported",showYAxis:"supported",showGridX:"supported",showGridY:"na",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"na"},cardinality:{rows:[2,20]}},"Dot.createConfidence":{options:["bandHeight","controlColor","dotRadius","highAccessor","isControlAccessor","lowAccessor","nameAccessor","rowHeight","rowLabel","significantColor","treatmentColor","valueAccessor","valueFormat","valueLabel"],universal:{xDomain:"supported",yDomain:"na",xFormat:"supported",yFormat:"na",xLabel:"unsupported",yLabel:"unsupported",color:"unsupported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"na",logX:"unsupported",logY:"na",niceX:"unsupported",linkGroup:"na",brush:"na",showXAxis:"supported",showYAxis:"supported",showGridX:"supported",showGridY:"na",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"na"},cardinality:{rows:[2,15]}},"Dot.createDumbbell":{options:["connectorColor","dotRadius","endAccessor","endColor","endLabel","nameAccessor","rowLabel","showLabels","startAccessor","startColor","startLabel","valueFormat","valueLabel"],universal:{xDomain:"supported",yDomain:"na",xFormat:"supported",yFormat:"na",xLabel:"unsupported",yLabel:"unsupported",color:"unsupported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"na",logX:"unsupported",logY:"na",niceX:"unsupported",linkGroup:"na",brush:"na",showXAxis:"supported",showYAxis:"supported",showGridX:"supported",showGridY:"na",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"na"},cardinality:{rows:[2,25]}},"Dot.createGradient":{options:["dotRadius","endAccessor","endColor","endLabel","nameAccessor","rowLabel","startAccessor","startColor","startLabel","valueFormat","valueLabel"],universal:{xDomain:"supported",yDomain:"na",xFormat:"supported",yFormat:"na",xLabel:"unsupported",yLabel:"unsupported",color:"unsupported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"na",logX:"unsupported",logY:"na",niceX:"unsupported",linkGroup:"na",brush:"na",showXAxis:"supported",showYAxis:"supported",showGridX:"supported",showGridY:"na",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"na"},cardinality:{rows:[2,25]}},"Dot.createPercentile":{options:["bandColors","bandHeight","dotColor","dotRadius","nameAccessor","percentileKeys","rowHeight","rowLabel","valueAccessor","valueFormat","valueLabel"],universal:{xDomain:"supported",yDomain:"na",xFormat:"supported",yFormat:"na",xLabel:"unsupported",yLabel:"unsupported",color:"unsupported",colors:"unsupported",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"na",logX:"unsupported",logY:"na",niceX:"unsupported",linkGroup:"na",brush:"na",showXAxis:"supported",showYAxis:"supported",showGridX:"supported",showGridY:"na",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"na"},cardinality:{rows:[1,15]}},"Dot.createUnitHistogram":{options:["animationDuration","binDelay","binWidth","categoryAccessor","categoryFormat","countAccessor","dotGap","dotSize","staggerDelay","unitLabel"],universal:{xDomain:"na",yDomain:"na",xFormat:"unsupported",yFormat:"na",xLabel:"unsupported",yLabel:"na",color:"supported",colors:"unsupported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"unsupported",extraLayers:"unsupported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"na",logY:"na",niceX:"na",linkGroup:"na",brush:"na",showXAxis:"supported",showYAxis:"na",showGridX:"na",showGridY:"na",showAxisLabels:"supported",xTickValues:"na",yTickValues:"na"},cardinality:{units:[10,300],bins:[2,15]}},"Histogram.createBasic":{options:["barGap","binWidth","bins","mode","valueAccessor"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"supported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"unsupported",logY:"unsupported",niceX:"na",linkGroup:"supported",brush:"supported",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{points:[30,null],bins:[5,60]}},"Histogram.createOverlay":{options:["barGap","binWidth","bins","mode","series","style","valueAccessor"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"na",colors:"supported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"unsupported",logY:"unsupported",niceX:"na",linkGroup:"supported",brush:"supported",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{series:[2,4],points:[60,null]}},"Line.createAreaGradient":{options:["axisTicks","labelFormat","pointRadius","valueFormat","xAccessor","yAccessor"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"supported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"supported",logX:"supported",logY:"unsupported",niceX:"supported",linkGroup:"supported",brush:"supported",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{series:[1,1],points:[2,1e3]}},"Line.createBasic":{options:["axisTicks","labelFormat","pointRadius","showPoints","strokeGradient","strokeGradientDomain","valueFormat","xAccessor","yAccessor"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"supported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"supported",logX:"supported",logY:"unsupported",niceX:"supported",linkGroup:"supported",brush:"supported",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{series:[1,1],points:[2,1e3]}},"Line.createBumpChart":{options:["colorScale","curve","maxRank","periods","showRankLabels","thinPeriodLabels"],universal:{xDomain:"na",yDomain:"na",xFormat:"supported",yFormat:"na",xLabel:"supported",yLabel:"na",color:"na",colors:"supported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"unsupported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"na",logY:"na",niceX:"na",linkGroup:"na",brush:"na",showXAxis:"supported",showYAxis:"na",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"na",yTickValues:"na"},cardinality:{series:[2,10],periods:[2,12]}},"Line.createCombined":{options:["avgColor","axisTicks","labelFormat","pointRadius","rawColor","valueFormat","windowSize","xAccessor","yAccessor"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"unsupported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"supported",logX:"supported",logY:"unsupported",niceX:"supported",linkGroup:"supported",brush:"supported",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{series:[1,1],points:[10,1e3]}},"Line.createCumulativeVsMoving":{options:["axisTicks","cumulativeAccessor","cumulativeColor","curve","labelFormat","movingAccessor","movingColor","pointRadius","xAccessor"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"unsupported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"supported",logX:"supported",logY:"unsupported",niceX:"supported",linkGroup:"supported",brush:"supported",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{series:[2,2],points:[10,1e3]}},"Line.createDynamicBand":{options:["actualAccessor","actualColor","axisTicks","bandColor","dividerColor","forecastAccessor","forecastColor","forecastStart","labelFormat","lowerAccessor","pointRadius","strokeGradient","strokeGradientDomain","upperAccessor","xAccessor"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"unsupported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"supported",logX:"supported",logY:"unsupported",niceX:"supported",linkGroup:"supported",brush:"supported",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{series:[1,1],points:[10,1e3]}},"Line.createForecastBand":{options:["actualAccessor","actualColor","anomalyColor","axisTicks","bandColor","labelFormat","lowerAccessor","pointRadius","showAnomalies","strokeGradient","strokeGradientDomain","upperAccessor","xAccessor"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"unsupported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"supported",logX:"supported",logY:"unsupported",niceX:"supported",linkGroup:"supported",brush:"supported",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{series:[1,1],points:[10,2e3]}},"Line.createGrowthRate":{options:["axisTicks","downColor","labelFormat","pointRadius","upColor","valueFormat","xAccessor","yAccessor"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"unsupported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"supported",logX:"supported",logY:"na",niceX:"supported",linkGroup:"supported",brush:"supported",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{series:[1,1],points:[3,500]}},"Line.createMulti":{options:["axisTicks","curve","endDotGap","endDotRadius","endDots","labelFormat","pointRadius","series","seriesLabelFormat","seriesLabels","showPoints","tooltipRowFilter","tooltipSortRows","valueFormat","xAccessor","yAccessor"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"na",colors:"supported",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"supported",logX:"supported",logY:"unsupported",niceX:"supported",linkGroup:"supported",brush:"supported",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{series:[2,6],pointsPerSeries:[2,500]}},"Line.createPulseAnomalies":{options:["actualAccessor","actualColor","anomalyAccessor","anomalyColor","axisTicks","bandColor","labelFormat","lowerAccessor","pointRadius","upperAccessor","xAccessor"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"unsupported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"supported",logX:"supported",logY:"unsupported",niceX:"supported",linkGroup:"supported",brush:"supported",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{series:[1,1],points:[10,1e3]}},"Line.createSmoothed":{options:["axisTicks","labelFormat","pointRadius","strokeGradient","strokeGradientDomain","valueFormat","xAccessor","yAccessor"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"supported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"supported",logX:"supported",logY:"unsupported",niceX:"supported",linkGroup:"supported",brush:"supported",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{series:[1,1],points:[30,5e3]}},"Line.createTextures":{options:["axisTicks","labelFormat","pointRadius","series","valueFormat","xAccessor","yAccessor"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"na",colors:"unsupported",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"supported",logX:"supported",logY:"unsupported",niceX:"supported",linkGroup:"supported",brush:"supported",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{series:[2,4],pointsPerSeries:[2,300]}},"Line.createYearly":{options:["axisTicks","curve","labelFormat","pointRadius","strokeGradient","strokeGradientDomain","valueFormat","xAccessor","yAccessor"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"supported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"supported",logX:"supported",logY:"unsupported",niceX:"supported",linkGroup:"supported",brush:"supported",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{series:[1,1],points:[50,5e3]}},"Line.createYoY":{options:["axisTicks","curve","labelFormat","pointRadius","series","seriesLabelFormat","seriesLabels","tooltipRowFilter","tooltipSortRows","valueFormat","xAccessor","yAccessor"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"na",colors:"supported",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"supported",logX:"supported",logY:"unsupported",niceX:"supported",linkGroup:"supported",brush:"supported",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{series:[2,6],pointsPerSeries:[2,400]}},"Sankey.createBasic":{options:["linkColor","linkShape","nodeAlign","nodePadding","nodeValues","nodeWidth","orientation","sankey","showValues","sourceAccessor","targetAccessor","valueAccessor","valueFormat"],universal:{xDomain:"na",yDomain:"na",xFormat:"na",yFormat:"na",xLabel:"na",yLabel:"na",color:"na",colors:"supported",colorMap:"supported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"na",extraLayers:"na",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"na",logY:"na",niceX:"na",linkGroup:"na",brush:"na",showXAxis:"na",showYAxis:"na",showGridX:"na",showGridY:"na",showAxisLabels:"na",xTickValues:"na",yTickValues:"na"},cardinality:{nodes:[4,30],links:[3,60]}},"Scatter.createAnimated":{options:["animInterval","showTrails","trailOpacity","trailWidth"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"supported",colors:"supported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"unsupported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"supported",logY:"supported",niceX:"unsupported",linkGroup:"unsupported",brush:"unsupported",showXAxis:"supported",showYAxis:"supported",showGridX:"supported",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{points:[5,100]}},"Scatter.createBasic":{options:["axisTicks","categoryAccessor","dotLabels","dotOpacity","dotRadius","dotStyle","hoverGuides","nameAccessor","sizeAccessor","xAccessor","xTooltipLabel","yAccessor","yTooltipLabel"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"supported",colors:"supported",colorMap:"supported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"unsupported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"supported",logY:"supported",niceX:"unsupported",linkGroup:"supported",brush:"supported",showXAxis:"supported",showYAxis:"supported",showGridX:"supported",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{points:[10,1e3]}},"Scatter.createBeeswarm":{options:["categoryAccessor","dotLabels","dotRadius","valueAccessor","valueFormat"],universal:{xDomain:"supported",yDomain:"na",xFormat:"unsupported",yFormat:"na",xLabel:"unsupported",yLabel:"unsupported",color:"supported",colors:"supported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"na",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"na",logX:"unsupported",logY:"na",niceX:"unsupported",linkGroup:"na",brush:"na",showXAxis:"supported",showYAxis:"supported",showGridX:"supported",showGridY:"na",showAxisLabels:"supported",xTickValues:"unsupported",yTickValues:"na"},cardinality:{categories:[1,8],points:[10,400]}},"Scatter.createBeeswarmHorizontal":{options:["categoryAccessor","colorAccessor","dotLabels","dotOpacity","dotRadius","dotStroke","dotStrokeWidth","imageAccessor","labelFormat","logoSize","nameAccessor","showGrid","valueAccessor","valueFormat","xTicks"],universal:{xDomain:"supported",yDomain:"na",xFormat:"unsupported",yFormat:"na",xLabel:"supported",yLabel:"na",color:"supported",colors:"supported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"na",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"na",logX:"unsupported",logY:"na",niceX:"unsupported",linkGroup:"na",brush:"na",showXAxis:"supported",showYAxis:"na",showGridX:"supported",showGridY:"na",showAxisLabels:"supported",xTickValues:"unsupported",yTickValues:"na"},cardinality:{points:[5,150]}},"Scatter.createBeeswarmLogos":{options:["collisionRadius","dotLabels","dotOpacity","imageAccessor","labelFormat","logoSize","nameAccessor","showGrid","valueAccessor","valueFormat","yTicks"],universal:{xDomain:"na",yDomain:"supported",xFormat:"na",yFormat:"unsupported",xLabel:"na",yLabel:"supported",color:"na",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"na",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"na",logX:"na",logY:"unsupported",niceX:"na",linkGroup:"na",brush:"na",showXAxis:"na",showYAxis:"supported",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"na",yTickValues:"unsupported"},cardinality:{points:[5,50]}},"Scatter.createBeeswarmVertical":{options:["categoryAccessor","collisionRadius","colorAccessor","dotLabels","dotOpacity","dotRadius","dotStroke","dotStrokeWidth","labelAccessor","labelColor","labelFontSize","labelFontWeight","labelFormat","nameAccessor","showGrid","singleColumn","valueAccessor","valueFormat","yTicks"],universal:{xDomain:"na",yDomain:"supported",xFormat:"na",yFormat:"unsupported",xLabel:"unsupported",yLabel:"supported",color:"supported",colors:"supported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"na",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"na",logX:"na",logY:"unsupported",niceX:"na",linkGroup:"na",brush:"na",showXAxis:"na",showYAxis:"supported",showGridX:"na",showGridY:"supported",showAxisLabels:"supported",xTickValues:"na",yTickValues:"unsupported"},cardinality:{categories:[1,6],points:[5,300]}},"Scatter.createComet":{options:["categoryAccessor","headRadius","tailRadius"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"unsupported",yLabel:"unsupported",color:"supported",colors:"supported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"unsupported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"na",logX:"unsupported",logY:"unsupported",niceX:"unsupported",linkGroup:"unsupported",brush:"unsupported",showXAxis:"supported",showYAxis:"supported",showGridX:"supported",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{points:[3,40]}},"Scatter.createContour":{options:["bandwidth","colorScheme","fillOpacity","lineColor","lineWidth","showLines","thresholds","xAccessor","yAccessor"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"na",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"unsupported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"na",logX:"unsupported",logY:"unsupported",niceX:"unsupported",linkGroup:"unsupported",brush:"unsupported",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"na",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{points:[100,null]}},"Scatter.createDiagonal":{options:["bandOffsets","bandOpacity","dotBadColor","dotGoodColor","dotRadius","greenScale","hoverGuides","redScale","reverseX","xAccessor","yAccessor"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"unsupported",yLabel:"unsupported",color:"unsupported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"unsupported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"na",logX:"unsupported",logY:"unsupported",niceX:"unsupported",linkGroup:"supported",brush:"supported",showXAxis:"supported",showYAxis:"supported",showGridX:"supported",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{points:[5,100]}},"Scatter.createHeatmap":{options:["colorDomain","colorScheme","densityMode","gridSize","valueAccessor","valueFormat","xAccessor","yAccessor","yOrder"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"na",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"na",logX:"unsupported",logY:"unsupported",niceX:"unsupported",linkGroup:"unsupported",brush:"unsupported",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"na",showAxisLabels:"supported",xTickValues:"na",yTickValues:"na"},cardinality:{points:[300,null]}},"Scatter.createHexbin":{options:["colorScheme","hexRadius","hexbin","showShadow","xAccessor","yAccessor"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"na",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"na",logX:"unsupported",logY:"unsupported",niceX:"unsupported",linkGroup:"unsupported",brush:"unsupported",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"na",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{points:[200,null]}},"Scatter.createKDE":{options:["bandwidth","colorScheme","dotColor","dotRadius","nameAccessor","showDots","thresholds","xAccessor","xTooltipLabel","yAccessor","yTooltipLabel"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"unsupported",yLabel:"unsupported",color:"unsupported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"unsupported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"na",logX:"unsupported",logY:"unsupported",niceX:"unsupported",linkGroup:"unsupported",brush:"unsupported",showXAxis:"supported",showYAxis:"supported",showGridX:"na",showGridY:"na",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{points:[100,5e3]}},"Scatter.createLogos":{options:["axisTicks","borderRadius","imageAccessor","imageSize","labelAccessor","xAccessor","xTooltipLabel","yAccessor","yTooltipLabel"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"na",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"unsupported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"unsupported",logY:"unsupported",niceX:"unsupported",linkGroup:"unsupported",brush:"unsupported",showXAxis:"supported",showYAxis:"supported",showGridX:"supported",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{points:[5,40]}},"Scatter.createMarginal":{options:["binWidth","categoryAccessor","dotRadius","histHeight","xAccessor","xTooltipLabel","yAccessor","yTooltipLabel"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"supported",colors:"supported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"unsupported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"na",logX:"unsupported",logY:"unsupported",niceX:"unsupported",linkGroup:"unsupported",brush:"unsupported",showXAxis:"supported",showYAxis:"supported",showGridX:"supported",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{points:[30,2e3],categories:[1,4]}},"Scatter.createMarginalKDE":{options:["bandwidth","categoryAccessor","dotRadius","histHeight","kdeHeight","xAccessor","xTooltipLabel","yAccessor","yTooltipLabel"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"supported",colors:"supported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"unsupported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"na",logX:"unsupported",logY:"unsupported",niceX:"unsupported",linkGroup:"unsupported",brush:"unsupported",showXAxis:"supported",showYAxis:"supported",showGridX:"supported",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{points:[50,2e3],categories:[1,4]}},"Scatter.createMarginalSimple":{options:["dotRadius","nameAccessor","rugLength","xAccessor","xTooltipLabel","yAccessor","yTooltipLabel"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"supported",colors:"na",colorMap:"na",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"unsupported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"na",logX:"unsupported",logY:"unsupported",niceX:"unsupported",linkGroup:"unsupported",brush:"unsupported",showXAxis:"supported",showYAxis:"supported",showGridX:"supported",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{points:[20,500]}},"Scatter.createQuadrant":{options:["categoryAccessor","centerMode","centerX","centerY","dotRadius","hoverGuides","nameAccessor","quadrantColors","quadrantLabels","quadrantOpacity","showGrid","sizeAccessor","sizeRange","tooltipLabel","xAccessor","yAccessor"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"supported",yLabel:"supported",color:"unsupported",colors:"supported",colorMap:"supported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"unsupported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"na",logX:"unsupported",logY:"unsupported",niceX:"unsupported",linkGroup:"supported",brush:"supported",showXAxis:"supported",showYAxis:"supported",showGridX:"supported",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{points:[5,100]}},"Scatter.createTrajectory":{options:["categoryAccessor"],universal:{xDomain:"supported",yDomain:"supported",xFormat:"supported",yFormat:"supported",xLabel:"unsupported",yLabel:"unsupported",color:"supported",colors:"supported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"unsupported",annotations:"supported",extraLayers:"supported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"unsupported",nullGaps:"unsupported",logX:"unsupported",logY:"unsupported",niceX:"unsupported",linkGroup:"unsupported",brush:"unsupported",showXAxis:"supported",showYAxis:"supported",showGridX:"supported",showGridY:"supported",showAxisLabels:"supported",xTickValues:"supported",yTickValues:"supported"},cardinality:{series:[1,10],pointsPerSeries:[2,20]}},"Slope.createAnimated":{options:["animationDuration","axisPosition","bands","colorMode","dodgeLabels","fadeInDuration","highlightIndex","highlightName","labelMinGap","leftLabel","rightLabel","showNameOnLeft","showNameOnRight","staggerDelay","valueFormat"],universal:{xDomain:"na",yDomain:"supported",xFormat:"na",yFormat:"na",xLabel:"na",yLabel:"na",color:"unsupported",colors:"unsupported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"unsupported",extraLayers:"unsupported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"na",logY:"unsupported",niceX:"na",linkGroup:"na",brush:"na",showXAxis:"supported",showYAxis:"na",showGridX:"na",showGridY:"na",showAxisLabels:"supported",xTickValues:"na",yTickValues:"na"},cardinality:{rows:[2,20],periods:[2,2]}},"Slope.createBands":{options:["animationDuration","axisPosition","bands","colorMode","dodgeLabels","fadeInDuration","highlightIndex","highlightName","labelMinGap","leftLabel","rightLabel","showNameOnLeft","showNameOnRight","staggerDelay","valueFormat"],universal:{xDomain:"na",yDomain:"supported",xFormat:"na",yFormat:"na",xLabel:"na",yLabel:"na",color:"unsupported",colors:"unsupported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"unsupported",extraLayers:"unsupported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"na",logY:"unsupported",niceX:"na",linkGroup:"na",brush:"na",showXAxis:"supported",showYAxis:"na",showGridX:"na",showGridY:"na",showAxisLabels:"supported",xTickValues:"na",yTickValues:"na"},cardinality:{rows:[2,20],periods:[2,2]}},"Slope.createBasic":{options:["animationDuration","axisPosition","bands","baseline","colorMode","dodgeLabels","fadeInDuration","highlightIndex","highlightName","labelMinGap","leftLabel","mergeOrigin","originColor","rightLabel","rightLabelStacked","rightValueFormat","showNameOnLeft","showNameOnRight","staggerDelay","valueFormat"],universal:{xDomain:"na",yDomain:"supported",xFormat:"na",yFormat:"na",xLabel:"na",yLabel:"na",color:"unsupported",colors:"unsupported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"unsupported",extraLayers:"unsupported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"na",logY:"unsupported",niceX:"na",linkGroup:"na",brush:"na",showXAxis:"supported",showYAxis:"na",showGridX:"na",showGridY:"na",showAxisLabels:"supported",xTickValues:"na",yTickValues:"na"},cardinality:{rows:[2,20],periods:[2,2]}},"Slope.createCategorical":{options:["animationDuration","axisPosition","bands","dodgeLabels","fadeInDuration","labelMinGap","leftLabel","rightLabel","showNameOnLeft","showNameOnRight","staggerDelay","valueFormat"],universal:{xDomain:"na",yDomain:"supported",xFormat:"na",yFormat:"na",xLabel:"na",yLabel:"na",color:"unsupported",colors:"unsupported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"unsupported",extraLayers:"unsupported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"na",logY:"unsupported",niceX:"na",linkGroup:"na",brush:"na",showXAxis:"supported",showYAxis:"na",showGridX:"na",showGridY:"na",showAxisLabels:"supported",xTickValues:"na",yTickValues:"na"},cardinality:{rows:[2,10],periods:[2,2]}},"Slope.createHighlight":{options:["animationDuration","axisPosition","bands","dodgeLabels","fadeInDuration","highlightIndex","highlightName","labelMinGap","leftLabel","rightLabel","showNameOnLeft","showNameOnRight","staggerDelay","valueFormat"],universal:{xDomain:"na",yDomain:"supported",xFormat:"na",yFormat:"na",xLabel:"na",yLabel:"na",color:"unsupported",colors:"unsupported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"unsupported",extraLayers:"unsupported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"na",logY:"unsupported",niceX:"na",linkGroup:"na",brush:"na",showXAxis:"supported",showYAxis:"na",showGridX:"na",showGridY:"na",showAxisLabels:"supported",xTickValues:"na",yTickValues:"na"},cardinality:{rows:[3,25],periods:[2,2]}},"Slope.createIndexed":{options:["animationDuration","axisPosition","bands","baseline","colorMode","dodgeLabels","fadeInDuration","highlightIndex","highlightName","labelMinGap","leftLabel","mergeOrigin","originColor","rightLabel","rightLabelStacked","rightValueFormat","showNameOnLeft","showNameOnRight","staggerDelay","valueFormat"],universal:{xDomain:"na",yDomain:"supported",xFormat:"na",yFormat:"na",xLabel:"na",yLabel:"na",color:"unsupported",colors:"unsupported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"unsupported",extraLayers:"unsupported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"na",logY:"unsupported",niceX:"na",linkGroup:"na",brush:"na",showXAxis:"supported",showYAxis:"na",showGridX:"na",showGridY:"na",showAxisLabels:"supported",xTickValues:"na",yTickValues:"na"},cardinality:{rows:[2,12],periods:[2,2]}},"Slope.createTrend":{options:["animationDuration","axisPosition","bands","dodgeLabels","fadeInDuration","labelMinGap","leftLabel","rightLabel","showNameOnLeft","showNameOnRight","staggerDelay","valueFormat"],universal:{xDomain:"na",yDomain:"supported",xFormat:"na",yFormat:"na",xLabel:"na",yLabel:"na",color:"unsupported",colors:"unsupported",colorMap:"unsupported",showTooltip:"supported",tooltipContent:"supported",tooltipValueFormat:"supported",annotations:"unsupported",extraLayers:"unsupported",onRender:"supported",title:"supported",subtitle:"supported",footer:"supported",story:"supported",legend:"supported",featured:"supported",state:"supported",emptyMessage:"supported",errorMessage:"supported",animate:"supported",nullGaps:"na",logX:"na",logY:"unsupported",niceX:"na",linkGroup:"na",brush:"na",showXAxis:"supported",showYAxis:"na",showGridX:"na",showGridY:"na",showAxisLabels:"supported",xTickValues:"na",yTickValues:"na"},cardinality:{rows:[2,20],periods:[2,2]}},"Table.createBasic":{options:["barColumns","columns","defaultExpanded","footerRow","footerRows","heatmapColumns","highlightRows","highlightSortedColumn","layout","maxHeight","maxRows","minTableWidth","showAllLabel","showLessLabel","sortable","stickyFirstColumn","stickyHeader","subRows"],universal:{xDomain:"na",yDomain:"na",xFormat:"na",yFormat:"na",xLabel:"na",yLabel:"na",color:"unsupported",colors:"unsupported",colorMap:"na",showTooltip:"na",tooltipContent:"na",tooltipValueFormat:"na",annotations:"na",extraLayers:"na",onRender:"na",title:"na",subtitle:"na",footer:"na",story:"na",legend:"na",featured:"na",state:"na",emptyMessage:"na",errorMessage:"na",animate:"unsupported",nullGaps:"na",logX:"na",logY:"na",niceX:"na",linkGroup:"na",brush:"na",showXAxis:"na",showYAxis:"na",showGridX:"na",showGridY:"na",showAxisLabels:"na",xTickValues:"na",yTickValues:"na"},cardinality:{rows:[1,50],columns:[2,10]}},"Table.createCombined":{options:["barColumns","columns","defaultExpanded","footerRow","footerRows","heatmapColumns","highlightRows","highlightSortedColumn","layout","maxHeight","maxRows","minTableWidth","showAllLabel","showLessLabel","sortable","stickyFirstColumn","stickyHeader","subRows"],universal:{xDomain:"na",yDomain:"na",xFormat:"na",yFormat:"na",xLabel:"na",yLabel:"na",color:"unsupported",colors:"unsupported",colorMap:"na",showTooltip:"na",tooltipContent:"na",tooltipValueFormat:"na",annotations:"na",extraLayers:"na",onRender:"na",title:"na",subtitle:"na",footer:"na",story:"na",legend:"na",featured:"na",state:"na",emptyMessage:"na",errorMessage:"na",animate:"unsupported",nullGaps:"na",logX:"na",logY:"na",niceX:"na",linkGroup:"na",brush:"na",showXAxis:"na",showYAxis:"na",showGridX:"na",showGridY:"na",showAxisLabels:"na",xTickValues:"na",yTickValues:"na"},cardinality:{rows:[2,100],columns:[3,12]}},"Table.createSortable":{options:["barColumns","columns","defaultExpanded","footerRow","footerRows","heatmapColumns","highlightRows","highlightSortedColumn","layout","maxHeight","maxRows","minTableWidth","showAllLabel","showLessLabel","sortable","stickyFirstColumn","stickyHeader","subRows"],universal:{xDomain:"na",yDomain:"na",xFormat:"na",yFormat:"na",xLabel:"na",yLabel:"na",color:"unsupported",colors:"unsupported",colorMap:"na",showTooltip:"na",tooltipContent:"na",tooltipValueFormat:"na",annotations:"na",extraLayers:"na",onRender:"na",title:"na",subtitle:"na",footer:"na",story:"na",legend:"na",featured:"na",state:"na",emptyMessage:"na",errorMessage:"na",animate:"unsupported",nullGaps:"na",logX:"na",logY:"na",niceX:"na",linkGroup:"na",brush:"na",showXAxis:"na",showYAxis:"na",showGridX:"na",showGridY:"na",showAxisLabels:"na",xTickValues:"na",yTickValues:"na"},cardinality:{rows:[2,100],columns:[2,10]}},"Table.createWithBars":{options:["barColumns","columns","defaultExpanded","footerRow","footerRows","heatmapColumns","highlightRows","highlightSortedColumn","layout","maxHeight","maxRows","minTableWidth","showAllLabel","showLessLabel","sortable","stickyFirstColumn","stickyHeader","subRows"],universal:{xDomain:"na",yDomain:"na",xFormat:"na",yFormat:"na",xLabel:"na",yLabel:"na",color:"unsupported",colors:"unsupported",colorMap:"na",showTooltip:"na",tooltipContent:"na",tooltipValueFormat:"na",annotations:"na",extraLayers:"na",onRender:"na",title:"na",subtitle:"na",footer:"na",story:"na",legend:"na",featured:"na",state:"na",emptyMessage:"na",errorMessage:"na",animate:"unsupported",nullGaps:"na",logX:"na",logY:"na",niceX:"na",linkGroup:"na",brush:"na",showXAxis:"na",showYAxis:"na",showGridX:"na",showGridY:"na",showAxisLabels:"na",xTickValues:"na",yTickValues:"na"},cardinality:{rows:[2,100],columns:[2,10]}},"Table.createWithHeatmap":{options:["barColumns","columns","defaultExpanded","footerRow","footerRows","heatmapColumns","highlightRows","highlightSortedColumn","layout","maxHeight","maxRows","minTableWidth","showAllLabel","showLessLabel","sortable","stickyFirstColumn","stickyHeader","subRows"],universal:{xDomain:"na",yDomain:"na",xFormat:"na",yFormat:"na",xLabel:"na",yLabel:"na",color:"unsupported",colors:"unsupported",colorMap:"na",showTooltip:"na",tooltipContent:"na",tooltipValueFormat:"na",annotations:"na",extraLayers:"na",onRender:"na",title:"na",subtitle:"na",footer:"na",story:"na",legend:"na",featured:"na",state:"na",emptyMessage:"na",errorMessage:"na",animate:"unsupported",nullGaps:"na",logX:"na",logY:"na",niceX:"na",linkGroup:"na",brush:"na",showXAxis:"na",showYAxis:"na",showGridX:"na",showGridY:"na",showAxisLabels:"na",xTickValues:"na",yTickValues:"na"},cardinality:{rows:[2,100],columns:[2,12]}}};var gt=De(he(),1),Bt=e=>e==null||typeof e=="number"&&Number.isNaN(e);function Jt(e,a){if(!Array.isArray(e))throw new TypeError(`data.${a}: rows must be an array (got ${typeof e})`)}function _t(e,a,r="field"){if(typeof e!="string"||e==="")throw new TypeError(`data.${a}: ${r} must be a non-empty field-name string`)}function ze(e,a){return Bt(e)?Bt(a)?0:1:Bt(a)?-1:gt.ascending(e,a)??0}var no=["drop","keep","zero"];function ye(e,a,r=no){if(!r.includes(e))throw new TypeError(`data.${a}: nulls must be one of ${r.map(t=>`'${t}'`).join(" | ")} (got '${e}')`)}var oa=["sum","mean","median","min","max","count"],io={sum:gt.sum,mean:gt.mean,median:gt.median,min:gt.min,max:gt.max};function ra(e,a,r,t){if(typeof a=="function")return a;if(a==="count")return s=>s.length;if(Array.isArray(a)&&a.length===2&&typeof a[0]=="string"&&typeof a[1]=="string"){let[s,n]=a;if(!oa.includes(n))throw new TypeError(`data.${t}: unknown aggregation '${n}' for '${e}' \u2014 use ${oa.map(l=>`'${l}'`).join(" | ")} or a function`);return l=>{let i=l.map(c=>c[s]);return n==="count"?r==="keep"?i.length:i.filter(c=>!Bt(c)).length:r==="keep"&&i.some(Bt)||(r==="zero"?i=i.map(c=>Bt(c)?0:c):i=i.filter(c=>!Bt(c)),i.length===0)?null:io[n](i)}}throw new TypeError(`data.${t}: invalid agg spec for '${e}' \u2014 use 'count', ['field', 'sum'|'mean'|'median'|'min'|'max'|'count'], or a function`)}function sa(e,a,r){let t=e&&Object.keys(e).length?e:{count:"count"};return Object.entries(t).map(([s,n])=>[s,ra(s,n,a,r)])}function lo(e,{by:a,agg:r,nulls:t="drop"}={}){Jt(e,"rollup"),ye(t,"rollup");let s=Array.isArray(a)?a:[a];if(s.length===0)throw new TypeError("data.rollup: by must name at least one field");s.forEach(c=>_t(c,"rollup","by"));let n=sa(r,t,"rollup"),i=gt.flatRollup(e,c=>c,...s.map(c=>f=>f[c])).map(c=>{let f=c[c.length-1],p={};s.forEach((u,d)=>{p[u]=c[d]});for(let[u,d]of n)p[u]=d(f);return p});return i.sort((c,f)=>{for(let p of s){let u=ze(c[p],f[p]);if(u!==0)return u}return 0}),i}function co(e,{index:a,names:r,values:t,fill:s=null}={}){Jt(e,"pivotWider");let n=Array.isArray(a)?a:[a];if(n.length===0)throw new TypeError("data.pivotWider: index must name at least one field");n.forEach(d=>_t(d,"pivotWider","index")),_t(r,"pivotWider","names"),_t(t,"pivotWider","values");let l="\0",i=new Map,c=[],f=new Set,p=0;for(let d of e){let h=n.map(m=>d[m]),b=h.map(m=>Bt(m)?"null":String(m)).join(l),g=i.get(b);g||(g={keys:h,cells:new Map},i.set(b,g));let L=d[r];f.has(L)||(f.add(L),c.push(L)),g.cells.has(L)&&p++,g.cells.set(L,d[t])}p>0&&console.warn(`data.pivotWider: ${p} duplicate (index, names) pair${p===1?"":"s"} \u2014 kept the last value each time. Aggregate with data.rollup first.`);let u=[...i.values()].map(d=>{let h={};n.forEach((b,g)=>{h[b]=d.keys[g]});for(let b of c)h[b]=d.cells.has(b)?d.cells.get(b):s;return h});return u.sort((d,h)=>{for(let b of n){let g=ze(d[b],h[b]);if(g!==0)return g}return 0}),u}function po(e,{cols:a,names:r="name",values:t="value",nulls:s="keep"}={}){if(Jt(e,"pivotLonger"),ye(s,"pivotLonger"),!Array.isArray(a)||a.length===0)throw new TypeError("data.pivotLonger: cols must be a non-empty array of field names");a.forEach(i=>_t(i,"pivotLonger","cols entry")),_t(r,"pivotLonger","names"),_t(t,"pivotLonger","values");let n=new Set(a),l=[];for(let i of e){let c={};for(let f of Object.keys(i))n.has(f)||(c[f]=i[f]);for(let f of a){let p=i[f];if(Bt(p)){if(s==="drop")continue;p=s==="zero"?0:null}l.push({...c,[r]:f,[t]:p})}}return l}function uo(e,a,r,{other:t,by:s,agg:n="sum",direction:l="desc"}={}){if(Jt(e,"topN"),_t(a,"topN","key"),!Number.isFinite(r)||r<0)throw new TypeError(`data.topN: n must be a non-negative number (got ${r})`);if(l!=="asc"&&l!=="desc")throw new TypeError(`data.topN: direction must be 'asc' | 'desc' (got '${l}')`);let i=[...e].sort((u,d)=>{let h=u[a],b=d[a];return Bt(h)?Bt(b)?0:1:Bt(b)?-1:l==="desc"?gt.descending(h,b)??0:gt.ascending(h,b)??0}),c=i.slice(0,r).map(u=>({...u})),f=i.slice(r);if(t===void 0||f.length===0)return c;_t(s,"topN","by (required with 'other')");let p=ra(t,typeof n=="function"?n:[a,n],"drop","topN");return c.push({[s]:t,[a]:p(f)}),c}function ho(e,a,{step:r,thresholds:t,extent:s,agg:n,nulls:l="drop"}={}){if(Jt(e,"bin"),_t(a,"bin","key"),ye(l,"bin",["drop","zero"]),r!==void 0&&(!Number.isFinite(r)||r<=0))throw new TypeError(`data.bin: step must be a positive number (got ${r})`);let i=l==="zero"?e.map(u=>Bt(u[a])?{...u,[a]:0}:u):e.filter(u=>!Bt(u[a]));if(i.length===0)return[];let c=gt.bin().value(u=>u[a]);if(r!==void 0){let[u,d]=s||gt.extent(i,g=>g[a]),h=Math.floor(u/r)*r,b=Math.max(Math.ceil(d/r)*r,h+r);gt.max(i,g=>g[a])>=b&&(b+=r),c.domain([h,b]).thresholds(gt.range(h+r,b,r))}else s&&c.domain(s),t!==void 0&&c.thresholds(t);let f=n?sa(n,l==="zero"?"zero":"drop","bin"):[],p=c(i).map(u=>{let d={x0:u.x0,x1:u.x1,count:u.length};for(let[h,b]of f)d[h]=u.length===0?null:b(Array.from(u));return d});return p.sort((u,d)=>ze(u.x0,d.x0)),p}function fo(e,a,{format:r,nulls:t="keep"}={}){Jt(e,"toDate"),ye(t,"toDate",["keep","drop"]);let s=Array.isArray(a)?a:[a];if(s.length===0)throw new TypeError("data.toDate: fields must name at least one field");s.forEach(c=>_t(c,"toDate","fields"));let n=r?gt.timeParse(r):null,l=c=>{if(Bt(c))return null;if(c instanceof Date)return Number.isNaN(+c)?null:c;let f=null;return typeof c=="string"?f=n?n(c):gt.isoParse(c)||new Date(c):typeof c=="number"&&Number.isFinite(c)&&(f=new Date(c)),f&&!Number.isNaN(+f)?f:null},i=[];for(let c of e){let f={...c},p=!1;for(let u of s)f[u]=l(c[u]),f[u]===null&&(p=!0);t==="drop"&&p||i.push(f)}return i}function mo(e,a){if(Jt(e,"derive"),!a||typeof a!="object"||Object.keys(a).length===0)throw new TypeError("data.derive: spec must be an object of { field: fn }");let r=Object.entries(a);for(let[t,s]of r)if(typeof s!="function")throw new TypeError(`data.derive: '${t}' must be a function (got ${typeof s})`);return e.map((t,s)=>{let n={...t};for(let[l,i]of r)n[l]=i(t,s);return n})}var na={rollup:lo,pivotWider:co,pivotLonger:po,topN:uo,bin:ho,toDate:fo,derive:mo};var Wt=De(he(),1);var yo={Viridis:["#fde725","#dde318","#bade28","#95d840","#75d054","#56c667","#3dbc74","#29af7f","#20a386","#1f968b","#238a8d","#287d8e","#2d718e","#33638d","#39558c","#404688","#453781","#482576","#481467","#440154"],Inferno:["#fcffa4","#f1ed71","#f6d543","#fbba1f","#fca108","#f8870e","#f1711f","#e55c30","#d74b3f","#c43c4e","#b1325a","#9b2964","#87216b","#71196e","#5c126e","#450a69","#2f0a5b","#180c3c","#08051d","#000004"],Magma:["#fcfdbf","#fde5a7","#fecd90","#feb47b","#fd9b6b","#fa815f","#f4695c","#e85362","#d6456c","#c03a76","#ab337c","#942c80","#802582","#6a1c81","#56147d","#3f0f72","#29115a","#150e38","#07061c","#000004"],Plasma:["#f0f921","#f7e225","#fccd25","#feb72d","#fca338","#f79044","#f07f4f","#e76e5b","#dd5e66","#d14e72","#c5407e","#b6308b","#a72197","#9511a1","#8305a7","#6e00a8","#5901a5","#43039e","#2c0594","#0d0887"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6","#2171b5","#08519c","#08306b"],BluesDark:["#08306b","#08519c","#2171b5","#4292c6","#6baed6","#9ecae1","#c6dbef","#deebf7","#f7fbff"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],Purples:["#fcfbfd","#efedf5","#dadaeb","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d7301f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],YlGn:["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"]},xo={BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#01665e","#003c30"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],Temperature:["#7ab8ff","#9ccaff","#b8d9ff","#d6e8ff","#f2f7ff","#fff1c1","#ffd27f","#ffb347","#ff8c1a","#ff6a00"],MaroonMidnight:["#8C1932","#FF6437","#E8E8E8","#509BF5","#1E3264"],SunsetOcean:["#FF6437","#F98563","#F78C6C","#EDC7BB","#E8E8E8","#C2D4EB","#8EBAEE","#76AEF1","#509BF5"],MaroonForest:["#8C1932","#FF6437","#E8E8E8","#4B917D","#006450"]},go={Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999999"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec","#f2f2f2"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],ChartDefault:["#3b82f6","#22c55e","#f97316","#a855f7","#ef4444"],OkabeIto:["#E69F00","#56B4E9","#009E73","#F0E442","#0072B2","#D55E00","#CC79A7","#000000"],Status:["#22c55e","#f59e0b","#ef4444","#3b82f6"],Binary:["#3b82f6","#e5e7eb"]},bo={AquaAlert:["#E8E8E8","#b4b4b4","#4100F5"],OrangeAlert:["#E8E8E8","#b4b4b4","#FF4632"],SalmonAlert:["#E8E8E8","#b4b4b4","#F037A5"],ForestAlert:["#E8E8E8","#b4b4b4","#19E68C"]},ia={US:"#1f78b4",CA:"#e31a1c",GB:"#a6cee3",UK:"#a6cee3",BR:"#33a02c",DE:"#ff7f00",MX:"#eab308",FR:"#6a3d9a",JP:"#fb9a99",AU:"#cab2d6",IT:"#b2df8a",ES:"#fdbf6f",IN:"#b15928",CN:"#c41e3a",NL:"#ff7f00",SE:"#1f78b4",NO:"#e31a1c",CH:"#e31a1c",AT:"#e31a1c",PL:"#e31a1c",BE:"#eab308",KR:"#a6cee3",AR:"#a6cee3",RoW:"#6b7280",ROW:"#6b7280"},wo=["#1f78b4","#e31a1c","#a6cee3","#33a02c","#ff7f00","#eab308","#6a3d9a","#fb9a99","#cab2d6","#b2df8a","#fdbf6f","#b15928","#c41e3a","#6b7280"],Ge={...yo,...xo,...go,...bo,Countries:wo},Ve={Viridis:{type:"sequential",tags:["heatmap","density","continuous","perceptually-uniform","scientific"],colorblindSafe:!0,description:"Perceptually uniform, colorblind-safe. Best for scientific visualization."},Inferno:{type:"sequential",tags:["heatmap","density","continuous","perceptually-uniform","dark-theme","intensity"],colorblindSafe:!0,description:"High contrast, works well on dark backgrounds."},Magma:{type:"sequential",tags:["heatmap","density","continuous","perceptually-uniform","warm"],colorblindSafe:!0,description:"Warm tones, good for density plots and heatmaps."},Plasma:{type:"sequential",tags:["heatmap","density","continuous","perceptually-uniform","vibrant"],colorblindSafe:!0,description:"Vibrant purple-to-yellow, high visual impact."},Blues:{type:"sequential",tags:["single-hue","water","cold","corporate","neutral","print-friendly"],colorblindSafe:!0,description:"Classic blue gradient. Safe, professional choice."},BluesDark:{type:"sequential",tags:["single-hue","dark-mode","dark-background","inverted"],colorblindSafe:!0,description:"Inverted Blues for dark backgrounds (dark to light)."},Greens:{type:"sequential",tags:["single-hue","nature","growth","environmental","positive","print-friendly"],colorblindSafe:!0,description:"Nature/growth associations. Good for environmental data."},Greys:{type:"sequential",tags:["single-hue","neutral","monochrome","print-friendly","background"],colorblindSafe:!0,description:"Neutral grayscale. Best for secondary/background data."},Oranges:{type:"sequential",tags:["single-hue","warm","energy","attention","print-friendly"],colorblindSafe:!0,description:"Warm orange tones. Good for energy/activity metrics."},Purples:{type:"sequential",tags:["single-hue","elegant","premium","creative","print-friendly"],colorblindSafe:!0,description:"Elegant purple gradient. Good for premium/creative contexts."},Reds:{type:"sequential",tags:["single-hue","heat","intensity","danger","attention","print-friendly"],colorblindSafe:!1,description:"Intensity/heat associations. Use sparingly (red-green confusion)."},BuGn:{type:"sequential",tags:["multi-hue","water","nature","cool"],colorblindSafe:!0,description:"Blue to green. Good for water/environmental data."},BuPu:{type:"sequential",tags:["multi-hue","cool","elegant"],colorblindSafe:!0,description:"Blue to purple. Cool, elegant progression."},GnBu:{type:"sequential",tags:["multi-hue","nature","water","cool"],colorblindSafe:!0,description:"Green to blue. Nature-to-water transition."},OrRd:{type:"sequential",tags:["multi-hue","warm","heat","intensity"],colorblindSafe:!1,description:"Orange to red. Heat/intensity scale."},PuBu:{type:"sequential",tags:["multi-hue","cool","calm"],colorblindSafe:!0,description:"Purple to blue. Cool, calming tones."},PuBuGn:{type:"sequential",tags:["multi-hue","cool","nature"],colorblindSafe:!0,description:"Purple to blue to green. Wide cool range."},PuRd:{type:"sequential",tags:["multi-hue","warm","intensity"],colorblindSafe:!1,description:"Purple to red. Intensity with warm endpoint."},RdPu:{type:"sequential",tags:["multi-hue","warm","feminine"],colorblindSafe:!1,description:"Red to purple. Warm, vibrant tones."},YlGn:{type:"sequential",tags:["multi-hue","nature","growth","positive"],colorblindSafe:!0,description:"Yellow to green. Growth/nature associations."},YlGnBu:{type:"sequential",tags:["multi-hue","nature","water","versatile"],colorblindSafe:!0,description:"Yellow to green to blue. Versatile, natural feel."},YlOrBr:{type:"sequential",tags:["multi-hue","warm","earth","desert"],colorblindSafe:!0,description:"Yellow to orange to brown. Earth/desert tones."},YlOrRd:{type:"sequential",tags:["multi-hue","warm","heat","intensity","fire"],colorblindSafe:!1,description:"Yellow to orange to red. Fire/heat associations."},Spectral:{type:"sequential",tags:["multi-hue","rainbow","full-spectrum","scientific"],colorblindSafe:!1,description:"Full spectrum rainbow. Use for specific scientific contexts."},BrBG:{type:"diverging",tags:["earth","nature","land-water","environmental"],colorblindSafe:!0,description:"Brown to blue-green. Land vs water, dry vs wet."},PRGn:{type:"diverging",tags:["purple-green","contrast","neutral-midpoint"],colorblindSafe:!0,description:"Purple to green. High contrast diverging scale."},PiYG:{type:"diverging",tags:["pink-green","contrast","vibrant"],colorblindSafe:!0,description:"Pink to yellow-green. Vibrant diverging scale."},PuOr:{type:"diverging",tags:["purple-orange","warm-cool","contrast"],colorblindSafe:!0,description:"Purple to orange. Strong warm/cool contrast."},RdBu:{type:"diverging",tags:["red-blue","hot-cold","classic","political"],colorblindSafe:!1,description:"Red to blue. Classic hot/cold, also political mapping."},RdGy:{type:"diverging",tags:["red-gray","positive-neutral","muted"],colorblindSafe:!1,description:'Red to gray. Good when one direction is "neutral".'},RdYlBu:{type:"diverging",tags:["red-yellow-blue","traffic-light","intuitive"],colorblindSafe:!1,description:"Red to yellow to blue. Intuitive bad-neutral-good."},RdYlGn:{type:"diverging",tags:["red-yellow-green","traffic-light","performance","intuitive"],colorblindSafe:!1,description:"Red to yellow to green. Traffic light / performance scale."},Temperature:{type:"diverging",tags:["temperature","kelvin","cold-warm","percentile","custom"],colorblindSafe:!0,description:"Kelvin-inspired cold blue to warm amber. Good for percentiles."},MaroonMidnight:{type:"diverging",tags:["warm-cool","maroon-blue","contrast","editorial"],colorblindSafe:!1,description:"Maroon to midnight blue through neutral gray."},SunsetOcean:{type:"diverging",tags:["warm-cool","orange-blue","granular","editorial"],colorblindSafe:!0,description:"9-step warm orange to cool blue through neutral gray."},MaroonForest:{type:"diverging",tags:["warm-green","maroon-forest","contrast","editorial"],colorblindSafe:!1,description:"Maroon to forest green through neutral gray."},Set1:{type:"categorical",tags:["bold","saturated","high-contrast","colorbrewer"],colorblindSafe:!1,maxCategories:9,description:"Bold, saturated colors. High visual impact."},Set2:{type:"categorical",tags:["muted","pastel","area-fills","soft","colorbrewer","house-default"],colorblindSafe:!0,maxCategories:8,description:"Softer, muted colors. Good for filled areas. Chart Factory house default."},Set3:{type:"categorical",tags:["pastel","light","many-categories","colorbrewer"],colorblindSafe:!1,maxCategories:12,description:"Light pastels. Use when you need many categories."},Paired:{type:"categorical",tags:["paired","light-dark","grouped","comparison","colorbrewer"],colorblindSafe:!0,maxCategories:12,description:"Light/dark pairs. Great for grouped comparisons."},Dark2:{type:"categorical",tags:["bold","saturated","dark","high-contrast","colorbrewer"],colorblindSafe:!0,maxCategories:8,description:"Bold, dark colors. Good contrast on light backgrounds."},Accent:{type:"categorical",tags:["accent","highlight","mixed","colorbrewer"],colorblindSafe:!1,maxCategories:8,description:"Mixed saturation. Good for highlights."},Pastel1:{type:"categorical",tags:["pastel","soft","light","feminine","colorbrewer"],colorblindSafe:!1,maxCategories:9,description:"Very soft pastels. Low contrast, gentle aesthetic."},Pastel2:{type:"categorical",tags:["pastel","soft","light","colorbrewer"],colorblindSafe:!1,maxCategories:8,description:"Soft pastels. Similar to Pastel1, slightly different hues."},ChartDefault:{type:"categorical",tags:["chart-factory","balanced","general-purpose","legacy"],colorblindSafe:!1,maxCategories:5,description:"Legacy Chart Factory line palette (blue/green/orange/purple/red)."},OkabeIto:{type:"categorical",tags:["colorblind-safe","accessibility","scientific","inclusive"],colorblindSafe:!0,maxCategories:8,description:"Okabe-Ito colorblind-safe palette. Best for accessibility."},Status:{type:"categorical",tags:["semantic","status","success-warning-error","ui"],colorblindSafe:!1,maxCategories:4,description:"Semantic status: success, warning, error, info."},Binary:{type:"categorical",tags:["binary","boolean","yes-no","simple","toggle"],colorblindSafe:!0,maxCategories:2,description:"Simple yes/no, true/false, on/off visualization."},Countries:{type:"categorical",tags:["geo","countries","markets","flags","regional"],colorblindSafe:!1,maxCategories:14,description:"Country-specific colors loosely inspired by flags."},AquaAlert:{type:"alert",tags:["alert","action","urgent","purple","attention"],colorblindSafe:!0,description:"Neutral to purple. Action required / urgent items."},OrangeAlert:{type:"alert",tags:["alert","warning","danger","red","attention"],colorblindSafe:!1,description:"Neutral to red. Warnings and danger indicators."},SalmonAlert:{type:"alert",tags:["alert","attention","highlight","pink"],colorblindSafe:!0,description:"Neutral to pink. General attention/highlight."},ForestAlert:{type:"alert",tags:["alert","positive","success","green","good"],colorblindSafe:!0,description:"Neutral to green. Positive outcomes / success."}};function te(e){return Ge[e]}function oe(e){return Ve[e]?.type}function ko(e){let a=Object.keys(Ge);return e?a.filter(r=>oe(r)===e):a}function vo(e){return Ve[e]?.colorblindSafe??!1}function Ao(e,a){let r=typeof e=="string"?te(e):e;if(!r)return[];if(a>=r.length)return[...r];if(a<=1)return[r[0]];let t=[];for(let s=0;s<a;s++)t.push(r[Math.round(s*(r.length-1)/(a-1))]);return t}function Fo(e,a="#6b7280"){return e&&ia[e.toUpperCase().trim()]||a}function Lo(){return typeof document<"u"&&document.documentElement.getAttribute("data-theme")==="dark"}function la(e,a){if(!Array.isArray(e)||!Lo()||a&&oe(a)==="categorical")return e;let r=me("--color-bg-container","#171b22"),t=Wt.lab(r).l;return e.map(s=>{let n=Wt.lab(s).l;if(n<=t+12)return s;let l=Math.min(.72,(n-t)/100*.95);return Wt.interpolateLab(s,r)(l)})}function Re(e){let a=te(e);return a?la(a,e):void 0}function ca(e,a){let r=typeof e=="string"?te(e):e,t=Wt.scaleOrdinal().range(r||[]);return a&&t.domain(a),t}function Mo(e,a=[0,1]){let r=typeof e=="string"?e:void 0,t=r?te(r):e;if(!t)throw new Error(`Unknown palette: ${e}`);return r&&oe(r)==="categorical"?ca(r):Wt.scaleSequential(Wt.interpolateRgbBasis(la(t,r))).domain(a)}var pa={all:Ge,metadata:Ve,countryColors:ia,get:te,type:oe,list:ko,isColorblindSafe:vo,sample:Ao,ramp:Re,ordinalScale:ca,colorScale:Mo,getCountryColor:Fo};var ma=/^\d{4}-\d{2}-\d{2}([T ].*)?$/,da=1e3;function To(e,a,r){let t=a.filter(h=>h!=null&&h!==""),s=a.length-t.length;if(t.length===0)return{name:e,kind:"empty",distinct:0,nulls:s};let n=0,l=0,i=0,c=0,f=[];for(let h of t){if(h instanceof Date){n++;continue}if(typeof h=="boolean"){i++;continue}if(typeof h=="number"&&Number.isFinite(h)){l++,f.push(h);continue}if(typeof h=="string"){if(ma.test(h.trim())){n++;continue}let b=Number(h);if(h.trim()!==""&&Number.isFinite(b)){l++,f.push(b);continue}c++;continue}c++}let p=new Set(t.map(h=>h instanceof Date?h.getTime():h)).size,u=h=>h/t.length,d={name:e,distinct:p,nulls:s,count:t.length};if(u(n)>=.9){let h=t.map(L=>(L instanceof Date?L:new Date(L)).getTime()).filter(Number.isFinite).sort((L,m)=>L-m),b=[];for(let L=1;L<Math.min(h.length,200);L++)b.push(h[L]-h[L-1]);b.sort((L,m)=>L-m);let g=b.length?b[Math.floor(b.length/2)]:null;return{...d,kind:"temporal",min:h[0],max:h[h.length-1],medianGapMs:g}}if(u(i)>=.9)return{...d,kind:"boolean"};if(u(l)>=.9){let h=Math.min(...f),b=Math.max(...f),g=f.every(Number.isInteger),L=g&&h>=1500&&b<=2100&&p>=3&&p===new Set(f).size;return{...d,kind:"numeric",min:h,max:b,allInt:g,yearLike:L}}return p>=r*.9&&r>6?{...d,kind:"id"}:{...d,kind:"categorical"}}function So(e){let a=e.length>da?e.slice(0,da):e,r=new Set;for(let t of a)for(let s of Object.keys(t||{}))r.add(s);return[...r].map(t=>To(t,a.map(s=>(s||{})[t]),e.length))}var ua=24*3600*1e3,$o=[[/^(before|prev|previous|last|old|start|from|open|low)$/i,/^(after|next|current|new|end|to|close|high)$/i]];function Co(e,a){let r=h=>a.filter(b=>b.kind===h),t=r("temporal"),s=r("numeric"),n=r("categorical").concat(r("boolean")),l=r("id");if(t.length===0){let h=s.find(b=>b.yearLike);h&&(t=[{...h,kind:"temporal",yearStandin:!0}],s=s.filter(b=>b!==h))}let i=null;for(let h=0;h<s.length&&!i;h++)for(let b=0;b<s.length&&!i;b++){if(h===b)continue;let[g,L]=[s[h],s[b]],m=$o.some(([M,R])=>M.test(g.name)&&R.test(L.name)),k=/^\d{4}$/.test(g.name)&&/^\d{4}$/.test(L.name)&&+g.name<+L.name;(m||k)&&(i=[g,L])}if(!i&&s.length===2){let[h,b]=s,g=Math.max(h.min,b.min),L=Math.min(h.max,b.max),m=Math.max(h.max,b.max)-Math.min(h.min,b.min);m>0&&(L-g)/m>.5&&(i=null)}let c=l[0]||null;n.length===0&&t.length===0&&s.length===1&&c&&c.distinct>=c.count*.98&&(n.push({...c,kind:"categorical",promoted:!0}),c=l[1]||null);let f=n.slice().sort((h,b)=>h.distinct-b.distinct)[0]||null,p=f?e.length/f.distinct:e.length,u=t[0]||null,d=!!(u&&!u.yearStandin&&u.medianGapMs!==null&&u.medianGapMs>=.5*ua&&u.medianGapMs<=1.5*ua);return{rowCount:e.length,temporal:t,measures:s,dimensions:n,idFields:l,nameField:c,primaryDim:f,rowsPerGroup:p,pair:i,daily:d}}var Ct=(e,a)=>{let r=e[a.name];return typeof r=="string"&&a.kind!=="categorical"&&a.kind!=="id"?Number(r):r};function ha(e,a){let r=t=>{let s=t[a.name];return s instanceof Date?s.getTime():typeof s=="string"&&ma.test(s)?Date.parse(s):s};return e.slice().sort((t,s)=>r(t)-r(s))}function Xe(e,a){let r=new Map;for(let t of e){let s=t[a.name];r.has(s)||r.set(s,[]),r.get(s).push(t)}return r}function Do(e,a){if(!a)return 0;let[r,t]=a;return(r===null||e>=r)&&(t===null||e<=t)?1:-1}function zo(e,a){let r=(Zt[e.builder]||{}).cardinality||{};for(let[t,s]of Object.entries(a)){let n=Do(s,r[t]);n===1?(e.score+=.03,e.why.push(`${s} ${t} fits the comfortable ${fa(r[t])}`)):n===-1&&(e.score-=.25,e.caveats.push(`${s} ${t} is outside the comfortable ${fa(r[t])} \u2014 reshape (data.topN / data.rollup / facet) or pick another form`))}return e}function fa([e,a]){return e!==null&&a!==null?`${e}\u2013${a}`:e!==null?`${e}+`:`up to ${a}`}function Go(e,a){let r=[],t=(d,h,b,g,L={},m=[],k=null)=>{let M={builder:d,score:h,why:[].concat(b),caveats:[].concat(m),transform:k,...g};r.push(zo(M,L))},s=a.temporal[0]||null,n=a.measures,l=a.dimensions,i=a.rowCount,c=n[0],f=n[1],p=a.primaryDim,u=a.nameField;if(s&&c&&!p){let d=ha(e,s);if(t("Line.createBasic",.9,`1 temporal (${s.name}) + 1 measure (${c.name}) \u2014 the default trend chart`,{data:d,config:{x:s.name,y:c.name}},{points:i,series:1}),t("Area.createBasic",.55,"same signature when filled magnitude-from-zero is the message",{data:d,config:{x:s.name,y:c.name}},{points:i,series:1},"only if zero is a meaningful baseline for this measure"),n.length>=2){let h=n.map(g=>({name:g.name,data:d.map(L=>({x:L[s.name],y:Ct(L,g)}))})),b=Math.min(...n.map(g=>g.min))>=0||!0;t("Line.createMulti",.85,`${n.length} measures over one temporal axis (${s.name}) \u2014 compare as series`,{data:e,config:{series:h}},{series:n.length,pointsPerSeries:i},b&&Xo(n)>100?"measure ranges differ by >100x \u2014 likely different units; prefer separate charts in a linkGroup":[],`built series[] from measures [${n.map(g=>g.name).join(", ")}]`)}a.daily&&i>=60&&t("Calendar.createHeatmap",.7,`daily grain over ${i} days \u2014 weekday/streak rhythm`,{data:e.map(h=>({date:h[s.name],value:Ct(h,c)})),config:{}},{days:i},[],`mapped to { date: ${s.name}, value: ${c.name} }`)}if(s&&c&&p){let d=ha(e,s),h=Xe(d,p),b=[...h.entries()].map(([m,k])=>({name:String(m),data:k.map(M=>({x:M[s.name],y:Ct(M,c)}))})),g=s.distinct;if(t("Line.createMulti",.9,`1 temporal (${s.name}) + 1 measure (${c.name}) grouped by ${p.name} (${p.distinct} series)`,{data:e,config:{series:b}},{series:p.distinct,pointsPerSeries:Math.round(a.rowsPerGroup)},p.distinct>6?`past ~6 series consider facet('#grid', { data, by: '${p.name}', ... })`:[],`grouped rows by ${p.name} into series[]`),[...h.keys()].every(m=>/^\d{4}$/.test(String(m)))&&t("Line.createYoY",.85,"the grouping dimension is years \u2014 same measure compared across years wants the recency ramp",{data:e,config:{series:b}},{series:p.distinct},[],`grouped rows by ${p.name} (years) into series[]`),n.length===1&&n[0].min>=0){let m=new Map;for(let M of d){let R=M[s.name]instanceof Date?M[s.name].getTime():M[s.name];m.has(R)||m.set(R,{x:M[s.name]}),m.get(R)[M[p.name]]=Ct(M,c)}let k=[...h.keys()].map(String);t("Area.createStacked",.7,"composition over time \u2014 total and mix together",{data:[...m.values()],config:{x:"x",keys:k}},{series:p.distinct,points:m.size},["stacking assumes the series are parts of one whole"],`pivoted wide: one row per ${s.name}, one column per ${p.name}`)}if(g===2){let m=Vo(d,s,p,c);m&&(t("Slope.createBasic",.85,`exactly two ${s.name} values \u2014 every ${p.name}'s change in one glance`,{data:m,config:{}},{rows:m.length,periods:2},[],`reshaped to { name: ${p.name}, before, after }`),t("Dot.createDumbbell",.8,"the two-point change as gap-focused rows \u2014 scales past slope's label limit",{data:m.map(k=>({name:k.name,start:k.before,end:k.after})),config:{}},{rows:m.length},[],`reshaped to { name: ${p.name}, start, end }`))}}if(!s&&c&&p&&n.length===1){if(a.rowsPerGroup<=1.5){let d=e.map(g=>({category:g[p.name],value:Ct(g,c)})),h=d.slice().sort((g,L)=>L.value-g.value),b=d.some(g=>g.value<0)&&d.some(g=>g.value>0);t("Bar.createBasic",b?.55:.9,`1 categorical (${p.name}) + 1 measure (${c.name}), one row per category \u2014 ranked bars`,{data:h,config:{}},{rows:p.distinct},b?"values cross zero \u2014 Bar.createDiverging shows the sign structure":[],`mapped to { category: ${p.name}, value: ${c.name} }, sorted desc`),t("Bar.createVertical",.6,"columns when the category order itself matters \u2014 keep the source order",{data:d.map(g=>({x:String(g.category),y:g.value})),config:{}},{categories:p.distinct},[],`mapped to { x: ${p.name}, y: ${c.name} }`),d.every(g=>g.value>=0)&&t("Donut.createBasic",.45,"part-of-whole reading of the same signature",{data:d.map(g=>({label:String(g.category),value:g.value})),config:{}},{slices:p.distinct},["only if the values are parts of one whole \u2014 suggest() cannot verify that"],`mapped to { label: ${p.name}, value: ${c.name} }`),d.some(g=>g.value<0)&&d.some(g=>g.value>0)&&t("Bar.createDiverging",.85,"signed values around zero \u2014 diverging bars beat plain bars here",{data:d,config:{}},{rows:p.distinct},[],`mapped to { category: ${p.name}, value: ${c.name} }`)}else if(l.length===1){let d=e.map(h=>({category:h[p.name],value:Ct(h,c)}));if(t("BoxPlot.createBasic",.85,`${Math.round(a.rowsPerGroup)} records per ${p.name} \u2014 distributions per category`,{data:d,config:{}},{categories:p.distinct,points:Math.round(a.rowsPerGroup)},[],`mapped to { category: ${p.name}, value: ${c.name} }`),t("Scatter.createBeeswarm",.7,"same question with every individual visible and exact",{data:d,config:{}},{categories:p.distinct,points:i},[],`mapped to { category: ${p.name}, value: ${c.name} }`),p.distinct<=4){let h=[...Xe(e,p).entries()].map(([b,g])=>({name:String(b),data:g.map(L=>({value:Ct(L,c)}))}));t("Histogram.createOverlay",.6,`${p.distinct} groups \u2014 distribution shape on shared bins`,{data:e,config:{series:h}},{series:p.distinct,points:i},[],`grouped rows by ${p.name} into series[] of { value: ${c.name} }`)}}}if(!s&&c&&!p&&n.length===1&&(t("Histogram.createBasic",i>=30?.9:.6,`a single measure (${c.name}) across ${i} records \u2014 distribution shape`,{data:e,config:{valueAccessor:c.name}},{points:i}),t("Scatter.createBeeswarmHorizontal",.65,"the same distribution with individuals visible",{data:e.map(d=>({value:Ct(d,c),name:u?String(d[u.name]):void 0})),config:{}},{points:i},[],`mapped to { value: ${c.name} }`)),!s&&c&&f){let d=e.map(g=>({x:Ct(g,c),y:Ct(g,f),category:p?String(g[p.name]):void 0,name:u?String(g[u.name]):void 0})),h=[];if(n.length>2&&h.push(`remaining measures unencoded: ${n.slice(2).map(g=>g.name).join(", ")}`),a.pair&&h.push(`${a.pair[0].name}/${a.pair[1].name} look like a same-unit pair \u2014 a paired form likely reads better`),t("Scatter.createBasic",a.pair?.72:.88,`2 measures (${c.name} vs ${f.name}) \u2014 relationship, clusters, outliers`+(p?`, colored by ${p.name}`:""),{data:d,config:{}},{points:i},h,`mapped to { x: ${c.name}, y: ${f.name}${p?`, category: ${p.name}`:""}${u?`, name: ${u.name}`:""} }`),a.pair&&u){let[g,L]=a.pair;t("Dot.createDumbbell",.92,`${g.name}/${L.name} read as a same-unit pair per ${u.name} \u2014 the gap is the message`,{data:e.map(m=>({name:String(m[u.name]),start:Ct(m,g),end:Ct(m,L)})),config:{}},{rows:i},[],`reshaped to { name: ${u.name}, start: ${g.name}, end: ${L.name} }`),t("Slope.createBasic",.7,"the same pair with crossings and rate-of-change visible",{data:e.map(m=>({name:String(m[u.name]),before:Ct(m,g),after:Ct(m,L)})),config:{}},{rows:i,periods:2},[],`reshaped to { name: ${u.name}, before: ${g.name}, after: ${L.name} }`)}let b=Ro(c,f);b>.5&&t("Scatter.createDiagonal",.6,`the two measures share a scale (${Math.round(b*100)}% range overlap) \u2014 above/below y = x as the verdict`,{data:d,config:{}},{points:i},"only meaningful if the measures share a unit \u2014 suggest() infers this from range overlap alone"),n.length>=3&&t("Scatter.createQuadrant",.55,`3+ measures \u2014 two on position, ${n[2].name} on bubble size`,{data:d.map((g,L)=>({...g,size:Ct(e[L],n[2])})),config:{sizeAccessor:"size"}},{points:i},"needs a defensible center to earn the quadrant framing \u2014 otherwise use Scatter.createBasic")}if(!s&&c&&l.length>=2&&n.length===1){let[d,h]=l.slice().sort((g,L)=>L.distinct-g.distinct);if(l.some(g=>/source|from|origin/i.test(g.name))&&l.some(g=>/target|to|dest/i.test(g.name))){let g=l.find(m=>/source|from|origin/i.test(m.name)),L=l.find(m=>/target|to|dest/i.test(m.name));t("Sankey.createBasic",.9,`${g.name} \u2192 ${L.name} + ${c.name} reads as flow`,{data:e.map(m=>({source:String(m[g.name]),target:String(m[L.name]),value:Ct(m,c)})),config:{}},{nodes:g.distinct+L.distinct,links:i},[],`mapped to { source: ${g.name}, target: ${L.name}, value: ${c.name} }`)}if(t("Scatter.createHeatmap",.8,`2 categoricals (${d.name} \xD7 ${h.name}) + 1 measure \u2014 a value grid`,{data:e.map(g=>({x:String(g[d.name]),y:String(g[h.name]),value:Ct(g,c)})),config:{}},{},d.distinct*h.distinct>400?`${d.distinct} \xD7 ${h.distinct} cells \u2014 consider aggregating first`:[],`mapped to { x: ${d.name}, y: ${h.name}, value: ${c.name} } (categorical mode)`),d.distinct<=8&&h.distinct<=4){let g=new Map;for(let m of e){let k=String(m[d.name]);g.has(k)||g.set(k,{category:k}),g.get(k)[String(m[h.name])]=Ct(m,c)}let L=[...new Set(e.map(m=>String(m[h.name])))];t("Bar.createGrouped",.7,`both dimensions small (${d.distinct} \xD7 ${h.distinct}) \u2014 side-by-side bars with a shared baseline`,{data:[...g.values()],config:{keys:L}},{rows:d.distinct,series:h.distinct},[],`pivoted wide: one row per ${d.name}, one column per ${h.name}`)}}if(a.temporal.length>=2&&(u||p)){let[d,h]=a.temporal.slice().sort((g,L)=>g.min-L.min),b=u||p;t("Bar.createGantt",.85,`two temporal fields (${d.name}, ${h.name}) per ${b.name} \u2014 intervals on a timeline`,{data:e.map(g=>({label:String(g[b.name]),start:g[d.name],end:g[h.name]})),config:{}},{rows:i},[],`mapped to { label: ${b.name}, start: ${d.name}, end: ${h.name} }`)}return r}function Vo(e,a,r,t){if([...new Set(e.map(i=>String(i[a.name]instanceof Date?i[a.name].getTime():i[a.name])))].length!==2)return null;let n=Xe(e,r),l=[];for(let[i,c]of n)c.length===2&&l.push({name:String(i),before:Ct(c[0],t),after:Ct(c[1],t)});return l.length>=2?l:null}function Ro(e,a){let r=Math.max(e.min,a.min),t=Math.min(e.max,a.max),s=Math.max(e.max,a.max)-Math.min(e.min,a.min);return s>0?Math.max(0,t-r)/s:0}function Xo(e){let a=e.map(r=>Math.max(Math.abs(r.max),Math.abs(r.min))).filter(r=>r>0);return a.length?Math.max(...a)/Math.min(...a):1}function ya(e){return function(r,{limit:t=5,factory:s=e()}={}){if(!Array.isArray(r)||r.length===0)return console.warn("ChartFactory.suggest: rows must be a non-empty array of objects"),{fields:[],signature:null,candidates:[]};let n=So(r),l=Co(r,n),i=Go(r,l).map(c=>({...c,score:Math.max(0,Math.min(1,Math.round(c.score*100)/100))})).sort((c,f)=>f.score-c.score).slice(0,t).map(c=>({...c,create(f,p={}){let[u,d]=c.builder.split(".");return s[u][d](f,{data:c.data,...c.config,...p})}}));return i.length===0&&console.warn("ChartFactory.suggest: no signature rule matched \u2014 see docs/chart-guide.md to choose by hand"),{fields:n,signature:l,candidates:i}}}function y(e,a=""){return getComputedStyle(document.documentElement).getPropertyValue(e).trim()||a}function ae(e,a){if(typeof e=="function")return e;if(typeof e=="string"&&e.length){let r=e.startsWith("interpolate")?e:"interpolate"+e[0].toUpperCase()+e.slice(1);if(typeof o[r]=="function")return o[r];let t=oe(e)!=="categorical"?Re(e):void 0;if(t)return o.interpolateRgbBasis(t);console.warn(`ChartFactory: unknown colorScheme '${e}' \u2014 using the builder default.`)}return a}var Bo=Date.now().toString(36),Eo=0;function Xt(){return Bo+"-"+ ++Eo}function xa(e,a){if(!e)return;let r=e.querySelector(":scope > svg")||e.querySelector("svg");if(!r)return;let t=q("--legend-dim-opacity",.18),s=a==null;r.querySelectorAll("[data-series]").forEach(n=>{let l=s||+n.getAttribute("data-series")===a;n.style.transition="opacity 0.15s",n.style.opacity=l?"":t})}function q(e,a){let r=parseFloat(y(e,""));return Number.isNaN(r)?a:r}var Tt=e=>e&&e.category!==void 0?e.category:e&&e.label,Yo=e=>e&&e.label!==void 0?e.label:e&&e.category;function zt(e,a,r=8){return Math.min(e,Math.max(r,Math.floor(a)))}var nt={mini:{width:280,height:180,margin:{top:20,right:20,bottom:30,left:40},fontSize:"xs",showLegend:!0,showNav:!1,axisTicks:4,pointRadius:3},full:{width:550,height:320,margin:{top:20,right:30,bottom:40,left:60},fontSize:"sm",showLegend:!0,showNav:!0,axisTicks:6,pointRadius:4},wide:{width:700,height:300,margin:{top:20,right:30,bottom:40,left:60},fontSize:"sm",showLegend:!0,showNav:!0,axisTicks:8,pointRadius:4},instagram:{width:936,height:660,margin:{top:44,right:64,bottom:80,left:96},fontSize:"xl",showLegend:!0,showNav:!1,axisTicks:5,pointRadius:10}},Qt={enabled:!0,debounceMs:150,minWidthDelta:2,minRenderWidth:120,tiers:[{maxWidth:340,size:"mini"},{maxWidth:620,size:"full"},{maxWidth:1/0,size:"wide"}],defaultAspect:550/320},qt=(()=>{let e={heightMode:"intrinsic"};return{Area:{},Line:{createBumpChart:{aspect:2}},Slope:{"*":{aspect:550/400}},Bar:{createBasic:e,createInline:e,createLabelAbove:e,createProgress:e,createBullet:e,createDiverging:e,createStacked:e,createGrouped:e,createLikert:e,createGantt:e,createRange:e,createWaterfall:e,createPyramid:e},Scatter:{createMarginal:{aspect:1.25},createMarginalKDE:{aspect:1.25},createMarginalSimple:{aspect:1.25}},Dot:{createBasic:e,createDumbbell:e,createGradient:e,createComet:e,createConfidence:e,createPercentile:e,createUnitHistogram:{responsive:!1}},Histogram:{},Donut:{createBasic:{aspect:1.45}},BoxPlot:{},Sankey:{createBasic:{aspect:1.55}},Calendar:{createHeatmap:e}}})();function Ft(){return[y("--area-color-1","#66c2a5"),y("--area-color-2","#fc8d62"),y("--area-color-3","#8da0cb"),y("--area-color-4","#e78ac3"),y("--area-color-5","#a6d854"),y("--area-color-6","#ffd92f")]}function Fe(){return[y("--area-color-1","#66c2a5"),y("--area-color-2","#fc8d62"),y("--area-color-3","#8da0cb"),y("--area-color-4","#e78ac3"),y("--area-color-5","#a6d854")]}function Qe(e){return typeof e=="string"&&e.trim().toLowerCase()==="other"}function Kt(e,a){let r=y("--chart-neutral","#6b7280"),t=0;return e.map(s=>Qe(s)?r:a[t++%a.length])}var ct=class e{constructor(a){this.tooltip=null,this.container=a||document.body,this.init()}init(){this.tooltip=o.select(this.container).select(".d3-tooltip"),this.tooltip.empty()&&(this.tooltip=o.select(this.container).append("div").attr("class","d3-tooltip chart-tooltip").style("position","fixed").style("pointer-events","none").style("opacity",0).style("transition","opacity 0.15s").style("z-index",y("--tooltip-z-index","9999")),this._applyFallbackStylesIfUnstyled())}_applyFallbackStylesIfUnstyled(){let a=this.tooltip.node(),t=getComputedStyle(a).backgroundColor;(!t||t==="transparent"||t==="rgba(0, 0, 0, 0)")&&this.tooltip.style("background",y("--color-bg-container","#ffffff")).style("border",`1px solid ${y("--color-border-tooltip","#e5e7eb")}`).style("border-radius","6px").style("padding","10px 13px").style("font-family",y("--font-family","system-ui, sans-serif")).style("font-size",y("--tooltip-font-size","12px")).style("box-shadow",y("--shadow-tooltip","0 4px 12px rgba(0,0,0,0.15)")).style("display","flex").style("flex-direction","column").style("gap","3px")}static rows(a){return a.map(r=>{let t=r.footer?" d3-tooltip-footer":"",s=r.color?`<span class="d3-tooltip-swatch" style="background:${r.color}"></span>`:"",n=r.bar!==void 0&&r.bar!==null?`<div class="d3-tooltip-bar" style="width:${Math.max(0,Math.min(1,r.bar))*100}%;background:${r.color||"var(--chart-primary, #3b82f6)"}"></div>`:"",l;if(r.title!==void 0)l=`<div class="d3-tooltip-title${t}">${s}${r.title}</div>`;else if(r.note!==void 0){let i=r.color?` style="color:${r.color}"`:"";l=`<div class="d3-tooltip-note${t}"${i}>${r.note}</div>`}else r.muted||r.label!==void 0&&r.value===void 0?l=`<div class="d3-tooltip-label${t}">${r.label}</div>`:r.label===void 0?l=`<div class="d3-tooltip-value${t}">${s}${r.value}</div>`:l=`<div class="d3-tooltip-row${t}">${s}<span class="d3-tooltip-label">${r.label}</span><span class="d3-tooltip-value">${r.value}</span></div>`;return n?`<div>${l}${n}</div>`:l}).join("")}showLabelValue(a,r,t,s){this.show(e.rows([{title:a},{value:r,color:s}]),t)}show(a,r){this.tooltip.html(a),this.tooltip.style("opacity",1),this.position(r)}position(a){let r=this.tooltip.node(),t=r.offsetWidth,s=r.offsetHeight,n=window.innerWidth,l=window.innerHeight,i=a.clientX+12;i+t+8>n&&(i=a.clientX-t-12);let c=a.clientY-10;c+s+8>l&&(c=a.clientY-s-10),i=Math.max(4,Math.min(i,n-t-4)),c=Math.max(4,Math.min(c,l-s-4)),this.tooltip.style("left",i+"px").style("top",c+"px")}hide(){this.tooltip.style("opacity",0)}};function Be(){typeof document>"u"||document.querySelectorAll(".d3-tooltip, .chart-tooltip").forEach(e=>{e.style.opacity=0})}function lt(e,a,r){return typeof e.tooltipContent=="function"?e.tooltipContent(a):ct.rows(typeof r=="function"?r(a):r)}function xe(e,a,r,t){let s=r.strokeGradient;if(!s)return t;let[n,l]=r.strokeGradientDomain||a.domain(),i=Array.isArray(s)?o.piecewise(o.interpolateLab,s):s,c=e.select("defs");c.empty()&&(c=e.append("defs"));let f="line-grad-"+Math.random().toString(36).slice(2,11),p=c.append("linearGradient").attr("id",f).attr("gradientUnits","userSpaceOnUse").attr("x1",0).attr("y1",a(n)).attr("x2",0).attr("y2",a(l)),u=16;for(let d=0;d<=u;d++){let h=d/u;p.append("stop").attr("offset",`${h*100}%`).attr("stop-color",i(h))}return`url(#${f})`}function yt(e){return typeof e!="number"||!isFinite(e)?e:Number.isInteger(e)?e.toLocaleString():e.toFixed(1)}function Ht(e){return e instanceof Date?o.timeFormat("%b %-d, %Y")(e):e}function re(e,a,r){return[{label:e.xTooltipLabel||e.xLabel||"X",value:a},{label:e.yTooltipLabel||e.yLabel||"Y",value:r}]}function Yt(e,a,r){let t=[...e||[]].sort((n,l)=>a(n)-a(l)),s=o.bisector(n=>a(n)).center;return n=>{if(!t.length)return[];let l=Math.max(0,Math.min(t.length-1,s(t,n))),i=t[l];return r.map(c=>({x:a(i),y:c.yAcc(i),value:c.yAcc(i),color:typeof c.color=="function"?c.color(i):c.color,format:c.format})).filter(c=>c.y!=null&&!isNaN(c.y))}}function pe(e,a,r,t,s,n,l,i,c,f,p={}){let u=new ct,d=Array.isArray(a.__extraLayerProbes)?a.__extraLayerProbes:[],h=Yt(l,i,[{yAcc:c,color:f,format:a.yFormat}]),b=d.length?M=>[...h(M),...d.flatMap(R=>R.probe(M))]:h,g=e.append("line").attr("class","hover-line").attr("y1",0).attr("y2",n).style("stroke",y("--color-text-faint","#9ca3af")).style("stroke-dasharray",y("--hover-dash-pattern","3, 3")).style("opacity",0).style("pointer-events","none"),L=a.pointRadius??4,m=p.snapDots?null:e.append("circle").attr("class","hover-dot").attr("r",L).attr("fill","var(--color-bg-container)").attr("stroke",f).attr("stroke-width",q("--line-dot-stroke-width",2)).style("opacity",0).style("pointer-events","none"),k=d.map(()=>e.append("circle").attr("class","hover-dot layer-hover-dot").attr("r",Math.max(2.5,L-1)).attr("fill","var(--color-bg-container)").attr("stroke-width",q("--line-dot-stroke-width",2)).style("opacity",0).style("pointer-events","none"));return e.append("rect").attr("class","hover-rect").attr("width",s).attr("height",n).attr("fill","transparent").style("cursor","crosshair").on("pointermove",function(M){let[R]=o.pointer(M),D=0,B=1/0;l.forEach((E,S)=>{let Y=Math.abs(r(i(E))-R);Y<B&&(B=Y,D=S)});let A=l[D],x=r(i(A)),V=t(c(A));g.attr("x1",x).attr("x2",x).style("opacity",1),m&&m.attr("cx",x).attr("cy",V).style("opacity",1),p.snapDots&&p.snapDots.attr("r",(E,S)=>S===D?L*1.5:L);let w=i(A),X=[];d.forEach((E,S)=>{let Y=(E.probe(w)||[])[0];if(!Y){k[S].style("opacity",0);return}let $=r(vt(r,Y.x));k[S].attr("cx",$).attr("cy",t(Y.y)).attr("stroke",Y.color).style("opacity",1),X.push({label:E.label,value:typeof Y.format=="function"?Y.format(Y.value):yt(Y.value),color:Y.color})});let v=a.labelFormat?a.labelFormat(A):Ht(i(A)),G=c(A),C=a.tooltipValueFormat||a.valueFormat,P=C?C(A):yt(G);u.show(lt(a,A,[{title:v},{value:P},...X]),M)}).on("pointerleave",function(){g.style("opacity",0),m&&m.style("opacity",0),k.forEach(M=>M.style("opacity",0)),p.snapDots&&p.snapDots.attr("r",L),u.hide()}),b}function ga(e,a,r,t,s,n,l,i,c,f={}){let p=l.map((k,M)=>{let R=k.yAccessor||(A=>A.y),D=k.xAccessor||i,B=[...k.data||[]].sort((A,x)=>D(A)-D(x));return{name:k.name||`Series ${M+1}`,color:k.color||c[M%c.length],xAcc:D,yAcc:R,sorted:B,bisect:o.bisector(A=>D(A)).center,valueFormat:k.valueFormat}}),u=Array.isArray(a.__extraLayerProbes)?a.__extraLayerProbes:[],d=k=>p.map(M=>{if(!M.sorted.length)return null;let R=Math.max(0,Math.min(M.sorted.length-1,M.bisect(M.sorted,k))),D=M.sorted[R],B=M.valueFormat||a.tooltipValueFormat||a.valueFormat;return{x:M.xAcc(D),y:M.yAcc(D),value:M.yAcc(D),color:M.color,format:B}}).filter(Boolean),h=u.length?k=>[...d(k),...u.flatMap(M=>M.probe(k))]:d;if(a.showTooltip===!1)return h;let b=new ct,g=e.append("line").attr("class","multi-hover-line").attr("y1",0).attr("y2",n).attr("stroke",y("--color-text-muted","#9ca3af")).attr("stroke-width",1).attr("stroke-dasharray","3,3").style("opacity",0).style("pointer-events","none"),L=p.map(k=>e.append("circle").attr("r",f.dotRadius||4).attr("fill",f.openDots?y("--color-bg-container","#fff"):k.color).attr("stroke",f.openDots?k.color:y("--color-bg-container","#fff")).attr("stroke-width",f.openDots?q("--line-dot-stroke-width",2):1.5).style("opacity",0).style("pointer-events","none")),m=u.map(()=>e.append("circle").attr("class","layer-hover-dot").attr("r",Math.max(2.5,(f.dotRadius||4)-1)).attr("fill",y("--color-bg-container","#fff")).attr("stroke-width",q("--line-dot-stroke-width",2)).style("opacity",0).style("pointer-events","none"));return e.append("rect").attr("class","multi-hover-overlay").attr("width",s).attr("height",n).attr("fill","none").style("pointer-events","all").style("cursor",f.cursor||null).on("pointermove",function(k){let M=o.pointer(k)[0],R=r.invert(M),D=[],B=!1,A=null;p.forEach((V,w)=>{if(!V.sorted.length){L[w].style("opacity",0);return}let X=V.bisect(V.sorted,R),v=V.sorted[X],G=r(V.xAcc(v)),C=t(V.yAcc(v));L[w].attr("cx",G).attr("cy",C).style("opacity",1),A===null&&(A=G),B||(D.push({title:a.labelFormat?a.labelFormat(v):Ht(V.xAcc(v))}),B=!0);let P=V.valueFormat||a.tooltipValueFormat||a.valueFormat,E=V.yAcc(v);D.push({label:V.name,value:P?P(E):yt(E),color:V.color,_raw:E})}),u.forEach((V,w)=>{let X=(V.probe(R)||[])[0];if(!X){m[w].style("opacity",0);return}m[w].attr("cx",r(vt(r,X.x))).attr("cy",t(X.y)).attr("stroke",X.color).style("opacity",1),D.push({label:V.label,value:typeof X.format=="function"?X.format(X.value):yt(X.value),color:X.color,_raw:X.value})}),A!==null&&g.attr("x1",A).attr("x2",A).style("opacity",1);let x=D;if(typeof a.tooltipRowFilter=="function"&&(x=x.filter(V=>V.title||a.tooltipRowFilter(V,R))),a.tooltipSortRows){let V=typeof a.tooltipSortRows=="function"?a.tooltipSortRows:(v,G)=>(G._raw??-1/0)-(v._raw??-1/0),w=x.filter(v=>v.title),X=x.filter(v=>!v.title).sort(V);x=[...w,...X]}x.length&&b.show(lt(a,null,x),k)}).on("pointerleave",function(){g.style("opacity",0),L.forEach(k=>k.style("opacity",0)),m.forEach(k=>k.style("opacity",0)),b.hide()}),h}function ba(e,a,r,t,s){if(!a.seriesLabels||e.margin&&e.margin.right!=null)return;let n=Lt(),l=y("--font-size-sm","11px"),i=q("--font-weight-semibold",600),c=0;r.forEach((f,p)=>{let u=t(f),d=s(f),h=(f.data||[]).filter(m=>At(d(m)));if(!h.length)return;let b=h.reduce((m,k)=>u(m)>u(k)?m:k),g=d(b),L=typeof a.seriesLabelFormat=="function"?a.seriesLabelFormat({series:f,datum:b,value:g}):f.name||`Series ${p+1}`;c=Math.max(c,n(L,i,l))}),c?a.margin={...a.margin,right:Math.ceil(c)+16}:a.margin.right==null&&(a.margin={...a.margin,right:30})}function wa(e,a,r,t,s,n){let i=y("--font-size-sm","11px"),c=q("--font-weight-semibold",600),f=y("--font-family","-apple-system, BlinkMacSystemFont, sans-serif"),p=q("--font-size-sm",11)+2,u=[];n.forEach(g=>{let L=[...g.spec.data||[]].filter(M=>At(g.yAcc(M))).sort((M,R)=>g.xAcc(M)-g.xAcc(R));if(!L.length)return;let m=L[L.length-1],k=g.yAcc(m);u.push({info:g,datum:m,value:k,labelY:t(k)})});let d=[...u].sort((g,L)=>g.labelY-L.labelY),h=-1/0;d.forEach(g=>{g.labelY=Math.max(g.labelY,h+p),h=g.labelY});let b=d.length?d[d.length-1].labelY-s:0;b>0&&d.forEach(g=>{g.labelY-=b}),d.forEach(g=>{g.labelY=Math.max(0,Math.min(s,g.labelY))}),u.forEach(({info:g,datum:L,value:m,labelY:k})=>{let M=typeof a.seriesLabelFormat=="function"?a.seriesLabelFormat({series:g.spec,datum:L,value:m}):g.name,R=t(m);Math.abs(k-R)>p/2&&e.append("line").attr("class","series-label-leader").attr("x1",r(g.xAcc(L))+1.5).attr("y1",R).attr("x2",r(g.xAcc(L))+6-1.5).attr("y2",k).attr("stroke",g.color).attr("stroke-width",1).attr("opacity",Math.max(g.opacity!=null?g.opacity:1,.55)*.7).attr("pointer-events","none"),e.append("text").attr("class","series-label").attr("x",r(g.xAcc(L))+6).attr("y",k).attr("dy","0.35em").attr("text-anchor","start").attr("fill",g.color).attr("opacity",Math.max(g.opacity!=null?g.opacity:1,.55)).attr("font-size",i).attr("font-weight",c).attr("font-family",f).attr("pointer-events","none").text(M)})}function Gt(e,a,r,t={}){let s=e.length?a(e[0]):void 0,n="linear",l=a;s instanceof Date?n="time":typeof s=="string"&&s!==""&&isNaN(+s)&&!isNaN(Date.parse(s))?(n="time",l=c=>new Date(a(c))):t.xScaleType==="log"&&(n="log");let i;return n==="log"?i=je("log",o.extent(e,l),r,t.xDomain):(i=(n==="time"?o.scaleTime():o.scaleLinear()).domain(t.xDomain||o.extent(e,l)).range(r),!t.xDomain&&t.niceX===!0&&i.nice(t.axisTicks||6)),{scale:i,type:n,xAccessor:l}}function Vt(e,a){return e.xFormat?e.xFormat:a==="time"?null:r=>r}var Po=5,ka=new Set;function Le(e,a,r,t){let s=e.pointRadius??4,n=r>1?a/(r-1):1/0,l=n<s*Po;return e.showPoints!=null?(e.showPoints===!0&&l&&e.diagnostics!==!1&&!ka.has(t)&&(ka.add(t),console.warn(`[ChartFactory] ${t}: showPoints: true draws ${r} dots ~${Math.round(n)}px apart at this width \u2014 too dense to read as markers. The line alone is cleaner (values stay hoverable via the hover-line tooltip); drop showPoints or let the density-aware default decide.`)),e.showPoints):!l}function Et(e,a,r="zero"){if(e.yDomain)return e.yDomain;let[t,s]=o.extent(a),n;switch(r){case"padded":{let l=(s-t||Math.abs(s)||1)*.1;n=[t-l,s+l];break}case"ratio":n=[t*.9,s*1.1];break;case"symmetric":{let l=Math.max(Math.abs(t),Math.abs(s))*1.1;n=[-l,l];break}case"zero":default:n=[0,s*1.1]}return e.yMin!==void 0&&(n[0]=e.yMin),e.yMax!==void 0&&(n[1]=e.yMax),n}function wt(e,a,r){return[a!==void 0?a:e[0],r!==void 0?r:e[1]]}function je(e,a,r,t){if(e==="log"){let n=t;if(!n){let l=a[0],i=a[1];i>0||(i=1),l>0||(l=i/1e3),n=[l,i]}return o.scaleLog().domain(n).range(r)}if(t)return o.scaleLinear().domain(t).range(r);let s=(a[1]-a[0])*.1||10;return o.scaleLinear().domain([a[0]-s,a[1]+s]).range(r)}function It(e,a){if(!Array.isArray(a)||a.length===0||typeof e.domain!="function")return null;let r=e.domain(),t=Math.min(+r[0],+r[r.length-1]),s=Math.max(+r[0],+r[r.length-1]);return a.map(n=>vt(e,n)).filter(n=>{let l=+n;return Number.isFinite(l)&&l>=t&&l<=s})}function at(e,a,r,t){let s=It(a,t);if(s)return e.tickValues(s),e;if(typeof a.base!="function")return e.ticks(r),e;let n=a.domain(),l=Math.min(n[0],n[1]),i=Math.max(n[0],n[1]),c=Math.log10(i)-Math.log10(l),f=d=>{let h=Math.log10(d);return Math.abs(h-Math.round(h))<1e-6},p=d=>{let h=d/Math.pow(10,Math.floor(Math.log10(d)));return[1,2,5].some(b=>Math.abs(h-b)<1e-6)},u=a.ticks().filter(c>=2?f:p);return e.tickValues(u.length?u:a.ticks(r)),e}function Dt(e,a,r){let t=It(e,r);if(t)return t;if(!e.domain().every(p=>Number.isFinite(+p)))return[];if(typeof e.base=="function")return e.ticks(a);let s=e.ticks(a);if(s.length<2)return s.length?s:[e.domain()[0]];let n=e.domain()[0],l=+s[0],i=+s[1]-l;if(n instanceof Date){let p=typeof o.timeTickInterval=="function"?o.timeTickInterval(n,e.domain()[1],a):null;if(!p)return s;let u=p.floor(n),d=p.ceil(n),h=+n-+u<=+d-+n?u:d;return+h<+n&&(h=d),[h,...s.filter(b=>+b>+h)]}let c=l-Math.round((l-+n)/i)*i;c<+n&&(c+=i);let f=s.filter(p=>+p>c+i*.5);return[c,...f]}function Pt(e,a){return[...e].sort((r,t)=>a(r)-a(t))}function Ee(e,a,r,t=60){let s=Math.max(1,Math.ceil(a.length*t/Math.max(r,1)));if(s<=1)return e;let n=a.map(Number);if(n.length&&n.every(l=>Number.isInteger(l))){let l=[2,5,10,20,25,50,100,200,250,500,1e3].find(c=>c>=s)||Math.ceil(s/1e3)*1e3,i=a.filter((c,f)=>n[f]%l===0);if(i.length>=2)return e.tickValues(i),e}return e.tickValues(a.filter((l,i)=>i%s===0)),e}function At(e){return e!=null&&!isNaN(e)}function Ye(e,a){let r=e[a];return At(r)?r:0}function ie(e){return a=>At(a.data[e.key])}var Oo={createBasic(e,a={}){let t={...nt[a.size||"full"],...a},s=t.margin,n=Math.max(40,t.width-s.left-s.right),l=t.height-s.top-s.bottom,i=t.color||y("--chart-primary","#3b82f6"),c=o.select(e).append("svg").attr("width",t.width).attr("height",t.height).append("g").attr("transform",`translate(${s.left},${s.top})`),f=t.xAccessor||(k=>k.x),p=t.yAccessor||(k=>k.y),u=Gt(t.data,f,[0,n],t),d=u.scale;f=u.xAccessor,t.data=Pt(t.data,f);let h=o.scaleLinear().domain(Et(t,t.data.map(p),"zero")).range([l,0]);!t.yDomain&&t.yMin===void 0&&t.yMax===void 0&&h.nice(t.axisTicks||6),c.append("g").attr("class","grid").call(at(o.axisLeft(h).tickSize(-n).tickFormat(""),h,t.axisTicks,t.yTickValues));let b=o.area().defined(k=>{let M=p(k);return M!=null&&!isNaN(M)}).x(k=>d(f(k))).y0(l).y1(k=>h(p(k)));c.append("path").datum(t.data).attr("class","area-fill").attr("d",b).attr("fill",i).attr("fill-opacity",q("--area-fill-opacity",.35));let g=o.line().defined(k=>{let M=p(k);return M!=null&&!isNaN(M)}).x(k=>d(f(k))).y(k=>h(p(k)));c.append("path").datum(t.data).attr("class","area-line").attr("d",g).attr("fill","none").attr("stroke",i).attr("stroke-width",y("--area-stroke-width",1.5)),c.append("g").attr("class","axis-x").attr("transform",`translate(0,${l})`).call(o.axisBottom(d).tickValues(Dt(d,t.axisTicks,t.xTickValues)).tickFormat(Vt(t,u.type))),c.append("g").attr("class","axis-y").call(at(o.axisLeft(h),h,t.axisTicks,t.yTickValues).tickFormat(t.yFormat||(k=>k)));let L=null;Le(t,n,t.data.length,"Area.createBasic")&&(L=c.selectAll(".data-point").data(t.data).enter().append("circle").attr("class","data-point").attr("cx",k=>d(f(k))).attr("cy",k=>h(p(k))).attr("r",t.pointRadius).attr("fill","var(--color-bg-container)").attr("stroke",i).attr("stroke-width",2));let m;return t.showTooltip!==!1?m=pe(c,t,d,h,n,l,t.data,f,p,i,L?{snapDots:L}:{}):m=Yt(t.data,f,[{yAcc:p,color:i,format:t.yFormat}]),{svg:c,x:d,y:h,width:n,height:l,linkPoints:m}},createDiverging(e,a={}){let t={...nt[a.size||"full"],...a},s=t.margin,n=Math.max(40,t.width-s.left-s.right),l=t.height-s.top-s.bottom,i=t.baseline!=null?t.baseline:0,c=t.positiveColor||y("--chart-trend-up","#22c55e"),f=t.negativeColor||y("--chart-trend-down","#ef4444"),p=q("--area-fill-opacity",.35),u=o.select(e).append("svg").attr("width",t.width).attr("height",t.height),d=u.append("defs"),h=u.append("g").attr("transform",`translate(${s.left},${s.top})`),b=t.xAccessor||(v=>v.x),g=t.yAccessor||(v=>v.y),L=Gt(t.data,b,[0,n],t),m=L.scale;b=L.xAccessor,t.data=Pt(t.data,b);let k=o.scaleLinear().domain(Et(t,[...t.data.map(g),i],"padded")).range([l,0]);!t.yDomain&&t.yMin===void 0&&t.yMax===void 0&&k.nice(t.axisTicks||6),h.append("g").attr("class","grid").call(at(o.axisLeft(k).tickSize(-n).tickFormat(""),k,t.axisTicks,t.yTickValues)),h.append("g").attr("class","axis-x").attr("transform",`translate(0,${l})`).call(o.axisBottom(m).tickValues(Dt(m,t.axisTicks,t.xTickValues)).tickFormat(Vt(t,L.type))),h.append("g").attr("class","axis-y").call(at(o.axisLeft(k),k,t.axisTicks,t.yTickValues).tickFormat(t.yFormat||(v=>v)));let M=k(i),R=Math.max(0,Math.min(l,M));M>=0&&M<=l&&h.append("line").attr("class","baseline").attr("x1",0).attr("x2",n).attr("y1",M).attr("y2",M).attr("stroke",y("--color-black","#374151")).attr("stroke-width",1.5);let D="clip-div-above-"+Math.random().toString(36).substr(2,9),B="clip-div-below-"+Math.random().toString(36).substr(2,9);d.append("clipPath").attr("id",D).append("rect").attr("x",0).attr("y",0).attr("width",n).attr("height",R),d.append("clipPath").attr("id",B).append("rect").attr("x",0).attr("y",R).attr("width",n).attr("height",l-R);let A=o.area().defined(v=>At(g(v))).curve(t.curve||o.curveLinear).x(v=>m(b(v))).y0(R).y1(v=>k(g(v))),x=o.line().defined(v=>At(g(v))).curve(t.curve||o.curveLinear).x(v=>m(b(v))).y(v=>k(g(v))),V=y("--area-stroke-width",1.5);h.append("path").datum(t.data).attr("class","area-fill area-above").attr("fill",c).attr("fill-opacity",p).attr("clip-path",`url(#${D})`).attr("d",A),h.append("path").datum(t.data).attr("class","area-line area-above").attr("fill","none").attr("stroke",c).attr("stroke-width",V).attr("clip-path",`url(#${D})`).attr("d",x),h.append("path").datum(t.data).attr("class","area-fill area-below").attr("fill",f).attr("fill-opacity",p).attr("clip-path",`url(#${B})`).attr("d",A),h.append("path").datum(t.data).attr("class","area-line area-below").attr("fill","none").attr("stroke",f).attr("stroke-width",V).attr("clip-path",`url(#${B})`).attr("d",x);let w=null;if(t.showPoints===!0&&(w=h.selectAll(".data-point").data(t.data.filter(v=>At(g(v)))).enter().append("circle").attr("class","data-point").attr("cx",v=>m(b(v))).attr("cy",v=>k(g(v))).attr("r",t.pointRadius).attr("fill","var(--color-bg-container)").attr("stroke",v=>g(v)>=i?c:f).attr("stroke-width",2)),t.showTooltip!==!1){let v=new ct,G=h.append("line").attr("class","hover-line").attr("y1",0).attr("y2",l).style("stroke",y("--color-text-faint","#9ca3af")).style("stroke-dasharray",y("--hover-dash-pattern","3, 3")).style("opacity",0).style("pointer-events","none"),C=h.append("circle").attr("class","hover-dot").attr("r",t.pointRadius??4).attr("fill","var(--color-bg-container)").attr("stroke-width",q("--line-dot-stroke-width",2)).style("opacity",0).style("pointer-events","none");h.append("rect").attr("class","hover-rect").attr("width",n).attr("height",l).attr("fill","transparent").style("cursor","crosshair").on("pointermove",function(P){let[E]=o.pointer(P),S=null,Y=1/0;if(t.data.forEach(H=>{if(!At(g(H)))return;let F=Math.abs(m(b(H))-E);F<Y&&(Y=F,S=H)}),!S)return;let $=m(b(S)),T=g(S),I=T>=i?c:f;G.attr("x1",$).attr("x2",$).style("opacity",1),C.attr("cx",$).attr("cy",k(T)).attr("stroke",I).style("opacity",1);let _=t.labelFormat?t.labelFormat(S):Ht(b(S)),N=t.tooltipValueFormat||t.valueFormat;v.show(lt(t,S,[{title:_},{value:N?N(S):yt(T),color:I}]),P)}).on("pointerleave",function(){G.style("opacity",0),C.style("opacity",0),v.hide()})}let X=Yt(t.data,b,[{yAcc:g,color:v=>g(v)>=i?c:f,format:t.yFormat}]);return{svg:h,x:m,y:k,width:n,height:l,linkPoints:X}},createStacked(e,a={}){let t={...nt[a.size||"full"],...a},s=t.margin,n=Math.max(40,t.width-s.left-s.right),l=t.height-s.top-s.bottom,i=t.keys||[],c=t.labels||{},f=t.colors||Kt(i,Ft()),p=o.select(e).append("svg").attr("width",t.width).attr("height",t.height).append("g").attr("transform",`translate(${s.left},${s.top})`),u=t.xAccessor||(D=>D.x),d=Gt(t.data,u,[0,n],t),h=d.scale;u=d.xAccessor,t.data=Pt(t.data,u);let g=o.stack().keys(i).value(Ye)(t.data),L=o.max(g[g.length-1],D=>D[1]),m=o.scaleLinear().domain(Et(t,[0,L],"zero")).range([l,0]),k=o.scaleOrdinal().domain(i).range(f);p.append("g").attr("class","grid").call(at(o.axisLeft(m).tickSize(-n).tickFormat(""),m,t.axisTicks,t.yTickValues));let M=o.area().x((D,B)=>h(u(t.data[B]))).y0(D=>m(D[0])).y1(D=>m(D[1])),R=o.line().x((D,B)=>h(u(t.data[B]))).y(D=>m(D[1]));if(p.selectAll(".area-layer").data(g).enter().append("path").attr("class","area-layer").attr("data-series",(D,B)=>B).attr("d",D=>M.defined(ie(D))(D)).attr("fill",D=>k(D.key)).attr("fill-opacity",q("--area-fill-opacity",.35)),p.selectAll(".area-line").data(g).enter().append("path").attr("class","area-line").attr("d",D=>R.defined(ie(D))(D)).attr("fill","none").attr("stroke",D=>k(D.key)).attr("stroke-width",y("--area-stroke-width",1.5)),p.append("g").attr("class","axis-x").attr("transform",`translate(0,${l})`).call(o.axisBottom(h).tickValues(Dt(h,t.axisTicks,t.xTickValues)).tickFormat(Vt(t,d.type))),p.append("g").attr("class","axis-y").call(at(o.axisLeft(m),m,t.axisTicks,t.yTickValues).tickFormat(t.yFormat||(D=>D))),t.showTooltip!==!1){let D=new ct,B=p.append("line").attr("class","hover-line").attr("y1",0).attr("y2",l).style("stroke","var(--color-text-faint)").style("stroke-dasharray",y("--hover-dash-pattern","3, 3")).style("opacity",0);p.append("rect").attr("class","hover-rect").attr("width",n).attr("height",l).attr("fill","transparent").style("cursor","crosshair").on("pointermove",function(A){let[x]=o.pointer(A),V=t.data.map(Y=>h(u(Y))),w=0,X=1/0;V.forEach((Y,$)=>{let T=Math.abs(Y-x);T<X&&(X=T,w=$)});let v=t.data[w],G=h(u(v));B.attr("x1",G).attr("x2",G).style("opacity",1);let C=i.reduce((Y,$)=>Y+v[$],0),P=t.labelFormat?t.labelFormat(v):Ht(u(v)),E=t.tooltipValueFormat||t.valueFormat,S=[{title:P}];if(i.forEach((Y,$)=>{let T=E?E(v[Y]):v[Y];S.push({label:c[Y]||Y,value:T,color:f[$]})}),t.showTotal!==!1){let Y=t.totalFormat?t.totalFormat(C):C;S.push({label:"Total",value:Y,footer:!0})}D.show(lt(t,v,S),A)}).on("pointerleave",function(){B.style("opacity",0),D.hide()})}return{svg:p,x:h,y:m,width:n,height:l,color:k,keys:i}},createNormalized(e,a={}){let t={...nt[a.size||"full"],...a},s=t.margin,n=Math.max(40,t.width-s.left-s.right),l=t.height-s.top-s.bottom,i=t.keys||[],c=t.labels||{},f=t.colors||Kt(i,Ft()),p=o.select(e).append("svg").attr("width",t.width).attr("height",t.height).append("g").attr("transform",`translate(${s.left},${s.top})`),u=t.xAccessor||(R=>R.x),d=Gt(t.data,u,[0,n],t),h=d.scale;u=d.xAccessor,t.data=Pt(t.data,u);let g=o.stack().keys(i).offset(o.stackOffsetExpand).value(Ye)(t.data),L=o.scaleLinear().domain(t.yDomain||wt([0,1],t.yMin,t.yMax)).range([l,0]),m=o.scaleOrdinal().domain(i).range(f);p.append("g").attr("class","grid").call(at(o.axisLeft(L).tickSize(-n).tickFormat(""),L,t.axisTicks,t.yTickValues));let k=o.area().x((R,D)=>h(u(t.data[D]))).y0(R=>L(R[0])).y1(R=>L(R[1])),M=o.line().x((R,D)=>h(u(t.data[D]))).y(R=>L(R[1]));if(p.selectAll(".area-layer").data(g).enter().append("path").attr("class","area-layer").attr("data-series",(R,D)=>D).attr("d",R=>k.defined(ie(R))(R)).attr("fill",R=>m(R.key)).attr("fill-opacity",q("--area-fill-opacity",.35)),p.selectAll(".area-line").data(g).enter().append("path").attr("class","area-line").attr("d",R=>M.defined(ie(R))(R)).attr("fill","none").attr("stroke",R=>m(R.key)).attr("stroke-width",y("--area-stroke-width",1.5)),p.append("g").attr("class","axis-x").attr("transform",`translate(0,${l})`).call(o.axisBottom(h).tickValues(Dt(h,t.axisTicks,t.xTickValues)).tickFormat(Vt(t,d.type))),p.append("g").attr("class","axis-y").call(at(o.axisLeft(L),L,t.axisTicks,t.yTickValues).tickFormat(t.yFormat||o.format(".0%"))),t.showTooltip!==!1){let R=new ct,D=p.append("line").attr("class","hover-line").attr("y1",0).attr("y2",l).style("stroke","var(--color-text-faint)").style("stroke-dasharray",y("--hover-dash-pattern","3, 3")).style("opacity",0);p.append("rect").attr("class","hover-rect").attr("width",n).attr("height",l).attr("fill","transparent").style("cursor","crosshair").on("pointermove",function(B){let[A]=o.pointer(B),x=t.data.map(S=>h(u(S))),V=0,w=1/0;x.forEach((S,Y)=>{let $=Math.abs(S-A);$<w&&(w=$,V=Y)});let X=t.data[V],v=h(u(X));D.attr("x1",v).attr("x2",v).style("opacity",1);let G=i.reduce((S,Y)=>S+X[Y],0),C=t.labelFormat?t.labelFormat(X):Ht(u(X)),P=t.tooltipValueFormat||t.valueFormat||(S=>`${Math.round(S*100)}%`),E=[{title:C}];i.forEach((S,Y)=>{E.push({label:c[S]||S,value:P(X[S]/G),color:f[Y]})}),R.show(lt(t,X,E),B)}).on("pointerleave",function(){D.style("opacity",0),R.hide()})}return{svg:p,x:h,y:L,width:n,height:l,color:m,keys:i}},createSmoothed(e,a={}){let t={...nt[a.size||"full"],...a},s=t.margin,n=Math.max(40,t.width-s.left-s.right),l=t.height-s.top-s.bottom,i=t.color||y("--chart-primary","#3b82f6"),c=t.tension||q("--area-curve-tension",.4),f=o.select(e).append("svg").attr("width",t.width).attr("height",t.height),p="gradient-"+Math.random().toString(36).substr(2,9),d=f.append("defs").append("linearGradient").attr("id",p).attr("x1","0%").attr("y1","0%").attr("x2","0%").attr("y2","100%");d.append("stop").attr("offset","0%").attr("stop-color",i).attr("stop-opacity",q("--area-gradient-opacity-top",.3)),d.append("stop").attr("offset","100%").attr("stop-color",i).attr("stop-opacity",q("--area-gradient-opacity-bottom",.02));let h=f.append("g").attr("transform",`translate(${s.left},${s.top})`),b=t.xAccessor||(A=>A.x),g=t.yAccessor||(A=>A.y),L=Gt(t.data,b,[0,n],t),m=L.scale;b=L.xAccessor,t.data=Pt(t.data,b);let k=o.scaleLinear().domain(Et(t,t.data.map(g),"zero")).range([l,0]);!t.yDomain&&t.yMin===void 0&&t.yMax===void 0&&k.nice(t.axisTicks||6),h.append("g").attr("class","grid").call(at(o.axisLeft(k).tickSize(-n).tickFormat(""),k,t.axisTicks,t.yTickValues));let M=o.area().defined(A=>{let x=g(A);return x!=null&&!isNaN(x)}).curve(o.curveCardinal.tension(c)).x(A=>m(b(A))).y0(l).y1(A=>k(g(A)));h.append("path").datum(t.data).attr("class","area-fill").attr("d",M).attr("fill",`url(#${p})`);let R=o.line().defined(A=>{let x=g(A);return x!=null&&!isNaN(x)}).curve(o.curveCardinal.tension(c)).x(A=>m(b(A))).y(A=>k(g(A)));h.append("path").datum(t.data).attr("class","area-line").attr("d",R).attr("fill","none").attr("stroke",i).attr("stroke-width",y("--area-stroke-width",1.5)),h.append("g").attr("class","axis-x").attr("transform",`translate(0,${l})`).call(o.axisBottom(m).tickValues(Dt(m,t.axisTicks,t.xTickValues)).tickFormat(Vt(t,L.type))),h.append("g").attr("class","axis-y").call(at(o.axisLeft(k),k,t.axisTicks,t.yTickValues).tickFormat(t.yFormat||(A=>A)));let D=null;Le(t,n,t.data.length,"Area.createSmoothed")&&(D=h.selectAll(".data-point").data(t.data).enter().append("circle").attr("class","data-point").attr("cx",A=>m(b(A))).attr("cy",A=>k(g(A))).attr("r",t.pointRadius).attr("fill","var(--color-bg-container)").attr("stroke",i).attr("stroke-width",2));let B;return t.showTooltip!==!1?B=pe(h,t,m,k,n,l,t.data,b,g,i,D?{snapDots:D}:{}):B=Yt(t.data,b,[{yAcc:g,color:i,format:t.yFormat}]),{svg:h,x:m,y:k,width:n,height:l,linkPoints:B}},createStreamgraph(e,a={}){let t={...nt[a.size||"full"],...a},s=t.margin,n=Math.max(40,t.width-s.left-s.right),l=t.height-s.top-s.bottom,i=t.keys||[],c=t.labels||{},f=t.colors||Kt(i,Ft()),u=o.select(e).append("svg").attr("width",t.width).attr("height",t.height).append("g").attr("transform",`translate(${s.left},${s.top})`),d=t.xAccessor||(x=>x.x),h=Gt(t.data,d,[0,n],t),b=h.scale;d=h.xAccessor,t.data=Pt(t.data,d);let L=o.stack().keys(i).offset(o.stackOffsetWiggle).order(o.stackOrderInsideOut).value(Ye)(t.data),m=o.min(L,x=>o.min(x,V=>V[0])),k=o.max(L,x=>o.max(x,V=>V[1])),M=o.scaleLinear().domain(t.yDomain||wt([m,k],t.yMin,t.yMax)).range([l,0]),R=o.scaleOrdinal().domain(i).range(f),D=o.area().x((x,V)=>b(d(t.data[V]))).y0(x=>M(x[0])).y1(x=>M(x[1])).curve(o.curveBasis);u.append("g").attr("class","grid grid-x").attr("transform",`translate(0,${l})`).call(at(o.axisBottom(b).tickSize(-l).tickFormat(""),b,t.axisTicks,t.xTickValues)).selectAll("line").style("stroke",y("--color-border-light","#e5e5e5")).style("stroke-opacity",q("--grid-stroke-opacity",.5)),u.select(".grid-x .domain").remove();let B=q("--stream-dimmed-opacity",.25);function A(x){u.selectAll(".stream-layer").style("fill-opacity",V=>x===null||V.key===x?1:B),u.selectAll(".stream-label").style("opacity",function(){let V=o.select(this).attr("data-key");return x===null||V===x?1:B})}if(u.selectAll(".stream-layer").data(L).enter().append("path").attr("class","stream-layer").attr("data-series",(x,V)=>V).attr("d",x=>D.defined(ie(x))(x)).attr("fill",x=>R(x.key)).attr("fill-opacity",q("--stream-fill-opacity",1)).attr("stroke",y("--stream-stroke-color","#fff")).attr("stroke-width",q("--stream-stroke-width",1)).style("transition","fill-opacity 0.2s"),u.append("g").attr("class","axis-x").attr("transform",`translate(0,${l})`).call(o.axisBottom(b).tickValues(Dt(b,t.axisTicks,t.xTickValues)).tickFormat(Vt(t,h.type))),t.showLabels!==!1){let w=q("--stream-label-size",11);L.forEach(X=>{let v=c[X.key]||X.key,G=0,C=0,P=0;if(X.forEach((z,W)=>{let O=Math.abs(M(z[0])-M(z[1]));O>P&&(P=O,G=z[1]-z[0],C=W)}),P<25)return;let E=v.length*w*.6,S=C,Y=C;for(let z=C-1;z>=0&&Math.abs(M(X[z][0])-M(X[z][1]))>=25*.7;z--)S=z;for(let z=C+1;z<X.length&&Math.abs(M(X[z][0])-M(X[z][1]))>=25*.7;z++)Y=z;let $=b(d(t.data[S])),I=b(d(t.data[Y]))-$;if(I<40&&I<E)return;let _=Math.round((S+Y)/2),N=X[_],H=M((N[0]+N[1])/2),F=b(d(t.data[_]));u.append("text").attr("class","stream-label").attr("data-key",X.key).attr("x",F).attr("y",H).attr("text-anchor","middle").attr("dominant-baseline","middle").attr("fill",y("--color-bg-container","white")).attr("font-size",w+"px").attr("font-weight","bold").attr("pointer-events","none").style("text-shadow","0 1px 2px rgba(0,0,0,0.3)").style("transition","opacity 0.2s").text(v)})}if(t.showTooltip!==!1){let x=new ct,V=u.append("line").attr("class","hover-line").attr("y1",0).attr("y2",l).style("stroke",y("--color-text-faint","#9ca3af")).style("stroke-dasharray",y("--hover-dash-pattern","3, 3")).style("opacity",0).style("pointer-events","none");u.append("rect").attr("class","hover-rect").attr("width",n).attr("height",l).attr("fill","transparent").style("cursor","crosshair").on("pointermove",function(w){let[X]=o.pointer(w),v=t.data.map(_=>b(d(_))),G=0,C=1/0;v.forEach((_,N)=>{let H=Math.abs(_-X);H<C&&(C=H,G=N)});let P=t.data[G],E=b(d(P));V.attr("x1",E).attr("x2",E).style("opacity",1);let S=i.reduce((_,N)=>_+P[N],0),Y=t.labelFormat?t.labelFormat(P):Ht(d(P)),$=t.tooltipValueFormat||t.valueFormat,T=[...i].sort((_,N)=>P[N]-P[_]),I=[{title:Y}];if(T.forEach(_=>{if(P[_]===0)return;let N=$?$(P[_]):P[_];I.push({label:c[_]||_,value:N,color:R(_),bar:P[_]/S})}),t.showTotal!==!1){let _=t.totalFormat?t.totalFormat(S):S;I.push({label:"Total",value:_,footer:!0})}x.show(lt(t,P,I),w)}).on("pointerleave",function(){V.style("opacity",0),x.hide()})}return{svg:u,x:b,y:M,width:n,height:l,color:R,keys:i,highlightKey:A}}},Io={createBasic(e,a={}){let t={...nt[a.size||"full"],...a},s=t.margin,n=Math.max(40,t.width-s.left-s.right),l=t.height-s.top-s.bottom,i=t.color||y("--chart-primary","#3b82f6"),c=o.select(e).append("svg").attr("width",t.width).attr("height",t.height).append("g").attr("transform",`translate(${s.left},${s.top})`),f=t.xAccessor||(k=>k.x),p=t.yAccessor||(k=>k.y),u=Gt(t.data,f,[0,n],t),d=u.scale;f=u.xAccessor,t.data=Pt(t.data,f);let h=o.scaleLinear().domain(Et(t,t.data.map(p),"zero")).range([l,0]);!t.yDomain&&t.yMin===void 0&&t.yMax===void 0&&h.nice(t.axisTicks||6),c.append("g").attr("class","grid").call(at(o.axisLeft(h).tickSize(-n).tickFormat(""),h,t.axisTicks,t.yTickValues)),c.append("g").attr("class","axis-x").attr("transform",`translate(0,${l})`).call(o.axisBottom(d).tickValues(Dt(d,t.axisTicks,t.xTickValues)).tickFormat(Vt(t,u.type))),c.append("g").attr("class","axis-y").call(at(o.axisLeft(h),h,t.axisTicks,t.yTickValues).tickFormat(t.yFormat||(k=>k)));let b=xe(c,h,t,i),g=o.line().defined(k=>{let M=p(k);return M!=null&&!isNaN(M)}).x(k=>d(f(k))).y(k=>h(p(k)));c.append("path").datum(t.data).attr("class","line").attr("d",g).attr("fill","none").attr("stroke",b).attr("stroke-width",y("--line-stroke-width",2));let L=null;Le(t,n,t.data.length,"Line.createBasic")&&(L=c.selectAll(".dot").data(t.data).enter().append("circle").attr("class","dot").attr("cx",k=>d(f(k))).attr("cy",k=>h(p(k))).attr("r",t.pointRadius).attr("stroke",b).attr("stroke-width",q("--line-dot-stroke-width",2)));let m;return t.showTooltip!==!1?m=pe(c,t,d,h,n,l,t.data,f,p,b,L?{snapDots:L}:{}):m=Yt(t.data,f,[{yAcc:p,color:b,format:t.yFormat}]),{svg:c,x:d,y:h,width:n,height:l,linkPoints:m}},createMulti(e,a={}){let t={...nt[a.size||"full"],...a};{let x=w=>typeof w=="string"?X=>X[w]:w,V=x(t.yAccessor)||(w=>w.y);ba(a,t,t.series||[],()=>t.xAccessor||(w=>w.x),w=>x(w.yAccessor)||V)}let s=t.margin,n=Math.max(40,t.width-s.left-s.right),l=t.height-s.top-s.bottom,i=t.series||[],c=t.colors||Kt(i.map(x=>x.name),Fe()),f=i.reduce((x,V)=>Math.max(x,(V.data||[]).length),0),p=Le(t,n,f,"Line.createMulti"),u=o.select(e).append("svg").attr("width",t.width).attr("height",t.height).append("g").attr("transform",`translate(${s.left},${s.top})`),d=t.xAccessor||(x=>x.x),h=x=>typeof x=="string"?V=>V[x]:x,b=h(t.yAccessor)||(x=>x.y),g=x=>h(x.yAccessor)||b,L=[];i.forEach(x=>{let V=g(x);x.data.forEach(w=>L.push(V(w)))});let m=i.flatMap(x=>x.data||[]),k=Gt(m,d,[0,n],t),M=k.scale;d=k.xAccessor;let R=o.scaleLinear().domain(Et(t,L,"zero")).range([l,0]);u.append("g").attr("class","grid").call(at(o.axisLeft(R).tickSize(-n).tickFormat(""),R,t.axisTicks,t.yTickValues)),u.append("g").attr("class","axis-x").attr("transform",`translate(0,${l})`).call(o.axisBottom(M).tickValues(Dt(M,t.axisTicks,t.xTickValues)).tickFormat(Vt(t,k.type))),u.append("g").attr("class","axis-y").call(at(o.axisLeft(R),R,t.axisTicks,t.yTickValues).tickFormat(t.yFormat||(x=>x)));let D=new ct,B=[];i.forEach((x,V)=>{let w=g(x),X=x.color||c[V%c.length],v=x.name||`Series ${V+1}`,G=o.line().defined(P=>At(w(P))).curve(t.curve||o.curveLinear).x(P=>M(d(P))).y(P=>R(w(P))),C=u.append("path").datum(x.data).attr("class",`line line-${V}`).attr("data-series",V).attr("d",G).attr("fill","none").attr("stroke",X).attr("stroke-width",x.width!=null?x.width:y("--line-stroke-width",2));x.width!=null&&C.style("stroke-width",x.width),x.opacity!=null&&C.attr("stroke-opacity",x.opacity),x.front&&B.push(C),p&&u.selectAll(`.dot-${V}`).data(x.data).enter().append("circle").attr("class",`dot dot-${V}`).attr("data-series",V).attr("cx",P=>M(d(P))).attr("cy",P=>R(w(P))).attr("r",t.pointRadius).attr("fill","var(--color-bg-container)").attr("stroke",X).attr("stroke-width",q("--line-dot-stroke-width",2)).style("cursor","pointer").on("pointerenter",function(){o.select(this).transition().duration(q("--line-transition-duration",150)).attr("r",t.pointRadius*1.5)}).on("pointerleave",function(){o.select(this).transition().duration(q("--line-transition-duration",150)).attr("r",t.pointRadius)})});let A=ga(u,t,M,R,n,l,i.map(x=>({...x,yAccessor:g(x)})),d,c);if(B.length&&(B.forEach(x=>x.raise()),u.select(".multi-hover-overlay").raise()),t.endDots){let x=t.endDotRadius||4,V=x+(t.endDotGap!=null?t.endDotGap:2.5);i.forEach((w,X)=>{let v=g(w),G=w.data||[],C=null;for(let T=G.length-1;T>=0;T--)if(At(v(G[T]))){C=G[T];break}if(!C)return;let P=M(d(C)),E=R(v(C)),S=`end-gap-${X}-${Math.random().toString(36).slice(2,8)}`,Y=u.append("mask").attr("id",S).attr("maskUnits","userSpaceOnUse").attr("x",-n).attr("y",-l).attr("width",n*3).attr("height",l*3);Y.append("rect").attr("x",-n).attr("y",-l).attr("width",n*3).attr("height",l*3).attr("fill","#fff"),Y.append("circle").attr("cx",P).attr("cy",E).attr("r",V).attr("fill","#000"),u.select(`path.line-${X}`).attr("mask",`url(#${S})`);let $=u.append("circle").attr("class",`end-dot end-dot-${X}`).attr("data-series",X).attr("cx",P).attr("cy",E).attr("r",x).attr("fill",w.color||c[X%c.length]).style("pointer-events","none");w.opacity!=null&&$.attr("fill-opacity",w.opacity)}),u.select(".multi-hover-overlay").raise()}return t.seriesLabels&&wa(u,t,M,R,l,i.map((x,V)=>({spec:x,name:x.name||`Series ${V+1}`,color:x.color||c[V%c.length],xAcc:d,yAcc:g(x),opacity:x.opacity}))),{svg:u,x:M,y:R,width:n,height:l,series:i,linkPoints:A}},createYearly(e,a={}){let t={...nt[a.size||"full"],...a,showPoints:!1},s=t.margin,n=Math.max(40,t.width-s.left-s.right),l=t.height-s.top-s.bottom,i=t.color||y("--chart-primary","#3b82f6"),c=t.curve||o.curveLinear,f=o.select(e).append("svg").attr("width",t.width).attr("height",t.height).append("g").attr("transform",`translate(${s.left},${s.top})`),p=t.xAccessor||(k=>k.x),u=t.yAccessor||(k=>k.y),d=Gt(t.data,p,[0,n],t),h=d.scale;p=d.xAccessor,t.data=Pt(t.data,p);let b=o.scaleLinear().domain(Et(t,t.data.map(u),"padded")).range([l,0]);!t.yDomain&&t.yMin===void 0&&t.yMax===void 0&&b.nice(t.axisTicks||6),f.append("g").attr("class","grid").call(at(o.axisLeft(b).tickSize(-n).tickFormat(""),b,t.axisTicks,t.yTickValues)),f.append("g").attr("class","axis-x").attr("transform",`translate(0,${l})`).call(o.axisBottom(h).tickValues(Dt(h,t.axisTicks,t.xTickValues)).tickFormat(Vt(t,d.type))),f.append("g").attr("class","axis-y").call(at(o.axisLeft(b),b,t.axisTicks,t.yTickValues).tickFormat(t.yFormat||(k=>k)));let g=xe(f,b,t,i),L=o.line().defined(k=>{let M=u(k);return M!=null&&!isNaN(M)}).curve(c).x(k=>h(p(k))).y(k=>b(u(k)));f.append("path").datum(t.data).attr("class","line").attr("d",L).attr("fill","none").attr("stroke",g).attr("stroke-width",y("--line-stroke-width",2));let m;return t.showTooltip!==!1?m=pe(f,t,h,b,n,l,t.data,p,u,i):m=Yt(t.data,p,[{yAcc:u,color:i,format:t.yFormat}]),{svg:f,x:h,y:b,width:n,height:l,linkPoints:m}},createSmoothed(e,a={}){return this.createYearly(e,{...a,curve:o.curveBasis})},createCombined(e,a={}){let t={...nt[a.size||"full"],...a,showPoints:!1},s=t.margin,n=Math.max(40,t.width-s.left-s.right),l=t.height-s.top-s.bottom,i=t.rawColor||y("--chart-primary-light","rgba(59, 130, 246, 0.3)"),c=t.avgColor||y("--chart-primary","#3b82f6"),f=t.windowSize||14,p=o.select(e).append("svg").attr("width",t.width).attr("height",t.height).append("g").attr("transform",`translate(${s.left},${s.top})`),u=t.xAccessor||(B=>B.x),d=t.yAccessor||(B=>B.y),h=Gt(t.data,u,[0,n],t),b=h.scale;u=h.xAccessor,t.data=Pt(t.data,u);let g=t.data.map((B,A,x)=>{let V=Math.max(0,A-f+1),w=x.slice(V,A+1);return{...B,_movingAvg:o.mean(w,d)}}),L=o.scaleLinear().domain(Et(t,t.data.map(d),"padded")).range([l,0]);!t.yDomain&&t.yMin===void 0&&t.yMax===void 0&&L.nice(t.axisTicks||6),p.append("g").attr("class","grid").call(at(o.axisLeft(L).tickSize(-n).tickFormat(""),L,t.axisTicks,t.yTickValues)),p.append("g").attr("class","axis-x").attr("transform",`translate(0,${l})`).call(o.axisBottom(b).tickValues(Dt(b,t.axisTicks,t.xTickValues)).tickFormat(Vt(t,h.type))),p.append("g").attr("class","axis-y").call(at(o.axisLeft(L),L,t.axisTicks,t.yTickValues).tickFormat(t.yFormat||(B=>B)));let m=o.line().defined(B=>{let A=d(B);return A!=null&&!isNaN(A)}).x(B=>b(u(B))).y(B=>L(d(B)));p.append("path").datum(t.data).attr("class","line line-raw").attr("d",m).attr("fill","none").attr("stroke",i).attr("stroke-width",y("--line-stroke-width",2)).style("opacity",q("--line-opacity-muted",.3));let k=o.line().x(B=>b(u(B))).y(B=>L(B._movingAvg));if(p.append("path").datum(g).attr("class","line line-avg").attr("d",k).attr("fill","none").attr("stroke",c).attr("stroke-width",y("--line-stroke-width",2)),t.showTooltip!==!1){let B=new ct,A=p.append("line").attr("class","hover-line").attr("y1",0).attr("y2",l).style("stroke",y("--color-text-faint","#9ca3af")).style("stroke-dasharray",y("--hover-dash-pattern","3, 3")).style("opacity",0).style("pointer-events","none"),x=p.append("circle").attr("r",t.pointRadius??4).attr("fill","var(--color-bg-container)").attr("stroke",i).attr("stroke-width",2).style("opacity",0).style("pointer-events","none"),V=p.append("circle").attr("r",t.pointRadius??4).attr("fill","var(--color-bg-container)").attr("stroke",c).attr("stroke-width",2).style("opacity",0).style("pointer-events","none");p.append("rect").attr("width",n).attr("height",l).attr("fill","transparent").style("cursor","crosshair").on("pointermove",function(w){let[X]=o.pointer(w),v=0,G=1/0;g.forEach((T,I)=>{let _=Math.abs(b(u(T))-X);_<G&&(G=_,v=I)});let C=g[v],P=b(u(C));A.attr("x1",P).attr("x2",P).style("opacity",1),x.attr("cx",P).attr("cy",L(d(C))).style("opacity",1),V.attr("cx",P).attr("cy",L(C._movingAvg)).style("opacity",1);let E=t.labelFormat?t.labelFormat(C):Ht(u(C)),S=t.tooltipValueFormat||t.valueFormat,Y=S?S(C):yt(d(C)),$=C._movingAvg.toFixed(0);B.show(lt(t,C,[{title:E},{label:"Moving Avg",value:$,color:c},{label:"Daily",value:Y,color:i}]),w)}).on("pointerleave",function(){A.style("opacity",0),x.style("opacity",0),V.style("opacity",0),B.hide()})}let M=Yt(t.data,u,[{yAcc:d,color:i,format:t.yFormat}]),R=Yt(g,u,[{yAcc:B=>B._movingAvg,color:c,format:t.yFormat}]);return{svg:p,x:b,y:L,width:n,height:l,movingAvgData:g,linkPoints:B=>[...R(B),...M(B)]}},createYoY(e,a={}){let t={...nt[a.size||"full"],...a,showPoints:!1};ba(a,t,t.series||[],R=>R.xAccessor||t.xAccessor||(D=>D.day),R=>R.yAccessor||t.yAccessor||(D=>D.value));let s=t.margin,n=Math.max(40,t.width-s.left-s.right),l=t.height-s.top-s.bottom,i=t.colors||[y("--chart-series-1","#94a3b8"),y("--chart-series-2","#64748b"),y("--chart-series-3","#3b82f6")],c=t.series||[],f=t.curve||o.curveBasis,p=o.select(e).append("svg").attr("width",t.width).attr("height",t.height).append("g").attr("transform",`translate(${s.left},${s.top})`),u=t.xAccessor||(R=>R.day),d=t.yAccessor||(R=>R.value),h=c.flatMap(R=>R.data.map(D=>(R.yAccessor||d)(D))),b=c.flatMap(R=>R.data||[]),g=Gt(b,u,[0,n],t),L=g.scale;u=g.xAccessor;let m=o.scaleLinear().domain(Et(t,h,"padded")).range([l,0]);p.append("g").attr("class","grid").call(at(o.axisLeft(m).tickSize(-n).tickFormat(""),m,t.axisTicks,t.yTickValues)),p.append("g").attr("class","axis-x").attr("transform",`translate(0,${l})`).call(o.axisBottom(L).tickValues(Dt(L,t.axisTicks,t.xTickValues)).tickFormat(Vt(t,g.type))),p.append("g").attr("class","axis-y").call(at(o.axisLeft(m),m,t.axisTicks,t.yTickValues).tickFormat(t.yFormat||(R=>R)));let k=[];c.forEach((R,D)=>{let B=R.xAccessor||u,A=R.yAccessor||d,x=R.color||i[D%i.length],V=o.line().defined(X=>At(A(X))).curve(f).x(X=>L(B(X))).y(X=>m(A(X))),w=p.append("path").datum(R.data).attr("class","line").attr("d",V).attr("fill","none").attr("stroke",x).attr("stroke-width",R.width!=null?R.width:y("--line-stroke-width",2));R.width!=null&&w.style("stroke-width",R.width),R.opacity!=null&&w.attr("stroke-opacity",R.opacity),R.front&&k.push(w)});let M=ga(p,t,L,m,n,l,c.map(R=>({...R,yAccessor:R.yAccessor||d})),u,i,{openDots:!0,dotRadius:t.pointRadius??4,cursor:"crosshair"});return k.length&&(k.forEach(R=>R.raise()),p.select(".multi-hover-overlay").raise()),t.seriesLabels&&wa(p,t,L,m,l,c.map((R,D)=>({spec:R,name:R.name||`Series ${D+1}`,color:R.color||i[D%i.length],xAcc:R.xAccessor||u,yAcc:R.yAccessor||d,opacity:R.opacity}))),{svg:p,x:L,y:m,width:n,height:l,yearSeries:c,linkPoints:M}},createTextures(e,a={}){let t={...nt[a.size||"full"],...a,showPoints:!1},s=t.margin,n=Math.max(40,t.width-s.left-s.right),l=t.height-s.top-s.bottom,i=t.series||[],c=o.select(e).append("svg").attr("width",t.width).attr("height",t.height).append("g").attr("transform",`translate(${s.left},${s.top})`),f=t.xAccessor||(k=>k.x),p=t.yAccessor||(k=>k.y),u=i.flatMap(k=>k.data.map(M=>(k.yAccessor||p)(M))),d=o.extent(u),h=(d[1]-d[0])*.15,b=i.flatMap(k=>k.data||[]),g=Gt(b,f,[0,n],t),L=g.scale;f=g.xAccessor;let m=o.scaleLinear().domain(t.yDomain||[d[0]-h,d[1]+h]).range([l,0]);if(c.append("g").attr("class","grid").call(at(o.axisLeft(m).tickSize(-n).tickFormat(""),m,t.axisTicks,t.yTickValues)),c.append("g").attr("class","axis-x").attr("transform",`translate(0,${l})`).call(o.axisBottom(L).tickValues(Dt(L,t.axisTicks,t.xTickValues)).tickFormat(Vt(t,g.type))),c.append("g").attr("class","axis-y").call(at(o.axisLeft(m),m,t.axisTicks,t.yTickValues).tickFormat(t.yFormat||(k=>k))),i.forEach(k=>{let M=k.xAccessor||f,R=k.yAccessor||p,D=o.line().defined(B=>At(R(B))).x(B=>L(M(B))).y(B=>m(R(B)));c.append("path").datum(k.data).attr("class","line").attr("d",D).attr("fill","none").attr("stroke",k.color||y("--chart-primary","#3b82f6")).attr("stroke-width",y("--line-stroke-width",2)).attr("stroke-dasharray",k.dash||"")}),t.showTooltip!==!1){let k=new ct,M=c.append("line").attr("class","hover-line").attr("y1",0).attr("y2",l).style("stroke",y("--color-text-faint","#9ca3af")).style("stroke-dasharray",y("--hover-dash-pattern","3, 3")).style("opacity",0).style("pointer-events","none"),R=i.map(D=>c.append("circle").attr("r",t.pointRadius??4).attr("fill","var(--color-bg-container)").attr("stroke",D.color||y("--chart-primary","#3b82f6")).attr("stroke-width",2).style("opacity",0).style("pointer-events","none"));c.append("rect").attr("width",n).attr("height",l).attr("fill","transparent").style("cursor","crosshair").on("pointermove",function(D){let[B]=o.pointer(D),A=0,x=1/0;i[0].data.forEach((G,C)=>{let P=Math.abs(L((i[0].xAccessor||f)(G))-B);P<x&&(x=P,A=C)});let V=L((i[0].xAccessor||f)(i[0].data[A]));M.attr("x1",V).attr("x2",V).style("opacity",1);let w=i[0].data[A],v=[{title:t.labelFormat?t.labelFormat(w):(i[0].xAccessor||f)(w)}];i.forEach((G,C)=>{let P=G.data[A],E=(G.yAccessor||p)(P),S=G.color||y("--chart-primary","#3b82f6"),Y=G.name||`Series ${C+1}`;R[C].attr("cx",V).attr("cy",m(E)).style("opacity",1);let $=t.tooltipValueFormat||t.valueFormat,T=$?$(P):yt(E);v.push({label:Y,value:T,color:S})}),k.show(lt(t,w,v),D)}).on("pointerleave",function(){M.style("opacity",0),R.forEach(D=>D.style("opacity",0)),k.hide()})}return{svg:c,x:L,y:m,width:n,height:l,lineSeries:i}},createAreaGradient(e,a={}){let t={...nt[a.size||"full"],...a,showPoints:!1},s=t.margin,n=Math.max(40,t.width-s.left-s.right),l=t.height-s.top-s.bottom,i=t.color||y("--chart-primary","#3b82f6"),c=o.select(e).append("svg").attr("width",t.width).attr("height",t.height),f="area-grad-"+Math.random().toString(36).substr(2,9),u=c.append("defs").append("linearGradient").attr("id",f).attr("x1","0%").attr("y1","0%").attr("x2","0%").attr("y2","100%");u.append("stop").attr("offset","0%").attr("stop-color",i).attr("stop-opacity",q("--area-gradient-start",.3)),u.append("stop").attr("offset","100%").attr("stop-color",i).attr("stop-opacity",q("--area-gradient-end",.02));let d=c.append("g").attr("transform",`translate(${s.left},${s.top})`),h=t.xAccessor||(D=>D.x),b=t.yAccessor||(D=>D.y),g=Gt(t.data,h,[0,n],t),L=g.scale;h=g.xAccessor,t.data=Pt(t.data,h);let m=o.scaleLinear().domain(Et(t,t.data.map(b),"padded")).range([l,0]);!t.yDomain&&t.yMin===void 0&&t.yMax===void 0&&m.nice(t.axisTicks||6),d.append("g").attr("class","grid").call(at(o.axisLeft(m).tickSize(-n).tickFormat(""),m,t.axisTicks,t.yTickValues)),d.append("g").attr("class","axis-x").attr("transform",`translate(0,${l})`).call(o.axisBottom(L).tickValues(Dt(L,t.axisTicks,t.xTickValues)).tickFormat(Vt(t,g.type))),d.append("g").attr("class","axis-y").call(at(o.axisLeft(m),m,t.axisTicks,t.yTickValues).tickFormat(t.yFormat||(D=>D)));let k=o.area().defined(D=>{let B=b(D);return B!=null&&!isNaN(B)}).x(D=>L(h(D))).y0(l).y1(D=>m(b(D)));d.append("path").datum(t.data).attr("fill",`url(#${f})`).attr("d",k);let M=o.line().defined(D=>{let B=b(D);return B!=null&&!isNaN(B)}).x(D=>L(h(D))).y(D=>m(b(D)));d.append("path").datum(t.data).attr("class","line").attr("d",M).attr("fill","none").attr("stroke",i).attr("stroke-width",y("--line-stroke-width",2));let R;return t.showTooltip!==!1?R=pe(d,t,L,m,n,l,t.data,h,b,i):R=Yt(t.data,h,[{yAcc:b,color:i,format:t.yFormat}]),{svg:d,x:L,y:m,width:n,height:l,linkPoints:R}},createGrowthRate(e,a={}){let t={...nt[a.size||"full"],...a,showPoints:!1},s=t.margin,n=Math.max(40,t.width-s.left-s.right),l=t.height-s.top-s.bottom,i=t.upColor||y("--chart-trend-up","#22c55e"),c=t.downColor||y("--chart-trend-down","#ef4444"),f=o.select(e).append("svg").attr("width",t.width).attr("height",t.height),p=f.append("defs"),u=f.append("g").attr("transform",`translate(${s.left},${s.top})`),d=t.xAccessor||(w=>w.x),h=t.yAccessor||(w=>w.value),b=Gt(t.data,d,[0,n],t),g=b.scale;d=b.xAccessor,t.data=Pt(t.data,d);let L=o.scaleLinear().domain(Et(t,t.data.map(h),"symmetric")).range([l,0]);u.append("g").attr("class","grid").call(at(o.axisLeft(L).tickSize(-n).tickFormat(""),L,t.axisTicks,t.yTickValues)),u.append("g").attr("class","axis-x").attr("transform",`translate(0,${l})`).call(o.axisBottom(g).tickValues(Dt(g,t.axisTicks,t.xTickValues)).tickFormat(Vt(t,b.type))),u.append("g").attr("class","axis-y").call(at(o.axisLeft(L),L,t.axisTicks,t.yTickValues).tickFormat(t.yFormat||(w=>`${w>0?"+":""}${w.toFixed(0)}%`))),u.append("line").attr("x1",0).attr("x2",n).attr("y1",L(0)).attr("y2",L(0)).attr("stroke",y("--color-black","#374151")).attr("stroke-width",1.5);let m="clip-pos-"+Math.random().toString(36).substr(2,9),k="clip-neg-"+Math.random().toString(36).substr(2,9);p.append("clipPath").attr("id",m).append("rect").attr("x",0).attr("y",0).attr("width",n).attr("height",L(0)),p.append("clipPath").attr("id",k).append("rect").attr("x",0).attr("y",L(0)).attr("width",n).attr("height",l-L(0));let M="grad-pos-"+Math.random().toString(36).substr(2,9),R="grad-neg-"+Math.random().toString(36).substr(2,9),D=p.append("linearGradient").attr("id",M).attr("gradientUnits","userSpaceOnUse").attr("x1",0).attr("y1",0).attr("x2",0).attr("y2",L(0));D.append("stop").attr("offset","0%").attr("stop-color",i).attr("stop-opacity",q("--area-gradient-start",.3)),D.append("stop").attr("offset","100%").attr("stop-color",i).attr("stop-opacity",q("--area-gradient-end",.02));let B=p.append("linearGradient").attr("id",R).attr("gradientUnits","userSpaceOnUse").attr("x1",0).attr("y1",L(0)).attr("x2",0).attr("y2",l);B.append("stop").attr("offset","0%").attr("stop-color",c).attr("stop-opacity",q("--area-gradient-end",.02)),B.append("stop").attr("offset","100%").attr("stop-color",c).attr("stop-opacity",q("--area-gradient-start",.3));let A=o.area().defined(w=>At(h(w))).x(w=>g(d(w))).y0(L(0)).y1(w=>L(h(w))),x=o.line().defined(w=>At(h(w))).x(w=>g(d(w))).y(w=>L(h(w)));if(u.append("path").datum(t.data).attr("fill",`url(#${M})`).attr("clip-path",`url(#${m})`).attr("d",A),u.append("path").datum(t.data).attr("class","line").style("stroke",i).attr("clip-path",`url(#${m})`).attr("d",x),u.append("path").datum(t.data).attr("fill",`url(#${R})`).attr("clip-path",`url(#${k})`).attr("d",A),u.append("path").datum(t.data).attr("class","line").style("stroke",c).attr("clip-path",`url(#${k})`).attr("d",x),t.showTooltip!==!1){let w=new ct,X=u.append("line").attr("class","hover-line").attr("y1",0).attr("y2",l).style("stroke",y("--color-text-faint","#9ca3af")).style("stroke-dasharray",y("--hover-dash-pattern","3, 3")).style("opacity",0).style("pointer-events","none"),v=u.append("circle").attr("class","hover-dot").attr("r",t.pointRadius??4).attr("fill","var(--color-bg-container)").attr("stroke-width",q("--line-dot-stroke-width",2)).style("opacity",0).style("pointer-events","none");u.append("rect").attr("class","hover-rect").attr("width",n).attr("height",l).attr("fill","transparent").style("cursor","crosshair").on("pointermove",function(G){let[C]=o.pointer(G),P=0,E=1/0;t.data.forEach((F,z)=>{let W=Math.abs(g(d(F))-C);W<E&&(E=W,P=z)});let S=t.data[P],Y=g(d(S)),$=L(h(S)),T=h(S),I=T>=0?i:c;X.attr("x1",Y).attr("x2",Y).style("opacity",1),v.attr("cx",Y).attr("cy",$).attr("stroke",I).style("opacity",1);let _=t.labelFormat?t.labelFormat(S):Ht(d(S)),N=t.tooltipValueFormat||t.valueFormat,H=N?N(S):`${T>0?"+":""}${T.toFixed(1)}%`;w.show(lt(t,S,[{title:_},{value:H,color:I}]),G)}).on("pointerleave",function(){X.style("opacity",0),v.style("opacity",0),w.hide()})}let V=Yt(t.data,d,[{yAcc:h,color:w=>h(w)>=0?i:c,format:t.yFormat}]);return{svg:u,x:g,y:L,width:n,height:l,linkPoints:V}},createForecastBand(e,a={}){let t={...nt[a.size||"full"],...a,showPoints:!1},s=t.margin,n=Math.max(40,t.width-s.left-s.right),l=t.height-s.top-s.bottom,i=t.bandColor||y("--chart-primary","#3b82f6"),c=t.actualColor||y("--chart-actual","#3b82f6"),f=t.anomalyColor||y("--chart-anomaly","#ef4444"),p=o.select(e).append("svg").attr("width",t.width).attr("height",t.height).append("g").attr("transform",`translate(${s.left},${s.top})`),u=t.xAccessor||(A=>A.x),d=t.actualAccessor||(A=>A.actual),h=t.upperAccessor||(A=>A.upper),b=t.lowerAccessor||(A=>A.lower),g=Gt(t.data,u,[0,n],t),L=g.scale;u=g.xAccessor,t.data=Pt(t.data,u);let m=t.data.flatMap(A=>[b(A),d(A),h(A)]),k=o.scaleLinear().domain(Et(t,m,"ratio")).range([l,0]);!t.yDomain&&t.yMin===void 0&&t.yMax===void 0&&k.nice(t.axisTicks||6),p.append("g").attr("class","grid").call(at(o.axisLeft(k).tickSize(-n).tickFormat(""),k,t.axisTicks,t.yTickValues)),p.append("g").attr("class","axis-x").attr("transform",`translate(0,${l})`).call(o.axisBottom(L).tickValues(Dt(L,t.axisTicks,t.xTickValues)).tickFormat(Vt(t,g.type))),p.append("g").attr("class","axis-y").call(at(o.axisLeft(k),k,t.axisTicks,t.yTickValues).tickFormat(t.yFormat||(A=>A)));let M=o.area().defined(A=>At(b(A))&&At(h(A))).x(A=>L(u(A))).y0(A=>k(b(A))).y1(A=>k(h(A)));p.append("path").datum(t.data).attr("fill",i).attr("opacity",q("--area-opacity",.15)).attr("d",M);let R=xe(p,k,t,c),D=o.line().defined(A=>{let x=d(A);return x!=null&&!isNaN(x)}).x(A=>L(u(A))).y(A=>k(d(A)));if(p.append("path").datum(t.data).attr("class","line").attr("d",D).attr("fill","none").attr("stroke",R).attr("stroke-width",y("--line-stroke-width",2)),t.showAnomalies!==!1){let A=t.data.filter(x=>d(x)>h(x)||d(x)<b(x));p.selectAll(".anomaly-line").data(A).enter().append("line").attr("class","anomaly-line").attr("x1",x=>L(u(x))).attr("x2",x=>L(u(x))).attr("y1",0).attr("y2",l).attr("stroke",f).attr("stroke-width",1).attr("stroke-dasharray",y("--hover-dash-pattern","3, 3"))}if(t.showTooltip!==!1){let A=new ct,x=p.append("line").attr("class","hover-line").attr("y1",0).attr("y2",l).style("stroke",y("--color-text-faint","#9ca3af")).style("stroke-dasharray",y("--hover-dash-pattern","3, 3")).style("opacity",0).style("pointer-events","none"),V=p.append("circle").attr("class","hover-dot").attr("r",t.pointRadius??4).attr("fill","var(--color-bg-container)").attr("stroke",c).attr("stroke-width",q("--line-dot-stroke-width",2)).style("opacity",0).style("pointer-events","none");p.append("rect").attr("class","hover-rect").attr("width",n).attr("height",l).attr("fill","transparent").style("cursor","crosshair").on("pointermove",function(w){let[X]=o.pointer(w),v=0,G=1/0;t.data.forEach((N,H)=>{let F=Math.abs(L(u(N))-X);F<G&&(G=F,v=H)});let C=t.data[v],P=L(u(C)),E=k(d(C)),S=d(C),Y=h(C),$=b(C),T=S>Y||S<$;x.attr("x1",P).attr("x2",P).style("opacity",1),V.attr("cx",P).attr("cy",E).attr("stroke",T?f:c).style("opacity",1);let I=t.labelFormat?t.labelFormat(C):Ht(u(C)),_=t.tooltipFormat||yt;A.show(lt(t,C,[{title:I},{label:"Actual",value:_(S),color:T?f:void 0},{label:"Band",value:`${_($)} \u2013 ${_(Y)}`}]),w)}).on("pointerleave",function(){x.style("opacity",0),V.style("opacity",0),A.hide()})}let B=Yt(t.data,u,[{yAcc:d,color:c,format:t.yFormat}]);return{svg:p,x:L,y:k,width:n,height:l,linkPoints:B}},createDynamicBand(e,a={}){let t={...nt[a.size||"full"],...a,showPoints:!1},s=t.margin,n=Math.max(40,t.width-s.left-s.right),l=t.height-s.top-s.bottom,i=t.bandColor||y("--chart-primary","#3b82f6"),c=t.forecastColor||y("--chart-forecast","#3b82f6"),f=t.actualColor||y("--chart-actual","#3b82f6"),p=t.dividerColor||y("--chart-series-1","#94a3b8"),u=t.forecastStart,d=o.select(e).append("svg").attr("width",t.width).attr("height",t.height).append("g").attr("transform",`translate(${s.left},${s.top})`),h=t.xAccessor||(w=>w.x),b=t.actualAccessor||(w=>w.actual),g=t.forecastAccessor||(w=>w.forecast),L=t.upperAccessor||(w=>w.upper),m=t.lowerAccessor||(w=>w.lower),k=Gt(t.data,h,[0,n],t),M=k.scale;h=k.xAccessor,t.data=Pt(t.data,h);let R=t.data.flatMap(w=>[m(w),L(w),b(w)||g(w)]).filter(w=>w!=null),D=o.scaleLinear().domain(Et(t,R,"padded")).range([l,0]);!t.yDomain&&t.yMin===void 0&&t.yMax===void 0&&D.nice(t.axisTicks||6),d.append("g").attr("class","grid").call(at(o.axisLeft(D).tickSize(-n).tickFormat(""),D,t.axisTicks,t.yTickValues)),d.append("g").attr("class","axis-x").attr("transform",`translate(0,${l})`).call(o.axisBottom(M).tickValues(Dt(M,t.axisTicks,t.xTickValues)).tickFormat(Vt(t,k.type))),d.append("g").attr("class","axis-y").call(at(o.axisLeft(D),D,t.axisTicks,t.yTickValues).tickFormat(t.yFormat||(w=>w)));let B=o.area().defined(w=>At(g(w))&&At(m(w))&&At(L(w))).x(w=>M(h(w))).y0(w=>D(m(w))).y1(w=>D(L(w)));d.append("path").datum(t.data).attr("fill",i).attr("opacity",q("--area-opacity",.15)).attr("d",B);let A=o.line().defined(w=>At(g(w))).x(w=>M(h(w))).y(w=>D(g(w)));d.append("path").datum(t.data).attr("class","line").attr("d",A).attr("fill","none").attr("stroke",c).attr("stroke-width",y("--line-stroke-width",2)).attr("stroke-dasharray","4,4").style("opacity",.5);let x=t.data.filter(w=>b(w)!==null);if(x.length>0){let w=xe(d,D,t,f),X=o.line().defined(v=>{let G=b(v);return G!=null&&!isNaN(G)}).x(v=>M(h(v))).y(v=>D(b(v)));d.append("path").datum(x).attr("class","line").attr("d",X).attr("fill","none").attr("stroke",w).attr("stroke-width",y("--line-stroke-width",2))}if(u!==void 0&&d.append("line").attr("x1",M(u)).attr("x2",M(u)).attr("y1",0).attr("y2",l).attr("stroke",p).attr("stroke-width",1).attr("stroke-dasharray",y("--hover-dash-pattern","3, 3")),t.showTooltip!==!1){let w=new ct,X=d.append("line").attr("class","hover-line").attr("y1",0).attr("y2",l).style("stroke",y("--color-text-faint","#9ca3af")).style("stroke-dasharray",y("--hover-dash-pattern","3, 3")).style("opacity",0).style("pointer-events","none"),v=d.append("circle").attr("class","hover-dot").attr("r",t.pointRadius??4).attr("fill","var(--color-bg-container)").attr("stroke-width",q("--line-dot-stroke-width",2)).style("opacity",0).style("pointer-events","none");d.append("rect").attr("class","hover-rect").attr("width",n).attr("height",l).attr("fill","transparent").style("cursor","crosshair").on("pointermove",function(G){let[C]=o.pointer(G),P=0,E=1/0;t.data.forEach((Q,ot)=>{let dt=Math.abs(M(h(Q))-C);dt<E&&(E=dt,P=ot)});let S=t.data[P],Y=M(h(S)),$=b(S),T=g(S),I=L(S),_=m(S),N=$!=null,F=D(N?$:T),z=N?f:c;X.attr("x1",Y).attr("x2",Y).style("opacity",1),v.attr("cx",Y).attr("cy",F).attr("stroke",z).style("opacity",1);let W=t.labelFormat?t.labelFormat(S):Ht(h(S)),O=t.tooltipFormat||yt,j=[{title:W}];N&&j.push({label:"Actual",value:O($)}),j.push({label:"Forecast",value:O(T)}),j.push({label:"Band",value:`${O(_)} \u2013 ${O(I)}`}),w.show(lt(t,S,j),G)}).on("pointerleave",function(){X.style("opacity",0),v.style("opacity",0),w.hide()})}let V=Yt(t.data,h,[{yAcc:b,color:f,format:t.yFormat}]);return{svg:d,x:M,y:D,width:n,height:l,linkPoints:V}},createPulseAnomalies(e,a={}){let t={...nt[a.size||"full"],...a,showPoints:!1},s=t.margin,n=Math.max(40,t.width-s.left-s.right),l=t.height-s.top-s.bottom,i=t.bandColor||y("--chart-primary","#3b82f6"),c=t.actualColor||y("--chart-actual","#3b82f6"),f=t.anomalyColor||y("--chart-anomaly","#ef4444"),p=o.select(e).append("svg").attr("width",t.width).attr("height",t.height).append("g").attr("transform",`translate(${s.left},${s.top})`),u=t.xAccessor||(x=>x.x),d=t.actualAccessor||(x=>x.actual),h=t.upperAccessor||(x=>x.upper),b=t.lowerAccessor||(x=>x.lower),g=Gt(t.data,u,[0,n],t),L=g.scale;u=g.xAccessor,t.data=Pt(t.data,u);let m=t.data.flatMap(x=>[b(x),d(x),h(x)]),k=o.scaleLinear().domain(Et(t,m,"ratio")).range([l,0]);!t.yDomain&&t.yMin===void 0&&t.yMax===void 0&&k.nice(t.axisTicks||6),p.append("g").attr("class","grid").call(at(o.axisLeft(k).tickSize(-n).tickFormat(""),k,t.axisTicks,t.yTickValues)),p.append("g").attr("class","axis-x").attr("transform",`translate(0,${l})`).call(o.axisBottom(L).tickValues(Dt(L,t.axisTicks,t.xTickValues)).tickFormat(Vt(t,g.type))),p.append("g").attr("class","axis-y").call(at(o.axisLeft(k),k,t.axisTicks,t.yTickValues).tickFormat(t.yFormat||(x=>x)));let M=o.area().defined(x=>At(b(x))&&At(h(x))).x(x=>L(u(x))).y0(x=>k(b(x))).y1(x=>k(h(x)));p.append("path").datum(t.data).attr("fill",i).attr("opacity",q("--area-opacity",.15)).attr("d",M);let R=o.line().defined(x=>{let V=d(x);return V!=null&&!isNaN(V)}).x(x=>L(u(x))).y(x=>k(d(x)));p.append("path").datum(t.data).attr("class","line").attr("d",R).attr("fill","none").attr("stroke",c).attr("stroke-width",y("--line-stroke-width",2));let D=x=>t.anomalyAccessor?!!t.anomalyAccessor(x):d(x)>h(x)||d(x)<b(x),B=t.data.filter(D);if(p.selectAll(".anomaly-pulse").data(B).enter().append("circle").attr("class","anomaly-pulse").attr("cx",x=>L(u(x))).attr("cy",x=>k(d(x))).attr("r",q("--anomaly-pulse-radius",4)).attr("fill",f).style("animation-delay",(x,V)=>`${V*.2}s`).style("animation",t.animate===!1?"none":null),p.selectAll(".anomaly-dot").data(B).enter().append("circle").attr("class","anomaly-dot").attr("cx",x=>L(u(x))).attr("cy",x=>k(d(x))).attr("r",q("--anomaly-dot-radius",3)).attr("fill",f),t.showTooltip!==!1){let x=new ct,V=p.append("line").attr("class","hover-line").attr("y1",0).attr("y2",l).style("stroke",y("--color-text-faint","#9ca3af")).style("stroke-dasharray",y("--hover-dash-pattern","3, 3")).style("opacity",0).style("pointer-events","none"),w=p.append("circle").attr("class","hover-dot").attr("r",t.pointRadius??4).attr("fill","var(--color-bg-container)").attr("stroke-width",q("--line-dot-stroke-width",2)).style("opacity",0).style("pointer-events","none");p.append("rect").attr("class","hover-rect").attr("width",n).attr("height",l).attr("fill","transparent").style("cursor","crosshair").on("pointermove",function(X){let[v]=o.pointer(X),G=0,C=1/0;t.data.forEach((z,W)=>{let O=Math.abs(L(u(z))-v);O<C&&(C=O,G=W)});let P=t.data[G],E=L(u(P)),S=k(d(P)),Y=d(P),$=h(P),T=b(P),I=D(P),_=I?f:c;V.attr("x1",E).attr("x2",E).style("opacity",1),w.attr("cx",E).attr("cy",S).attr("stroke",_).style("opacity",1);let N=t.labelFormat?t.labelFormat(P):Ht(u(P)),H=t.tooltipFormat||yt,F=[{title:N}];I&&F.push({note:"\u26A0 Anomaly",color:f}),F.push({label:"Actual",value:H(Y)}),F.push({label:"Band",value:`${H(T)} \u2013 ${H($)}`}),x.show(lt(t,P,F),X)}).on("pointerleave",function(){V.style("opacity",0),w.style("opacity",0),x.hide()})}let A=Yt(t.data,u,[{yAcc:d,color:c,format:t.yFormat}]);return{svg:p,x:L,y:k,width:n,height:l,outliers:B,linkPoints:A}},createCumulativeVsMoving(e,a={}){let t={...nt[a.size||"full"],...a,showPoints:!1},s=t.margin,n=Math.max(40,t.width-s.left-s.right),l=t.height-s.top-s.bottom,i=t.cumulativeColor||y("--chart-neutral","#6b7280"),c=t.movingColor||y("--chart-purple","#a855f7"),f=t.curve||o.curveBasis,p=o.select(e).append("svg").attr("width",t.width).attr("height",t.height),u=p.append("defs"),d=p.append("g").attr("transform",`translate(${s.left},${s.top})`),h=t.xAccessor||(S=>S.x),b=t.cumulativeAccessor||(S=>S.cumulative),g=t.movingAccessor||(S=>S.moving),L=Gt(t.data,h,[0,n],t),m=L.scale;h=L.xAccessor,t.data=Pt(t.data,h);let k=t.data.flatMap(S=>[b(S),g(S)]),M=o.scaleLinear().domain(Et(t,k,"padded")).range([l,0]);!t.yDomain&&t.yMin===void 0&&t.yMax===void 0&&M.nice(t.axisTicks||6),d.append("g").attr("class","grid").call(at(o.axisLeft(M).tickSize(-n).tickFormat(""),M,t.axisTicks,t.yTickValues)),d.append("g").attr("class","axis-x").attr("transform",`translate(0,${l})`).call(o.axisBottom(m).tickValues(Dt(m,t.axisTicks,t.xTickValues)).tickFormat(Vt(t,L.type))),d.append("g").attr("class","axis-y").call(at(o.axisLeft(M),M,t.axisTicks,t.yTickValues).tickFormat(t.yFormat||(S=>S)));let R=o.mean(t.data,b),D="grad-hot-"+Math.random().toString(36).substr(2,9),B="grad-cold-"+Math.random().toString(36).substr(2,9),A=u.append("linearGradient").attr("id",D).attr("gradientUnits","userSpaceOnUse").attr("x1",0).attr("y1",M(R)).attr("x2",0).attr("y2",0);A.append("stop").attr("offset","0%").attr("stop-color",c).attr("stop-opacity",q("--area-gradient-end",.02)),A.append("stop").attr("offset","100%").attr("stop-color",c).attr("stop-opacity",.4);let x=u.append("linearGradient").attr("id",B).attr("gradientUnits","userSpaceOnUse").attr("x1",0).attr("y1",M(R)).attr("x2",0).attr("y2",l);x.append("stop").attr("offset","0%").attr("stop-color",i).attr("stop-opacity",q("--area-gradient-end",.02)),x.append("stop").attr("offset","100%").attr("stop-color",i).attr("stop-opacity",.4);let V="clip-above-"+Math.random().toString(36).substr(2,9),w="clip-below-"+Math.random().toString(36).substr(2,9),X=S=>At(b(S)),v=S=>At(g(S));u.append("clipPath").attr("id",V).append("path").datum(t.data).attr("d",o.area().defined(X).curve(f).x(S=>m(h(S))).y0(0).y1(S=>M(b(S)))),u.append("clipPath").attr("id",w).append("path").datum(t.data).attr("d",o.area().defined(X).curve(f).x(S=>m(h(S))).y0(S=>M(b(S))).y1(l));let G=o.area().defined(S=>X(S)&&v(S)).curve(f).x(S=>m(h(S))).y0(S=>M(b(S))).y1(S=>M(g(S)));d.append("path").datum(t.data).attr("fill",`url(#${D})`).attr("clip-path",`url(#${V})`).attr("d",G),d.append("path").datum(t.data).attr("fill",`url(#${B})`).attr("clip-path",`url(#${w})`).attr("d",G);let C=o.line().defined(X).curve(f).x(S=>m(h(S))).y(S=>M(b(S)));d.append("path").datum(t.data).attr("class","line").attr("d",C).attr("fill","none").attr("stroke",i).attr("stroke-width",y("--line-stroke-width",2));let P=o.line().defined(v).curve(f).x(S=>m(h(S))).y(S=>M(g(S)));if(d.append("path").datum(t.data).attr("class","line").attr("d",P).attr("fill","none").attr("stroke",c).attr("stroke-width",y("--line-stroke-width",2)),t.showTooltip!==!1){let S=new ct,Y=d.append("line").attr("class","hover-line").attr("y1",0).attr("y2",l).style("stroke",y("--color-text-faint","#9ca3af")).style("stroke-dasharray",y("--hover-dash-pattern","3, 3")).style("opacity",0).style("pointer-events","none"),$=d.append("circle").attr("class","hover-dot-cum").attr("r",t.pointRadius??4).attr("fill","var(--color-bg-container)").attr("stroke",i).attr("stroke-width",2).style("opacity",0).style("pointer-events","none"),T=d.append("circle").attr("class","hover-dot-mov").attr("r",t.pointRadius??4).attr("fill","var(--color-bg-container)").attr("stroke",c).attr("stroke-width",2).style("opacity",0).style("pointer-events","none");d.append("rect").attr("class","hover-rect").attr("width",n).attr("height",l).attr("fill","transparent").style("cursor","crosshair").on("pointermove",function(I){let[_]=o.pointer(I),N=0,H=1/0;t.data.forEach((J,rt)=>{let pt=Math.abs(m(h(J))-_);pt<H&&(H=pt,N=rt)});let F=t.data[N],z=m(h(F)),W=b(F),O=g(F),j=M(W),Q=M(O),ot=O-W,dt=ot>0;Y.attr("x1",z).attr("x2",z).style("opacity",1),$.attr("cx",z).attr("cy",j).style("opacity",1),T.attr("cx",z).attr("cy",Q).style("opacity",1);let et=t.labelFormat?t.labelFormat(F):Ht(h(F)),K=t.tooltipFormat||yt,U=dt?c:i,tt=ot>0?"+":"";S.show(lt(t,F,[{title:et},{label:"Cumulative",value:K(W),color:i},{label:"Moving Avg",value:K(O),color:c},{note:`${tt}${K(ot)}`,color:U}]),I)}).on("pointerleave",function(){Y.style("opacity",0),$.style("opacity",0),T.style("opacity",0),S.hide()})}let E=Yt(t.data,h,[{yAcc:g,color:c,format:t.yFormat},{yAcc:b,color:i,format:t.yFormat}]);return{svg:d,x:m,y:M,width:n,height:l,linkPoints:E}},createBumpChart(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.periods||(s.length>0?s[0].rankings.map(T=>T.period):[]),l=y("--font-size-sm","11px"),i=q("--font-weight-semibold",600),c=y("--font-family","-apple-system, BlinkMacSystemFont, sans-serif"),f=q("--bump-label-gap",10),p=q("--bump-label-padding",5),u=Lt(),d=T=>u(T,i,l,c),h=0;s.forEach(T=>{let I=d(T.name);h=Math.max(h,I)});let b=Math.ceil(h+f+p),g=t.width||r.width||650,L=q("--bump-margin-top",30),m=q("--bump-margin-bottom",40),k=Math.max(40,g-b*2),M=(t.height||r.height)-L-m,R=o.select(e).append("svg").attr("width",g).attr("height",t.height||r.height).append("g").attr("transform",`translate(${b},${L})`),D=t.maxRank||o.max(s,T=>o.max(T.rankings,I=>I.rank)),B=o.scalePoint().domain(n).range([0,k]).padding(0),A=o.scaleLinear().domain([1,D]).range([0,M]),x=t.colors||Fe().concat(Ft()),V=t.colorScale||o.scaleOrdinal().domain(s.map(T=>T.name)).range(x),w=t.curve||o.curveBumpX,X=o.line().x(T=>B(T.period)).y(T=>A(T.rank)).curve(w),v=R.append("g").attr("class","grid");for(let T=1;T<=D;T++)v.append("line").attr("x1",0).attr("x2",k).attr("y1",A(T)).attr("y2",A(T)).attr("stroke",y("--grid-color","#e5e5e5")).attr("stroke-opacity",q("--grid-stroke-opacity",.5));let G=null;if(t.thinPeriodLabels!==!1&&n.length>2&&B.step()>0){let T=Lt(),I=o.max(n,N=>T(String(N),q("--font-weight-semibold",600),y("--font-size-sm","11px")))||0,_=Math.max(1,Math.ceil((I+10)/B.step()));if(_>1){let N=[];for(let F=0;F<n.length;F+=_)N.push(F);let H=n.length-1;N[N.length-1]!==H&&(H-N[N.length-1]<_&&N.pop(),N.push(H)),G=N.map(F=>n[F])}}let C=q("--bump-axis-offset",15),P=o.axisBottom(B).tickSize(0).tickFormat(t.xFormat||null);G&&P.tickValues(G),R.append("g").attr("class","axis-x").attr("transform",`translate(0,${M+C})`).call(P).call(T=>T.select(".domain").remove()).selectAll("text").style("font-size",y("--font-size-sm","11px")).style("font-weight",q("--font-weight-semibold",600));let E=new ct,S=[],Y=[];s.forEach((T,I)=>{let _=V(T.name),N=q("--bump-line-width",2.5),H=R.append("path").datum(T.rankings).attr("class","bump-line").attr("d",X).attr("fill","none").attr("stroke",_).attr("stroke-width",N).attr("stroke-linecap","round").style("transition",`opacity ${y("--bump-transition-duration","0.2s")}`);S.push({path:H,entity:T,color:_});let F=q("--bump-dot-radius",8),z=q("--bump-dot-stroke-width",2),W=F+z/2+1,O=`bump-hole-${I}-${Math.random().toString(36).slice(2,8)}`,j=R.append("mask").attr("id",O).attr("maskUnits","userSpaceOnUse").attr("x",-k).attr("y",-M).attr("width",k*3).attr("height",M*3);j.append("rect").attr("x",-k).attr("y",-M).attr("width",k*3).attr("height",M*3).attr("fill","#fff"),T.rankings.forEach(U=>{j.append("circle").attr("cx",B(U.period)).attr("cy",A(U.rank)).attr("r",W).attr("fill","#000")}),H.attr("mask",`url(#${O})`);let Q=R.selectAll(`.bump-dot-${I}`).data(T.rankings).enter().append("circle").attr("class",`bump-dot bump-dot-${I}`).attr("cx",U=>B(U.period)).attr("cy",U=>A(U.rank)).attr("r",q("--bump-dot-radius",8)).attr("fill",_).attr("stroke",y("--color-bg-container","white")).attr("stroke-width",q("--bump-dot-stroke-width",2)).style("cursor","pointer").style("transition",`r ${y("--bump-transition-duration","0.2s")}, opacity ${y("--bump-transition-duration","0.2s")}`);Y.push({dots:Q,entity:T,color:_}),t.showRankLabels!==!1&&R.selectAll(`.bump-rank-label-${I}`).data(T.rankings).enter().append("text").attr("class",`bump-rank-label bump-rank-label-${I}`).attr("x",U=>B(U.period)).attr("y",U=>A(U.rank)).attr("text-anchor","middle").attr("dominant-baseline","central").attr("fill",y("--color-bg-container","white")).attr("font-size",y("--bump-rank-font-size","9px")).attr("font-weight",q("--font-weight-semibold",600)).style("pointer-events","none").text(U=>U.rank);let ot=T.rankings[0],dt=n.length>0&&ot.period===n[0];T.rankings.length>1&&R.append("text").attr("class","bump-start-label").attr("x",dt?-f:B(ot.period)-f).attr("y",A(ot.rank)).attr("dy","0.35em").attr("text-anchor","end").attr("fill",_).attr("font-size",l).attr("font-weight",i).attr("font-family",c).text(T.name);let et=T.rankings[T.rankings.length-1],K=n.length>0&&et.period===n[n.length-1];R.append("text").attr("class","bump-end-label").attr("x",K?k+f:B(et.period)+f).attr("y",A(et.rank)).attr("dy","0.35em").attr("text-anchor","start").attr("fill",_).attr("font-size",l).attr("font-weight",i).attr("font-family",c).text(T.name)});let $=(T,I)=>{let _=q("--font-size-sm",11)+2,N=new Map;R.selectAll(T).each(function(){let H=o.select(this),F=Math.round(+H.attr("x"));N.has(F)||N.set(F,[]),N.get(F).push({n:H,anchorY:+H.attr("y"),labelY:+H.attr("y")})}),N.forEach(H=>{if(H.length<2)return;H.sort((W,O)=>W.labelY-O.labelY);let F=-1/0;H.forEach(W=>{W.labelY=Math.max(W.labelY,F+_),F=W.labelY});let z=H[H.length-1].labelY-M;z>0&&H.forEach(W=>{W.labelY-=z}),H.forEach(W=>{if(Math.abs(W.labelY-W.anchorY)<=_/2)return;let O=+W.n.attr("x"),j=I==="end"?O-f:O+f;W.n.attr("y",W.labelY),R.append("line").attr("class","bump-label-leader").attr("x1",I==="end"?j+2:j-2).attr("y1",W.anchorY).attr("x2",I==="end"?O-1.5:O+1.5).attr("y2",W.labelY).attr("stroke",W.n.attr("fill")).attr("stroke-width",1).attr("opacity",.7).attr("pointer-events","none")})})};if($("text.bump-end-label","end"),$("text.bump-start-label","start"),Y.forEach(({dots:T,entity:I,color:_})=>{T.on("pointerenter",function(N,H){if(S.forEach(({path:F,entity:z})=>{F.style("opacity",z.name===I.name?1:q("--bump-dimmed-opacity",.15))}),Y.forEach(({dots:F,entity:z})=>{F.style("opacity",z.name===I.name?1:q("--bump-dimmed-opacity",.15))}),o.select(this).attr("r",q("--bump-dot-radius-hover",10)),t.showTooltip!==!1){let F=I.rankings[I.rankings.length-1].rank-I.rankings[0].rank,z=F<0?`\u2191 ${Math.abs(F)}`:F>0?`\u2193 ${F}`:"\u2192 0",W=F<0?y("--chart-trend-up","#22c55e"):F>0?y("--chart-trend-down","#ef4444"):y("--color-text-muted","#666");E.show(lt(t,H,[{title:I.name,color:_},{label:`${H.period}: Rank #${H.rank}`,muted:!0},{label:"Overall",value:z,color:W}]),N)}}).on("pointermove",N=>E.position(N)).on("pointerleave",function(){S.forEach(({path:N})=>N.style("opacity",1)),Y.forEach(({dots:N})=>N.style("opacity",1)),o.select(this).attr("r",q("--bump-dot-radius",8)),E.hide()})}),t.animate!==!1){S.forEach(({path:I},_)=>{let N=I.node().getTotalLength();I.attr("stroke-dasharray",`${N} ${N}`).attr("stroke-dashoffset",N).transition().delay(_*q("--bump-stagger-delay",100)).duration(q("--bump-animation-duration",800)).ease(o.easeQuadOut).attr("stroke-dashoffset",0)});let T=q("--bump-dot-fade-duration",300);Y.forEach(({dots:I},_)=>{I.style("opacity",0).transition().delay(_*q("--bump-stagger-delay",100)+q("--bump-animation-duration",800)*.5).duration(T).style("opacity",1)})}return{svg:R,x:B,y:A,width:k,height:M,data:s,colorScale:V}}},No={_createSlope(e,a={}){let r=nt[a.size||"full"],t=a.width||r.width,s=Math.min(120,Math.max(70,Math.floor(t*.25))),n={top:40,right:s,bottom:40,left:s},l=a.size==="mini"?220:(a.size==="wide",400),i={...r,margin:n,height:l,...a},c=i.margin,f=i.width,p=i.height,u=f-c.left-c.right,d=p-c.top-c.bottom,h=o.select(e).append("svg").attr("width",f).attr("height",p),b=h.append("defs"),g=h.append("g").attr("transform",`translate(${c.left},${c.top})`),L=i.data||[],m=i.leftLabel||"Before",k=i.rightLabel||"After",M=i.colorMode||"trend",R=i.animated||!1,D=i.animationDuration??q("--slope-animation-duration",800),B=i.staggerDelay??q("--slope-stagger-delay",80),A=i.fadeInDuration||q("--slope-fade-duration",300),x=i.bands||null,V=!!i.mergeOrigin&&L.length>0&&L.every(Z=>Math.abs(Z.before-L[0].before)<1e-6),w=V?L[0].before:null,X=i.baseline===!0?w:typeof i.baseline=="number"?i.baseline:null,v,G;if(i.yDomain)[v,G]=i.yDomain;else{let Z=L.flatMap(st=>[st.before,st.after]);[v,G]=wt([o.min(Z)*.9,o.max(Z)*1.1],i.yMin,i.yMax)}let C=o.scaleLinear().domain([v,G]).range([d,0]),P=0,E=u,S=q("--slope-point-radius",4),Y=S+2,$=o.scaleOrdinal(o.schemeTableau10),T=y("--slope-highlight-color","#f97316"),I=y("--slope-muted-color","#94a3b8");function _(Z){let st=Z.after-Z.before;return Math.abs(st)<.01?"neutral":st>0?"increase":"decrease"}function N(Z,st){if(M==="trend")return Z.after>Z.before?y("--trend-up-color","#22c55e"):Z.after<Z.before?y("--trend-down-color","#ef4444"):y("--trend-neutral-color","#94a3b8");if(M==="highlight"){let ut=i.highlightIndex!==void 0?i.highlightIndex:-1,xt=i.highlightName;return xt?Z.name===xt?T:I:st===ut?T:I}return $(st)}if(x){let Z=d/x.divisions,st=x.colors||[y("--slope-band-1","#fef2f2"),y("--slope-band-2","#fefce8"),y("--slope-band-3","#f0fdf4"),y("--slope-band-4","#eff6ff")];for(let ut=0;ut<x.divisions;ut++)g.append("rect").attr("class","band-rect").attr("x",0).attr("y",ut*Z).attr("width",u).attr("height",Z).attr("fill",st[x.divisions-1-ut]||st[ut%st.length]),x.labels&&x.labels[ut]&&g.append("text").attr("class","band-label").attr("x",u/2).attr("y",ut*Z+Z/2).attr("text-anchor","middle").attr("dominant-baseline","middle").style("font-size","var(--font-size-xs)").style("fill","var(--color-text-disabled)").text(x.labels[ut])}X!=null&&g.append("line").attr("class","slope-baseline").attr("x1",P).attr("x2",E).attr("y1",C(X)).attr("y2",C(X)).attr("stroke",y("--slope-baseline-color",y("--color-border-light","#e5e5e5"))).attr("stroke-width",1);let H=i.axisPosition||"top",F=H==="top"||H==="both",z=H==="bottom"||H==="both",W=-12,O=d+12,j=6,Q="var(--color-border-light, #e5e5e5)",ot=g.append("g").attr("class","axis-x");F&&(ot.append("line").attr("class","axis-line").attr("x1",P).attr("y1",W).attr("x2",E).attr("y2",W).attr("stroke",Q).attr("stroke-width",1),ot.append("line").attr("class","axis-tick").attr("x1",P).attr("y1",W).attr("x2",P).attr("y2",W+j).attr("stroke",Q).attr("stroke-width",1),ot.append("line").attr("class","axis-tick").attr("x1",E).attr("y1",W).attr("x2",E).attr("y2",W+j).attr("stroke",Q).attr("stroke-width",1)),z&&(ot.append("line").attr("class","axis-line").attr("x1",P).attr("y1",O).attr("x2",E).attr("y2",O).attr("stroke",Q).attr("stroke-width",1),ot.append("line").attr("class","axis-tick").attr("x1",P).attr("y1",O).attr("x2",P).attr("y2",O-j).attr("stroke",Q).attr("stroke-width",1),ot.append("line").attr("class","axis-tick").attr("x1",E).attr("y1",O).attr("x2",E).attr("y2",O-j).attr("stroke",Q).attr("stroke-width",1));let dt=F?W-8:z?O+18:-15;ot.append("text").attr("class","column-label column-title").attr("x",P).attr("y",dt).attr("text-anchor","middle").style("font-weight","600").style("font-size","var(--font-size-sm)").style("fill","var(--color-black)").text(m),ot.append("text").attr("class","column-label column-title").attr("x",E).attr("y",dt).attr("text-anchor","middle").style("font-weight","600").style("font-size","var(--font-size-sm)").style("fill","var(--color-black)").text(k);let et=(typeof e=="string"?e:e.id||"chart").replace(/[^a-zA-Z0-9]/g,"")+"-"+Xt();L.forEach((Z,st)=>{let ut=b.append("mask").attr("id",`slope-mask-${et}-${st}`);ut.append("rect").attr("x",-c.left).attr("y",-c.top).attr("width",f).attr("height",p).attr("fill",y("--color-bg-container","white")),ut.append("circle").attr("cx",P).attr("cy",C(Z.before)).attr("r",Y).attr("fill","black"),ut.append("circle").attr("cx",E).attr("cy",C(Z.after)).attr("r",Y).attr("fill","black")});let K=g.selectAll(".slope-line").data(L).enter().append("line").attr("class",Z=>M==="trend"?`slope-line ${_(Z)}`:"slope-line").attr("x1",P).attr("y1",Z=>C(Z.before)).attr("mask",(Z,st)=>`url(#slope-mask-${et}-${st})`).attr("stroke",(Z,st)=>N(Z,st)).attr("stroke-width",q("--slope-line-width",2));R?K.attr("x2",P).attr("y2",Z=>C(Z.before)).each(function(Z,st){o.select(this).transition().delay(st*B).duration(D).ease(o.easeQuadOut).attr("x2",E).attr("y2",C(Z.after))}):K.attr("x2",E).attr("y2",Z=>C(Z.after));let U=g.selectAll(".slope-dot-left").data(V?[L[0]]:L).enter().append("circle").attr("class",Z=>V?"slope-dot slope-dot-origin":M==="trend"?`slope-dot ${_(Z)}`:"slope-dot").attr("cx",P).attr("cy",Z=>C(Z.before)).attr("r",S).attr("fill",V?i.originColor||y("--color-black","#111"):(Z,st)=>N(Z,st)),tt=g.selectAll(".slope-dot-right").data(L).enter().append("circle").attr("class",Z=>M==="trend"?`slope-dot ${_(Z)}`:"slope-dot").attr("cx",E).attr("cy",Z=>C(Z.after)).attr("r",S).attr("fill",(Z,st)=>N(Z,st));R&&tt.style("opacity",0).each(function(Z,st){o.select(this).transition().delay(st*B+D*.7).duration(A).style("opacity",1)});let J=i.valueFormat||(Z=>Z.toFixed?Z.toFixed(1):Z),rt=i.showNameOnLeft||!1,pt=i.showNameOnRight!==void 0?i.showNameOnRight:!0,it=8,ht=g.selectAll(".slope-label-left").data(V?[L[0]]:L).enter().append("text").attr("class","slope-label value-label").attr("x",P-it).attr("y",Z=>C(Z.before)).attr("text-anchor","end").attr("dominant-baseline","middle").style("font-size","var(--font-size-sm)");V?ht.style("font-weight","600").style("fill","var(--color-black)").text(Z=>J(Z.before)):rt?ht.each(function(Z,st){let ut=o.select(this),xt=M==="highlight"?N(Z,st):null;ut.append("tspan").attr("class","name-label").style("font-weight","600").style("fill",xt||"var(--color-black)").text(Z.name),ut.append("tspan").attr("class","value-label").style("fill",xt||"var(--color-text-muted)").text(`: ${J(Z.before)}`)}):ht.attr("class","slope-label value-label").style("fill",(Z,st)=>M==="highlight"?N(Z,st):"var(--color-text-muted)").text(Z=>J(Z.before));let ft=g.selectAll(".slope-label-right").data(L).enter().append("text").attr("class","slope-label label-text").attr("x",E+it).attr("y",Z=>C(Z.after)).attr("text-anchor","start").attr("dominant-baseline","middle").style("font-size","var(--font-size-sm)"),mt=Z=>i.rightValueFormat?i.rightValueFormat(Z):J(Z.after);if(pt?ft.each(function(Z,st){let ut=o.select(this),xt=M==="highlight"?N(Z,st):null;ut.append("tspan").attr("class","name-label").style("font-weight","600").style("fill",xt||"var(--color-black)").text(Z.name);let Ot=ut.append("tspan").attr("class","value-label").style("fill",xt||"var(--color-text-muted)").text(i.rightLabelStacked?mt(Z):` ${mt(Z)}`);i.rightLabelStacked&&Ot.attr("x",E+it).attr("dy","1.25em")}):ft.attr("class","slope-label value-label").style("fill",(Z,st)=>M==="highlight"?N(Z,st):"var(--color-text-muted)").text(Z=>mt(Z)),R&&(ht.style("opacity",0).transition().delay(D*.3).duration(A).style("opacity",1),ft.style("opacity",0).each(function(Z,st){o.select(this).transition().delay(st*B+D*.7).duration(A).style("opacity",1)})),i.dodgeLabels!==!1){let Z=i.labelMinGap||q("--slope-label-min-gap",15),st=y("--slope-leader-color",y("--color-border-light","#e5e5e5")),ut=(xt,Ot,Rt)=>{let Nt=[];if(xt.each(function($t){Nt.push({node:this,datum:$t,target:C($t[Ot])})}),Nt.length<2)return;Nt.sort(($t,ue)=>$t.target-ue.target),Nt.forEach(($t,ue)=>{$t.y=ue?Math.max($t.target,Nt[ue-1].y+Z):Math.max(0,$t.target)});let ja=Rt==="right"&&i.rightLabelStacked?Z/2:0,ta=Math.max(0,Nt[Nt.length-1].y+ja-d);ta&&Nt.forEach($t=>{$t.y-=ta}),Nt.forEach($t=>{$t.node.setAttribute("y",$t.y)});let Ua=Nt.filter($t=>Math.abs($t.y-$t.target)>2),Ka=Rt==="left"?P:E,Za=Rt==="left"?P-it+2:E+it-2,Qa=g.selectAll(`.slope-leader-${Rt}`).data(Ua).enter().insert("line",".slope-label").attr("class",`slope-leader slope-leader-${Rt}`).attr("x1",Ka).attr("x2",Za).attr("y1",$t=>$t.target).attr("y2",$t=>$t.y).attr("stroke",st).attr("stroke-width",1).style("pointer-events","none");R&&Qa.style("opacity",0).transition().delay(D*.7).duration(A).style("opacity",1)};V||ut(ht,"before","left"),ut(ft,"after","right")}let Mt=new ct,kt=i.tooltipValueFormat||i.valueFormat||yt,St=(Z,st)=>{i.showTooltip!==!1&&Mt.show(lt(i,st,[{title:st.name},{label:m,value:kt(st.before)},{label:k,value:kt(st.after)}]),Z)};return[K,U,tt].forEach(Z=>{Z.on("pointerenter",St).on("pointermove",St).on("pointerleave",()=>Mt.hide())}),{svg:g,svgRoot:h,defs:b,y:C,width:u,height:d,xLeft:P,xRight:E,getColor:N,dotRadius:S}},createBasic(e,a={}){return this._createSlope(e,a)},createIndexed(e,a={}){let r={colorMode:"trend",mergeOrigin:!0,baseline:!0,rightLabelStacked:!0,labelMinGap:q("--slope-label-min-gap-stacked",34),...a};return r.rightValueFormat||(r.rightValueFormat=t=>{let s=(t.after-t.before)/t.before*100;return(s>=0?"+":"\u2212")+Math.abs(s).toFixed(0)+"%"}),this._createSlope(e,r)},createTrend(e,a={}){return this._createSlope(e,{...a,colorMode:"trend"})},createCategorical(e,a={}){return this._createSlope(e,{...a,colorMode:"categorical"})},createHighlight(e,a={}){return this._createSlope(e,{...a,colorMode:"highlight"})},createAnimated(e,a={}){return this._createSlope(e,{animated:!0,...a})},createBands(e,a={}){let t={...{divisions:4,colors:[y("--slope-band-1","#fef2f2"),y("--slope-band-2","#fefce8"),y("--slope-band-3","#f0fdf4"),y("--slope-band-4","#eff6ff")],labels:["Top 25%","25-50%","50-75%","Bottom 25%"]},...a.bands};return this._createSlope(e,{...a,bands:t,yDomain:a.yDomain||wt([0,100],a.yMin,a.yMax)})}};function Pa(e,a,r,t={}){let{onHover:s,onLeave:n,onToggle:l,activeIndex:i}=t,c=t.interactive!=null?t.interactive:typeof s=="function"||typeof l=="function",f=o.select(e).style("display","flex").style("flex-wrap","wrap").style("gap","var(--space-2) var(--space-6)").style("margin-bottom","var(--space-4)").style("justify-content","flex-start"),p=[];a.forEach((h,b)=>{let g=f.append("div").attr("class","legend-item").style("display","flex").style("align-items","center").style("gap","var(--space-2)").style("font-family","var(--font-family)").style("font-size","var(--font-size-sm)").style("color","var(--color-text-muted)").style("transition","opacity var(--transition-fast, 0.15s)");p.push(g),g.append("div").attr("class","legend-dot").style("flex","none").style("width","10px").style("height","10px").style("background-color",r[b]).style("border-radius","50%"),g.append("span").text(h)});let u=Number.isInteger(i),d=()=>u?p.forEach((h,b)=>h.style("opacity",b===i?1:.35)):p.forEach(h=>h.style("opacity",1));return u&&d(),c&&p.forEach((h,b)=>{h.style("cursor","pointer").on("pointerenter",()=>{p.forEach((g,L)=>g.style("opacity",L===b?1:.35)),typeof s=="function"&&s(b,a[b])}).on("pointerleave",()=>{d(),typeof n=="function"&&n()}).on("click",()=>{typeof l=="function"&&l(b,a[b])})}),f}var Ho={createBasic(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.categoryAccessor||Tt,l=t.valueAccessor||(W=>W.value),i=t.valueFormat||(W=>W.toLocaleString()),c=t.barHeight??q("--bar-height",24),f=t.barGap??q("--bar-gap",8),p=zt(q("--font-size-xl",14),c+f-2)+"px",u=zt(q("--font-size-lg",13),c+f-2)+"px",d=q("--font-weight-bold",700),h=y("--font-family","-apple-system, sans-serif"),b=q("--bar-label-gap",8),g=Lt(),L=W=>g(W,d,p,h),m=0;s.forEach(W=>{let O=L(n(W));m=Math.max(m,O)});let k=q("--bar-value-padding",6),M=0;s.forEach(W=>{let O=l(W);O<0&&(M=Math.max(M,g(i(O),600,u,h)+k))});let R=Math.ceil(m+b+10+M),D={top:20,right:50,bottom:20,left:R},B=s.length*(c+f)+D.top+D.bottom,A=Math.max(40,(t.width||r.width)-D.left-D.right),x=o.select(e).append("svg").attr("width",t.width||r.width).attr("height",B).append("g").attr("transform",`translate(${D.left},${D.top})`),V=o.max(s,l),w=o.min(s,l),X=o.scaleLinear().domain(t.xDomain||wt([Math.min(0,w*1.1),Math.max(0,V)*1.1],t.xMin,t.xMax)).range([0,A]),v=X.domain()[0]<0,G=X(Math.max(X.domain()[0],Math.min(0,X.domain()[1]))),C=W=>Math.max(0,Math.min(A,X(l(W)))),P=W=>Math.min(G,C(W)),E=W=>Math.abs(C(W)-G),S=o.scaleBand().domain(s.map(n)).range([0,s.length*(c+f)]).padding(f/(c+f)),Y=t.color||y("--chart-primary","#3b82f6"),$=t.borderRadius??q("--bar-border-radius",3),T=q("--bar-animation-duration",800),I=q("--bar-stagger-delay",50),_=t.animate!==!1&&t.animated!==!1,N=new ct,H=x.selectAll(".bar").data(s).enter().append("g").attr("class","bar-group").attr("transform",W=>`translate(0, ${S(n(W))})`);H.append("g").attr("class","axis-y").append("text").attr("class","bar-category").attr("x",t.labelAlign==="left"?-R+1:-b-M).attr("y",c/2).attr("dy","0.35em").attr("text-anchor",t.labelAlign==="left"?"start":"end").attr("fill",y("--color-text-primary","#333")).attr("font-size",p).attr("font-weight",d).text(n),v&&X.domain()[1]>0&&x.append("line").attr("class","zero-line").attr("x1",G).attr("x2",G).attr("y1",0).attr("y2",s.length*(c+f)).attr("stroke",y("--bar-zero-line-color","#333")).attr("stroke-width",q("--bar-zero-line-width",1.5));let F=H.append("rect").attr("class","bar-fill").attr("x",W=>_?G:P(W)).attr("y",0).attr("height",c).attr("rx",$).attr("fill",typeof Y=="function"?Y:()=>Y).attr("width",W=>_?0:E(W)).style("cursor","pointer").on("pointerenter",function(W,O){if(o.select(this).attr("fill-opacity",.8),t.showTooltip!==!1){let j=n(O),Q=(t.tooltipValueFormat||t.valueFormat||yt)(l(O));N.show(lt(t,O,[{title:j},{value:Q}]),W)}}).on("pointermove",W=>N.position(W)).on("pointerleave",function(){o.select(this).attr("fill-opacity",1),N.hide()});_&&F.transition().duration(T).delay((W,O)=>O*I).ease(o.easeCubicOut).attr("x",W=>P(W)).attr("width",W=>E(W));let z=H.append("text").attr("class","bar-value").attr("y",c/2).attr("dy","0.35em").attr("text-anchor",W=>l(W)<0?"end":"start").attr("fill",y("--color-text-primary","#333")).attr("font-size",u).attr("font-weight",q("--font-weight-semibold",600)).text(W=>i(l(W))).attr("x",W=>l(W)<0?P(W)-k:P(W)+E(W)+k).attr("opacity",_?0:1);return _&&z.transition().duration(T*.3).delay((W,O)=>O*I+T).attr("opacity",1),{svg:x,x:X,y:S,width:A,height:B}},createInline(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.categoryAccessor||Tt,l=t.valueAccessor||($=>$.value),i=t.valueFormat||($=>$.toLocaleString()),c={top:20,right:60,bottom:20,left:20},f=t.barHeight??q("--bar-height",24),p=t.barGap??q("--bar-gap",8),u=zt(q("--font-size-lg",13),f-4)+"px",d=f-4>=8,h=zt(q("--font-size-lg",13),f+p-2)+"px",b=s.length*(f+p)+c.top+c.bottom,g=Math.max(40,(t.width||r.width)-c.left-c.right),L=o.select(e).append("svg").attr("width",t.width||r.width).attr("height",b).append("g").attr("transform",`translate(${c.left},${c.top})`),m=o.max(s,l),k=o.scaleLinear().domain(t.xDomain||wt([0,m*1.1],t.xMin,t.xMax)).range([0,g]),M=$=>Math.max(0,k(l($))),R=o.scaleBand().domain(s.map(n)).range([0,s.length*(f+p)]).padding(p/(f+p)),D=t.color||y("--chart-primary","#3b82f6"),B=t.borderRadius??q("--bar-border-radius",3),A=q("--bar-animation-duration",800),x=q("--bar-stagger-delay",50),V=q("--bar-inline-threshold",.35),w=t.animate!==!1&&t.animated!==!1,X=new ct,v=L.selectAll(".bar").data(s).enter().append("g").attr("class","bar-group").attr("transform",$=>`translate(0, ${R(n($))})`),G=v.append("rect").attr("class","bar-fill").attr("x",0).attr("y",0).attr("height",f).attr("rx",B).attr("fill",typeof D=="function"?D:()=>D).attr("width",$=>w?0:M($)).style("cursor","pointer").on("pointerenter",function($,T){o.select(this).attr("fill-opacity",.8),t.showTooltip!==!1&&X.show(lt(t,T,[{title:n(T)},{value:(t.tooltipValueFormat||t.valueFormat||yt)(l(T))}]),$)}).on("pointermove",$=>X.position($)).on("pointerleave",function(){o.select(this).attr("fill-opacity",1),X.hide()});w&&G.transition().duration(A).delay(($,T)=>T*x).ease(o.easeCubicOut).attr("width",M);let C=8,P=$=>d&&M($)>60?1:0,E=v.append("text").attr("class","bar-category-inline").attr("x",C).attr("y",f/2).attr("dy","0.35em").attr("fill",y("--color-bg-container","white")).attr("font-size",u).attr("font-weight",q("--font-weight-semibold",600)).text(n).attr("opacity",$=>w?0:P($));w&&E.transition().duration(A).delay(($,T)=>T*x+A*.5).attr("opacity",P);let S=q("--bar-value-padding",6),Y=v.append("text").attr("class","bar-value").attr("y",f/2).attr("dy","0.35em").attr("fill",y("--color-text-primary","#333")).attr("font-size",h).attr("font-weight",q("--font-weight-semibold",600)).text($=>i(l($))).attr("x",$=>M($)+S).attr("opacity",w?0:1);return w&&Y.transition().duration(A*.3).delay(($,T)=>T*x+A).attr("opacity",1),{svg:L,x:k,y:R,width:g,height:b}},createLabelAbove(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.categoryAccessor||Tt,l=t.valueAccessor||(C=>C.value),i=t.valueFormat||(C=>C.toLocaleString()),c={top:20,right:60,bottom:20,left:20},f=t.barHeight??q("--bar-height",24),p=18,u=f+p+4,d=t.barGap??q("--bar-gap",8),h=s.length*(u+d)+c.top+c.bottom,b=Math.max(40,(t.width||r.width)-c.left-c.right),g=o.select(e).append("svg").attr("width",t.width||r.width).attr("height",h).append("g").attr("transform",`translate(${c.left},${c.top})`),L=o.max(s,l),m=o.scaleLinear().domain(t.xDomain||wt([0,L*1.1],t.xMin,t.xMax)).range([0,b]),k=C=>Math.max(0,m(l(C))),M=t.color||y("--chart-primary","#3b82f6"),R=t.borderRadius??q("--bar-border-radius",3),D=q("--bar-animation-duration",800),B=q("--bar-stagger-delay",50),A=t.animate!==!1&&t.animated!==!1,x=new ct,V=g.selectAll(".bar").data(s).enter().append("g").attr("class","bar-group").attr("transform",(C,P)=>`translate(0, ${P*(u+d)})`);V.append("text").attr("class","bar-category").attr("x",0).attr("y",0).attr("dy","0.9em").attr("fill",y("--color-text-primary","#333")).attr("font-size",y("--font-size-lg","13px")).attr("font-weight",q("--font-weight-bold",700)).text(n);let w=V.append("rect").attr("class","bar-fill").attr("x",0).attr("y",p).attr("height",f).attr("rx",R).attr("fill",typeof M=="function"?M:()=>M).attr("width",C=>A?0:k(C)).style("cursor","pointer").on("pointerenter",function(C,P){o.select(this).attr("fill-opacity",.8),t.showTooltip!==!1&&x.show(lt(t,P,[{title:n(P)},{value:(t.tooltipValueFormat||t.valueFormat||yt)(l(P))}]),C)}).on("pointermove",C=>x.position(C)).on("pointerleave",function(){o.select(this).attr("fill-opacity",1),x.hide()});A&&w.transition().duration(D).delay((C,P)=>P*B).ease(o.easeCubicOut).attr("width",k);let X=q("--bar-value-padding",6),v=V.append("text").attr("class","bar-value").attr("y",p+f/2).attr("dy","0.35em").attr("fill",y("--color-text-primary","#333")).attr("font-size",y("--font-size-lg","13px")).attr("font-weight",q("--font-weight-semibold",600)).text(C=>i(l(C))).attr("x",C=>k(C)+X).attr("opacity",A?0:1);A&&v.transition().duration(D*.3).delay((C,P)=>P*B+D).attr("opacity",1);let G=o.scaleBand().domain(s.map(n)).range([0,s.length*(u+d)]);return{svg:g,x:m,y:G,width:b,height:h}},createProgress(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.categoryAccessor||Tt,l=t.valueAccessor||(H=>H.value),i=t.valueFormat||(H=>`${H.toFixed(1)}%`),c=t.maxValue||100,f=t.barHeight??q("--bar-height",24),p=t.barGap??q("--bar-gap",8),u=zt(q("--font-size-xl",14),f+p-2)+"px",d=zt(q("--font-size-lg",13),f+p-2)+"px",h=q("--font-weight-bold",700),b=y("--font-family","-apple-system, sans-serif"),g=q("--bar-label-gap",8),L=Lt(),m=H=>L(H,h,u,b),k=0;s.forEach(H=>{k=Math.max(k,m(n(H)))});let M=Math.ceil(k+g+10),R={top:20,right:20,bottom:20,left:M},D=s.length*(f+p)+R.top+R.bottom,B=Math.max(40,(t.width||r.width)-R.left-R.right),A=o.select(e).append("svg").attr("width",t.width||r.width).attr("height",D).append("g").attr("transform",`translate(${R.left},${R.top})`),x=o.scaleLinear().domain(wt(t.xDomain||[0,c],t.xMin,t.maxValue!=null?t.maxValue:t.xMax)).range([0,B]),V=H=>Math.max(0,x(H)),w=o.scaleBand().domain(s.map(n)).range([0,s.length*(f+p)]).padding(p/(f+p)),X=y("--bar-track-color","#e5e5e5"),v=q("--bar-track-opacity",.5),G=t.borderRadius??q("--bar-border-radius",3),C=q("--bar-animation-duration",800),P=q("--bar-stagger-delay",50),E=q("--bar-inline-threshold",.35),S=t.animate!==!1&&t.animated!==!1,Y=t.colorScale||(H=>{let F=H/c;return F>=.9?y("--chart-green","#22c55e"):F>=.7?y("--chart-lime","#84cc16"):F>=.5?y("--chart-orange","#f97316"):y("--chart-red","#ef4444")}),$=new ct,T=A.selectAll(".bar").data(s).enter().append("g").attr("class","bar-group").attr("transform",H=>`translate(0, ${w(n(H))})`);T.append("g").attr("class","axis-y").append("text").attr("class","progress-category").attr("x",t.labelAlign==="left"?-M+1:-g).attr("y",f/2).attr("dy","0.35em").attr("text-anchor",t.labelAlign==="left"?"start":"end").attr("fill",y("--color-text-primary","#333")).attr("font-size",u).attr("font-weight",h).text(n),T.append("rect").attr("class","progress-track").attr("x",0).attr("y",0).attr("width",B).attr("height",f).attr("rx",G).attr("fill",X).attr("fill-opacity",v);let I=T.append("rect").attr("class","progress-fill").attr("x",0).attr("y",0).attr("height",f).attr("rx",G).attr("fill",H=>Y(l(H))).attr("width",H=>S?0:V(l(H))).style("cursor","pointer").on("pointerenter",function(H,F){o.select(this).attr("fill-opacity",.8),t.showTooltip!==!1&&$.show(lt(t,F,[{title:n(F)},{value:(t.tooltipValueFormat||i)(l(F))}]),H)}).on("pointermove",H=>$.position(H)).on("pointerleave",function(){o.select(this).attr("fill-opacity",1),$.hide()});S&&I.transition().duration(C).delay((H,F)=>F*P).ease(o.easeCubicOut).attr("width",H=>V(l(H)));let _=q("--bar-value-padding",6),N=zt(q("--font-size-lg",13),f-4)+"px";return T.each(function(H,F){let z=o.select(this),W=l(H),O=V(W),j=f-4>=8&&O/B>=E,Q=j?O-_:O+_,ot=z.append("text").attr("class","progress-value").attr("y",f/2).attr("dy","0.35em").attr("fill",j?"white":y("--color-text-primary","#333")).attr("font-size",j?N:d).attr("font-weight",q("--font-weight-semibold",600)).attr("text-anchor",j?"end":"start").text(i(W)).attr("x",Q).attr("opacity",S?0:1);S&&ot.transition().duration(C*.3).delay(F*P+C).attr("opacity",1)}),{svg:A,x,y:w,width:B,height:D}},createBullet(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.categoryAccessor||Tt,l=t.valueAccessor||(z=>z.value),i=t.targetAccessor||(z=>z.target),c=t.rangesAccessor||(z=>z.ranges||[]),f=t.valueFormat||(z=>z.toLocaleString()),p=t.barHeight??q("--bar-height",24),u=t.barGap??q("--bar-gap",8),d=zt(q("--font-size-xl",14),p+u-2)+"px",h=q("--font-weight-bold",700),b=y("--font-family","-apple-system, sans-serif"),g=q("--bar-label-gap",8),L=Lt(),m=z=>L(z,h,d,b),k=0;s.forEach(z=>{k=Math.max(k,m(n(z)))});let M=Math.ceil(k+g+10),R={top:20,right:20,bottom:20,left:M},D=s.length*(p+u)+R.top+R.bottom,B=Math.max(40,(t.width||r.width)-R.left-R.right),A=o.select(e).append("svg").attr("width",t.width||r.width).attr("height",D).append("g").attr("transform",`translate(${R.left},${R.top})`),x=0;s.forEach(z=>{let W=c(z),O=W.length?Math.max(...W):0;x=Math.max(x,l(z),i(z),O)});let V=o.scaleLinear().domain(t.xDomain||wt([0,x*1.05],t.xMin,t.xMax)).range([0,B]),w=z=>Math.max(0,V(z)),X=o.scaleBand().domain(s.map(n)).range([0,s.length*(p+u)]).padding(u/(p+u)),v=q("--bullet-range-opacity",.25),G=q("--bullet-measure-height",8),C=q("--bullet-marker-width",3),P=q("--bullet-marker-height",16),E=t.borderRadius??q("--bar-border-radius",3),S=q("--bar-animation-duration",800),Y=q("--bar-stagger-delay",50),$=t.animate!==!1&&t.animated!==!1,T=t.color||y("--chart-primary","#3b82f6"),I=t.targetColor||y("--color-black","#000"),_=new ct,N=A.selectAll(".bullet").data(s).enter().append("g").attr("class","bullet-group").attr("transform",z=>`translate(0, ${X(n(z))})`);N.append("g").attr("class","axis-y").append("text").attr("class","bullet-category").attr("x",t.labelAlign==="left"?-M+1:-g).attr("y",p/2).attr("dy","0.35em").attr("text-anchor",t.labelAlign==="left"?"start":"end").attr("fill",y("--color-text-primary","#333")).attr("font-size",d).attr("font-weight",h).text(n),N.each(function(z){let W=o.select(this),O=c(z);if(O.length===0)return;[...O].sort((Q,ot)=>ot-Q).forEach((Q,ot)=>{let dt=v*(1-ot*.3);W.append("rect").attr("class","bullet-range").attr("x",0).attr("y",0).attr("width",w(Q)).attr("height",p).attr("rx",E).attr("fill",T).attr("fill-opacity",dt)})});let H=N.append("rect").attr("class","bullet-measure").attr("x",0).attr("y",(p-G)/2).attr("height",G).attr("rx",2).attr("fill",T).attr("width",z=>$?0:w(l(z))).style("cursor","pointer").on("pointerenter",function(z,W){if(t.showTooltip!==!1){let O=t.tooltipValueFormat||t.valueFormat||yt;_.show(lt(t,W,[{title:n(W)},{label:"Actual",value:O(l(W))},{label:"Target",value:O(i(W))}]),z)}}).on("pointermove",z=>_.position(z)).on("pointerleave",()=>_.hide());$&&H.transition().duration(S).delay((z,W)=>W*Y).ease(o.easeCubicOut).attr("width",z=>w(l(z)));let F=N.append("rect").attr("class","bullet-marker").attr("y",(p-P)/2).attr("width",C).attr("height",P).attr("fill",I).attr("x",z=>$?0:V(i(z))-C/2).attr("opacity",$?0:1);return $&&F.transition().duration(S).delay((z,W)=>W*Y+S*.5).attr("x",z=>V(i(z))-C/2).attr("opacity",1),{svg:A,x:V,y:X,width:B,height:D}},createDiverging(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.categoryAccessor||Tt,l=t.valueAccessor||(O=>O.value),i=t.valueFormat||(O=>O.toLocaleString()),c=t.barHeight??q("--bar-height",24),f=t.barGap??q("--bar-gap",8),p=r===nt.mini,u=zt(p?q("--font-size-sm",11):q("--font-size-xl",14),c+f-2)+"px",d=zt(q("--font-size-lg",13),c+f-2)+"px",h=q("--font-weight-bold",700),b=y("--font-family","-apple-system, sans-serif"),g=Lt(),L=O=>g(O,h,u,b),m=0;s.forEach(O=>{m=Math.max(m,L(n(O)))});let M=Math.ceil(m+8*2),R={top:20,right:50,bottom:20,left:50},D=s.length*(c+f)+R.top+R.bottom,B=t.width||r.width,A=Math.max(40,B-R.left-R.right),x=(A-M)/2,V=o.select(e).append("svg").attr("width",B).attr("height",D).append("g").attr("transform",`translate(${R.left},${R.top})`),w=o.max(s,O=>Math.abs(l(O))),[X,v]=t.xDomain?t.xDomain:wt([-w*1.1,w*1.1],t.xMin,t.xMax),G=o.scaleLinear().domain([0,Math.max(0,-X)]).range([x,0]),C=o.scaleLinear().domain([0,Math.max(0,v)]).range([0,x]),P=o.scaleBand().domain(s.map(n)).range([0,s.length*(c+f)]).padding(f/(c+f)),E=t.positiveColor||y("--chart-green","#22c55e"),S=t.negativeColor||y("--chart-red","#ef4444"),Y=t.borderRadius??q("--bar-border-radius",3),$=q("--bar-animation-duration",800),T=q("--bar-stagger-delay",50),I=t.animate!==!1&&t.animated!==!1,_=new ct,N=x+M/2,H=x+M,F=x,z=X<0&&v>0?o.scaleLinear().domain([X,0,0,v]).range([0,F,H,H+x]):o.scaleLinear().domain([X,v]).range([0,H+x]),W=V.selectAll(".bar").data(s).enter().append("g").attr("class","bar-group").attr("transform",O=>`translate(0, ${P(n(O))})`);return W.append("g").attr("class","axis-y").append("text").attr("class","bar-category").attr("x",N).attr("y",c/2).attr("dy","0.35em").attr("text-anchor","middle").attr("fill",y("--color-text-primary","#333")).attr("font-size",u).attr("font-weight",h).text(n),W.each(function(O,j){let Q=o.select(this),ot=l(O),dt=ot>=0,et=dt?E:S,K=Math.abs(ot),U=q("--bar-value-padding",6);if(dt)Q.append("rect").attr("class","bar-fill").attr("x",H).attr("y",0).attr("height",c).attr("rx",Y).attr("fill",et).attr("width",I?0:C(K)).style("cursor","pointer").on("pointerenter",function(tt){o.select(this).attr("fill-opacity",.8),t.showTooltip!==!1&&_.show(lt(t,O,[{title:n(O)},{value:(t.tooltipValueFormat||t.valueFormat||yt)(ot),color:et}]),tt)}).on("pointermove",tt=>_.position(tt)).on("pointerleave",function(){o.select(this).attr("fill-opacity",1),_.hide()}).call(tt=>I&&tt.transition().duration($).delay(j*T).ease(o.easeCubicOut).attr("width",C(K))),Q.append("text").attr("class","bar-value").attr("y",c/2).attr("dy","0.35em").attr("fill",et).attr("font-size",d).attr("font-weight",q("--font-weight-semibold",600)).text(i(ot)).attr("x",H+C(K)+U).attr("opacity",I?0:1).call(tt=>I&&tt.transition().duration($*.3).delay(j*T+$).attr("opacity",1));else{let tt=G(0)-G(K);Q.append("rect").attr("class","bar-fill").attr("y",0).attr("height",c).attr("rx",Y).attr("fill",et).attr("width",I?0:tt).attr("x",I?F:F-tt).style("cursor","pointer").on("pointerenter",function(J){o.select(this).attr("fill-opacity",.8),t.showTooltip!==!1&&_.show(lt(t,O,[{title:n(O)},{value:(t.tooltipValueFormat||t.valueFormat||yt)(ot),color:et}]),J)}).on("pointermove",J=>_.position(J)).on("pointerleave",function(){o.select(this).attr("fill-opacity",1),_.hide()}).call(J=>I&&J.transition().duration($).delay(j*T).ease(o.easeCubicOut).attr("x",F-tt).attr("width",tt)),Q.append("text").attr("class","bar-value").attr("y",c/2).attr("dy","0.35em").attr("text-anchor","end").attr("fill",et).attr("font-size",d).attr("font-weight",q("--font-weight-semibold",600)).text(i(ot)).attr("x",F-tt-U).attr("opacity",I?0:1).call(J=>I&&J.transition().duration($*.3).delay(j*T+$).attr("opacity",1))}}),{svg:V,x:z,xLeft:G,xRight:C,y:P,width:A,height:D}},createStacked(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.categoryAccessor||Tt,l=t.keys||[],i=t.labels||{},c=t.colors||Kt(l,Ft()),f=t.valueFormat||(O=>O.toLocaleString()),p=t.barHeight??q("--bar-height",24),u=t.barGap??q("--bar-gap",8),d=(t.showSegmentLabels||!1)&&p-4>=8,h=zt(q("--font-size-xl",14),p+u-2)+"px",b=zt(q("--font-size-lg",13),p+u-2)+"px",g=q("--font-weight-bold",700),L=y("--font-family","-apple-system, sans-serif"),m=q("--bar-label-gap",8),k=Lt(),M=(O,j=h,Q=g)=>k(O,Q,j,L),R=0;s.forEach(O=>{R=Math.max(R,M(n(O)))});let D=Math.ceil(R+m+10),B={top:20,right:60,bottom:20,left:D},A=s.length*(p+u)+B.top+B.bottom,x=Math.max(40,(t.width||r.width)-B.left-B.right),V=o.select(e).append("svg").attr("width",t.width||r.width).attr("height",A).append("g").attr("transform",`translate(${B.left},${B.top})`),X=o.stack().keys(l)(s),v=o.max(X[X.length-1],O=>O[1]),G=o.scaleLinear().domain(t.xDomain||wt([0,v*1.05],t.xMin,t.xMax)).range([0,x]),C=o.scaleBand().domain(s.map(n)).range([0,s.length*(p+u)]).padding(u/(p+u)),P=o.scaleOrdinal().domain(l).range(c),E=t.borderRadius??q("--bar-border-radius",3),S=q("--bar-animation-duration",800),Y=S*.6,$=t.animate!==!1&&t.animated!==!1,T=new ct;V.append("g").attr("class","axis-y").selectAll(".bar-category").data(s).enter().append("text").attr("class","bar-category").attr("x",t.labelAlign==="left"?-D+1:-m).attr("y",O=>C(n(O))+p/2).attr("dy","0.35em").attr("text-anchor",t.labelAlign==="left"?"start":"end").attr("fill",y("--color-text-primary","#333")).attr("font-size",h).attr("font-weight",g).text(n);let I=V.append("defs"),_=Xt();s.forEach((O,j)=>{let Q=l.reduce((et,K)=>et+(O[K]||0),0),ot=Math.max(0,G(Q)),dt=C(n(O));I.append("clipPath").attr("id",`stacked-clip-${_}-${j}`).append("rect").attr("x",0).attr("y",dt).attr("width",ot).attr("height",p).attr("rx",E)});let N=V.selectAll(".stacked-row").data(s).enter().append("g").attr("class","stacked-row").attr("clip-path",(O,j)=>`url(#stacked-clip-${_}-${j})`),H=zt(q("--font-size-sm",11),p-4)+"px";X.forEach((O,j)=>{N.each(function(Q,ot){let dt=O[ot],et=G(dt[1])-G(dt[0]),K=o.select(this),U=K.append("rect").attr("class","bar-segment").attr("data-series",j).attr("y",C(n(Q))).attr("height",p).attr("x",G(dt[0])).attr("width",$?0:et).attr("fill",P(O.key)).style("cursor","pointer").on("pointerenter",function(tt){o.select(this).attr("fill-opacity",.8);let J=i[O.key]||O.key,rt=dt[1]-dt[0];t.showTooltip!==!1&&T.show(lt(t,Q,[{title:n(Q)},{label:J,value:(t.tooltipValueFormat||t.valueFormat||yt)(rt),color:P(O.key)}]),tt)}).on("pointermove",tt=>T.position(tt)).on("pointerleave",function(){o.select(this).attr("fill-opacity",1),T.hide()});if($&&U.transition().duration(S).delay(j*Y).ease(o.easeCubicOut).attr("width",et),d){let tt=dt[1]-dt[0],J=f(tt),rt=M(J,H,600);if(et>rt+8){let pt=K.append("text").attr("class","segment-label").attr("x",G(dt[0])+et/2).attr("y",C(n(Q))+p/2).attr("dy","0.35em").attr("text-anchor","middle").attr("fill",y("--color-bg-container","#fff")).attr("font-size",H).attr("font-weight",600).attr("opacity",$?0:1).text(J);$&&pt.transition().duration(S*.4).delay(j*Y+S).ease(o.easeCubicOut).attr("opacity",1)}}})});let F=q("--bar-value-padding",6),z=(l.length-1)*Y+S,W=V.selectAll(".bar-total").data(s).enter().append("text").attr("class","bar-total").attr("x",O=>{let j=l.reduce((Q,ot)=>Q+(O[ot]||0),0);return Math.max(0,G(j))+F}).attr("y",O=>C(n(O))+p/2).attr("dy","0.35em").attr("fill",y("--color-text-primary","#333")).attr("font-size",b).attr("font-weight",q("--font-weight-semibold",600)).attr("opacity",$?0:1).text(O=>{let j=l.reduce((Q,ot)=>Q+(O[ot]||0),0);return f(j)});return $&&W.transition().duration(S*.4).delay(z).ease(o.easeCubicOut).attr("opacity",1),{svg:V,x:G,y:C,colorScale:P,width:x,height:A}},createGrouped(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.categoryAccessor||Tt,l=t.keys||[],i=t.labels||{},c=t.colors||Kt(l,Ft()),f=t.valueFormat||(F=>F.toLocaleString()),p=t.barHeight??q("--bar-height-mini",18),u=2,d=l.length*(p+u)-u,h=(t.barGap??q("--bar-gap",8))+4,b=zt(q("--font-size-xl",14),d+h-2)+"px",g=zt(q("--font-size-sm",11),p+u)+"px",L=q("--font-weight-bold",700),m=y("--font-family","-apple-system, sans-serif"),k=q("--bar-label-gap",8),M=Lt(),R=F=>M(F,L,b,m),D=0;s.forEach(F=>{D=Math.max(D,R(n(F)))});let B=Math.ceil(D+k+10),A={top:20,right:60,bottom:20,left:B},x=s.length*(d+h)+A.top+A.bottom,V=Math.max(40,(t.width||r.width)-A.left-A.right),w=o.select(e).append("svg").attr("width",t.width||r.width).attr("height",x).append("g").attr("transform",`translate(${A.left},${A.top})`),X=0;s.forEach(F=>{l.forEach(z=>{X=Math.max(X,F[z]||0)})});let v=o.scaleLinear().domain(wt(t.xDomain||[0,X*1.1],t.xMin,t.maxValue!=null?t.maxValue:t.xMax)).range([0,V]),G=F=>Math.max(0,v(F)),C=o.scaleBand().domain(s.map(n)).range([0,s.length*(d+h)]).padding(h/(d+h)),P=o.scaleBand().domain(l).range([0,d]).padding(u/(p+u)),E=o.scaleOrdinal().domain(l).range(c),S=t.borderRadius??q("--bar-border-radius",3),Y=q("--bar-animation-duration",800),$=q("--bar-stagger-delay",50),T=t.animate!==!1&&t.animated!==!1,I=new ct;w.append("g").attr("class","axis-y").selectAll(".bar-category").data(s).enter().append("text").attr("class","bar-category").attr("x",t.labelAlign==="left"?-B+1:-k).attr("y",F=>C(n(F))+d/2).attr("dy","0.35em").attr("text-anchor",t.labelAlign==="left"?"start":"end").attr("fill",y("--color-text-primary","#333")).attr("font-size",b).attr("font-weight",L).text(n);let _=w.selectAll(".bar-group").data(s).enter().append("g").attr("class","bar-group").attr("transform",F=>`translate(0, ${C(n(F))})`);if(t.showTrack){let F=y("--bar-track-color","#e5e5e5"),z=q("--bar-track-opacity",.5);_.selectAll(".bar-track").data(W=>l.map(O=>({key:O}))).enter().append("rect").attr("class","bar-track").attr("y",W=>P(W.key)).attr("height",P.bandwidth()).attr("x",0).attr("width",V).attr("rx",S).attr("fill",F).attr("fill-opacity",z)}_.selectAll(".bar-fill").data(F=>l.map(z=>({key:z,value:F[z]||0,category:n(F)}))).enter().append("rect").attr("class","bar-fill").attr("data-series",(F,z)=>z).attr("y",F=>P(F.key)).attr("height",P.bandwidth()).attr("x",0).attr("width",0).attr("rx",S).attr("fill",F=>E(F.key)).style("cursor","pointer").on("pointerenter",function(F,z){if(o.select(this).attr("fill-opacity",.8),t.showTooltip!==!1){let W=i[z.key]||z.key;I.show(lt(t,z,[{title:z.category},{label:W,value:(t.tooltipValueFormat||t.valueFormat||yt)(z.value),color:E(z.key)}]),F)}}).on("pointermove",F=>I.position(F)).on("pointerleave",function(){o.select(this).attr("fill-opacity",1),I.hide()}).attr("width",F=>T?0:G(F.value)),T&&_.selectAll(".bar-fill").transition().duration(Y).delay((F,z)=>z*$).ease(o.easeCubicOut).attr("width",F=>G(F.value));let N=q("--bar-value-padding",6),H=_.selectAll(".bar-value").data(F=>l.map(z=>({key:z,value:F[z]||0}))).enter().append("text").attr("class","bar-value").attr("y",F=>P(F.key)+P.bandwidth()/2).attr("dy","0.35em").attr("fill",y("--color-text-primary","#333")).attr("font-size",g).attr("font-weight",q("--font-weight-semibold",600)).text(F=>f(F.value)).attr("x",F=>G(F.value)+N).attr("opacity",T?0:1);return T&&H.transition().duration(Y*.3).delay((F,z)=>z*$+Y).attr("opacity",1),{svg:w,x:v,y:C,y0:C,y1:P,colorScale:E,width:V,height:x}},createLikert(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.categoryAccessor||(U=>U.question),l=t.keys||[],i=t.labels||{},c=t.colors||null,f=t.valueFormat||(U=>Math.round(U)+"%"),p=t.barHeight??q("--bar-height",24),u=t.barGap??q("--bar-gap",8),d=t.showSegmentLabels!==!1&&p-4>=8,h=zt(q("--font-size-xl",14),p+u-2)+"px",b=q("--font-weight-bold",700),g=y("--font-family","-apple-system, sans-serif"),L=q("--bar-label-gap",8),m=Lt(),k=(U,tt=h,J=b)=>m(U,J,tt,g),M=0;s.forEach(U=>{M=Math.max(M,k(n(U)))});let R=Math.ceil(M+L+10),D={top:30,right:20,bottom:20,left:R},B=s.length*(p+u)+D.top+D.bottom,A=Math.max(40,(t.width||r.width)-D.left-D.right),x=Math.floor(l.length/2),V=l.length%2===1,w=l.slice(0,x),X=V?l[x]:null,v=V?l.slice(x+1):l.slice(x),G;if(c)G=o.scaleOrdinal().domain(l).range(c);else{let U=w.map((pt,it)=>o.interpolateRgb(y("--temp-cold-10","#7AB8FF"),y("--temp-cold-8","#B8D9FF"))(it/Math.max(w.length-1,1))),tt=v.map((pt,it)=>o.interpolateRgb(y("--temp-warm-3","#FFB347"),y("--temp-warm-1","#FF6A00"))(it/Math.max(v.length-1,1))),J=y("--color-border-row","#e5e7eb"),rt=V?[...U,J,...tt]:[...U,...tt];G=o.scaleOrdinal().domain(l).range(rt)}let C=0,P=0;s.forEach(U=>{let tt=w.reduce((rt,pt)=>rt+(U[pt]||0),0)+(V?(U[X]||0)/2:0),J=v.reduce((rt,pt)=>rt+(U[pt]||0),0)+(V?(U[X]||0)/2:0);C=Math.max(C,tt),P=Math.max(P,J)});let E=t.maxExtent!=null?t.maxExtent:t.xMax!=null?t.xMax:Math.max(C,P,50),S=o.select(e).append("svg").attr("width",t.width||r.width).attr("height",B).append("g").attr("transform",`translate(${D.left},${D.top})`),Y=o.scaleLinear().domain([-E,E]).range([0,A]),$=Y(0),T=U=>{let tt=w.reduce((rt,pt)=>rt+(U[pt]||0),0)+(V?(U[X]||0)/2:0),J=v.reduce((rt,pt)=>rt+(U[pt]||0),0)+(V?(U[X]||0)/2:0);return{leftX:Y(-tt),rightX:Y(J)}},I=(U,tt)=>{let J=V?(U[X]||0)/2:0,rt=w.indexOf(tt);for(let ft=rt+1;ft<w.length;ft++)J+=U[w[ft]]||0;let pt=U[tt]||0,it=Y(0)-Y(-pt),ht=Y(-J-pt);return{x:ht,width:it,cx:ht+it/2,value:pt}},_=(U,tt)=>{let J=v.indexOf(tt),rt=V?(U[X]||0)/2:0;for(let ft=0;ft<J;ft++)rt+=U[v[ft]]||0;let pt=U[tt]||0,it=Y(pt)-Y(0),ht=Y(rt);return{x:ht,width:it,cx:ht+it/2,value:pt}},N=o.scaleBand().domain(s.map(n)).range([0,s.length*(p+u)]).padding(u/(p+u)),H=t.borderRadius??q("--bar-border-radius",3),F=350,z=F,W=t.animate!==!1&&t.animated!==!1,O=new ct,j=[{pos:-E*.75},{pos:-E*.5},{pos:-E*.25},{pos:0},{pos:E*.25},{pos:E*.5},{pos:E*.75}];if(S.append("g").attr("class","grid grid-x").selectAll(".grid-line").data(j).enter().append("line").attr("class","grid-line").attr("x1",U=>Y(U.pos)).attr("x2",U=>Y(U.pos)).attr("y1",-5).attr("y2",s.length*(p+u)).attr("stroke",U=>U.pos===0?y("--color-text-disabled","#9ca3af"):y("--color-border-row","#e5e7eb")).attr("stroke-width",U=>U.pos===0?1.5:1).attr("stroke-dasharray",U=>U.pos===0?"none":"2,2"),t.contextLabels!==!1){let U=t.contextLabels||{},tt=[{pos:-E*.5,text:U.left!=null?U.left:"\u2190 Disagree",anchor:"middle"},{pos:0,text:U.center!=null?U.center:"Neutral",anchor:"middle"},{pos:E*.5,text:U.right!=null?U.right:"Agree \u2192",anchor:"middle"}].filter(J=>J.text!=="");S.selectAll(".context-label").data(tt).enter().append("text").attr("class","context-label").attr("x",J=>Y(J.pos)).attr("y",-12).attr("text-anchor",J=>J.anchor).attr("fill",y("--color-text-muted","#6b7280")).attr("font-size",y("--font-size-xs","10px")).attr("font-weight",500).text(J=>J.text)}S.append("g").attr("class","axis-y").selectAll(".bar-category").data(s).enter().append("text").attr("class","bar-category").attr("x",t.labelAlign==="left"?-R+1:-L).attr("y",U=>N(n(U))+p/2).attr("dy","0.35em").attr("text-anchor",t.labelAlign==="left"?"start":"end").attr("fill",y("--color-text-primary","#333")).attr("font-size",h).attr("font-weight",b).text(n);let Q=S.append("defs"),ot=Xt();s.forEach((U,tt)=>{let J=w.reduce((ft,mt)=>ft+(U[mt]||0),0)+(V?(U[X]||0)/2:0),rt=v.reduce((ft,mt)=>ft+(U[mt]||0),0)+(V?(U[X]||0)/2:0),pt=Y(-J),it=Y(rt),ht=N(n(U));Q.append("clipPath").attr("id",`likert-clip-${ot}-${tt}`).append("rect").attr("x",pt).attr("y",ht).attr("width",it-pt).attr("height",p).attr("rx",H)});let dt=S.selectAll(".likert-row").data(s).enter().append("g").attr("class","likert-row").attr("clip-path",(U,tt)=>`url(#likert-clip-${ot}-${tt})`),et=zt(q("--font-size-xs",10),p-4)+"px";w.slice().reverse().forEach((U,tt)=>{let J=V?tt+1:tt;dt.each(function(rt){let pt=o.select(this),it=rt[U]||0;if(it===0)return;let ht=V?(rt[X]||0)/2:0,ft=w.indexOf(U);for(let xt=ft+1;xt<w.length;xt++)ht+=rt[w[xt]]||0;let mt=Y(0)-Y(-it),Mt=Y(-ht-it),kt=Y(-ht),St=Mt+mt/2,Z=pt.append("rect").attr("class","bar-segment negative").attr("data-key",U).attr("y",N(n(rt))).attr("height",p).attr("x",W?kt:Mt).attr("width",W?0:mt).attr("fill",G(U)).style("cursor","pointer").on("pointerenter",function(xt){o.select(this).attr("fill-opacity",.8),t.showTooltip!==!1&&O.show(lt(t,rt,[{title:n(rt)},{label:i[U]||U,value:(t.tooltipValueFormat||f)(it),color:G(U)}]),xt)}).on("pointermove",xt=>O.position(xt)).on("pointerleave",function(){o.select(this).attr("fill-opacity",1),O.hide()});W&&Z.transition().duration(F).delay(J*z).ease(o.easeQuadOut).attr("x",Mt).attr("width",mt);let st=f(it);if(d&&mt>30){let xt=pt.append("text").attr("class","segment-label").attr("data-key",U).attr("x",St).attr("y",N(n(rt))+p/2).attr("dy","0.35em").attr("text-anchor","middle").attr("fill",y("--color-black","#333")).attr("font-size",et).attr("font-weight",600).attr("opacity",W?0:1).text(st);W&&xt.transition().duration(150).delay(J*z+F).ease(o.easeQuadOut).attr("opacity",1)}})}),V&&dt.each(function(U){let tt=o.select(this),J=U[X]||0;if(J===0)return;let rt=J/2,pt=Y(rt)-Y(0);tt.append("rect").attr("class","bar-segment neutral-left").attr("y",N(n(U))).attr("height",p).attr("x",$).attr("width",0).attr("fill",G(X)).style("cursor","pointer").on("pointerenter",function(it){o.select(this).attr("fill-opacity",.8),o.select(this.nextSibling).attr("fill-opacity",.8),t.showTooltip!==!1&&O.show(lt(t,U,[{title:n(U)},{label:i[X]||X,value:(t.tooltipValueFormat||f)(J),color:G(X)}]),it)}).on("pointermove",it=>O.position(it)).on("pointerleave",function(){o.select(this).attr("fill-opacity",1),o.select(this.nextSibling).attr("fill-opacity",1),O.hide()}).transition().duration(F).delay(0).ease(o.easeQuadOut).attr("x",$-pt).attr("width",pt),tt.append("rect").attr("class","bar-segment neutral-right").attr("y",N(n(U))).attr("height",p).attr("x",$).attr("width",0).attr("fill",G(X)).style("cursor","pointer").on("pointerenter",function(it){o.select(this).attr("fill-opacity",.8),o.select(this.previousSibling).attr("fill-opacity",.8),t.showTooltip!==!1&&O.show(lt(t,U,[{title:n(U)},{label:i[X]||X,value:(t.tooltipValueFormat||f)(J),color:G(X)}]),it)}).on("pointermove",it=>O.position(it)).on("pointerleave",function(){o.select(this).attr("fill-opacity",1),o.select(this.previousSibling).attr("fill-opacity",1),O.hide()}).transition().duration(F).delay(0).ease(o.easeQuadOut).attr("width",pt),d&&pt*2>25&&tt.append("text").attr("class","segment-label").attr("x",$).attr("y",N(n(U))+p/2).attr("dy","0.35em").attr("text-anchor","middle").attr("fill",y("--color-black","#333")).attr("font-size",et).attr("font-weight",600).attr("opacity",0).text(f(J)).transition().duration(150).delay(F).ease(o.easeQuadOut).attr("opacity",1)}),v.forEach((U,tt)=>{let J=V?tt+1:tt;dt.each(function(rt){let pt=o.select(this),it=rt[U]||0;if(it===0)return;let ht=V?(rt[X]||0)/2:0;for(let kt=0;kt<tt;kt++)ht+=rt[v[kt]]||0;let ft=Y(it)-Y(0),mt=Y(ht),Mt=pt.append("rect").attr("class","bar-segment positive").attr("data-key",U).attr("y",N(n(rt))).attr("height",p).attr("x",mt).attr("width",W?0:ft).attr("fill",G(U)).style("cursor","pointer").on("pointerenter",function(kt){o.select(this).attr("fill-opacity",.8),t.showTooltip!==!1&&O.show(lt(t,rt,[{title:n(rt)},{label:i[U]||U,value:(t.tooltipValueFormat||f)(it),color:G(U)}]),kt)}).on("pointermove",kt=>O.position(kt)).on("pointerleave",function(){o.select(this).attr("fill-opacity",1),O.hide()});if(W&&Mt.transition().duration(F).delay(J*z).ease(o.easeQuadOut).attr("width",ft),d&&ft>30){let kt=pt.append("text").attr("class","segment-label").attr("data-key",U).attr("x",mt+ft/2).attr("y",N(n(rt))+p/2).attr("dy","0.35em").attr("text-anchor","middle").attr("fill",y("--color-black","#333")).attr("font-size",et).attr("font-weight",600).attr("opacity",W?0:1).text(f(it));W&&kt.transition().duration(150).delay(J*z+F).ease(o.easeQuadOut).attr("opacity",1)}})});function K(U,tt={}){let J=tt.duration!=null?tt.duration:600,rt=!(J>0),pt=o.easeCubicInOut,it=dt.nodes(),ht=mt=>rt?mt.interrupt():mt.interrupt().transition().duration(J).ease(pt),ft=(mt,Mt,kt,St)=>{ht(mt.select(`rect.bar-segment[data-key="${kt}"]`)).attr("x",St.x).attr("width",St.width);let Z=mt.select(`text.segment-label[data-key="${kt}"]`);d&&St.width>30?(Z.empty()&&(Z=mt.append("text").attr("class","segment-label").attr("data-key",kt).attr("y",Mt+p/2).attr("dy","0.35em").attr("text-anchor","middle").attr("fill",y("--color-black","#333")).attr("font-size",et).attr("font-weight",600).attr("x",St.cx).attr("opacity",0)),Z.text(f(St.value)),ht(Z).attr("x",St.cx).attr("opacity",1)):Z.empty()||(rt?Z.remove():Z.transition().duration(J).ease(pt).attr("opacity",0).remove())};U.forEach((mt,Mt)=>{if(!it[Mt])return;let kt=o.select(it[Mt]),St=N(n(mt)),Z=T(mt);ht(o.select(`#likert-clip-${ot}-${Mt} rect`)).attr("x",Z.leftX).attr("width",Z.rightX-Z.leftX),w.forEach(st=>ft(kt,St,st,I(mt,st))),v.forEach(st=>ft(kt,St,st,_(mt,st)))})}return{svg:S,x:Y,y:N,colorScale:G,width:A,height:B,centerX:$,update:K}},createGantt(e,a={}){let r=nt[a.size||"wide"],t={...r,...a},s=t.data||[],n=t.labelAccessor||(et=>et.label),l=t.startAccessor||(et=>et.start),i=t.endAccessor||(et=>et.end),c=t.rightLabelAccessor||null,f=t.colorAccessor||(()=>y("--chart-primary","#3b82f6")),p=t.groupAccessor||null,u=t.barHeight??q("--gantt-bar-height",18),d=t.barGap??q("--gantt-bar-gap",6),h=zt(q("--font-size-xl",14),u+d-2)+"px",b=zt(q("--font-size-sm",12),u+d-2)+"px",g=q("--font-weight-bold",700),L=y("--font-family","-apple-system, sans-serif"),m=q("--bar-label-gap",8),k=Lt(),M=(et,K=h,U=g)=>k(et,U,K,L),R=0;s.forEach(et=>{R=Math.max(R,M(n(et)))});let D=0;c&&s.forEach(et=>{let K=c(et);K&&(D=Math.max(D,M(K)))});let B=Math.ceil(R+m+10),x={top:30,right:c?Math.ceil(D+m+10):20,bottom:40,left:B},V=s.length*(u+d)+x.top+x.bottom,w=Math.max(40,(t.width||r.width)-x.left-x.right),X=s.map(l),v=s.map(i),G=s.length>0&&l(s[0])instanceof Date,C=et=>G&&et!==void 0&&!(et instanceof Date)?new Date(+et):et,[P,E]=t.xDomain?t.xDomain:[t.xMin,t.xMax],S=t.minTime!=null?t.minTime:C(P)!==void 0?C(P):o.min(X),Y=t.maxTime!=null?t.maxTime:C(E)!==void 0?C(E):o.max(v),$=o.select(e).append("svg").attr("width",t.width||r.width).attr("height",V).append("g").attr("transform",`translate(${x.left},${x.top})`),T=(G?o.scaleTime():o.scaleLinear()).domain([S,Y]).range([0,w]),I=o.scaleBand().domain(s.map((et,K)=>K)).range([0,s.length*(u+d)]).padding(d/(u+d)),_=t.borderRadius??q("--gantt-border-radius",2),N=500,H=120,F=t.animate!==!1&&t.animated!==!1,z=new ct,W=y("--color-border-row","#e5e7eb"),O=r===nt.mini?4:10,j=It(T,t.xTickValues)||T.ticks(t.tickCount??O);$.append("g").attr("class","grid grid-x").selectAll(".grid-line").data(j).enter().append("line").attr("class","grid-line").attr("x1",et=>T(et)).attr("x2",et=>T(et)).attr("y1",0).attr("y2",s.length*(u+d)).attr("stroke",W).attr("stroke-width",1).attr("stroke-dasharray","2,2"),t.milestones&&t.milestones.forEach(et=>{$.append("line").attr("class","milestone-line").attr("x1",T(et.date)).attr("x2",T(et.date)).attr("y1",-10).attr("y2",s.length*(u+d)).attr("stroke",et.color||y("--color-text-disabled","#9ca3af")).attr("stroke-width",1),$.append("text").attr("class","milestone-label").attr("x",T(et.date)).attr("y",-15).attr("text-anchor","middle").attr("fill",y("--color-text-muted","#6b7280")).attr("font-size",y("--font-size-xs","10px")).text(et.label)});let Q=$.selectAll(".gantt-bar").data(s).enter().append("g").attr("class","gantt-bar-group").attr("transform",(et,K)=>`translate(0, ${I(K)})`);Q.append("g").attr("class","axis-y").append("text").attr("class","gantt-label-left").attr("x",t.labelAlign==="left"?-B+1:-m).attr("y",u/2).attr("dy","0.35em").attr("text-anchor",t.labelAlign==="left"?"start":"end").attr("fill",y("--color-text-primary","#333")).attr("font-size",h).attr("font-weight",g).text(n);let ot=Q.append("rect").attr("class","gantt-bar").attr("x",et=>T(l(et))).attr("y",0).attr("height",u).attr("rx",_).attr("fill",et=>typeof f=="function"?f(et):f).attr("width",et=>F?0:Math.max(0,T(i(et))-T(l(et)))).style("cursor","pointer").on("pointerenter",function(et,K){if(o.select(this).attr("fill-opacity",.8),t.showTooltip!==!1){let U=l(K),tt=i(K),J=t.dateFormat||(rt=>rt instanceof Date?o.timeFormat("%b %Y")(rt):rt);z.show(lt(t,K,[{title:n(K)},{value:`${J(U)} \u2013 ${J(tt)}`}]),et)}}).on("pointermove",et=>z.position(et)).on("pointerleave",function(){o.select(this).attr("fill-opacity",1),z.hide()});if(F&&ot.transition().duration(N).delay((et,K)=>K*H).ease(o.easeQuadOut).attr("width",et=>Math.max(0,T(i(et))-T(l(et)))),c){let et=Q.append("text").attr("class","gantt-label-right").attr("x",K=>T(i(K))+m).attr("y",u/2).attr("dy","0.35em").attr("text-anchor","start").attr("fill",y("--color-text-muted","#6b7280")).attr("font-size",b).attr("font-weight",q("--font-weight-normal",400)).attr("opacity",F?0:1).text(c);F&&et.transition().duration(150).delay((K,U)=>U*H+N).ease(o.easeQuadOut).attr("opacity",1)}let dt=o.axisBottom(T);return at(dt,T,t.tickCount??O,t.xTickValues),t.xFormat?dt.tickFormat(t.xFormat):t.dateFormat?dt.tickFormat(t.dateFormat):G||dt.tickFormat(et=>et),$.append("g").attr("class","x-axis axis-x").attr("transform",`translate(0, ${s.length*(u+d)+5})`).call(dt).selectAll("text").attr("fill",y("--color-text-muted","#6b7280")).attr("font-size",y("--font-size-xs","10px")),$.select(".x-axis .domain").attr("stroke",W),$.selectAll(".x-axis .tick line").attr("stroke",W),{svg:$,x:T,y:I,width:w,height:V}},createRange(e,a={}){let r=a,t=r.nameAccessor||(i=>i.name),s=r.lowAccessor||(i=>i.low),n=r.highAccessor||(i=>i.high),l=r.colorAccessor!==void 0?r.colorAccessor:r.color||y("--chart-primary","#3b82f6");return this.createGantt(e,{...r,labelAccessor:t,startAccessor:s,endAccessor:n,colorAccessor:l,dateFormat:r.valueFormat||void 0})},createWaterfall(e,a={}){let r=a,t=r.nameAccessor||(k=>k.name),s=r.valueAccessor||(k=>k.value),n=r.totalAccessor||(k=>k.total),l=r.upColor||y("--chart-trend-up","#22c55e"),i=r.downColor||y("--chart-trend-down","#ef4444"),c=r.totalColor||y("--chart-neutral","#6b7280"),f=r.valueFormat||(k=>(+k).toLocaleString()),p=r.deltaFormat||(k=>(k<0?"\u2212":"+")+f(Math.abs(k))),u=0,d=(r.data||[]).map(k=>{let M=!!n(k),R=M?0:+s(k)||0,D=M?0:u;return u+=R,{...k,start:Math.min(D,u),end:Math.max(D,u),delta:R,running:u,kind:M?"total":R<0?"down":"up"}}),h={up:l,down:i,total:c},b=k=>typeof r.colorAccessor=="function"?r.colorAccessor(k):r.colorAccessor!==void 0?r.colorAccessor:h[k.kind],g=r.tooltipValueFormat||f,L=r.tooltipContent||(k=>ct.rows([{title:t(k)},{label:k.kind==="total"?"Total":"Change",value:k.kind==="total"?g(k.running):p(k.delta),color:b(k)},{label:"Running total",value:g(k.running),footer:!0}])),m=this.createGantt(e,{...r,data:d,labelAccessor:t,startAccessor:k=>k.start,endAccessor:k=>k.end,colorAccessor:b,rightLabelAccessor:r.showValueLabels!==!1?k=>k.kind==="total"?f(k.running):p(k.delta):null,dateFormat:f,tooltipContent:L});if(r.showConnectors!==!1&&d.length>1){let k=m.y.bandwidth(),M=r.connectorColor||y("--waterfall-connector-color","rgba(0, 0, 0, 0.18)"),R=m.svg.insert("g",".gantt-bar-group").attr("class","waterfall-connectors");for(let D=0;D<d.length-1;D++)R.append("line").attr("class","waterfall-connector").attr("x1",m.x(d[D].running)).attr("x2",m.x(d[D].running)).attr("y1",m.y(D)).attr("y2",m.y(D+1)+k).attr("stroke",M).attr("stroke-width",1)}return m},createPyramid(e,a={}){let r=a,t=r.leftKey||"left",s=r.rightKey||"right",n=r.leftLabel!=null?r.leftLabel:t,l=r.rightLabel!=null?r.rightLabel:s,i=r.leftAccessor||null,c=r.rightAccessor||null,f=i||c?g=>({...g,[t]:i?i(g):g[t],[s]:c?c(g):g[s]}):null,p=f?(r.data||[]).map(f):r.data||[],u=o.max(p,g=>Math.max(+g[t]||0,+g[s]||0)),d=r.maxExtent!=null?r.maxExtent:r.xMax!=null?r.xMax:u!=null?u*1.05:void 0,h=Ft(),b=this.createLikert(e,{...r,data:p,keys:[t,s],labels:{[t]:n,[s]:l,...r.labels||{}},colors:r.colors||[h[0],h[4]],categoryAccessor:r.categoryAccessor||Tt,valueFormat:r.valueFormat||(g=>(+g).toLocaleString()),maxExtent:d,contextLabels:r.contextLabels!==void 0?r.contextLabels:{left:n,center:"",right:l}});if(f){let g=b.update;b.update=(L,m)=>g(L.map(f),m)}return b},createVertical(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.xAccessor||(O=>O.x),l=t.yAccessor||(O=>O.y),i=t.xFormat||(O=>O),c=t.yFormat||(O=>o.format(",")(O)),f=t.valueFormat||c,p=t.rotateXLabels===!0?-45:typeof t.rotateXLabels=="number"?t.rotateXLabels:0,u=o.max(s,O=>String(i(n(O))).length)||0,d=p&&u>6?p:0,h={top:20,right:20,bottom:d?68:40,left:50},b=Math.max(40,(t.width||r.width)-h.left-h.right),g=(t.height||r.height)-h.top-h.bottom,L=o.select(e).append("svg").attr("width",t.width||r.width).attr("height",t.height||r.height).append("g").attr("transform",`translate(${h.left},${h.top})`),m=o.scaleBand().domain(s.map(n)).range([0,b]).padding(b/Math.max(s.length,1)<9?.08:.2),k=o.max(s,l),M=o.min(s,l),R=o.scaleLinear().domain(t.yDomain||wt([Math.min(0,M*1.1),Math.max(0,k)*1.1],t.yMin,t.yMax)).range([g,0]),D=R.domain()[0]<0,B=y("--font-size-sm","11px"),A=parseFloat(B)||11,x=o.max(s,O=>String(f(l(O))).length)||0,V=m.step()>=x*A*.62+2,w=t.showLabels===!0||t.showLabels!==!1&&V;if(w&&D&&!t.yDomain&&t.yMin==null){let O=(R.domain()[1]-R.domain()[0])/g,j=(A+8)*O;M-R.domain()[0]<j&&R.domain([M-j,R.domain()[1]])}let X=R(Math.max(R.domain()[0],Math.min(0,R.domain()[1]))),v=O=>Math.max(0,Math.min(g,R(l(O)))),G=O=>Math.min(X,v(O)),C=O=>Math.abs(v(O)-X),P=t.color||y("--chart-primary","#3b82f6"),E=Math.min(t.borderRadius??q("--bar-border-radius",3),m.bandwidth()/3),S=q("--bar-animation-duration",800),Y=Math.min(q("--bar-stagger-delay",50),600/Math.max(s.length-1,1)),$=t.animate!==!1&&t.animated!==!1,T=new ct,I=y("--color-border-row","#e5e7eb");L.append("g").attr("class","grid grid-y").selectAll(".grid-line").data(It(R,t.yTickValues)||R.ticks(t.axisTicks??5)).enter().append("line").attr("class","grid-line").attr("x1",0).attr("x2",b).attr("y1",O=>R(O)).attr("y2",O=>R(O)).attr("stroke",I).attr("stroke-dasharray","2,2");let _=L.selectAll(".bar-group").data(s).enter().append("g").attr("class","bar-group");D&&R.domain()[1]>0&&L.append("line").attr("class","zero-line").attr("x1",0).attr("x2",b).attr("y1",X).attr("y2",X).attr("stroke",y("--bar-zero-line-color","#333")).attr("stroke-width",q("--bar-zero-line-width",1.5));let N=_.append("rect").attr("class","bar").attr("x",O=>m(n(O))).attr("width",m.bandwidth()).attr("y",O=>$?X:G(O)).attr("height",O=>$?0:C(O)).attr("rx",E).attr("fill",typeof P=="function"?P:()=>P).style("cursor","pointer").on("pointerenter",function(O,j){o.select(this).attr("fill-opacity",.8),t.showTooltip!==!1&&T.show(lt(t,j,[{title:i(n(j))},{value:(t.tooltipValueFormat||t.valueFormat||t.yFormat||yt)(l(j))}]),O)}).on("pointermove",O=>T.position(O)).on("pointerleave",function(){o.select(this).attr("fill-opacity",1),T.hide()});if($&&N.transition().duration(S).delay((O,j)=>j*Y).ease(o.easeCubicOut).attr("y",G).attr("height",C),w){let O=_.append("text").attr("class","bar-label").attr("x",j=>m(n(j))+m.bandwidth()/2).attr("y",j=>l(j)<0?G(j)+C(j)+A+2:G(j)-6).attr("text-anchor","middle").attr("fill",y("--color-text-primary","#333")).attr("font-size",B).attr("font-weight",q("--font-weight-semibold",600)).attr("opacity",$?0:1).text(j=>f(l(j)));$&&O.transition().duration(S*.3).delay((j,Q)=>Q*Y+S).attr("opacity",1)}let H=o.axisBottom(m).tickFormat(i),F=parseFloat(y("--font-size-xs","10px"))||10,z=d?Math.max(14,F*1.8):60,W=L.append("g").attr("class","x-axis axis-x").attr("transform",`translate(0,${g})`).call(Ee(H,m.domain(),b,z));return W.selectAll("text").attr("fill",y("--color-text-muted","#6b7280")).attr("font-size",y("--font-size-xs","10px")),d&&W.selectAll("text").style("text-anchor",d<0?"end":"start").attr("dx",d<0?"-0.6em":"0.6em").attr("dy","0.15em").attr("transform",`rotate(${d})`),L.select(".x-axis .domain").attr("stroke",I),L.selectAll(".x-axis .tick line").attr("stroke",I),L.append("g").attr("class","y-axis axis-y").call(at(o.axisLeft(R).tickFormat(c),R,t.axisTicks??5,t.yTickValues)).selectAll("text").attr("fill",y("--color-text-muted","#6b7280")).attr("font-size",y("--font-size-xs","10px")),L.select(".y-axis .domain").attr("stroke","none"),L.selectAll(".y-axis .tick line").attr("stroke","none"),{svg:L,x:m,y:R,width:b,height:g}},createVerticalStacked(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.xAccessor||($=>$.x),l=t.keys||[],i=t.labels||{},c=t.colors||Kt(l,Ft()),f=t.xFormat||($=>$),p=t.yFormat||($=>o.format(",")($)),u=t.valueFormat||p,d={top:20,right:20,bottom:40,left:50},h=Math.max(40,(t.width||r.width)-d.left-d.right),b=(t.height||r.height)-d.top-d.bottom,g=o.select(e).append("svg").attr("width",t.width||r.width).attr("height",t.height||r.height).append("g").attr("transform",`translate(${d.left},${d.top})`),m=o.stack().keys(l)(s),k=o.scaleBand().domain(s.map(n)).range([0,h]).padding(.2),M=o.max(m[m.length-1],$=>$[1]),R=o.scaleLinear().domain(t.yDomain||wt([0,M*1.05],t.yMin,t.yMax)).range([b,0]),D=o.scaleOrdinal().domain(l).range(c),B=t.borderRadius??q("--bar-border-radius",3),A=q("--bar-animation-duration",800),x=t.animate!==!1&&t.animated!==!1,V=new ct,w=y("--color-border-row","#e5e7eb");g.append("g").attr("class","grid grid-y").selectAll(".grid-line").data(It(R,t.yTickValues)||R.ticks(t.axisTicks??5)).enter().append("line").attr("class","grid-line").attr("x1",0).attr("x2",h).attr("y1",$=>R($)).attr("y2",$=>R($)).attr("stroke",w).attr("stroke-dasharray","2,2");let X=t.showSegmentLabels!==!1,v=y("--font-size-sm","11px"),G=20,C=g.append("defs"),P=Xt();s.forEach(($,T)=>{let I=l.reduce((_,N)=>_+($[N]||0),0);C.append("clipPath").attr("id",`vstacked-clip-${P}-${T}`).append("rect").attr("x",k(n($))).attr("y",R(I)).attr("width",k.bandwidth()).attr("height",Math.max(0,b-R(I))).attr("rx",B)});let E=g.selectAll(".bar-group").data(s).enter().append("g").attr("class","bar-group").attr("clip-path",($,T)=>`url(#vstacked-clip-${P}-${T})`),S=A*.6,Y=S;return m.forEach(($,T)=>{E.each(function(I,_){let N=o.select(this),H=$[_],F=R(H[0])-R(H[1]),z=R(H[1]),W=z+F/2;if(F<=0)return;let O=R(H[0]),j=N.append("rect").attr("class","bar-segment").attr("data-series",T).attr("x",k(n(I))).attr("width",k.bandwidth()).attr("y",x?O:z).attr("height",x?0:F).attr("fill",D($.key)).style("cursor","pointer").on("pointerenter",function(Q){if(o.select(this).attr("fill-opacity",.8),t.showTooltip!==!1){let ot=I[$.key]||0;V.show(lt(t,I,[{title:f(n(I))},{label:i[$.key]||$.key,value:(t.tooltipValueFormat||t.valueFormat||t.yFormat||yt)(ot),color:D($.key)}]),Q)}}).on("pointermove",Q=>V.position(Q)).on("pointerleave",function(){o.select(this).attr("fill-opacity",1),V.hide()});if(x&&j.transition().duration(S).delay(T*S).ease(o.easeCubicOut).attr("y",z).attr("height",F),X&&F>=G){let Q=I[$.key]||0,ot=N.append("text").attr("class","segment-label").attr("x",k(n(I))+k.bandwidth()/2).attr("y",W).attr("dy","0.35em").attr("text-anchor","middle").attr("fill",y("--color-bg-container","#fff")).attr("font-size",v).attr("font-weight",500).attr("opacity",x?0:1).text(u(Q));x&&ot.transition().duration(A*.3).delay(T*S+Y).attr("opacity",1)}})}),g.append("g").attr("class","x-axis axis-x").attr("transform",`translate(0,${b})`).call(Ee(o.axisBottom(k).tickFormat(f),k.domain(),h)).selectAll("text").attr("fill",y("--color-text-muted","#6b7280")).attr("font-size",y("--font-size-xs","10px")),g.select(".x-axis .domain").attr("stroke",w),g.selectAll(".x-axis .tick line").attr("stroke",w),g.append("g").attr("class","y-axis axis-y").call(at(o.axisLeft(R).tickFormat(p),R,t.axisTicks??5,t.yTickValues)).selectAll("text").attr("fill",y("--color-text-muted","#6b7280")).attr("font-size",y("--font-size-xs","10px")),g.select(".y-axis .domain").attr("stroke","none"),g.selectAll(".y-axis .tick line").attr("stroke","none"),{svg:g,x:k,y:R,colorScale:D,width:h,height:b}},createVerticalNormalized(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.xAccessor||(Y=>Y.x),l=t.keys||[],i=t.labels||{},c=t.colors||Kt(l,Ft()),f=t.xFormat||(Y=>Y),p=t.valueFormat||(Y=>Math.round(Y)+"%"),u={top:20,right:20,bottom:40,left:50},d=Math.max(40,(t.width||r.width)-u.left-u.right),h=(t.height||r.height)-u.top-u.bottom,b=o.select(e).append("svg").attr("width",t.width||r.width).attr("height",t.height||r.height).append("g").attr("transform",`translate(${u.left},${u.top})`),g=s.map(Y=>{let $=l.reduce((I,_)=>I+(Y[_]||0),0),T={...Y};return l.forEach(I=>{T[I]=$>0?(Y[I]||0)/$*100:0}),T._total=$,T}),m=o.stack().keys(l)(g),k=o.scaleBand().domain(s.map(n)).range([0,d]).padding(.2),M=o.scaleLinear().domain([0,100]).range([h,0]),R=o.scaleOrdinal().domain(l).range(c),D=t.borderRadius??q("--bar-border-radius",3),B=q("--bar-animation-duration",800),A=t.animate!==!1&&t.animated!==!1,x=new ct,V=y("--color-border-row","#e5e7eb");b.append("g").attr("class","grid grid-y").selectAll(".grid-line").data([0,25,50,75,100]).enter().append("line").attr("class","grid-line").attr("x1",0).attr("x2",d).attr("y1",Y=>M(Y)).attr("y2",Y=>M(Y)).attr("stroke",V).attr("stroke-dasharray","2,2");let w=t.showSegmentLabels!==!1,X=y("--font-size-sm","11px"),v=20,G=b.append("defs"),C=Xt();g.forEach((Y,$)=>{G.append("clipPath").attr("id",`vnorm-clip-${C}-${$}`).append("rect").attr("x",k(n(Y))).attr("y",M(100)).attr("width",k.bandwidth()).attr("height",h-M(100)).attr("rx",D)});let P=b.selectAll(".bar-group").data(g).enter().append("g").attr("class","bar-group").attr("clip-path",(Y,$)=>`url(#vnorm-clip-${C}-${$})`),E=B*.6,S=E;return m.forEach((Y,$)=>{P.each(function(T,I){let _=o.select(this),N=Y[I],H=M(N[0])-M(N[1]),F=M(N[1]),z=F+H/2;if(H<=0)return;let W=M(N[0]),O=_.append("rect").attr("class","bar-segment").attr("data-series",$).attr("x",k(n(T))).attr("width",k.bandwidth()).attr("y",A?W:F).attr("height",A?0:H).attr("fill",R(Y.key)).style("cursor","pointer").on("pointerenter",function(j){if(o.select(this).attr("fill-opacity",.8),t.showTooltip!==!1){let Q=T[Y.key]||0;x.show(lt(t,T,[{title:f(n(T))},{label:i[Y.key]||Y.key,value:(t.tooltipValueFormat||p)(Q),color:R(Y.key)}]),j)}}).on("pointermove",j=>x.position(j)).on("pointerleave",function(){o.select(this).attr("fill-opacity",1),x.hide()});if(A&&O.transition().duration(E).delay($*E).ease(o.easeCubicOut).attr("y",F).attr("height",H),w&&H>=v){let j=T[Y.key]||0,Q=_.append("text").attr("class","segment-label").attr("x",k(n(T))+k.bandwidth()/2).attr("y",z).attr("dy","0.35em").attr("text-anchor","middle").attr("fill",y("--color-bg-container","#fff")).attr("font-size",X).attr("font-weight",500).attr("opacity",A?0:1).text(p(j));A&&Q.transition().duration(B*.3).delay($*E+S).attr("opacity",1)}})}),b.append("g").attr("class","x-axis axis-x").attr("transform",`translate(0,${h})`).call(Ee(o.axisBottom(k).tickFormat(f),k.domain(),d)).selectAll("text").attr("fill",y("--color-text-muted","#6b7280")).attr("font-size",y("--font-size-xs","10px")),b.select(".x-axis .domain").attr("stroke",V),b.selectAll(".x-axis .tick line").attr("stroke",V),b.append("g").attr("class","y-axis axis-y").call(o.axisLeft(M).ticks(4).tickFormat(Y=>Y+"%")).selectAll("text").attr("fill",y("--color-text-muted","#6b7280")).attr("font-size",y("--font-size-xs","10px")),b.select(".y-axis .domain").attr("stroke","none"),b.selectAll(".y-axis .tick line").attr("stroke","none"),{svg:b,x:k,y:M,colorScale:R,width:d,height:h}}};function va(e,a,r){return e.dotStrokeWidth!=null?e.dotStrokeWidth:Math.max(0,Math.min(2,r-a))}function le(e,a){let r=e.length,t=new Float64Array(r);if(r===0)return t;let s=a*a,n=.001,l=Array.from({length:r},(p,u)=>u).sort((p,u)=>e[p]-e[u]),i=null,c=null,f=(p,u)=>{for(let d=i;d;d=d.next){let h=e[d.i]-p,b=t[d.i]-u;if(s-n>h*h+b*b)return!0}return!1};for(let p of l){let u=e[p];for(;i&&e[i.i]<u-a;)i=i.next;let d=0;if(f(u,0)){d=1/0;for(let b=i;b;b=b.next){let g=e[b.i]-u,L=s-g*g;if(L<=0)continue;let m=Math.sqrt(L),k=t[b.i]+m,M=t[b.i]-m;Math.abs(k)<Math.abs(d)&&!f(u,k)&&(d=k),Math.abs(M)<Math.abs(d)&&!f(u,M)&&(d=M)}isFinite(d)||(d=0)}t[p]=d;let h={i:p,next:null};i===null?i=c=h:c=c.next=h}return t}var Ue={filled:{fill:!0,stroke:!1,strokeWidth:0,opacity:1,filter:null},outline:{fill:!1,stroke:!0,strokeWidth:2,opacity:1,filter:null},translucent:{fill:!0,stroke:!0,strokeWidth:1,opacity:.4,filter:null},glow:{fill:!0,stroke:!1,strokeWidth:0,opacity:.9,filter:"glow"},ring:{fill:!0,stroke:!0,strokeWidth:3,opacity:.3,filter:null,innerDot:!0},frosted:{fill:!0,stroke:!0,strokeWidth:2,opacity:1,fillOpacity:.35,filter:null},target:{fill:"white",stroke:!0,strokeWidth:2,opacity:1,filter:null,innerDot:!0},shadow:{fill:!0,stroke:"white",strokeWidth:1.5,opacity:1,filter:"shadow"}},bt=e=>typeof e=="number"?Number.isInteger(e)?e.toString():e.toFixed(1):e;function Pe(e,a,r){if(r.hoverGuides!==!0)return{show:()=>{},hide:()=>{}};let t=()=>e.append("line").attr("class","scatter-hover-guide").style("stroke",y("--color-text-faint","#9ca3af")).style("stroke-dasharray",y("--hover-dash-pattern","3, 3")).style("opacity",0).style("pointer-events","none"),s=t(),n=t();return{show(l,i){s.attr("x1",l).attr("x2",l).attr("y1",i).attr("y2",a).style("opacity",1),n.attr("x1",0).attr("x2",l).attr("y1",i).attr("y2",i).style("opacity",1)},hide(){s.style("opacity",0),n.style("opacity",0)}}}var _o={createBasic(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.xAccessor||(j=>j.x),l=t.yAccessor||(j=>j.y),i=t.categoryAccessor||Tt,c=t.sizeAccessor||(()=>t.dotRadius??(r.pointRadius||5)),f=t.xFormat||bt,p=t.yFormat||bt,u=t.margin||r.margin,d=Math.max(40,(t.width||r.width)-u.left-u.right),h=(t.height||r.height)-u.top-u.bottom,b=t.dotStyle||"filled",g=Ue[b]||Ue.filled,L=o.select(e).append("svg").attr("width",t.width||r.width).attr("height",t.height||r.height),m=L.append("defs"),k=Xt(),M=m.append("filter").attr("id",`scatter-glow-${k}`).attr("x","-50%").attr("y","-50%").attr("width","200%").attr("height","200%");M.append("feGaussianBlur").attr("in","SourceGraphic").attr("stdDeviation","3").attr("result","blur"),M.append("feMerge").selectAll("feMergeNode").data(["blur","SourceGraphic"]).join("feMergeNode").attr("in",j=>j),m.append("filter").attr("id",`scatter-shadow-${k}`).attr("x","-50%").attr("y","-50%").attr("width","200%").attr("height","200%").append("feDropShadow").attr("dx","1").attr("dy","2").attr("stdDeviation","2").attr("flood-color","#000").attr("flood-opacity","0.3");let D=L.append("g").attr("transform",`translate(${u.left},${u.top})`),B=o.extent(s,n),A=o.extent(s,l),x=(B[1]-B[0])*.1||10,V=(A[1]-A[0])*.1||10,w=je(t.xScaleType,B,[0,d],t.xDomain),X=je(t.yScaleType,A,[h,0],t.yDomain),v=[...new Set(s.map(i))],G=t.colors||(t.color?[t.color]:Ft()),C=o.scaleOrdinal().domain(v).range(G),P=t.colorMap?j=>t.colorMap[j]!==void 0?t.colorMap[j]:C(j):C,E=y("--color-border-row","#e5e7eb"),S=q("--grid-stroke-opacity",.5);D.append("g").attr("class","grid grid-x").attr("transform",`translate(0,${h})`).call(at(o.axisBottom(w),w,t.axisTicks??6,t.xTickValues).tickSize(-h).tickFormat("")).call(j=>j.select(".domain").remove()).call(j=>j.selectAll(".tick line").attr("stroke",E).attr("stroke-opacity",S)),D.append("g").attr("class","grid grid-y").call(at(o.axisLeft(X),X,t.axisTicks??6,t.yTickValues).tickSize(-d).tickFormat("")).call(j=>j.select(".domain").remove()).call(j=>j.selectAll(".tick line").attr("stroke",E).attr("stroke-opacity",S)),D.append("g").attr("class","axis-x").attr("transform",`translate(0,${h})`).call(at(o.axisBottom(w),w,t.axisTicks??6,t.xTickValues).tickFormat(f)).call(j=>j.select(".domain").attr("stroke",E)).call(j=>j.selectAll(".tick line").attr("stroke",E)).call(j=>j.selectAll("text").attr("fill",y("--color-text-muted","#6b7280")).attr("font-size",y("--font-size-xs","10px"))),D.append("g").attr("class","axis-y").call(at(o.axisLeft(X),X,t.axisTicks??6,t.yTickValues).tickFormat(p)).call(j=>j.select(".domain").remove()).call(j=>j.selectAll(".tick line").attr("stroke",E)).call(j=>j.selectAll("text").attr("fill",y("--color-text-muted","#6b7280")).attr("font-size",y("--font-size-xs","10px"))),t.xLabel&&D.append("text").attr("class","axis-label").attr("x",d/2).attr("y",h+u.bottom-5).attr("text-anchor","middle").attr("fill",y("--color-text-muted","#6b7280")).attr("font-size",y("--font-size-sm","11px")).text(t.xLabel),t.yLabel&&D.append("text").attr("class","axis-label").attr("transform","rotate(-90)").attr("x",-h/2).attr("y",-u.left+15).attr("text-anchor","middle").attr("fill",y("--color-text-muted","#6b7280")).attr("font-size",y("--font-size-sm","11px")).text(t.yLabel);let Y=new ct,$=t.dotOpacity??(g.opacity||.7),T=q("--scatter-animation-speed",1e3),I=t.animate!==!1&&t.animated!==!1,_=()=>g.filter==="glow"?`url(#scatter-glow-${k})`:g.filter==="shadow"?`url(#scatter-shadow-${k})`:null;if(g.innerDot){let j=D.selectAll(".scatter-inner-dot").data(s).join("circle").attr("class","scatter-inner-dot").attr("cx",Q=>w(n(Q))).attr("cy",Q=>X(l(Q))).attr("r",Q=>I?0:c(Q)*.4).attr("fill",Q=>P(i(Q))).attr("pointer-events","none");I&&j.transition().duration(T).delay((Q,ot)=>ot*10).attr("r",Q=>c(Q)*.4)}let N=Pe(D,h,t),H=j=>N.show(w(n(j)),X(l(j))),F=N.hide,z=D.selectAll(".scatter-dot").data(s).join("circle").attr("class","scatter-dot").attr("cx",j=>w(n(j))).attr("cy",j=>X(l(j))).attr("r",j=>I?0:c(j)).attr("fill",j=>g.fill==="white"?y("--color-bg-container","white"):g.fill===!1?"none":P(i(j))).attr("fill-opacity",g.fillOpacity||1).attr("opacity",$).attr("stroke",j=>g.stroke==="white"?y("--color-bg-container","white"):g.stroke===!1||!g.stroke?"none":P(i(j))).attr("stroke-width",g.strokeWidth||0).attr("filter",_()).attr("pointer-events","all").style("cursor","pointer").on("pointerenter",function(j,Q){if(o.select(this).attr("r",c(Q)+2).attr("opacity",1),H(Q),g.innerDot&&D.selectAll(".scatter-inner-dot").filter(ot=>ot===Q).attr("r",c(Q)*.5),t.showTooltip!==!1){let ot=i(Q),dt=f(n(Q)),et=p(l(Q));Y.show(lt(t,Q,[{title:(t.nameAccessor?t.nameAccessor(Q):null)||ot||"Point"},...re(t,dt,et)]),j)}}).on("pointermove",j=>Y.position(j)).on("pointerleave",function(j,Q){o.select(this).attr("r",c(Q)).attr("opacity",$),F(),g.innerDot&&D.selectAll(".scatter-inner-dot").filter(ot=>ot===Q).attr("r",c(Q)*.4),Y.hide()});return I&&z.transition().duration(T).delay((j,Q)=>Q*10).attr("r",c),{svg:D,x:w,y:X,colorScale:P,width:d,height:h,defs:m,dotStyleConfig:g,_entranceDelayFor:I?j=>{if(j.type!=="point"&&j.type!=="callout")return 0;let Q=s.findIndex(ot=>+n(ot)==+j.x&&+l(ot)==+j.y);return(Q>=0?Q:s.length-1)*10+T}:null,_dotLabelPoints:()=>s.map(j=>({datum:j,x:w(n(j)),y:X(l(j)),r:c(j),color:P(i(j))}))}},createLogos(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.xAccessor||(S=>S.x),l=t.yAccessor||(S=>S.y),i=t.imageAccessor||(S=>S.image||S.imageUrl||S.logo),c=t.labelAccessor||(S=>S.name||S.label||""),f=t.xFormat||(S=>S),p=t.yFormat||(S=>S),u=t.margin||r.margin,d=Math.max(40,(t.width||r.width)-u.left-u.right),h=(t.height||r.height)-u.top-u.bottom,b=t.imageSize||24,g=t.borderRadius??4,L=o.select(e).append("svg").attr("width",t.width||r.width).attr("height",t.height||r.height),m=L.append("defs"),k=L.append("g").attr("transform",`translate(${u.left},${u.top})`),M=o.extent(s,n),R=o.extent(s,l),D=(M[1]-M[0])*.1||10,B=(R[1]-R[0])*.1||10,A=o.scaleLinear().domain(t.xDomain||wt([M[0]-D,M[1]+D],t.xMin,t.xMax)).range([0,d]),x=o.scaleLinear().domain(t.yDomain||wt([R[0]-B,R[1]+B],t.yMin,t.yMax)).range([h,0]),V=y("--color-border-row","#e5e7eb"),w=q("--grid-stroke-opacity",.5);k.append("g").attr("class","grid grid-x").attr("transform",`translate(0,${h})`).call(at(o.axisBottom(A),A,t.axisTicks??6,t.xTickValues).tickSize(-h).tickFormat("")).call(S=>S.select(".domain").remove()).call(S=>S.selectAll(".tick line").attr("stroke",V).attr("stroke-opacity",w)),k.append("g").attr("class","grid grid-y").call(at(o.axisLeft(x),x,t.axisTicks??6,t.yTickValues).tickSize(-d).tickFormat("")).call(S=>S.select(".domain").remove()).call(S=>S.selectAll(".tick line").attr("stroke",V).attr("stroke-opacity",w)),k.append("g").attr("class","axis-x").attr("transform",`translate(0,${h})`).call(at(o.axisBottom(A),A,t.axisTicks??6,t.xTickValues).tickFormat(f)).call(S=>S.select(".domain").attr("stroke",V)).call(S=>S.selectAll(".tick line").attr("stroke",V)).call(S=>S.selectAll("text").attr("fill",y("--color-text-muted","#6b7280")).attr("font-size",y("--font-size-xs","10px"))),k.append("g").attr("class","axis-y").call(at(o.axisLeft(x),x,t.axisTicks??6,t.yTickValues).tickFormat(p)).call(S=>S.select(".domain").remove()).call(S=>S.selectAll(".tick line").attr("stroke",V)).call(S=>S.selectAll("text").attr("fill",y("--color-text-muted","#6b7280")).attr("font-size",y("--font-size-xs","10px"))),t.xLabel&&k.append("text").attr("class","axis-label").attr("x",d/2).attr("y",h+u.bottom-5).attr("text-anchor","middle").attr("fill",y("--color-text-muted","#6b7280")).attr("font-size",y("--font-size-sm","11px")).text(t.xLabel),t.yLabel&&k.append("text").attr("class","axis-label").attr("transform","rotate(-90)").attr("x",-h/2).attr("y",-u.left+15).attr("text-anchor","middle").attr("fill",y("--color-text-muted","#6b7280")).attr("font-size",y("--font-size-sm","11px")).text(t.yLabel);let X=Xt();s.forEach((S,Y)=>{m.append("clipPath").attr("id",`logo-clip-${X}-${Y}`).append("rect").attr("width",b).attr("height",b).attr("rx",g).attr("ry",g)});let v=new ct,G=q("--scatter-animation-speed",1e3),C=t.animate!==!1&&t.animated!==!1,P=k.selectAll(".logo-group").data(s).join("g").attr("class","logo-group").attr("transform",S=>`translate(${A(n(S))-b/2},${x(l(S))-b/2})`).style("cursor","pointer").style("opacity",C?0:1);return P.append("image").attr("class","logo-image").attr("width",b).attr("height",b).attr("clip-path",g>0?(S,Y)=>`url(#logo-clip-${X}-${Y})`:null).attr("href",i).attr("preserveAspectRatio","xMidYMid meet"),P.on("pointerenter",function(S,Y){if(o.select(this).raise().transition().duration(150).attr("transform",`translate(${A(n(Y))-b*.6},${x(l(Y))-b*.6}) scale(1.2)`),t.showTooltip!==!1){let $=f(n(Y)),T=p(l(Y)),I=c(Y);v.show(lt(t,Y,[{title:I||"Point"},...re(t,$,T)]),S)}}).on("pointermove",S=>v.position(S)).on("pointerleave",function(S,Y){o.select(this).transition().duration(150).attr("transform",`translate(${A(n(Y))-b/2},${x(l(Y))-b/2}) scale(1)`),v.hide()}),C&&P.transition().duration(G).delay((S,Y)=>Y*20).style("opacity",1),{svg:L,g:k,x:A,y:x,width:d,height:h,defs:m,_entranceDelayFor:C?S=>{if(S.type!=="point"&&S.type!=="callout")return 0;let Y=s.findIndex($=>+n($)==+S.x&&+l($)==+S.y);return(Y>=0?Y:s.length-1)*20+G}:null}},createAnimated(e,a={}){let r=this.createBasic(e,a),{svg:t,x:s,y:n,width:l,height:i,colorScale:c}=r,f=a.data||[],p=a.categoryAccessor||Tt,u=a.animInterval||2e3,d=a.showTrails!==!1,h=a.trailOpacity??.7,b=a.trailWidth??2.5,g=t.select("defs");g.empty()&&(g=t.append("defs"));let L=t.selectAll(".scatter-dot"),m=Xt();L.each(function(D,B){let A=o.select(this).attr("fill"),x=g.append("linearGradient").attr("id",`trail-grad-${m}-${B}`).attr("gradientUnits","userSpaceOnUse");x.append("stop").attr("offset","0%").attr("stop-color",A).attr("stop-opacity",0),x.append("stop").attr("offset","100%").attr("stop-color",A).attr("stop-opacity",h)});let k=t.insert("g",".scatter-dot").attr("class","trails-group"),M=u*.7;function R(){let D=t.selectAll(".scatter-dot"),B=new Map;D.each(function(V,w){B.set(w,{x:+o.select(this).attr("cx"),y:+o.select(this).attr("cy")})});let A=new Map;D.each(function(V,w){let X=s(Math.random()*(s.domain()[1]-s.domain()[0])+s.domain()[0]),v=n(Math.random()*(n.domain()[1]-n.domain()[0])+n.domain()[0]);A.set(w,{x:X,y:v})});let x=[];if(D.each(function(V,w){let X=o.select(this).attr("fill");x.push({index:w,startPos:B.get(w),endPos:A.get(w),color:X})}),D.transition().duration(M).ease(o.easeCubicInOut).attr("cx",(V,w)=>A.get(w).x).attr("cy",(V,w)=>A.get(w).y),d){let V=k.selectAll(".trail-line").data(x,v=>v.index),X=V.enter().append("line").attr("class","trail-line").attr("stroke-linecap","round").attr("stroke-width",b).merge(V);X.each(function(v){g.select(`#trail-grad-${m}-${v.index}`).attr("x1",v.startPos.x).attr("y1",v.startPos.y).attr("x2",v.startPos.x).attr("y2",v.startPos.y),o.select(this).attr("stroke",`url(#trail-grad-${m}-${v.index})`).attr("x1",v.startPos.x).attr("y1",v.startPos.y).attr("x2",v.startPos.x).attr("y2",v.startPos.y).attr("opacity",1)}),X.transition().duration(M).ease(o.easeCubicInOut).attrTween("x2",function(v){let G=v.startPos.x,C=v.endPos.x;return P=>G+(C-G)*P}).attrTween("y2",function(v){let G=v.startPos.y,C=v.endPos.y;return P=>G+(C-G)*P}).tween("gradient",function(v){let G=g.select(`#trail-grad-${m}-${v.index}`),C=v.startPos.x,P=v.startPos.y,E=v.endPos.x,S=v.endPos.y;return function(Y){let $=C+(E-C)*Y,T=P+(S-P)*Y;G.attr("x2",$).attr("y2",T)}}).transition().duration(M*.4).ease(o.easeLinear).attr("opacity",0),V.exit().remove()}}if(a.animate===!1||a.animated===!1)r.stopAnimation=()=>{};else{let D=setInterval(R,u);r.stopAnimation=()=>clearInterval(D)}return r},createTrajectory(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.categoryAccessor||Tt,l=t.xFormat||bt,i=t.yFormat||bt,c=t.margin||r.margin,f=Math.max(40,(t.width||r.width)-c.left-c.right),p=(t.height||r.height)-c.top-c.bottom,u=o.select(e).append("svg").attr("width",t.width||r.width).attr("height",t.height||r.height).append("g").attr("transform",`translate(${c.left},${c.top})`),d=s.flatMap(G=>G.points||[]),h=o.extent(d,G=>G.x),b=o.extent(d,G=>G.y),g=(h[1]-h[0])*.1,L=(b[1]-b[0])*.1,m=o.scaleLinear().domain(t.xDomain||wt([h[0]-g,h[1]+g],t.xMin,t.xMax)).range([0,f]),k=o.scaleLinear().domain(t.yDomain||wt([b[0]-L,b[1]+L],t.yMin,t.yMax)).range([p,0]),M=[...new Set(s.map(n))],R=t.colors||(t.color?[t.color]:Ft()),D=o.scaleOrdinal().domain(M).range(R),B=y("--color-border-row","#e5e7eb");u.append("g").attr("class","grid grid-x").attr("transform",`translate(0,${p})`).call(at(o.axisBottom(m),m,6,t.xTickValues).tickSize(-p).tickFormat("")).call(G=>G.select(".domain").remove()).call(G=>G.selectAll(".tick line").attr("stroke",B).attr("stroke-opacity",.5)),u.append("g").attr("class","grid grid-y").call(at(o.axisLeft(k),k,6,t.yTickValues).tickSize(-f).tickFormat("")).call(G=>G.select(".domain").remove()).call(G=>G.selectAll(".tick line").attr("stroke",B).attr("stroke-opacity",.5));let A=y("--color-text-muted","#6b7280"),x=y("--font-size-xs","10px");u.append("g").attr("class","axis-x").attr("transform",`translate(0,${p})`).call(at(o.axisBottom(m),m,6,t.xTickValues).tickFormat(l)).call(G=>G.select(".domain").attr("stroke",B)).call(G=>G.selectAll(".tick line").attr("stroke",B)).call(G=>G.selectAll("text").attr("fill",A).attr("font-size",x)),u.append("g").attr("class","axis-y").call(at(o.axisLeft(k),k,6,t.yTickValues).tickFormat(i)).call(G=>G.select(".domain").remove()).call(G=>G.selectAll(".tick line").attr("stroke",B)).call(G=>G.selectAll("text").attr("fill",A).attr("font-size",x));let V=o.line().x(G=>m(G.x)).y(G=>k(G.y)).curve(o.curveCatmullRom.alpha(.5)),w=q("--scatter-trail-width",3),X=q("--scatter-dot-radius",6),v=new ct;return s.forEach((G,C)=>{let P=D(n(G)),E=G.points||[];if(E.length===0)return;u.append("path").datum(E).attr("class","trail-line").attr("fill","none").attr("stroke",P).attr("stroke-width",w).attr("stroke-opacity",.5).attr("d",V),u.append("circle").attr("class","start-dot").attr("cx",m(E[0].x)).attr("cy",k(E[0].y)).attr("r",X*.6).attr("fill",y("--color-bg-container","white")).attr("stroke",P).attr("stroke-width",q("--scatter-start-dot-stroke-width",1.5));let S=E[E.length-1];u.append("circle").attr("class","scatter-dot").attr("cx",m(S.x)).attr("cy",k(S.y)).attr("r",X).attr("fill",P).attr("stroke",y("--color-bg-container","white")).attr("stroke-width",2).style("cursor","pointer").on("pointerenter",function(Y){o.select(this).attr("r",X+2),t.showTooltip!==!1&&v.show(lt(t,G,[{title:G.name||n(G)},{label:"End",value:`(${l(S.x)}, ${i(S.y)})`}]),Y)}).on("pointermove",Y=>v.position(Y)).on("pointerleave",function(){o.select(this).attr("r",X),v.hide()})}),{svg:u,x:m,y:k,colorScale:D,width:f,height:p}},createComet(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.categoryAccessor||Tt,l=t.xFormat||bt,i=t.yFormat||bt,c=t.margin||r.margin,f=Math.max(40,(t.width||r.width)-c.left-c.right),p=(t.height||r.height)-c.top-c.bottom,u=o.select(e).append("svg").attr("width",t.width||r.width).attr("height",t.height||r.height).append("g").attr("transform",`translate(${c.left},${c.top})`),d=s.flatMap(E=>[E.x1,E.x2]),h=s.flatMap(E=>[E.y1,E.y2]),b=o.extent(d),g=o.extent(h),L=(b[1]-b[0])*.15,m=(g[1]-g[0])*.15,k=o.scaleLinear().domain(t.xDomain||[b[0]-L,b[1]+L]).range([0,f]),M=o.scaleLinear().domain(t.yDomain||[g[0]-m,g[1]+m]).range([p,0]),R=[...new Set(s.map(n))],D=t.colors||(t.color?[t.color]:Ft()),B=o.scaleOrdinal().domain(R).range(D),A=y("--color-border-row","#e5e7eb");u.append("g").attr("class","grid grid-x").attr("transform",`translate(0,${p})`).call(at(o.axisBottom(k),k,6,t.xTickValues).tickSize(-p).tickFormat("")).call(E=>E.select(".domain").remove()).call(E=>E.selectAll(".tick line").attr("stroke",A).attr("stroke-opacity",.5)),u.append("g").attr("class","grid grid-y").call(at(o.axisLeft(M),M,6,t.yTickValues).tickSize(-f).tickFormat("")).call(E=>E.select(".domain").remove()).call(E=>E.selectAll(".tick line").attr("stroke",A).attr("stroke-opacity",.5));let x=y("--color-text-muted","#6b7280"),V=y("--font-size-xs","10px");u.append("g").attr("class","axis-x").attr("transform",`translate(0,${p})`).call(at(o.axisBottom(k),k,6,t.xTickValues).tickFormat(l)).call(E=>E.select(".domain").attr("stroke",A)).call(E=>E.selectAll(".tick line").attr("stroke",A)).call(E=>E.selectAll("text").attr("fill",x).attr("font-size",V)),u.append("g").attr("class","axis-y").call(at(o.axisLeft(M),M,6,t.yTickValues).tickFormat(i)).call(E=>E.select(".domain").remove()).call(E=>E.selectAll(".tick line").attr("stroke",A)).call(E=>E.selectAll("text").attr("fill",x).attr("font-size",V));let w=r===nt.mini,X=t.tailRadius||(w?2.5:4),v=t.headRadius||(w?5:8),G=new ct,C=u.append("defs"),P=Xt();return s.forEach((E,S)=>{let Y=B(n(E)),$=k(E.x1),T=M(E.y1),I=k(E.x2),_=M(E.y2),N=C.append("linearGradient").attr("id",`comet-grad-${P}-${S}`).attr("gradientUnits","userSpaceOnUse").attr("x1",$).attr("y1",T).attr("x2",I).attr("y2",_);N.append("stop").attr("offset","0%").attr("stop-color",Y).attr("stop-opacity",0),N.append("stop").attr("offset","100%").attr("stop-color",Y).attr("stop-opacity",.35);let F=Math.atan2(_-T,I-$)+Math.PI/2,z={x:$+Math.cos(F)*X,y:T+Math.sin(F)*X},W={x:$-Math.cos(F)*X,y:T-Math.sin(F)*X},O={x:I+Math.cos(F)*v,y:_+Math.sin(F)*v},j={x:I-Math.cos(F)*v,y:_-Math.sin(F)*v},Q=u.append("g").attr("class","comet-group").style("cursor","pointer");Q.append("path").attr("class","comet-trail").attr("d",`M ${z.x} ${z.y}
|
|
2
|
+
L ${O.x} ${O.y}
|
|
3
|
+
L ${j.x} ${j.y}
|
|
4
|
+
L ${W.x} ${W.y}
|
|
5
|
+
Z`).attr("fill",`url(#comet-grad-${P}-${S})`),Q.append("circle").attr("class","comet-tail-dot").attr("cx",$).attr("cy",T).attr("r",X).attr("fill",y("--color-bg-container","white")).attr("stroke",Y).attr("stroke-width",w?1:q("--scatter-start-dot-stroke-width",1.5)).attr("opacity",q("--scatter-start-dot-opacity",.8)),Q.append("circle").attr("class","comet-head scatter-dot").attr("cx",I).attr("cy",_).attr("r",v).attr("fill",Y).attr("stroke",y("--color-bg-container","white")).attr("stroke-width",w?1:2),Q.on("pointerenter",function(ot){o.select(this).select(".comet-head").attr("r",v+2),t.showTooltip!==!1&&G.show(lt(t,E,[{title:E.name||n(E)},{label:"From",value:`(${l(E.x1)}, ${i(E.y1)})`},{label:"To",value:`(${l(E.x2)}, ${i(E.y2)})`}]),ot)}).on("pointermove",ot=>G.position(ot)).on("pointerleave",function(){o.select(this).select(".comet-head").attr("r",v),G.hide()})}),{svg:u,x:k,y:M,colorScale:B,width:f,height:p,defs:C}},createBeeswarm(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.valueAccessor||(S=>S.value),l=t.categoryAccessor||Tt,i=t.valueFormat||bt,c=[...new Set(s.map(l))],f=y("--font-size-sm","11px"),p=y("--font-family","-apple-system, sans-serif"),u=Lt(),d=S=>u(S,400,f,p),h=0;c.forEach(S=>{h=Math.max(h,d(S))});let b=t.margin||r.margin,g=Math.max(b.left,Math.ceil(h+12)),L={...b,left:g},m=Math.max(40,(t.width||r.width)-L.left-L.right),k=(t.height||r.height)-L.top-L.bottom,M=o.select(e).append("svg").attr("width",t.width||r.width).attr("height",t.height||r.height).append("g").attr("transform",`translate(${L.left},${L.top})`),R=t.colors||(t.color?[t.color]:Ft()),D=o.scaleOrdinal().domain(c).range(R),B=o.extent(s,n),A=(B[1]-B[0])*.1,x=o.scaleLinear().domain(t.xDomain||wt([B[0]-A,B[1]+A],t.xMin,t.xMax)).range([0,m]),V=o.scaleBand().domain(c).range([0,k]).padding(.2),w=y("--color-border-row","#e5e7eb");M.append("g").attr("class","grid grid-x").attr("transform",`translate(0,${k})`).call(o.axisBottom(x).ticks(6).tickSize(-k).tickFormat("")).call(S=>S.select(".domain").remove()).call(S=>S.selectAll(".tick line").attr("stroke",w).attr("stroke-opacity",.5));let X=y("--color-text-muted","#6b7280"),v=y("--font-size-xs","10px");M.append("g").attr("class","axis-x").attr("transform",`translate(0,${k})`).call(o.axisBottom(x).ticks(6).tickFormat(i)).call(S=>S.select(".domain").attr("stroke",w)).call(S=>S.selectAll(".tick line").attr("stroke",w)).call(S=>S.selectAll("text").attr("fill",X).attr("font-size",v)),M.append("g").attr("class","axis-y").call(o.axisLeft(V)).call(S=>S.select(".domain").remove()).call(S=>S.selectAll(".tick line").attr("stroke",w)).call(S=>S.selectAll("text").attr("fill",X).attr("font-size",v));let G=t.dotRadius??(r.pointRadius||4),C=2*(G+1);o.group(s,l).forEach((S,Y)=>{let $=V(Y)+V.bandwidth()/2,T=S.map(_=>x(n(_))),I=le(T,C);S.forEach((_,N)=>{_.x=T[N],_.y=$+I[N]})});let P=new ct;return M.selectAll(".scatter-dot").data(s).join("circle").attr("class","scatter-dot").attr("cx",S=>S.x).attr("cy",S=>S.y).attr("r",G).attr("fill",S=>D(l(S))).attr("opacity",.7).style("cursor","pointer").on("pointerenter",function(S,Y){o.select(this).attr("r",G+2).attr("opacity",1),t.showTooltip!==!1&&P.show(lt(t,Y,[{title:l(Y)},{value:(t.tooltipValueFormat||t.valueFormat||yt)(n(Y))}]),S)}).on("pointermove",S=>P.position(S)).on("pointerleave",function(){o.select(this).attr("r",G).attr("opacity",.7),P.hide()}),{svg:M,x,y:V,yBand:V,colorScale:D,width:m,height:k,_dotLabelPoints:()=>s.map(S=>({datum:S,x:S.x,y:S.y,r:G,color:D(l(S))}))}},createBeeswarmVertical(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.valueAccessor||(O=>O.value),l=t.categoryAccessor||Tt,i=t.colorAccessor||null,c=t.labelAccessor||null,f=t.nameAccessor||(O=>O.name),p=t.valueFormat||bt,u=t.tooltipValueFormat||t.valueFormat||yt,d=t.labelFormat||null,h=t.margin||r.margin,b=Math.max(40,(t.width||r.width)-h.left-h.right),g=(t.height||r.height)-h.top-h.bottom,L=t.singleColumn||!t.categoryAccessor,m=L?["all"]:[...new Set(s.map(l))],k=t.colors||(t.color?[t.color]:Ft()),M=o.scaleOrdinal().domain(m).range(k),R=o.extent(s,n),D=(R[1]-R[0])*.1,B=t.yDomain||[R[0]-D,R[1]+D],A=o.select(e).append("svg").attr("width",t.width||r.width).attr("height",t.height||r.height),x=A.append("g").attr("transform",`translate(${h.left},${h.top})`),V=o.scaleLinear().domain(B).range([g,0]),w=b/2,X=L?null:o.scaleBand().domain(m).range([0,b]).padding(.2),v=y("--color-border-row","#e5e7eb"),G=y("--color-text-muted","#6b7280"),C=y("--font-size-xs","10px");t.showGrid!==!1&&x.append("g").attr("class","grid grid-y").selectAll("line").data(V.ticks(t.yTicks??8)).enter().append("line").attr("class","grid-line").attr("x1",0).attr("x2",b).attr("y1",O=>V(O)).attr("y2",O=>V(O)).attr("stroke",v).attr("stroke-width",1),x.append("g").attr("class","axis-y").call(o.axisLeft(V).ticks(t.yTicks??8).tickFormat(p)).call(O=>O.select(".domain").attr("stroke",v)).call(O=>O.selectAll(".tick line").attr("stroke",v)).call(O=>O.selectAll("text").attr("fill",G).attr("font-size",C)),L||x.append("g").attr("class","axis-x").attr("transform",`translate(0,${g})`).call(o.axisBottom(X)).call(O=>O.select(".domain").attr("stroke",v)).call(O=>O.selectAll(".tick line").attr("stroke",v)).call(O=>O.selectAll("text").attr("fill",G).attr("font-size",C)),t.yLabel&&x.append("text").attr("class","axis-label").attr("transform","rotate(-90)").attr("x",-(g/2)).attr("y",-h.left+18).attr("text-anchor","middle").attr("fill",G).attr("font-size",C).text(t.yLabel);let P=t.dotRadius??(r.pointRadius||4),E=t.collisionRadius||P+2,S=2*E,Y=(O,j)=>{let Q=O.map(dt=>V(n(dt))),ot=le(Q,S);O.forEach((dt,et)=>{dt.y=Q[et],dt.x=j+ot[et]})};L?Y(s,w):o.group(s,l).forEach((O,j)=>Y(O,X(j)+X.bandwidth()/2));let $=P,T=b-P;s.forEach(O=>{O.x=Math.max($,Math.min(T,O.x))});let I=new ct,_=i?O=>i(O):O=>L?k[0]||y("--chart-primary","#3b82f6"):M(l(O)),N=t.dotStroke||y("--color-bg-container","white"),H=va(t,P,E),F=t.dotOpacity!=null?t.dotOpacity:1,z=x.selectAll(".scatter-dot").data(s).join("circle").attr("class","scatter-dot").attr("cx",O=>O.x).attr("cy",O=>O.y).attr("r",P).attr("fill",_).attr("stroke",N).attr("stroke-width",H).attr("opacity",F).style("cursor","pointer").on("pointerenter",function(O,j){if(o.select(this).attr("opacity",1),z.filter(Q=>Q!==j).attr("opacity",.2),t.showTooltip!==!1){let Q=d?d(j):f(j);I.show(lt(t,j,[{title:Q},{value:u(n(j))}]),O)}}).on("pointermove",O=>I.position(O)).on("pointerleave",function(){z.attr("opacity",F),I.hide()});return c&&x.selectAll(".dot-label").data(s).join("text").attr("class","dot-label").attr("x",O=>O.x).attr("y",O=>O.y).attr("text-anchor","middle").attr("dominant-baseline","central").attr("fill",t.labelColor||y("--color-bg-container","white")).attr("font-family",y("--font-family","-apple-system, sans-serif")).attr("font-size",t.labelFontSize||"8px").attr("font-weight",t.labelFontWeight||"bold").attr("pointer-events","none").text(O=>c(O)),{svg:A,g:x,x:X||(()=>w),y:V,xBand:X,colorScale:M,dots:z,width:b,height:g,_dotLabelPoints:()=>s.map(O=>({datum:O,x:O.x,y:O.y,r:P,color:_(O)}))}},createBeeswarmHorizontal(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.valueAccessor||(T=>T.value),l=t.categoryAccessor||Tt,i=t.colorAccessor||null,c=t.imageAccessor||null,f=t.nameAccessor||(T=>T.name),p=t.valueFormat||bt,u=t.labelFormat||null,d=t.margin||{top:20,right:30,bottom:50,left:30},h=Math.max(40,(t.width||r.width)-d.left-d.right),b=(t.height||r.height)-d.top-d.bottom,g=o.extent(s,n),L=(g[1]-g[0])*.1,m=t.xDomain||[g[0]-L,g[1]+L],k=o.select(e).append("svg").attr("width",t.width||r.width).attr("height",t.height||r.height),M=k.append("g").attr("transform",`translate(${d.left},${d.top})`),R=[...new Set(s.map(l))],D=t.colors||(t.color?[t.color]:Ft()),B=o.scaleOrdinal().domain(R).range(D),A=o.scaleLinear().domain(m).range([0,h]),x=y("--color-border-row","#e5e7eb"),V=y("--color-text-muted","#6b7280"),w=y("--font-size-xs","10px");t.showGrid!==!1&&M.append("g").attr("class","grid grid-x").selectAll("line").data(A.ticks(t.xTicks??8)).enter().append("line").attr("class","grid-line").attr("x1",T=>A(T)).attr("x2",T=>A(T)).attr("y1",0).attr("y2",b).attr("stroke",x).attr("stroke-width",1),M.append("g").attr("class","axis-x").attr("transform",`translate(0,${b})`).call(o.axisBottom(A).ticks(t.xTicks??8).tickFormat(p)).call(T=>T.select(".domain").attr("stroke",x)).call(T=>T.selectAll(".tick line").attr("stroke",x)).call(T=>T.selectAll("text").attr("fill",V).attr("font-size",w)),t.xLabel&&M.append("text").attr("class","axis-label").attr("x",h/2).attr("y",b+d.bottom-10).attr("text-anchor","middle").attr("fill",V).attr("font-size",w).text(t.xLabel);let X=b/2,v=t.dotRadius??(r.pointRadius||4),G=t.logoSize||28,C=c?G/2+2:v+2;{let T=s.map(_=>A(n(_))),I=le(T,2*C);s.forEach((_,N)=>{_.x=T[N],_.y=X+I[N]})}let P=c?G/2:v,E=b-P;s.forEach(T=>{T.y=Math.max(P,Math.min(E,T.y))});let S=new ct,Y=i?T=>i(T):T=>B(l(T)),$=t.dotOpacity!=null?t.dotOpacity:1;if(c){let T=M.selectAll(".beeswarm-logo").data(s).join("image").attr("class","beeswarm-logo").attr("xlink:href",_=>c(_)).attr("x",_=>_.x-G/2).attr("y",_=>_.y-G/2).attr("width",G).attr("height",G).attr("preserveAspectRatio","xMidYMid meet").attr("opacity",$).style("cursor","pointer").on("pointerenter",function(_,N){if(o.select(this).attr("opacity",1),T.filter(H=>H!==N).attr("opacity",.15),t.showTooltip!==!1){let H=u?u(N):f(N);S.show(lt(t,N,[{title:H},{value:(t.tooltipValueFormat||t.valueFormat||yt)(n(N))}]),_)}}).on("pointermove",_=>S.position(_)).on("pointerleave",function(){T.attr("opacity",$),S.hide()});return{svg:k,g:M,x:A,y:()=>X,colorScale:B,logos:T,width:h,height:b,_dotLabelPoints:()=>s.map(_=>({datum:_,x:_.x,y:_.y,r:G/2}))}}else{let T=M.selectAll(".scatter-dot").data(s).join("circle").attr("class","scatter-dot").attr("cx",_=>_.x).attr("cy",_=>_.y).attr("r",v).attr("fill",Y).attr("stroke",t.dotStroke||y("--color-bg-container","white")).attr("stroke-width",va(t,v,C)).attr("opacity",$).style("cursor","pointer").on("pointerenter",function(_,N){if(o.select(this).attr("opacity",1),T.filter(H=>H!==N).attr("opacity",.2),t.showTooltip!==!1){let H=u?u(N):f(N)||l(N);S.show(lt(t,N,[{title:H},{value:(t.tooltipValueFormat||t.valueFormat||yt)(n(N))}]),_)}}).on("pointermove",_=>S.position(_)).on("pointerleave",function(){T.attr("opacity",$),S.hide()});return{svg:k,g:M,x:A,y:()=>X,colorScale:B,dots:T,width:h,height:b,_dotLabelPoints:()=>s.map(_=>({datum:_,x:_.x,y:_.y,r:v,color:Y(_)}))}}},createBeeswarmLogos(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.valueAccessor||(E=>E.value),l=t.imageAccessor||(E=>E.image||E.logo),i=t.nameAccessor||(E=>E.name),c=t.valueFormat||bt,f=t.tooltipValueFormat||t.valueFormat||yt,p=t.labelFormat||null,u=t.margin||{top:20,right:40,bottom:30,left:60},d=Math.max(40,(t.width||r.width)-u.left-u.right),h=(t.height||r.height)-u.top-u.bottom,b=o.extent(s,n),g=(b[1]-b[0])*.1,L=t.yDomain||[b[0]-g,b[1]+g],m=o.select(e).append("svg").attr("width",t.width||r.width).attr("height",t.height||r.height),k=m.append("g").attr("transform",`translate(${u.left},${u.top})`),M=o.scaleLinear().domain(L).range([h,0]),R=d/2,D=y("--color-border-row","#e5e7eb"),B=y("--color-text-muted","#6b7280"),A=y("--font-size-xs","10px");t.showGrid!==!1&&k.append("g").attr("class","grid grid-y").selectAll("line").data(M.ticks(t.yTicks??8)).enter().append("line").attr("class","grid-line").attr("x1",0).attr("x2",d).attr("y1",E=>M(E)).attr("y2",E=>M(E)).attr("stroke",D).attr("stroke-width",1),k.append("g").attr("class","axis-y").call(o.axisLeft(M).ticks(t.yTicks??8).tickFormat(c)).call(E=>E.select(".domain").attr("stroke",D)).call(E=>E.selectAll(".tick line").attr("stroke",D)).call(E=>E.selectAll("text").attr("fill",B).attr("font-size",A)),t.yLabel&&k.append("text").attr("class","axis-label").attr("transform","rotate(-90)").attr("x",-(h/2)).attr("y",-u.left+18).attr("text-anchor","middle").attr("fill",B).attr("font-size",A).text(t.yLabel);let x=t.logoSize||28,V=t.collisionRadius||x/2+2;{let E=s.map(Y=>M(n(Y))),S=le(E,2*V);s.forEach((Y,$)=>{Y.y=E[$],Y.x=R+S[$]})}let w=x/2,X=d-x/2;s.forEach(E=>{E.x=Math.max(w,Math.min(X,E.x))});let v=new ct,G=t.dotOpacity!=null?t.dotOpacity:1,C=k.selectAll(".beeswarm-logo").data(s).join("image").attr("class","beeswarm-logo").attr("xlink:href",E=>l(E)).attr("x",E=>E.x-x/2).attr("y",E=>E.y-x/2).attr("width",x).attr("height",x).attr("preserveAspectRatio","xMidYMid meet").attr("opacity",G).style("cursor","pointer").on("pointerenter",function(E,S){if(o.select(this).attr("opacity",1),C.filter(Y=>Y!==S).attr("opacity",.15),t.showTooltip!==!1){let Y=p?p(S):i(S);v.show(lt(t,S,[{title:Y},{value:f(n(S))}]),E)}}).on("pointermove",E=>v.position(E)).on("pointerleave",function(){C.attr("opacity",G),v.hide()});return{svg:m,g:k,x:()=>R,y:M,logos:C,width:d,height:h,_dotLabelPoints:()=>s.map(E=>({datum:E,x:E.x,y:E.y,r:x/2}))}},createHeatmap(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.xAccessor||(v=>v.x),l=t.yAccessor||(v=>v.y),i=t.valueAccessor||(v=>v.value),c=t.xFormat||bt,f=t.yFormat||bt,p=t.valueFormat||bt,u=t.margin||r.margin,d=t.width||r.width,h=t.height||r.height,b=d-u.left-u.right,g=h-u.top-u.bottom,L=o.select(e).append("svg").attr("width",d).attr("height",h),m=L.append("g").attr("transform",`translate(${u.left},${u.top})`),k=y("--color-border-row","#e5e7eb"),M=y("--color-text-muted","#6b7280"),R=y("--font-size-xs","9px"),D=t.densityMode||t.gridSize,B,A,x,V,w;if(D){let v=t.gridSize||10,G=t.data.map(n),C=t.data.map(l),P=t.xDomain||wt(o.extent(G),t.xMin,t.xMax),E=t.yDomain||wt(o.extent(C),t.yMin,t.yMax);B=o.scaleLinear().domain(P).range([0,b]),A=o.scaleLinear().domain(E).range([g,0]);let S=Math.ceil(b/v),Y=Math.ceil(g/v),$=[];for(let T=0;T<S;T++)for(let I=0;I<Y;I++){let _=T*v,N=_+v,H=I*v,F=H+v,z=s.filter(W=>{let O=B(n(W)),j=A(l(W));return O>=_&&O<N&&j>=H&&j<F}).length;$.push({x:_,y:H,width:v,height:v,count:z,col:T,row:I})}w=o.max($,T=>T.count),x=o.scaleSequential(ae(t.colorScheme,o.interpolateYlOrRd)).domain(t.colorDomain||[0,w||1]),t.colorDomain&&x.clamp(!0),V=$,m.append("g").attr("class","axis-x").attr("transform",`translate(0,${g})`).call(o.axisBottom(B).ticks(6).tickFormat(c)).call(T=>T.select(".domain").attr("stroke",k)).call(T=>T.selectAll(".tick line").attr("stroke",k)).call(T=>T.selectAll("text").attr("fill",M).attr("font-size",R)),m.append("g").attr("class","axis-y").call(o.axisLeft(A).ticks(6).tickFormat(f)).call(T=>T.select(".domain").remove()).call(T=>T.selectAll(".tick line").attr("stroke",k)).call(T=>T.selectAll("text").attr("fill",M).attr("font-size",R))}else{let v=[...new Set(s.map(n))].sort((P,E)=>P-E),G;Array.isArray(t.yOrder)?G=t.yOrder.slice().reverse():(G=[...new Set(s.map(l))].sort((P,E)=>P-E),t.yOrder==="desc"&&G.reverse()),B=o.scaleBand().domain(v).range([0,b]).padding(.05),A=o.scaleBand().domain(G).range([g,0]).padding(.05);let C=o.extent(s,i);x=o.scaleSequential(ae(t.colorScheme,o.interpolateYlOrRd)).domain(t.colorDomain||C),t.colorDomain&&x.clamp(!0),V=s.map(P=>({x:B(n(P)),y:A(l(P)),width:B.bandwidth(),height:A.bandwidth(),value:i(P),original:P})).filter(P=>P.x!==void 0&&P.y!==void 0),m.append("g").attr("class","axis-x").attr("transform",`translate(0,${g})`).call(o.axisBottom(B).tickFormat(c)).call(P=>P.select(".domain").attr("stroke",k)).call(P=>P.selectAll(".tick line").attr("stroke",k)).call(P=>P.selectAll("text").attr("fill",M).attr("font-size",R)),m.append("g").attr("class","axis-y").call(o.axisLeft(A).tickFormat(f)).call(P=>P.select(".domain").remove()).call(P=>P.selectAll(".tick line").attr("stroke",k)).call(P=>P.selectAll("text").attr("fill",M).attr("font-size",R))}t.xLabel&&m.append("text").attr("class","axis-label").attr("x",b/2).attr("y",g+u.bottom-8).attr("text-anchor","middle").attr("fill",M).attr("font-size",R).text(t.xLabel),t.yLabel&&m.append("text").attr("class","axis-label").attr("transform","rotate(-90)").attr("x",-(g/2)).attr("y",-u.left+15).attr("text-anchor","middle").attr("fill",M).attr("font-size",R).text(t.yLabel);let X=new ct;return m.selectAll(".heatmap-cell").data(V).join("rect").attr("class","heatmap-cell").attr("x",v=>v.x).attr("y",v=>v.y).attr("width",v=>v.width).attr("height",v=>v.height).attr("fill",v=>{let G=v.count!==void 0?v.count:v.value;return G===0?"transparent":x(G)}).style("cursor","pointer").on("pointerenter",function(v,G){if((G.count!==void 0?G.count:G.value)!==0&&(o.select(this).attr("stroke",y("--hover-stroke-color","#333")).attr("stroke-width",q("--hover-stroke-width",1)),t.showTooltip!==!1)){let P=t.tooltipValueFormat||t.valueFormat||yt,E=D?"Cell Density":`(${c(n(G.original))}, ${f(l(G.original))})`,S=D?`${G.count} points`:`Value: ${P(G.value)}`;X.show(lt(t,G,[{title:E},{value:S}]),v)}}).on("pointermove",v=>X.position(v)).on("pointerleave",function(){o.select(this).attr("stroke","none"),X.hide()}),{svg:L,g:m,x:B,y:A,colorScale:x,width:b,height:g,maxCount:w}},createHexbin(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.xAccessor||(C=>C.x||C[0]),l=t.yAccessor||(C=>C.y||C[1]),i=t.margin||r.margin,c=t.width||r.width,f=t.height||r.height,p=c-i.left-i.right,u=f-i.top-i.bottom,d=o.select(e).append("svg").attr("width",c).attr("height",f),h=d.append("defs"),b=`hexbin-clip-${Math.random().toString(36).substr(2,9)}`;h.append("clipPath").attr("id",b).append("rect").attr("width",p).attr("height",u);let g=`hex-shadow-${Math.random().toString(36).substr(2,9)}`;t.showShadow!==!1&&h.append("filter").attr("id",g).attr("x","-50%").attr("y","-50%").attr("width","200%").attr("height","200%").append("feDropShadow").attr("dx","0").attr("dy","1").attr("stdDeviation","1.5").attr("flood-color","#000").attr("flood-opacity","0.3");let L=d.append("g").attr("transform",`translate(${i.left},${i.top})`),m=t.xDomain||o.extent(s,n),k=t.yDomain||o.extent(s,l),M=o.scaleLinear().domain(m).range([0,p]),R=o.scaleLinear().domain(k).range([u,0]),D=t.hexRadius||8,B,A,x=new ct,V=t.tooltipValueFormat||(C=>`${C} points`),w=t.hexbin||(typeof window<"u"&&window.d3?window.d3.hexbin:void 0);if(typeof w=="function"){let C=w().x(S=>M(n(S))).y(S=>R(l(S))).radius(D).extent([[0,0],[p,u]]);B=C(s),A=o.max(B,S=>S.length);let P=o.scaleSequential(ae(t.colorScheme,o.interpolateViridis)).domain([0,A||1]);L.append("g").attr("clip-path",`url(#${b})`).selectAll(".hexagon").data(B).join("path").attr("class","hexagon").attr("d",C.hexagon()).attr("transform",S=>`translate(${S.x}, ${S.y})`).attr("fill",S=>P(S.length)).attr("stroke",y("--color-bg-container","white")).attr("stroke-width",.5).attr("filter",t.showShadow!==!1?`url(#${g})`:null).style("cursor","pointer").on("pointerenter",function(S,Y){o.select(this).attr("stroke",y("--hover-stroke-color","#333")).attr("stroke-width",1),t.showTooltip!==!1&&x.show(lt(t,Y,[{title:"Density"},{value:V(Y.length)}]),S)}).on("pointermove",S=>x.position(S)).on("pointerleave",function(){o.select(this).attr("stroke",y("--color-bg-container","white")).attr("stroke-width",.5),x.hide()})}else{let Y=function(T){return o.range(0,2*Math.PI,Math.PI/3).map((I,_)=>(_===0?"M":"L")+T*Math.sin(I)+","+-T*Math.cos(I)).join("")+"Z"},C=[],P=Math.ceil(p/(D*1.7)),E=Math.ceil(u/(D*1.5));for(let T=0;T<E;T++)for(let I=0;I<P;I++){let _=I*D*1.7+T%2*D*.85,N=T*D*1.5+D,H=s.filter(F=>{let z=M(n(F))-_,W=R(l(F))-N;return Math.sqrt(z*z+W*W)<D}).length;_<p&&N<u&&C.push({x:_,y:N,count:H,length:H})}B=C.filter(T=>T.count>0),A=o.max(C,T=>T.count);let S=o.scaleSequential(ae(t.colorScheme,o.interpolateViridis)).domain([0,A||1]);L.append("g").attr("clip-path",`url(#${b})`).selectAll(".hexagon").data(B).join("path").attr("class","hexagon").attr("d",Y(D-1)).attr("transform",T=>`translate(${T.x},${T.y})`).attr("fill",T=>S(T.count)).attr("stroke",y("--color-bg-container","white")).attr("stroke-width",.5).attr("filter",t.showShadow!==!1?`url(#${g})`:null).style("cursor","pointer").on("pointerenter",function(T,I){o.select(this).attr("stroke",y("--hover-stroke-color","#333")).attr("stroke-width",1),t.showTooltip!==!1&&x.show(lt(t,I,[{title:"Density"},{value:V(I.count)}]),T)}).on("pointermove",T=>x.position(T)).on("pointerleave",function(){o.select(this).attr("stroke",y("--color-bg-container","white")).attr("stroke-width",.5),x.hide()})}let X=y("--color-border-row","#e5e7eb"),v=y("--color-text-muted","#6b7280"),G=y("--font-size-xs","10px");return L.append("g").attr("class","axis-x").attr("transform",`translate(0,${u})`).call(at(o.axisBottom(M),M,6,t.xTickValues).tickFormat(t.xFormat||null)).call(C=>C.select(".domain").attr("stroke",X)).call(C=>C.selectAll(".tick line").attr("stroke",X)).call(C=>C.selectAll("text").attr("fill",v).attr("font-size",G)),L.append("g").attr("class","axis-y").call(at(o.axisLeft(R),R,6,t.yTickValues).tickFormat(t.yFormat||null)).call(C=>C.select(".domain").remove()).call(C=>C.selectAll(".tick line").attr("stroke",X)).call(C=>C.selectAll("text").attr("fill",v).attr("font-size",G)),t.xLabel&&L.append("text").attr("class","axis-label").attr("x",p/2).attr("y",u+i.bottom-8).attr("text-anchor","middle").attr("fill",v).attr("font-size",G).text(t.xLabel),t.yLabel&&L.append("text").attr("class","axis-label").attr("transform","rotate(-90)").attr("x",-(u/2)).attr("y",-i.left+15).attr("text-anchor","middle").attr("fill",v).attr("font-size",G).text(t.yLabel),{svg:d,g:L,x:M,y:R,bins:B,maxCount:A,width:p,height:u}},createContour(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.xAccessor||(v=>v.x||v[0]),l=t.yAccessor||(v=>v.y||v[1]),i=t.margin||r.margin,c=t.width||r.width,f=t.height||r.height,p=c-i.left-i.right,u=f-i.top-i.bottom,d=o.select(e).append("svg").attr("width",c).attr("height",f),h=d.append("g").attr("transform",`translate(${i.left},${i.top})`),b=t.xDomain||(()=>{let v=o.extent(s,n),G=(v[1]-v[0])*.1;return[v[0]-G,v[1]+G]})(),g=t.yDomain||(()=>{let v=o.extent(s,l),G=(v[1]-v[0])*.1;return[v[0]-G,v[1]+G]})(),L=o.scaleLinear().domain(b).range([0,p]),m=o.scaleLinear().domain(g).range([u,0]),M=o.contourDensity().x(v=>L(n(v))).y(v=>m(l(v))).size([p,u]).bandwidth(t.bandwidth||15).thresholds(t.thresholds||20)(s),R=o.max(M,v=>v.value),D=o.scaleSequential(ae(t.colorScheme,o.interpolateYlGnBu)).domain([0,R]);h.append("g").attr("class","contours").selectAll("path").data(M).join("path").attr("class","contour").attr("d",o.geoPath()).attr("fill",v=>D(v.value)).attr("fill-opacity",t.fillOpacity??.7),t.showLines!==!1&&h.append("g").attr("class","contour-lines").selectAll("path").data(M).join("path").attr("class","contour-line").attr("d",o.geoPath()).attr("fill","none").attr("stroke",t.lineColor||y("--contour-line-color","rgba(0,0,0,0.15)")).attr("stroke-width",t.lineWidth??.5);let B=y("--color-border-row","#e5e7eb"),A=y("--color-text-muted","#6b7280"),x=y("--font-size-xs","10px");h.append("g").attr("class","axis-x").attr("transform",`translate(0,${u})`).call(at(o.axisBottom(L),L,6,t.xTickValues).tickFormat(t.xFormat||null)).call(v=>v.select(".domain").attr("stroke",B)).call(v=>v.selectAll(".tick line").attr("stroke",B)).call(v=>v.selectAll("text").attr("fill",A).attr("font-size",x)),h.append("g").attr("class","axis-y").call(at(o.axisLeft(m),m,6,t.yTickValues).tickFormat(t.yFormat||null)).call(v=>v.select(".domain").remove()).call(v=>v.selectAll(".tick line").attr("stroke",B)).call(v=>v.selectAll("text").attr("fill",A).attr("font-size",x)),t.xLabel&&h.append("text").attr("class","axis-label").attr("x",p/2).attr("y",u+i.bottom-8).attr("text-anchor","middle").attr("fill",A).attr("font-size",x).text(t.xLabel),t.yLabel&&h.append("text").attr("class","axis-label").attr("transform","rotate(-90)").attr("x",-(u/2)).attr("y",-i.left+15).attr("text-anchor","middle").attr("fill",A).attr("font-size",x).text(t.yLabel);let V=new ct,w=t.xFormat||bt,X=t.yFormat||bt;return t.showTooltip!==!1&&h.append("rect").attr("class","hover-rect").attr("width",p).attr("height",u).attr("fill","transparent").style("cursor","crosshair").on("pointermove",function(v){let[G,C]=o.pointer(v),P=L.invert(G),E=m.invert(C);V.show(lt(t,{x:P,y:E},[{label:t.xLabel||"X",value:w(P)},{label:t.yLabel||"Y",value:X(E)}]),v)}).on("pointerleave",()=>V.hide()),{svg:d,g:h,x:L,y:m,colorScale:D,contours:M,maxDensity:R,width:p,height:u}},createQuadrant(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.xAccessor||(Z=>Z.x),l=t.yAccessor||(Z=>Z.y),i=t.categoryAccessor||Tt,c=t.nameAccessor||(Z=>Z.name),f=t.xFormat||bt,p=t.yFormat||bt,u=t.xLabel||"",d=t.yLabel||"",h=t.showGrid!==!1,b=t.sizeAccessor||null,g=t.dotRadius??6,L=t.sizeRange||[5,18],m=t.margin||r.margin,k=t.width||r.width,M=t.height||r.height,R=k-m.left-m.right,D=M-m.top-m.bottom,B=o.select(e).append("svg").attr("width",k).attr("height",M),A=B.append("g").attr("transform",`translate(${m.left},${m.top})`),x=o.extent(s,n),V=o.extent(s,l),w=(x[1]-x[0])*.15,X=(V[1]-V[0])*.15,v=o.scaleLinear().domain(t.xDomain||[x[0]-w,x[1]+w]).range([0,R]),G=o.scaleLinear().domain(t.yDomain||[V[0]-X,V[1]+X]).range([D,0]),C=null;b&&(C=o.scaleSqrt().domain(o.extent(s,b)).range(L));let P=b?Z=>C(b(Z)):()=>g,E=o.mean(s,n),S=o.mean(s,l),Y=o.median(s,n),$=o.median(s,l),T=t.centerMode||"average";function I(Z){switch(Z){case"zero":return{x:0,y:0};case"median":return{x:Y,y:$};case"average":default:return{x:E,y:S}}}let _=null;t.centerX!==void 0&&t.centerY!==void 0&&(_={x:t.centerX,y:t.centerY});let N=t.quadrantColors||{topRight:y("--chart-green","#22c55e"),topLeft:y("--chart-orange","#f97316"),bottomRight:y("--chart-primary","#3b82f6"),bottomLeft:y("--chart-red","#ef4444")},H=t.quadrantLabels||{topRight:"Stars",topLeft:"Question Marks",bottomRight:"Cash Cows",bottomLeft:"Dogs"},F=t.quadrantOpacity!==void 0?t.quadrantOpacity:.04,z=y("--color-black","#000"),W=q("--quadrant-line-width",1.5),O=y("--color-border-row","#e5e7eb"),j=q("--grid-stroke-opacity",.5);h&&(A.append("g").attr("class","grid grid-x").attr("transform",`translate(0,${D})`).call(at(o.axisBottom(v),v,8,t.xTickValues).tickSize(-D).tickFormat("")).call(Z=>Z.select(".domain").remove()).call(Z=>Z.selectAll("line").attr("stroke",O).attr("stroke-opacity",j)),A.append("g").attr("class","grid grid-y").call(at(o.axisLeft(G),G,8,t.yTickValues).tickSize(-R).tickFormat("")).call(Z=>Z.select(".domain").remove()).call(Z=>Z.selectAll("line").attr("stroke",O).attr("stroke-opacity",j)));let Q=A.append("g").attr("class","quadrant-backgrounds"),ot=A.append("g").attr("class","quadrant-lines"),dt=A.append("g").attr("class","quadrant-labels"),et=Pe(A,D,t),K=A.append("g").attr("class","dots"),U=y("--color-text-muted","#6b7280"),tt=y("--font-size-sm","12px");A.append("g").attr("class","axis-x").attr("transform",`translate(0,${D})`).call(at(o.axisBottom(v),v,8,t.xTickValues).tickFormat(f)).call(Z=>Z.select(".domain").attr("stroke",O)).call(Z=>Z.selectAll(".tick line").attr("stroke",O)).call(Z=>Z.selectAll("text").attr("fill",U).attr("font-size",tt)),A.append("g").attr("class","axis-y").call(at(o.axisLeft(G),G,8,t.yTickValues).tickFormat(p)).call(Z=>Z.select(".domain").remove()).call(Z=>Z.selectAll(".tick line").attr("stroke",O)).call(Z=>Z.selectAll("text").attr("fill",U).attr("font-size",tt));let J=y("--color-text-muted","#6b7280"),rt=y("--font-size-sm","12px");u&&B.append("text").attr("class","axis-label").attr("x",k/2).attr("y",M-8).attr("text-anchor","middle").attr("fill",J).attr("font-size",rt).text(u),d&&B.append("text").attr("class","axis-label").attr("transform","rotate(-90)").attr("x",-M/2).attr("y",15).attr("text-anchor","middle").attr("fill",J).attr("font-size",rt).text(d);let pt=[...new Set(s.map(i))],it=t.colorMap||null,ht;if(it)ht=Z=>it[i(Z)]||y("--chart-primary","#3b82f6");else{let Z=t.colors||Ft(),st=o.scaleOrdinal().domain(pt).range(Z);ht=ut=>st(i(ut))}let ft=new ct;function mt(){let Z=_||I(T),st=v(Z.x),ut=G(Z.y);Q.selectAll("*").remove(),ot.selectAll("*").remove(),dt.selectAll("*").remove(),Q.append("rect").attr("x",st).attr("y",0).attr("width",Math.max(0,R-st)).attr("height",Math.max(0,ut)).attr("fill",N.topRight).attr("opacity",F),Q.append("rect").attr("x",0).attr("y",0).attr("width",Math.max(0,st)).attr("height",Math.max(0,ut)).attr("fill",N.topLeft).attr("opacity",F),Q.append("rect").attr("x",st).attr("y",ut).attr("width",Math.max(0,R-st)).attr("height",Math.max(0,D-ut)).attr("fill",N.bottomRight).attr("opacity",F),Q.append("rect").attr("x",0).attr("y",ut).attr("width",Math.max(0,st)).attr("height",Math.max(0,D-ut)).attr("fill",N.bottomLeft).attr("opacity",F),ot.append("line").attr("class","quadrant-line").attr("x1",st).attr("x2",st).attr("y1",0).attr("y2",D).attr("stroke",z).attr("stroke-width",W),ot.append("line").attr("class","quadrant-line").attr("x1",0).attr("x2",R).attr("y1",ut).attr("y2",ut).attr("stroke",z).attr("stroke-width",W);let xt=y("--font-size-xs","9px"),Ot=y("--color-text-muted","#6b7280"),Rt=8;return dt.append("text").attr("x",R-Rt).attr("y",Rt+10).attr("text-anchor","end").attr("font-size",xt).attr("fill",Ot).attr("font-weight",y("--font-weight-semibold","600")).attr("text-transform","uppercase").attr("letter-spacing","0.5px").text(H.topRight),dt.append("text").attr("x",Rt).attr("y",Rt+10).attr("text-anchor","start").attr("font-size",xt).attr("fill",Ot).attr("font-weight",y("--font-weight-semibold","600")).attr("text-transform","uppercase").attr("letter-spacing","0.5px").text(H.topLeft),dt.append("text").attr("x",R-Rt).attr("y",D-Rt).attr("text-anchor","end").attr("font-size",xt).attr("fill",Ot).attr("font-weight",y("--font-weight-semibold","600")).attr("text-transform","uppercase").attr("letter-spacing","0.5px").text(H.bottomRight),dt.append("text").attr("x",Rt).attr("y",D-Rt).attr("text-anchor","start").attr("font-size",xt).attr("fill",Ot).attr("font-weight",y("--font-weight-semibold","600")).attr("text-transform","uppercase").attr("letter-spacing","0.5px").text(H.bottomLeft),Z}function Mt(Z){K.selectAll(".scatter-dot").data(s,c).join("circle").attr("class","scatter-dot").attr("cx",st=>v(n(st))).attr("cy",st=>G(l(st))).attr("r",P).attr("fill",ht).attr("stroke",y("--color-bg-container","white")).attr("stroke-width",1.5).style("cursor","pointer").on("pointerenter",function(st,ut){K.selectAll(".scatter-dot").attr("opacity",.2),o.select(this).attr("opacity",1).attr("r",P(ut)+3),et.show(v(n(ut)),G(l(ut)));let xt=Z||_||I(T),Ot="";if(l(ut)>=xt.y&&n(ut)>=xt.x?Ot=H.topRight:l(ut)>=xt.y&&n(ut)<xt.x?Ot=H.topLeft:l(ut)<xt.y&&n(ut)>=xt.x?Ot=H.bottomRight:Ot=H.bottomLeft,t.showTooltip!==!1){let Rt=t.tooltipLabel||(Nt=>c(Nt)||i(Nt));ft.show(lt(t,ut,[{title:Rt(ut)},{label:"X",value:f(n(ut))},{label:"Y",value:p(l(ut))},{label:"Category",value:i(ut)},{label:"Quadrant",value:Ot}]),st)}}).on("pointermove",st=>ft.position(st)).on("pointerleave",function(st,ut){K.selectAll(".scatter-dot").attr("opacity",1).attr("r",P),et.hide(),ft.hide()})}let kt=mt();Mt(kt);function St(Z){T=Z;let st=mt();Mt(st)}return{svg:B,g:A,x:v,y:G,colorScale:ht,width:R,height:D,update:St,getCenter:I,sizeScale:C}},createDiagonal(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.xAccessor||(H=>H.x),l=t.yAccessor||(H=>H.y),i=t.xFormat||bt,c=t.yFormat||bt,f=t.margin||r.margin,p=Math.max(40,(t.width||r.width)-f.left-f.right),u=(t.height||r.height)-f.top-f.bottom,d=o.select(e).append("svg").attr("width",t.width||r.width).attr("height",t.height||r.height).append("g").attr("transform",`translate(${f.left},${f.top})`),h=o.extent(s,n),b=o.extent(s,l),g=(h[1]-h[0])*.1,L=(b[1]-b[0])*.1,m=t.reverseX||!1,k=wt([h[0]-g,h[1]+g],t.xMin,t.xMax),M=t.xDomain?t.xDomain:m?[k[1],k[0]]:k,R=t.yDomain||wt([b[0]-L,b[1]+L],t.yMin,t.yMax),D=o.scaleLinear().domain(M).range([0,p]),B=o.scaleLinear().domain(R).range([u,0]),A=`diagonal-clip-${Math.random().toString(36).substr(2,9)}`;d.append("defs").append("clipPath").attr("id",A).append("rect").attr("width",p).attr("height",u);let x=t.bandOffsets||[100,15,10,5,0,-5,-10,-15,-100],V=t.greenScale||[y("--scale-diag-green-1","#ffffff"),y("--scale-diag-green-2","#c6f6d5"),y("--scale-diag-green-3","#68d391"),y("--scale-diag-green-4","#38a169")],w=t.redScale||[y("--scale-diag-red-1","#ffffff"),y("--scale-diag-red-2","#fed7d7"),y("--scale-diag-red-3","#fc8181"),y("--scale-diag-red-4","#e53e3e")],X=t.bandOpacity??.5,v=d.append("g").attr("class","diagonal-bands").attr("clip-path",`url(#${A})`),C=t.xDomain||t.yDomain||[t.xMin,t.xMax,t.yMin,t.yMax].some(H=>H!==void 0)?Math.max(500,...[...M,...R].map(H=>2*Math.abs(H))):500;for(let H=0;H<x.length-1;H++){let F=x[H],z=x[H+1],W=(F+z)/2,O;if(W>0){let Q=Math.min(Math.floor(W/5),V.length-1);O=V[Q]}else{let Q=Math.min(Math.floor(Math.abs(W)/5),w.length-1);O=w[Q]}let j=[[D(C),B(C+F)],[D(-C),B(-C+F)],[D(-C),B(-C+z)],[D(C),B(C+z)]];v.append("polygon").attr("class","diagonal-band").attr("points",j.map(Q=>Q.join(",")).join(" ")).attr("fill",O).attr("fill-opacity",X)}let P=d.append("g").attr("class","diagonal-lines").attr("clip-path",`url(#${A})`);x.forEach(H=>{let F=H===0;P.append("line").attr("class",F?"center-line":"diagonal-line").attr("x1",D(C)).attr("y1",B(C+H)).attr("x2",D(-C)).attr("y2",B(-C+H)).attr("stroke",y("--color-black","#000")).attr("stroke-width",F?2:1).attr("stroke-dasharray",F?"none":"4,3").attr("stroke-opacity",F?.8:.4)});let E=y("--color-border-row","#e5e7eb");d.append("g").attr("class","grid grid-x").attr("transform",`translate(0,${u})`).call(at(o.axisBottom(D),D,6,t.xTickValues).tickSize(-u).tickFormat("")).call(H=>H.select(".domain").remove()).call(H=>H.selectAll(".tick line").attr("stroke",E).attr("stroke-opacity",.3)),d.append("g").attr("class","grid grid-y").call(at(o.axisLeft(B),B,6,t.yTickValues).tickSize(-p).tickFormat("")).call(H=>H.select(".domain").remove()).call(H=>H.selectAll(".tick line").attr("stroke",E).attr("stroke-opacity",.3));let S=y("--color-text-muted","#6b7280"),Y=y("--font-size-xs","10px");d.append("g").attr("class","axis-x").attr("transform",`translate(0,${u})`).call(at(o.axisBottom(D),D,6,t.xTickValues).tickFormat(i)).call(H=>H.select(".domain").attr("stroke",E)).call(H=>H.selectAll(".tick line").attr("stroke",E)).call(H=>H.selectAll("text").attr("fill",S).attr("font-size",Y)),d.append("g").attr("class","axis-y").call(at(o.axisLeft(B),B,6,t.yTickValues).tickFormat(c)).call(H=>H.select(".domain").remove()).call(H=>H.selectAll(".tick line").attr("stroke",E)).call(H=>H.selectAll("text").attr("fill",S).attr("font-size",Y));let $=new ct,T=t.dotRadius??(r.pointRadius||5),I=Pe(d,u,t),_=t.dotGoodColor||y("--chart-green","#22c55e"),N=t.dotBadColor||y("--chart-red","#ef4444");return d.selectAll(".scatter-dot").data(s).join("circle").attr("class","scatter-dot").attr("cx",H=>D(n(H))).attr("cy",H=>B(l(H))).attr("r",T).attr("fill",H=>{let F=l(H)-n(H);return F>0?_:F<0?N:y("--chart-primary","#3b82f6")}).attr("stroke",y("--color-bg-container","white")).attr("stroke-width",1.5).attr("opacity",.9).style("cursor","pointer").on("pointerenter",function(H,F){if(o.select(this).attr("r",T+3).attr("opacity",1),I.show(D(n(F)),B(l(F))),t.showTooltip!==!1){let z=l(F)-n(F);$.show(lt(t,F,[{title:F.name||"Point"},{value:`X: ${i(n(F))}, Y: ${c(l(F))}`},{label:"Net",value:`${z>0?"+":""}${z.toFixed(1)}`}]),H)}}).on("pointermove",H=>$.position(H)).on("pointerleave",function(){o.select(this).attr("r",T).attr("opacity",.9),I.hide(),$.hide()}),{svg:d,x:D,y:B,width:p,height:u}},createMarginal(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.xAccessor||(Y=>Y.x),l=t.yAccessor||(Y=>Y.y),i=t.histHeight||40,c={top:i+10,right:i+10,bottom:30,left:40},f=Math.max(40,(t.width||r.width)-c.left-c.right),p=(t.height||r.height)-c.top-c.bottom,u=o.select(e).append("svg").attr("width",t.width||r.width).attr("height",t.height||r.height).append("g").attr("transform",`translate(${c.left},${c.top})`),d=o.extent(s,n),h=o.extent(s,l),b=(d[1]-d[0])*.05,g=(h[1]-h[0])*.05,L=o.scaleLinear().domain(t.xDomain||[d[0]-b,d[1]+b]).range([0,f]),m=o.scaleLinear().domain(t.yDomain||[h[0]-g,h[1]+g]).range([p,0]),k=t.categoryAccessor||Tt,M=[...new Set(s.map(k))],R=t.colors||(t.color?[t.color]:Ft()),D=o.scaleOrdinal().domain(M).range(R),B=t.binWidth||12,A=Math.max(8,Math.round(f/B)),x=Math.max(8,Math.round(p/B)),V=o.bin().domain(L.domain()).thresholds(A)(s.map(n)),w=o.scaleLinear().domain([0,o.max(V,Y=>Y.length)]).range([0,i-5]);V.forEach(Y=>{let $=s.filter(T=>n(T)>=Y.x0&&n(T)<Y.x1);M.forEach(T=>{let I=$.filter(_=>k(_)===T).length;I>0&&u.append("rect").attr("class","xhist").attr("x",L(Y.x0)).attr("y",-5-w(I)).attr("width",Math.max(0,L(Y.x1)-L(Y.x0)-1)).attr("height",w(I)).attr("fill",D(T)).attr("opacity",.5)})});let X=o.bin().domain(m.domain()).thresholds(x)(s.map(l)),v=o.scaleLinear().domain([0,o.max(X,Y=>Y.length)]).range([0,i-5]);X.forEach(Y=>{let $=s.filter(T=>l(T)>=Y.x0&&l(T)<Y.x1);M.forEach(T=>{let I=$.filter(_=>k(_)===T).length;I>0&&u.append("rect").attr("class","yhist").attr("x",f+5).attr("y",m(Y.x1)).attr("width",v(I)).attr("height",Math.max(0,m(Y.x0)-m(Y.x1)-1)).attr("fill",D(T)).attr("opacity",.5)})});let G=y("--color-border-row","#e5e7eb");u.append("g").attr("class","grid grid-x").attr("transform",`translate(0,${p})`).call(at(o.axisBottom(L),L,6,t.xTickValues).tickSize(-p).tickFormat("")).call(Y=>Y.select(".domain").remove()).call(Y=>Y.selectAll(".tick line").attr("stroke",G).attr("stroke-opacity",.5)),u.append("g").attr("class","grid grid-y").call(at(o.axisLeft(m),m,6,t.yTickValues).tickSize(-f).tickFormat("")).call(Y=>Y.select(".domain").remove()).call(Y=>Y.selectAll(".tick line").attr("stroke",G).attr("stroke-opacity",.5));let C=y("--color-text-muted","#6b7280"),P=y("--font-size-xs","10px");u.append("g").attr("class","axis-x").attr("transform",`translate(0,${p})`).call(at(o.axisBottom(L),L,6,t.xTickValues).tickFormat(t.xFormat||null)).call(Y=>Y.select(".domain").attr("stroke",G)).call(Y=>Y.selectAll(".tick line").attr("stroke",G)).call(Y=>Y.selectAll("text").attr("fill",C).attr("font-size",P)),u.append("g").attr("class","axis-y").call(at(o.axisLeft(m),m,6,t.yTickValues).tickFormat(t.yFormat||null)).call(Y=>Y.select(".domain").remove()).call(Y=>Y.selectAll(".tick line").attr("stroke",G)).call(Y=>Y.selectAll("text").attr("fill",C).attr("font-size",P)),t.xLabel&&u.append("text").attr("class","axis-title-x").attr("x",f/2).attr("y",p+c.bottom-6).attr("text-anchor","middle").attr("fill",y("--color-text-muted","#6b7280")).attr("font-family",y("--font-family","system-ui, sans-serif")).attr("font-size",y("--font-size-sm","11px")).text(t.xLabel),t.yLabel&&u.append("text").attr("class","axis-title-y").attr("transform","rotate(-90)").attr("x",-p/2).attr("y",-c.left+14).attr("text-anchor","middle").attr("fill",y("--color-text-muted","#6b7280")).attr("font-family",y("--font-family","system-ui, sans-serif")).attr("font-size",y("--font-size-sm","11px")).text(t.yLabel);let E=new ct,S=t.dotRadius??(r.pointRadius||4);return u.selectAll(".scatter-dot").data(s).join("circle").attr("class","scatter-dot").attr("cx",Y=>L(n(Y))).attr("cy",Y=>m(l(Y))).attr("r",S).attr("fill",Y=>D(k(Y))).attr("opacity",.7).style("cursor","pointer").on("pointerenter",function(Y,$){o.select(this).attr("r",S+2).attr("opacity",1),t.showTooltip!==!1&&E.show(lt(t,$,[{title:k($)},...re(t,(t.xFormat||bt)(n($)),(t.yFormat||bt)(l($)))]),Y)}).on("pointermove",Y=>E.position(Y)).on("pointerleave",function(){o.select(this).attr("r",S).attr("opacity",.7),E.hide()}),{svg:u,x:L,y:m,colorScale:D,width:f,height:p}},createMarginalKDE(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.xAccessor||(F=>F.x),l=t.yAccessor||(F=>F.y),i=t.kdeHeight||t.histHeight||40,c={top:i+10,right:i+10,bottom:30,left:40},f=Math.max(40,(t.width||r.width)-c.left-c.right),p=(t.height||r.height)-c.top-c.bottom,u=o.select(e).append("svg").attr("width",t.width||r.width).attr("height",t.height||r.height).append("g").attr("transform",`translate(${c.left},${c.top})`),d=o.extent(s,n),h=o.extent(s,l),b=(d[1]-d[0])*.05,g=(h[1]-h[0])*.05,L=o.scaleLinear().domain(t.xDomain||[d[0]-b,d[1]+b]).range([0,f]),m=o.scaleLinear().domain(t.yDomain||[h[0]-g,h[1]+g]).range([p,0]),k=t.categoryAccessor||Tt,M=[...new Set(s.map(k))],R=t.colors||(t.color?[t.color]:Ft()),D=o.scaleOrdinal().domain(M).range(R),B=t.bandwidth||8;function A(F){return z=>(z=z/F,Math.abs(z)<=1?.75*(1-z*z)/F:0)}function x(F,z,W){return z.map(O=>[O,o.mean(W,j=>F(O-j))])}let V=o.range(L.domain()[0],L.domain()[1],(L.domain()[1]-L.domain()[0])/50),w=o.range(m.domain()[0],m.domain()[1],(m.domain()[1]-m.domain()[0])/50),X=A(B),v=M.map(F=>{let z=s.filter(W=>k(W)===F).map(n);return{category:F,density:x(X,V,z)}}),G=M.map(F=>{let z=s.filter(W=>k(W)===F).map(l);return{category:F,density:x(X,w,z)}}),C=o.max(v,F=>o.max(F.density,z=>z[1]))||.01,P=o.max(G,F=>o.max(F.density,z=>z[1]))||.01,E=o.scaleLinear().domain([0,C]).range([0,i-5]),S=o.scaleLinear().domain([0,P]).range([0,i-5]),Y=o.area().curve(o.curveBasis).x(F=>L(F[0])).y0(0).y1(F=>-E(F[1])),$=o.area().curve(o.curveBasis).y(F=>m(F[0])).x0(f).x1(F=>f+S(F[1]));[...v].reverse().forEach(F=>{u.append("path").datum(F.density).attr("class","kde-area").attr("d",Y).attr("fill",D(F.category)).attr("fill-opacity",.4).attr("stroke",D(F.category)).attr("stroke-width",1)}),[...G].reverse().forEach(F=>{u.append("path").datum(F.density).attr("class","kde-area").attr("d",$).attr("fill",D(F.category)).attr("fill-opacity",.4).attr("stroke",D(F.category)).attr("stroke-width",1)});let T=y("--color-border-row","#e5e7eb");u.append("g").attr("class","grid grid-x").attr("transform",`translate(0,${p})`).call(at(o.axisBottom(L),L,6,t.xTickValues).tickSize(-p).tickFormat("")).call(F=>F.select(".domain").remove()).call(F=>F.selectAll(".tick line").attr("stroke",T).attr("stroke-opacity",.5)),u.append("g").attr("class","grid grid-y").call(at(o.axisLeft(m),m,6,t.yTickValues).tickSize(-f).tickFormat("")).call(F=>F.select(".domain").remove()).call(F=>F.selectAll(".tick line").attr("stroke",T).attr("stroke-opacity",.5));let I=y("--color-text-muted","#6b7280"),_=y("--font-size-xs","10px");u.append("g").attr("class","axis-x").attr("transform",`translate(0,${p})`).call(at(o.axisBottom(L),L,6,t.xTickValues).tickFormat(t.xFormat||null)).call(F=>F.select(".domain").attr("stroke",T)).call(F=>F.selectAll(".tick line").attr("stroke",T)).call(F=>F.selectAll("text").attr("fill",I).attr("font-size",_)),u.append("g").attr("class","axis-y").call(at(o.axisLeft(m),m,6,t.yTickValues).tickFormat(t.yFormat||null)).call(F=>F.select(".domain").remove()).call(F=>F.selectAll(".tick line").attr("stroke",T)).call(F=>F.selectAll("text").attr("fill",I).attr("font-size",_)),t.xLabel&&u.append("text").attr("class","axis-title-x").attr("x",f/2).attr("y",p+c.bottom-6).attr("text-anchor","middle").attr("fill",y("--color-text-muted","#6b7280")).attr("font-family",y("--font-family","system-ui, sans-serif")).attr("font-size",y("--font-size-sm","11px")).text(t.xLabel),t.yLabel&&u.append("text").attr("class","axis-title-y").attr("transform","rotate(-90)").attr("x",-p/2).attr("y",-c.left+14).attr("text-anchor","middle").attr("fill",y("--color-text-muted","#6b7280")).attr("font-family",y("--font-family","system-ui, sans-serif")).attr("font-size",y("--font-size-sm","11px")).text(t.yLabel);let N=new ct,H=t.dotRadius??(r.pointRadius||4);return u.selectAll(".scatter-dot").data(s).join("circle").attr("class","scatter-dot").attr("cx",F=>L(n(F))).attr("cy",F=>m(l(F))).attr("r",H).attr("fill",F=>D(k(F))).attr("opacity",.7).style("cursor","pointer").on("pointerenter",function(F,z){o.select(this).attr("r",H+2).attr("opacity",1),t.showTooltip!==!1&&N.show(lt(t,z,[{title:k(z)},...re(t,(t.xFormat||bt)(n(z)),(t.yFormat||bt)(l(z)))]),F)}).on("pointermove",F=>N.position(F)).on("pointerleave",function(){o.select(this).attr("r",H).attr("opacity",.7),N.hide()}),{svg:u,x:L,y:m,colorScale:D,width:f,height:p}},createMarginalSimple(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.xAccessor||(x=>x.x),l=t.yAccessor||(x=>x.y),i=t.margin||r.margin,c=Math.max(40,(t.width||r.width)-i.left-i.right),f=(t.height||r.height)-i.top-i.bottom,p=o.select(e).append("svg").attr("width",t.width||r.width).attr("height",t.height||r.height).append("g").attr("transform",`translate(${i.left},${i.top})`),u=o.extent(s,n),d=o.extent(s,l),h=(u[1]-u[0])*.1,b=(d[1]-d[0])*.1,g=o.scaleLinear().domain(t.xDomain||[u[0]-h,u[1]+h]).range([0,c]),L=o.scaleLinear().domain(t.yDomain||[d[0]-b,d[1]+b]).range([f,0]),m=t.color||y("--chart-primary","#3b82f6"),k=t.rugLength??6;p.selectAll(".xrug").data(s).join("line").attr("class","xrug").attr("x1",x=>g(n(x))).attr("x2",x=>g(n(x))).attr("y1",f).attr("y2",f+k).attr("stroke",m).attr("stroke-width",1).attr("opacity",.4),p.selectAll(".yrug").data(s).join("line").attr("class","yrug").attr("x1",-k).attr("x2",0).attr("y1",x=>L(l(x))).attr("y2",x=>L(l(x))).attr("stroke",m).attr("stroke-width",1).attr("opacity",.4);let M=y("--color-border-row","#e5e7eb");p.append("g").attr("class","grid grid-x").attr("transform",`translate(0,${f})`).call(at(o.axisBottom(g),g,6,t.xTickValues).tickSize(-f).tickFormat("")).call(x=>x.select(".domain").remove()).call(x=>x.selectAll(".tick line").attr("stroke",M).attr("stroke-opacity",.5)),p.append("g").attr("class","grid grid-y").call(at(o.axisLeft(L),L,6,t.yTickValues).tickSize(-c).tickFormat("")).call(x=>x.select(".domain").remove()).call(x=>x.selectAll(".tick line").attr("stroke",M).attr("stroke-opacity",.5));let R=y("--color-text-muted","#6b7280"),D=y("--font-size-xs","10px");p.append("g").attr("class","axis-x").attr("transform",`translate(0,${f})`).call(at(o.axisBottom(g),g,6,t.xTickValues).tickFormat(t.xFormat||null)).call(x=>x.select(".domain").attr("stroke",M)).call(x=>x.selectAll(".tick line").attr("stroke",M)).call(x=>x.selectAll("text").attr("fill",R).attr("font-size",D)),p.append("g").attr("class","axis-y").call(at(o.axisLeft(L),L,6,t.yTickValues).tickFormat(t.yFormat||null)).call(x=>x.select(".domain").remove()).call(x=>x.selectAll(".tick line").attr("stroke",M)).call(x=>x.selectAll("text").attr("fill",R).attr("font-size",D)),t.xLabel&&p.append("text").attr("class","axis-title-x").attr("x",c/2).attr("y",f+i.bottom-6).attr("text-anchor","middle").attr("fill",y("--color-text-muted","#6b7280")).attr("font-family",y("--font-family","system-ui, sans-serif")).attr("font-size",y("--font-size-sm","11px")).text(t.xLabel),t.yLabel&&p.append("text").attr("class","axis-title-y").attr("transform","rotate(-90)").attr("x",-f/2).attr("y",-i.left+14).attr("text-anchor","middle").attr("fill",y("--color-text-muted","#6b7280")).attr("font-family",y("--font-family","system-ui, sans-serif")).attr("font-size",y("--font-size-sm","11px")).text(t.yLabel);let B=new ct,A=t.dotRadius??(r.pointRadius||4);return p.selectAll(".scatter-dot").data(s).join("circle").attr("class","scatter-dot").attr("cx",x=>g(n(x))).attr("cy",x=>L(l(x))).attr("r",A).attr("fill",m).attr("opacity",.7).style("cursor","pointer").on("pointerenter",function(x,V){o.select(this).attr("r",A+2).attr("opacity",1),t.showTooltip!==!1&&B.show(lt(t,V,[{title:(t.nameAccessor?t.nameAccessor(V):null)||"Point"},...re(t,(t.xFormat||bt)(n(V)),(t.yFormat||bt)(l(V)))]),x)}).on("pointermove",x=>B.position(x)).on("pointerleave",function(){o.select(this).attr("r",A).attr("opacity",.7),B.hide()}),{svg:p,x:g,y:L,width:c,height:f}},createKDE(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.xAccessor||(w=>w.x),l=t.yAccessor||(w=>w.y),i=t.margin||r.margin,c=Math.max(40,(t.width||r.width)-i.left-i.right),f=(t.height||r.height)-i.top-i.bottom,p=o.select(e).append("svg").attr("width",t.width||r.width).attr("height",t.height||r.height).append("g").attr("transform",`translate(${i.left},${i.top})`),u=o.extent(s,n),d=o.extent(s,l),h=(u[1]-u[0])*.1,b=(d[1]-d[0])*.1,g=o.scaleLinear().domain(t.xDomain||[u[0]-h,u[1]+h]).range([0,c]),L=o.scaleLinear().domain(t.yDomain||[d[0]-b,d[1]+b]).range([f,0]),k=o.contourDensity().x(w=>g(n(w))).y(w=>L(l(w))).size([c,f]).bandwidth(t.bandwidth||18).thresholds(t.thresholds||8)(s),M=o.max(k,w=>w.value),R=o.scaleSequential(ae(t.colorScheme,o.interpolatePurples)).domain([0,M]);p.selectAll(".kde-contour").data(k).join("path").attr("class","kde-contour").attr("d",o.geoPath()).attr("fill",w=>R(w.value)).attr("fill-opacity",.6).attr("stroke",y("--kde-contour-line-color","rgba(0,0,0,0.1)")).attr("stroke-width",.5);let D=y("--color-border-row","#e5e7eb"),B=y("--color-text-muted","#6b7280"),A=y("--font-size-xs","10px");p.append("g").attr("class","axis-x").attr("transform",`translate(0,${f})`).call(at(o.axisBottom(g),g,6,t.xTickValues).tickFormat(t.xFormat||null)).call(w=>w.select(".domain").attr("stroke",D)).call(w=>w.selectAll(".tick line").attr("stroke",D)).call(w=>w.selectAll("text").attr("fill",B).attr("font-size",A)),p.append("g").attr("class","axis-y").call(at(o.axisLeft(L),L,6,t.yTickValues).tickFormat(t.yFormat||null)).call(w=>w.select(".domain").remove()).call(w=>w.selectAll(".tick line").attr("stroke",D)).call(w=>w.selectAll("text").attr("fill",B).attr("font-size",A));let x=t.dotRadius??2,V=t.dotColor||y("--chart-purple","#a855f7");if(t.showDots!==!1){let w=new ct,X=t.nameAccessor||(C=>C.name),v=t.xFormat||bt,G=t.yFormat||bt;p.selectAll(".scatter-dot").data(s).join("circle").attr("class","scatter-dot").attr("cx",C=>g(n(C))).attr("cy",C=>L(l(C))).attr("r",x).attr("fill",V).attr("opacity",.5).style("cursor","pointer").on("pointerenter",function(C,P){if(o.select(this).attr("r",x+2).attr("opacity",1),t.showTooltip!==!1){let E=v(n(P)),S=G(l(P));w.show(lt(t,P,[{title:X(P)||"Point"},...re(t,E,S)]),C)}}).on("pointermove",C=>w.position(C)).on("pointerleave",function(){o.select(this).attr("r",x).attr("opacity",.5),w.hide()})}return{svg:p,x:g,y:L,colorScale:R,width:c,height:f}}},Wo={createBasic(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.categories||[],l=t.nameAccessor||(Y=>Y.name),i=t.valueFormat||(Y=>Y.toFixed(1)),c=t.rowLabel||"Item",f=t.valueLabel||"Value",p=y("--font-size-md","12px"),u=q("--font-weight-normal",400),d=y("--font-family","-apple-system, sans-serif"),h=Lt(),b=Y=>h(Y,u,p,d),g=0;s.forEach(Y=>{g=Math.max(g,b(l(Y)))});let m={top:40,right:40,bottom:30,left:Math.ceil(g+20)},k=q("--dot-row-height",36),M=s.length*k+m.top+m.bottom,R=t.width||r.width,D=o.select(e).append("svg").attr("width",R).attr("height",M),B=s.flatMap(Y=>n.map($=>Y[$.key])),A=t.xMin!==void 0?t.xMin:Math.floor(o.min(B)),x=t.xMax!==void 0?t.xMax:Math.ceil(o.max(B)),V=o.scaleLinear().domain([A,x]).range([m.left,R-m.right]),w=o.scaleBand().domain(s.map(l)).range([m.top,M-m.bottom]).padding(.3),X=m.top-15;D.append("text").attr("class","header-label").attr("x",0).attr("y",X).attr("fill",y("--color-text-muted","#666")).attr("font-size",y("--font-size-sm","11px")).attr("font-weight",q("--font-weight-semibold",600)).text(c),D.append("text").attr("class","header-label").attr("x",(m.left+R-m.right)/2).attr("y",X).attr("text-anchor","middle").attr("fill",y("--color-text-muted","#666")).attr("font-size",y("--font-size-sm","11px")).attr("font-weight",q("--font-weight-semibold",600)).text(f),D.append("line").attr("class","header-divider").attr("x1",0).attr("x2",R).attr("y1",m.top-5).attr("y2",m.top-5).attr("stroke",y("--color-black","#000")).attr("stroke-width",2);let v=o.axisBottom(V).tickSize(0).tickPadding(10).tickFormat(t.xFormat||null);at(v,V,t.axisTicks??5,t.xTickValues),D.append("g").attr("class","axis-x").attr("transform",`translate(0, ${M-m.bottom})`).call(v).call(Y=>Y.select(".domain").remove()).call(Y=>Y.selectAll("text").attr("fill",y("--color-text-muted","#666")).attr("font-size",y("--font-size-sm","11px")));let G=It(V,t.xTickValues)||V.ticks(t.axisTicks??5);D.append("g").attr("class","grid grid-x").selectAll("line").data(G).join("line").attr("x1",Y=>V(Y)).attr("x2",Y=>V(Y)).attr("y1",m.top).attr("y2",M-m.bottom).attr("stroke",y("--color-border-row","#f0f0f0"));let C=D.selectAll(".dot-row").data(s).join("g").attr("class","dot-row").attr("transform",Y=>`translate(0, ${w(l(Y))+w.bandwidth()/2})`);C.append("g").attr("class","axis-y").append("text").attr("class","row-name").attr("x",0).attr("y",4).attr("fill",y("--color-black","#000")).attr("font-size",p).attr("cursor","pointer").text(l),C.append("line").attr("class","axis-line").attr("x1",m.left).attr("x2",R-m.right).attr("y1",0).attr("y2",0).attr("stroke",y("--color-border-row","#f0f0f0"));let P=t.dotRadius??5;n.forEach((Y,$)=>{C.append("circle").attr("class","dot").attr("data-cat",$).attr("data-series",$).attr("cx",T=>V(T[Y.key])).attr("cy",0).attr("r",P).attr("fill",Y.color).attr("cursor","pointer")});let E=new ct,S=t.tooltipValueFormat||t.valueFormat||yt;return C.on("pointerenter",function(Y,$){C.attr("opacity",.2),o.select(this).attr("opacity",1),t.showTooltip!==!1&&E.show(lt(t,$,[{title:l($)},...n.map(T=>({label:T.label||T.key,value:S($[T.key]),color:T.color}))]),Y)}).on("pointermove",Y=>E.position(Y)).on("pointerleave",function(){C.attr("opacity",1),E.hide()}),{svg:D,xScale:V,yScale:w,width:R,height:M}},createDumbbell(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.nameAccessor||(z=>z.name),l=t.startAccessor||(z=>z.start),i=t.endAccessor||(z=>z.end),c=t.startLabel||"Start",f=t.endLabel||"End",p=t.startColor||y("--chart-primary","#3b82f6"),u=t.endColor||y("--color-text-muted","#666"),d=t.connectorColor||y("--dot-connector-color","#ccc"),h=t.valueFormat||(z=>z.toFixed(1)),b=t.rowLabel||"Item",g=t.valueLabel||"Value",L=t.showLabels!==!1,m=y("--font-size-md","12px"),k=q("--font-weight-normal",400),M=y("--font-family","-apple-system, sans-serif"),R=Lt(),D=z=>R(z,k,m,M),B=0;s.forEach(z=>{B=Math.max(B,D(n(z)))});let x={top:40,right:50,bottom:30,left:Math.ceil(B+20)},V=q("--dot-row-height",36),w=s.length*V+x.top+x.bottom,X=t.width||r.width,v=o.select(e).append("svg").attr("width",X).attr("height",w),G=s.flatMap(z=>[l(z),i(z)]),C=t.xMin!==void 0?t.xMin:Math.floor(o.min(G)/10)*10,P=t.xMax!==void 0?t.xMax:Math.ceil(o.max(G)/10)*10,E=o.scaleLinear().domain([C,P]).range([x.left,X-x.right]),S=o.scaleBand().domain(s.map(n)).range([x.top,w-x.bottom]).padding(.3),Y=x.top-15;v.append("text").attr("x",0).attr("y",Y).attr("fill",y("--color-text-muted","#666")).attr("font-size",y("--font-size-sm","11px")).attr("font-weight",q("--font-weight-semibold",600)).text(b),v.append("text").attr("x",(x.left+X-x.right)/2).attr("y",Y).attr("text-anchor","middle").attr("fill",y("--color-text-muted","#666")).attr("font-size",y("--font-size-sm","11px")).attr("font-weight",q("--font-weight-semibold",600)).text(g),v.append("line").attr("x1",0).attr("x2",X).attr("y1",x.top-5).attr("y2",x.top-5).attr("stroke",y("--color-black","#000")).attr("stroke-width",2);let $=o.axisBottom(E).tickSize(0).tickPadding(10).tickFormat(t.xFormat||null);at($,E,5,t.xTickValues),v.append("g").attr("class","axis-x").attr("transform",`translate(0, ${w-x.bottom})`).call($).call(z=>z.select(".domain").remove()).call(z=>z.selectAll("text").attr("fill",y("--color-text-muted","#666")).attr("font-size",y("--font-size-sm","11px")));let T=It(E,t.xTickValues)||E.ticks(5);v.append("g").attr("class","grid grid-x").selectAll("line").data(T).join("line").attr("x1",z=>E(z)).attr("x2",z=>E(z)).attr("y1",x.top).attr("y2",w-x.bottom).attr("stroke",y("--color-border-row","#f0f0f0")),v.append("g").selectAll("line").data(s.slice(0,-1)).join("line").attr("x1",0).attr("x2",X).attr("y1",z=>S(n(z))+S.bandwidth()+S.step()*S.paddingInner()/2).attr("y2",z=>S(n(z))+S.bandwidth()+S.step()*S.paddingInner()/2).attr("stroke",y("--color-border-row","#f0f0f0"));let I=v.selectAll(".dot-row").data(s).join("g").attr("class","dot-row").attr("transform",z=>`translate(0, ${S(n(z))+S.bandwidth()/2})`);I.append("g").attr("class","axis-y").append("text").attr("x",0).attr("y",4).attr("fill",y("--color-black","#000")).attr("font-size",m).attr("cursor","pointer").text(n);let _=q("--dot-connector-width",2.5);I.append("line").attr("class","connector-line").attr("x1",z=>E(Math.min(l(z),i(z)))).attr("x2",z=>E(Math.max(l(z),i(z)))).attr("y1",0).attr("y2",0).attr("stroke",d).attr("stroke-width",_);let N=t.dotRadius??5;if(I.append("circle").attr("cx",z=>E(l(z))).attr("cy",0).attr("r",N).attr("fill",p).attr("cursor","pointer"),I.append("circle").attr("cx",z=>E(i(z))).attr("cy",0).attr("r",N).attr("fill",u).attr("cursor","pointer"),L){let z=y("--font-size-sm","11px"),W=q("--font-weight-semibold",600);I.append("text").attr("x",O=>{let j=l(O)<=i(O);return E(l(O))+(j?-8:8)}).attr("y",4).attr("text-anchor",O=>l(O)<=i(O)?"end":"start").attr("fill",p).attr("font-size",z).attr("font-weight",W).text(O=>h(l(O))),I.append("text").attr("x",O=>{let j=i(O)<l(O);return E(i(O))+(j?-8:8)}).attr("y",4).attr("text-anchor",O=>i(O)<l(O)?"end":"start").attr("fill",u).attr("font-size",z).attr("font-weight",W).text(O=>h(i(O)))}let H=new ct,F=t.tooltipValueFormat||t.valueFormat||yt;return I.on("pointerenter",function(z,W){I.attr("opacity",.2),o.select(this).attr("opacity",1),t.showTooltip!==!1&&H.show(lt(t,W,[{title:n(W)},{label:c,value:F(l(W)),color:p},{label:f,value:F(i(W)),color:u}]),z)}).on("pointermove",z=>H.position(z)).on("pointerleave",function(){I.attr("opacity",1),H.hide()}),{svg:v,xScale:E,yScale:S,width:X,height:w,categories:[{key:"start",label:c,color:p},{key:"end",label:f,color:u}]}},createGradient(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.nameAccessor||(N=>N.name),l=t.startAccessor||(N=>N.start),i=t.endAccessor||(N=>N.end),c=t.startColor||y("--chart-primary","#3b82f6"),f=t.endColor||y("--color-text-muted","#666"),p=t.valueFormat||(N=>N.toFixed(1)),u=t.rowLabel||"Item",d=t.valueLabel||"Value",h=y("--font-size-md","12px"),b=y("--font-family","-apple-system, sans-serif"),g=Lt(),L=N=>g(N,400,h,b),m=0;s.forEach(N=>{m=Math.max(m,L(n(N)))});let M={top:40,right:50,bottom:30,left:Math.ceil(m+20)},R=q("--dot-row-height",36),D=s.length*R+M.top+M.bottom,B=t.width||r.width,A=o.select(e).append("svg").attr("width",B).attr("height",D),x=A.append("defs"),V=s.flatMap(N=>[l(N),i(N)]),w=t.xMin!==void 0?t.xMin:Math.floor(o.min(V)/10)*10,X=t.xMax!==void 0?t.xMax:Math.ceil(o.max(V)/10)*10,v=o.scaleLinear().domain([w,X]).range([M.left,B-M.right]),G=o.scaleBand().domain(s.map(n)).range([M.top,D-M.bottom]).padding(.3),C=Xt();s.forEach((N,H)=>{let F=i(N)>l(N),z=x.append("linearGradient").attr("id",`dot-gradient-${C}-${H}`).attr("x1",F?"0%":"100%").attr("x2",F?"100%":"0%").attr("y1","0%").attr("y2","0%");z.append("stop").attr("offset","0%").attr("stop-color",c),z.append("stop").attr("offset","100%").attr("stop-color",f)});let P=M.top-15;A.append("text").attr("x",0).attr("y",P).attr("fill",y("--color-text-muted","#666")).attr("font-size",y("--font-size-sm","11px")).attr("font-weight",600).text(u),A.append("text").attr("x",(M.left+B-M.right)/2).attr("y",P).attr("text-anchor","middle").attr("fill",y("--color-text-muted","#666")).attr("font-size",y("--font-size-sm","11px")).attr("font-weight",600).text(d),A.append("line").attr("x1",0).attr("x2",B).attr("y1",M.top-5).attr("y2",M.top-5).attr("stroke",y("--color-black","#000")).attr("stroke-width",2),A.append("g").attr("class","axis-x").attr("transform",`translate(0, ${D-M.bottom})`).call(at(o.axisBottom(v).tickSize(0).tickPadding(10).tickFormat(t.xFormat||null),v,5,t.xTickValues)).call(N=>N.select(".domain").remove()).call(N=>N.selectAll("text").attr("fill",y("--color-text-muted","#666")).attr("font-size",y("--font-size-sm","11px"))),A.append("g").attr("class","grid grid-x").selectAll("line").data(It(v,t.xTickValues)||v.ticks(5)).join("line").attr("x1",N=>v(N)).attr("x2",N=>v(N)).attr("y1",M.top).attr("y2",D-M.bottom).attr("stroke",y("--color-border-row","#f0f0f0")),A.append("g").selectAll("line").data(s.slice(0,-1)).join("line").attr("x1",0).attr("x2",B).attr("y1",N=>G(n(N))+G.bandwidth()+G.step()*G.paddingInner()/2).attr("y2",N=>G(n(N))+G.bandwidth()+G.step()*G.paddingInner()/2).attr("stroke",y("--color-border-row","#f0f0f0"));let E=A.selectAll(".dot-row").data(s).join("g").attr("class","dot-row").attr("transform",N=>`translate(0, ${G(n(N))+G.bandwidth()/2})`);E.append("g").attr("class","axis-y").append("text").attr("x",0).attr("y",4).attr("fill",y("--color-black","#000")).attr("font-size",h).text(n);let S=q("--dot-connector-width",2.5);E.each(function(N,H){let F=o.select(this),z=v(Math.min(l(N),i(N))),O=v(Math.max(l(N),i(N)))-z;O>0&&F.append("rect").attr("x",z).attr("y",-S/2).attr("width",O).attr("height",S).attr("fill",`url(#dot-gradient-${C}-${H})`).attr("rx",S/2)});let Y=t.dotRadius??5;E.append("circle").attr("cx",N=>v(l(N))).attr("cy",0).attr("r",Y).attr("fill",c),E.append("circle").attr("cx",N=>v(i(N))).attr("cy",0).attr("r",Y).attr("fill",f),E.append("text").attr("x",N=>{let H=l(N)<=i(N);return v(l(N))+(H?-8:8)}).attr("y",4).attr("text-anchor",N=>l(N)<=i(N)?"end":"start").attr("fill",c).attr("font-size",y("--font-size-sm","11px")).attr("font-weight",600).text(N=>p(l(N))),E.append("text").attr("x",N=>{let H=i(N)<l(N);return v(i(N))+(H?-8:8)}).attr("y",4).attr("text-anchor",N=>i(N)<l(N)?"end":"start").attr("fill",f).attr("font-size",y("--font-size-sm","11px")).attr("font-weight",600).text(N=>p(i(N)));let $=new ct,T=t.tooltipValueFormat||t.valueFormat||yt,I=t.startLabel||"Start",_=t.endLabel||"End";return E.on("pointerenter",function(N,H){E.attr("opacity",.2),o.select(this).attr("opacity",1),t.showTooltip!==!1&&$.show(lt(t,H,[{title:n(H)},{label:I,value:T(l(H)),color:c},{label:_,value:T(i(H)),color:f}]),N)}).on("pointermove",N=>$.position(N)).on("pointerleave",function(){E.attr("opacity",1),$.hide()}),{svg:A,xScale:v,yScale:G,width:B,height:D}},createComet(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.nameAccessor||(z=>z.name),l=t.beforeAccessor||(z=>z.before),i=t.afterAccessor||(z=>z.after),c=t.upColor||y("--chart-green","#22c55e"),f=t.downColor||y("--chart-red","#ef4444"),p=t.valueFormat||(z=>z.toFixed(0)),u=t.rowLabel||"Item",d=t.valueLabel||"Value",h=t.animate!==!1,b=s.map(z=>({...z,change:i(z)-l(z),isUp:i(z)>=l(z)}));t.sortBy==="change"&&b.sort((z,W)=>W.change/i(W)-z.change/i(z));let g=y("--font-size-md","12px"),L=y("--font-family","-apple-system, sans-serif"),m=Lt(),k=z=>m(z,400,g,L),M=0;b.forEach(z=>{M=Math.max(M,k(n(z)))});let D={top:40,right:60,bottom:30,left:Math.ceil(M+20)},B=q("--dot-row-height",36),A=b.length*B+D.top+D.bottom,x=t.width||r.width,V=o.select(e).append("svg").attr("width",x).attr("height",A),w=V.append("defs"),X=b.flatMap(z=>[l(z),i(z)]),v=t.xMin!==void 0?t.xMin:Math.floor(o.min(X)/50)*50,G=t.xMax!==void 0?t.xMax:Math.ceil(o.max(X)/50)*50,C=o.scaleLinear().domain([v,G]).range([D.left,x-D.right]),P=o.scaleBand().domain(b.map(n)).range([D.top,A-D.bottom]).padding(.3),E=Xt();b.forEach((z,W)=>{let O=z.isUp?c:f,j=i(z)>l(z),Q=w.append("linearGradient").attr("id",`comet-gradient-${E}-${W}`).attr("x1",j?"0%":"100%").attr("x2",j?"100%":"0%").attr("y1","0%").attr("y2","0%");Q.append("stop").attr("offset","0%").attr("stop-color",O).attr("stop-opacity",0),Q.append("stop").attr("offset","100%").attr("stop-color",O).attr("stop-opacity",.6)});let S=D.top-15;V.append("text").attr("x",0).attr("y",S).attr("fill",y("--color-text-muted","#666")).attr("font-size",y("--font-size-sm","11px")).attr("font-weight",600).text(u),V.append("text").attr("x",(D.left+x-D.right)/2).attr("y",S).attr("text-anchor","middle").attr("fill",y("--color-text-muted","#666")).attr("font-size",y("--font-size-sm","11px")).attr("font-weight",600).text(d),V.append("line").attr("x1",0).attr("x2",x).attr("y1",D.top-5).attr("y2",D.top-5).attr("stroke",y("--color-black","#000")).attr("stroke-width",2),V.append("g").attr("class","axis-x").attr("transform",`translate(0, ${A-D.bottom})`).call(at(o.axisBottom(C).tickFormat(t.xFormat||(z=>o.format(",.0f")(z))).tickSize(0).tickPadding(10),C,6,t.xTickValues)).call(z=>z.select(".domain").remove()).call(z=>z.selectAll("text").attr("fill",y("--color-text-muted","#666")).attr("font-size",y("--font-size-sm","11px"))),V.append("g").attr("class","grid grid-x").selectAll("line").data(It(C,t.xTickValues)||C.ticks(6)).join("line").attr("x1",z=>C(z)).attr("x2",z=>C(z)).attr("y1",D.top).attr("y2",A-D.bottom).attr("stroke",y("--color-border-row","#f0f0f0")),V.append("g").selectAll("line").data(b.slice(0,-1)).join("line").attr("x1",0).attr("x2",x).attr("y1",z=>P(n(z))+P.bandwidth()+P.step()*P.paddingInner()/2).attr("y2",z=>P(n(z))+P.bandwidth()+P.step()*P.paddingInner()/2).attr("stroke",y("--color-border-row","#f0f0f0"));let Y=V.selectAll(".dot-row").data(b).join("g").attr("class","dot-row").attr("transform",z=>`translate(0, ${P(n(z))+P.bandwidth()/2})`);Y.append("g").attr("class","axis-y").append("text").attr("x",0).attr("y",4).attr("fill",y("--color-black","#000")).attr("font-size",g).text(n);let $=3,T=6,I=h?800:0;Y.each(function(z,W){let O=o.select(this),j=z.isUp?c:f,Q=C(l(z)),ot=C(i(z)),dt=i(z)>l(z),et=$*.6,K=T*.8;if(O.append("circle").attr("cx",Q).attr("cy",0).attr("r",$).attr("fill",j).attr("opacity",.4),Math.abs(ot-Q)>0){let rt=`M ${Q} ${-et} L ${Q} ${-et} L ${Q} ${et} L ${Q} ${et} Z`,pt=`M ${Q} ${-et} L ${ot} ${-K} L ${ot} ${K} L ${Q} ${et} Z`,it=O.append("path").attr("d",h?rt:pt).attr("fill",`url(#comet-gradient-${E}-${W})`);h&&it.transition().duration(I).ease(o.easeCubicOut).attr("d",pt)}let tt=O.append("circle").attr("cx",h?Q:ot).attr("cy",0).attr("r",h?$:T).attr("fill",j).attr("opacity",h?0:1);h&&tt.transition().duration(I).ease(o.easeCubicOut).attr("cx",ot).attr("r",T).attr("opacity",1);let J=O.append("text").attr("x",ot+(dt?10:-10)).attr("y",4).attr("text-anchor",dt?"start":"end").attr("fill",j).attr("font-size",y("--font-size-sm","11px")).attr("font-weight",600).attr("opacity",h?0:1).text((t.valuePrefix||"")+p(i(z)));h&&J.transition().delay(I*.6).duration(I*.4).attr("opacity",1)});let _=new ct,N=t.tooltipValueFormat||t.valueFormat||yt,H=t.beforeLabel||"Before",F=t.afterLabel||"After";return Y.on("pointerenter",function(z,W){if(Y.attr("opacity",.2),o.select(this).attr("opacity",1),t.showTooltip!==!1){let O=W.isUp?c:f;_.show(lt(t,W,[{title:n(W)},{label:H,value:N(l(W))},{label:F,value:N(i(W)),color:O}]),z)}}).on("pointermove",z=>_.position(z)).on("pointerleave",function(){Y.attr("opacity",1),_.hide()}),{svg:V,xScale:C,yScale:P,width:x,height:A}},createConfidence(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.nameAccessor||(F=>F.name),l=t.valueAccessor||(F=>F.value),i=t.lowAccessor||(F=>F.ci_low),c=t.highAccessor||(F=>F.ci_high),f=t.isControlAccessor||(F=>F.isControl),p=t.controlColor||y("--color-text-muted","#666"),u=t.treatmentColor||y("--chart-primary","#3b82f6"),d=t.significantColor||y("--chart-green","#22c55e"),h=t.valueFormat||(F=>F.toFixed(1)),b=t.rowLabel||"Condition",g=t.valueLabel||"Value",L=s.find(f),m=L?i(L):null,k=L?c(L):null,M=y("--font-size-md","12px"),R=y("--font-family","-apple-system, sans-serif"),D=Lt(),B=F=>D(F,400,M,R),A=0;s.forEach(F=>{A=Math.max(A,B(n(F)))});let V={top:40,right:50,bottom:30,left:Math.ceil(A+20)},w=t.rowHeight||40,X=s.length*w+V.top+V.bottom,v=t.width||r.width,G=o.select(e).append("svg").attr("width",v).attr("height",X),C=s.flatMap(F=>[i(F),c(F)]),P=t.xMin!==void 0?t.xMin:Math.floor(o.min(C)/5)*5,E=t.xMax!==void 0?t.xMax:Math.ceil(o.max(C)/5)*5,S=o.scaleLinear().domain([P,E]).range([V.left,v-V.right]),Y=o.scaleBand().domain(s.map(n)).range([V.top,X-V.bottom]).padding(.35),$=V.top-15;G.append("text").attr("x",0).attr("y",$).attr("fill",y("--color-text-muted","#666")).attr("font-size",y("--font-size-sm","11px")).attr("font-weight",600).text(b),G.append("text").attr("x",(V.left+v-V.right)/2).attr("y",$).attr("text-anchor","middle").attr("fill",y("--color-text-muted","#666")).attr("font-size",y("--font-size-sm","11px")).attr("font-weight",600).text(g),G.append("line").attr("x1",0).attr("x2",v).attr("y1",V.top-5).attr("y2",V.top-5).attr("stroke",y("--color-black","#000")).attr("stroke-width",2),G.append("g").attr("class","axis-x").attr("transform",`translate(0, ${X-V.bottom})`).call(at(o.axisBottom(S).tickSize(0).tickPadding(10).tickFormat(t.xFormat||null),S,6,t.xTickValues)).call(F=>F.select(".domain").remove()).call(F=>F.selectAll("text").attr("fill",y("--color-text-muted","#666")).attr("font-size",y("--font-size-sm","11px"))),G.append("g").attr("class","grid grid-x").selectAll("line").data(It(S,t.xTickValues)||S.ticks(6)).join("line").attr("x1",F=>S(F)).attr("x2",F=>S(F)).attr("y1",V.top).attr("y2",X-V.bottom).attr("stroke",y("--color-border-row","#f0f0f0")),L&&G.append("line").attr("x1",S(l(L))).attr("x2",S(l(L))).attr("y1",V.top).attr("y2",X-V.bottom).attr("stroke",y("--color-text-muted","#666")).attr("stroke-width",1).attr("stroke-dasharray","2,2").attr("opacity",.5);let T=G.selectAll(".dot-row").data(s).join("g").attr("class","dot-row").attr("transform",F=>`translate(0, ${Y(n(F))+Y.bandwidth()/2})`);T.append("g").attr("class","axis-y").append("text").attr("x",0).attr("y",4).attr("fill",y("--color-black","#000")).attr("font-size",M).attr("font-weight",F=>f(F)?600:400).text(n);let I=t.bandHeight||14,_=t.dotRadius??5;T.each(function(F){let z=o.select(this),W=m!==null&&!f(F)&&(i(F)>k||c(F)<m),O=f(F)?p:W?d:u,j=S(i(F)),Q=S(c(F))-j;z.append("rect").attr("x",j).attr("y",-I/2).attr("width",Q).attr("height",I).attr("fill",O).attr("opacity",.25).attr("rx",3),z.append("line").attr("x1",S(i(F))).attr("x2",S(i(F))).attr("y1",-I/2).attr("y2",I/2).attr("stroke",O).attr("stroke-width",1.5),z.append("line").attr("x1",S(c(F))).attr("x2",S(c(F))).attr("y1",-I/2).attr("y2",I/2).attr("stroke",O).attr("stroke-width",1.5),z.append("circle").attr("cx",S(l(F))).attr("cy",0).attr("r",_).attr("fill",O),z.append("text").attr("x",S(c(F))+8).attr("y",4).attr("fill",O).attr("font-size",y("--font-size-sm","11px")).attr("font-weight",600).text(h(l(F)))});let N=new ct,H=t.tooltipValueFormat||t.valueFormat||yt;return T.on("pointerenter",function(F,z){if(T.attr("opacity",.2),o.select(this).attr("opacity",1),t.showTooltip!==!1){let W=m!==null&&!f(z)&&(i(z)>k||c(z)<m),O=f(z)?p:W?d:u;N.show(lt(t,z,[{title:n(z)},{label:g,value:H(l(z)),color:O},{label:"CI",value:`${H(i(z))} \u2013 ${H(c(z))}`}]),F)}}).on("pointermove",F=>N.position(F)).on("pointerleave",function(){T.attr("opacity",1),N.hide()}),{svg:G,xScale:S,yScale:Y,width:v,height:X}},createPercentile(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.nameAccessor||($=>$.name||$.season),l=t.valueAccessor||($=>$.value),i=t.percentileKeys||["p0","p10","p20","p30","p40","p50","p60","p70","p80","p90","p100"],c=t.valueFormat||($=>$.toFixed(3)),f=t.rowLabel||"Period",p=t.valueLabel||"Value",u=t.dotColor||y("--color-black","#000"),d=t.bandColors||[y("--temp-cold-10","#7AB8FF"),y("--temp-cold-9","#9CCAFF"),y("--temp-cold-8","#B8D9FF"),y("--temp-cold-7","#D6E8FF"),y("--temp-neutral","#F2F7FF"),y("--temp-warm-5","#FFF1C1"),y("--temp-warm-4","#FFD27F"),y("--temp-warm-3","#FFB347"),y("--temp-warm-2","#FF8C1A"),y("--temp-warm-1","#FF6A00")],h=y("--font-size-md","12px"),b=y("--font-family","-apple-system, sans-serif"),g=Lt(),L=$=>g($,400,h,b),m=0;s.forEach($=>{m=Math.max(m,L(String(n($))))});let M={top:40,right:50,bottom:30,left:Math.ceil(m+20)},R=t.rowHeight||40,D=s.length*R+M.top+M.bottom,B=t.width||r.width,A=o.select(e).append("svg").attr("width",B).attr("height",D),x=s.flatMap($=>[$[i[0]],$[i[i.length-1]],l($)]),V=t.xMin!==void 0?t.xMin:Math.floor(o.min(x)*100)/100-.01,w=t.xMax!==void 0?t.xMax:Math.ceil(o.max(x)*100)/100+.01,X=o.scaleLinear().domain([V,w]).range([M.left,B-M.right]),v=o.scaleBand().domain(s.map(n)).range([M.top,D-M.bottom]).padding(.25),G=M.top-15;A.append("text").attr("x",0).attr("y",G).attr("fill",y("--color-text-muted","#666")).attr("font-size",y("--font-size-sm","11px")).attr("font-weight",600).text(f),A.append("text").attr("x",(M.left+B-M.right)/2).attr("y",G).attr("text-anchor","middle").attr("fill",y("--color-text-muted","#666")).attr("font-size",y("--font-size-sm","11px")).attr("font-weight",600).text(p),A.append("line").attr("x1",0).attr("x2",B).attr("y1",M.top-5).attr("y2",M.top-5).attr("stroke",y("--color-black","#000")).attr("stroke-width",2),A.append("g").attr("class","axis-x").attr("transform",`translate(0, ${D-M.bottom})`).call(at(o.axisBottom(X).tickFormat(t.xFormat||c).tickSize(0).tickPadding(10),X,6,t.xTickValues)).call($=>$.select(".domain").remove()).call($=>$.selectAll("text").attr("fill",y("--color-text-muted","#666")).attr("font-size",y("--font-size-sm","11px"))),A.append("g").attr("class","grid grid-x").selectAll("line").data(It(X,t.xTickValues)||X.ticks(6)).join("line").attr("x1",$=>X($)).attr("x2",$=>X($)).attr("y1",M.top).attr("y2",D-M.bottom).attr("stroke",y("--color-border-row","#f0f0f0")),A.append("g").selectAll("line").data(s.slice(0,-1)).join("line").attr("x1",0).attr("x2",B).attr("y1",$=>v(n($))+v.bandwidth()+v.step()*v.paddingInner()/2).attr("y2",$=>v(n($))+v.bandwidth()+v.step()*v.paddingInner()/2).attr("stroke",y("--color-border-row","#f0f0f0"));let C=A.selectAll(".dot-row").data(s).join("g").attr("class","dot-row").attr("transform",$=>`translate(0, ${v(n($))+v.bandwidth()/2})`);C.append("g").attr("class","axis-y").append("text").attr("x",0).attr("y",4).attr("fill",y("--color-black","#000")).attr("font-size",h).text(n);let P=t.bandHeight||18,E=t.dotRadius??6;C.each(function($){let T=o.select(this);for(let I=0;I<i.length-1;I++){let _=i[I],N=i[I+1];T.append("rect").attr("x",X($[_])).attr("y",-P/2).attr("width",X($[N])-X($[_])).attr("height",P).attr("fill",d[I]).attr("opacity",.7)}T.append("circle").attr("cx",X(l($))).attr("cy",0).attr("r",E).attr("fill",u),T.append("text").attr("x",X(l($))+E+4).attr("y",4).attr("fill",u).attr("font-size",y("--font-size-sm","11px")).attr("font-weight",600).text(c(l($)))});let S=new ct,Y=t.tooltipValueFormat||c;return C.on("pointerenter",function($,T){if(C.attr("opacity",.2),o.select(this).attr("opacity",1),t.showTooltip!==!1){let I=l(T),_=[{title:String(n(T))},{label:p,value:Y(I),color:u}];for(let N=0;N<i.length-1;N++){let H=/^p(\d+)$/.exec(i[N]),F=/^p(\d+)$/.exec(i[N+1]);if(H&&F&&I>=T[i[N]]&&I<=T[i[N+1]]){_.push({label:"Percentile",value:`${H[1]}\u2013${F[1]}`});break}}S.show(lt(t,T,_),$)}}).on("pointermove",$=>S.position($)).on("pointerleave",function(){C.attr("opacity",1),S.hide()}),{svg:A,xScale:X,yScale:v,width:B,height:D,bandColors:d}},createUnitHistogram(e,a={}){let t={...nt[a.size||"full"],...a},s=t.data||[],n=t.categoryAccessor||Tt,l=t.countAccessor||(v=>v.count),i=t.dotSize||10,c=t.dotGap??3,f=t.binWidth||32,p=t.unitLabel||"1 unit",u=t.animated!==!1,d=t.animationDuration??300,h=t.staggerDelay??40,b=t.binDelay??80,g=t.categoryFormat||(v=>v),L=t.margin||{top:30,right:30,bottom:50,left:30},m=o.max(s,l),k=s.length*f+L.left+L.right,M=m*(i+c)+L.top+L.bottom+20,R;if(typeof t.color=="function")R=t.color;else if(t.color)R=()=>t.color;else{let v=o.scaleSequential().domain([0,s.length-1]).interpolator(o.interpolateBlues);R=(G,C)=>v(C)}let D=o.select(e).append("svg").attr("width",k).attr("height",M),B=o.scaleBand().domain(s.map(n)).range([L.left,k-L.right]).padding(.1),A=M-L.bottom,x=D.append("g").attr("class","axis-x");x.append("line").attr("class","axis-line").attr("x1",L.left).attr("x2",k-L.right).attr("y1",A).attr("y2",A).attr("stroke",y("--color-border-row","#f0f0f0"));let V=D.selectAll(".bin").data(s).join("g").attr("class","bin").attr("transform",v=>`translate(${B(n(v))+B.bandwidth()/2}, 0)`);x.selectAll(".bin-label").data(s).join("text").attr("class","bin-label").attr("x",v=>B(n(v))+B.bandwidth()/2).attr("y",A+20).attr("text-anchor","middle").style("font-family","var(--font-family)").style("font-size","var(--font-size-sm)").style("fill","var(--color-text-muted)").text(v=>g(n(v)));let w=new ct;s.forEach((v,G)=>{let C=B(n(v))+B.bandwidth()/2,P=l(v),E=o.range(P).map(Y=>({category:n(v),index:Y,binIndex:G,y:A-(Y+1)*(i+c),count:P})),S=D.selectAll(`.dot-bin-${G}`).data(E).join("circle").attr("class","unit-dot").attr("cx",C).attr("cy",Y=>Y.y+i/2).attr("r",i/2).attr("fill",R(n(v),G)).style("cursor","pointer").on("pointerenter",function(Y,$){t.showTooltip!==!1&&w.show(lt(t,$,[{title:g($.category)},{value:`${t.tooltipValueFormat?t.tooltipValueFormat($.count):$.count} ${p}`}]),Y)}).on("pointermove",function(Y){w.position(Y)}).on("pointerleave",function(){w.hide()});u&&S.style("opacity",0).transition().duration(d).delay(Y=>Y.binIndex*b+Y.index*h).style("opacity",1)});let X=V.append("text").attr("class","bin-count").attr("x",0).attr("y",v=>A-l(v)*(i+c)-8).attr("text-anchor","middle").style("font-family","var(--font-family)").style("font-size","var(--font-size-xs)").style("fill","var(--color-text-subtle)").style("font-weight","600").text(v=>l(v));return u&&X.style("opacity",0).transition().duration(200).delay((v,G)=>G*b+l(v)*h+100).style("opacity",1),{svg:D,xScale:B,width:k,height:M,baselineY:A,dotSize:i,dotGap:c}}},qo={count:"Count",percent:"Share",density:"Density",cumulative:"Cumulative"};function Oe(e,{bins:a,binWidth:r,mode:t="count",domain:s}={}){let n=e.filter(d=>d!=null&&!Number.isNaN(d)),[l,i]=s||o.extent(n),c=o.bin().domain([l,i]);if(r){let d=Math.floor(l/r)*r;c.thresholds(o.range(d,i+r,r))}else a&&c.thresholds(a);let f=c(n),p=n.length||1,u=0;return f.map(d=>{let h=d.length;u+=h;let b=d.x1-d.x0||1,g=t==="percent"?h/p:t==="density"?h/p/b:t==="cumulative"?u/p:h;return{x0:d.x0,x1:d.x1,count:h,value:g}})}function jo(e,a="tukey"){let r=e.filter(p=>p!=null&&!Number.isNaN(p)).sort(o.ascending);if(!r.length)return null;let t=o.quantileSorted(r,.25),s=o.quantileSorted(r,.5),n=o.quantileSorted(r,.75),l=n-t,i,c;if(a==="minmax")i=r[0],c=r[r.length-1];else{let p=typeof a=="number"?a:1.5;i=o.min(r.filter(u=>u>=t-p*l)),c=o.max(r.filter(u=>u<=n+p*l))}let f=a==="minmax"?[]:r.filter(p=>p<i||p>c);return{min:r[0],lo:i,q1:t,median:s,q3:n,hi:c,max:r[r.length-1],outliers:f,n:r.length,values:r}}function Uo(e,a,r,{minSlice:t=0,otherLabel:s="Other",sort:n=!0}={}){let l=e.map(u=>({label:a(u),value:Math.max(0,+r(u)||0),datum:u})).filter(u=>u.value>0);n&&l.sort((u,d)=>d.value-u.value);let i=o.sum(l,u=>u.value)||1,c=[],f=[];for(let u of l)(u.value/i<t?f:c).push(u);f.length===1&&c.push(f.pop());let p=c.map(u=>({...u,share:u.value/i,isOther:!1}));if(f.length){let u=o.sum(f,d=>d.value);p.push({label:s,value:u,share:u/i,isOther:!0,members:f})}return p}function Ko(e,a,r,{layout:t="weekly",weekStart:s=0,aggregate:n}={}){let l=n||o.sum,i=new Map;for(let m of e){let k=String(a(m)).slice(0,10);i.has(k)||i.set(k,[]),i.get(k).push(+r(m))}let c=[...i.keys()].sort();if(!c.length)return{cells:[],weeks:0,months:[]};let f=m=>new Date(m+"T00:00:00Z"),p=f(c[0]),u=f(c[c.length-1]),d=m=>(m.getUTCDay()-s+7)%7;if(t==="vertical"){let m=new Date(p);m.setUTCDate(m.getUTCDate()-d(p));let k=[],M=[],R=null;for(let D=new Date(m);D<=u;D.setUTCDate(D.getUTCDate()+1)){let B=D.toISOString().slice(0,10),A=Math.floor((D-m)/6048e5),x=i.get(B),V=D>=p;k.push({date:B,col:d(D),row:A,value:x?l(x):null,missing:V&&!x,pad:!V});let w=B.slice(0,7);V&&w!==R&&(M.push({key:w,row:A}),R=w)}return{cells:k,weeks:7,rows:k[k.length-1].row+1,months:M}}if(t==="monthRows"){let m=[],k=[],M=-1,R=null;for(let D=new Date(p);D<=u;D.setUTCDate(D.getUTCDate()+1)){let B=D.toISOString().slice(0,10),A=B.slice(0,7);A!==R&&(k.push({key:A,row:++M}),R=A);let x=i.get(B);m.push({date:B,col:D.getUTCDate()-1,row:M,value:x?l(x):null,missing:!x,pad:!1})}return{cells:m,weeks:31,rows:M+1,months:k}}let h=new Date(p);h.setUTCDate(h.getUTCDate()-d(p));let b=[],g=[],L=null;for(let m=new Date(h);m<=u;m.setUTCDate(m.getUTCDate()+1)){let k=m.toISOString().slice(0,10),M=Math.floor((m-h)/6048e5),R=i.get(k),D=m>=p;b.push({date:k,col:M,row:d(m),value:R?l(R):null,missing:D&&!R,pad:!D});let B=k.slice(0,7);D&&B!==L&&(g.push({key:B,col:M}),L=B)}return{cells:b,weeks:b[b.length-1].col+1,rows:7,months:g}}var Zo={createBasic(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.valueAccessor||(E=>E.value),l=t.mode||"count",i=s.map(n),c=Oe(i,{bins:t.bins,binWidth:t.binWidth,mode:l,domain:t.xDomain}),f={top:20,right:20,bottom:40,left:55},p=t.width||r.width,u=t.height||r.height,d=Math.max(40,p-f.left-f.right),h=u-f.top-f.bottom,b=o.select(e).append("svg").attr("width",p).attr("height",u).append("g").attr("transform",`translate(${f.left},${f.top})`),g=o.scaleLinear().domain(t.xDomain||[c[0]?.x0??0,c[c.length-1]?.x1??1]).range([0,d]),L=o.max(c,E=>E.value)||1,m=o.scaleLinear().domain(t.yDomain||wt([0,L*1.05],t.yMin,t.yMax)).range([h,0]),k=t.color||y("--chart-primary","#3b82f6"),M=y("--color-border-row","#e5e7eb"),R=t.animate!==!1&&t.animated!==!1,D=q("--bar-animation-duration",800),B=t.barGap??q("--histogram-bar-gap",1),A=new ct,x=E=>(E*100).toFixed(l==="density"?2:1)+"%",V=t.yFormat||(l==="count"?o.format(","):x),w=t.xFormat||(E=>o.format(",")(E)),X=E=>`${w(E.x0)}\u2013${w(E.x1)}`;b.append("g").attr("class","grid grid-y").selectAll("line").data(It(m,t.yTickValues)||m.ticks(t.axisTicks??5)).enter().append("line").attr("x1",0).attr("x2",d).attr("y1",E=>m(E)).attr("y2",E=>m(E)).attr("stroke",M).attr("stroke-dasharray","2,2");let v=E=>Math.min(h,m(E.value)),G=b.selectAll(".histogram-bar").data(c).enter().append("rect").attr("class","histogram-bar bar").attr("x",E=>g(E.x0)+B/2).attr("width",E=>Math.max(0,g(E.x1)-g(E.x0)-B)).attr("y",E=>R?h:v(E)).attr("height",E=>R?0:h-v(E)).attr("fill",k).style("cursor","pointer").on("pointerenter",function(E,S){o.select(this).attr("fill-opacity",.8),t.showTooltip!==!1&&A.show(lt(t,S,[{title:X(S)},{label:qo[l]||"Count",value:(t.tooltipValueFormat||t.valueFormat||V)(S.value)},...l!=="count"?[{note:`${S.count.toLocaleString()} of ${i.length.toLocaleString()}`}]:[]]),E)}).on("pointermove",E=>A.position(E)).on("pointerleave",function(){o.select(this).attr("fill-opacity",1),A.hide()});R&&G.transition().duration(D).ease(o.easeCubicOut).attr("y",v).attr("height",E=>h-v(E));let C=b.append("g").attr("class","axis-x").attr("transform",`translate(0,${h})`).call(o.axisBottom(g).tickValues(Dt(g,t.axisTicks,t.xTickValues)).tickFormat(w)),P=b.append("g").attr("class","axis-y").call(at(o.axisLeft(m),m,t.axisTicks,t.yTickValues).tickFormat(V));return[C,P].forEach(E=>E.selectAll("text").attr("fill",y("--color-text-muted","#6b7280")).attr("font-size",y("--font-size-xs","10px"))),{svg:b,x:g,y:m,width:d,height:h,bins:c}},createOverlay(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.series||[],n=t.valueAccessor||($=>$.value),l=t.mode||"count",i=t.style==="grouped",c=s.flatMap($=>($.data||[]).map($.valueAccessor||n)),f=t.xDomain||o.extent(c),p=Oe(c,{bins:t.bins,binWidth:t.binWidth,mode:"count",domain:f}),u=p.map($=>$.x0).concat(p.length?[p[p.length-1].x1]:[]),d=s.map($=>Oe(($.data||[]).map($.valueAccessor||n),{bins:u.slice(1,-1),mode:l,domain:f})),h={top:20,right:20,bottom:40,left:55},b=t.width||r.width,g=t.height||r.height,L=Math.max(40,b-h.left-h.right),m=g-h.top-h.bottom,k=o.select(e).append("svg").attr("width",b).attr("height",g).append("g").attr("transform",`translate(${h.left},${h.top})`),M=o.scaleLinear().domain(f).range([0,L]),R=o.max(d,$=>o.max($,T=>T.value))||1,D=o.scaleLinear().domain(t.yDomain||wt([0,R*1.05],t.yMin,t.yMax)).range([m,0]),B=t.colors||Kt(s.map($=>$.name),Fe()),A=y("--color-border-row","#e5e7eb"),x=q("--histogram-overlay-opacity",.55),V=t.animate!==!1&&t.animated!==!1,w=q("--bar-animation-duration",800),X=t.barGap??q("--histogram-bar-gap",1),v=new ct,G=$=>($*100).toFixed(l==="density"?2:1)+"%",C=t.yFormat||(l==="count"?o.format(","):G),P=t.xFormat||($=>o.format(",")($));k.append("g").attr("class","grid grid-y").selectAll("line").data(It(D,t.yTickValues)||D.ticks(t.axisTicks??5)).enter().append("line").attr("x1",0).attr("x2",L).attr("y1",$=>D($)).attr("y2",$=>D($)).attr("stroke",A).attr("stroke-dasharray","2,2");let E=$=>Math.min(m,D($.value));d.forEach(($,T)=>{let I=s[T].color||B[T%B.length],_=s[T].name||`Series ${T+1}`,N=F=>{let z=Math.max(0,M(F.x1)-M(F.x0)-X);if(!i)return{x:M(F.x0)+X/2,w:z};let W=z/s.length;return{x:M(F.x0)+X/2+T*W,w:Math.max(0,W-.5)}},H=k.selectAll(`.histogram-bar-${T}`).data($).enter().append("rect").attr("class",`histogram-bar bar histogram-bar-${T}`).attr("data-series",T).attr("x",F=>N(F).x).attr("width",F=>N(F).w).attr("y",F=>V?m:E(F)).attr("height",F=>V?0:m-E(F)).attr("fill",I).attr("fill-opacity",i?1:x).style("cursor","pointer").on("pointerenter",function(F,z){t.showTooltip!==!1&&v.show(lt(t,z,[{title:`${P(z.x0)}\u2013${P(z.x1)}`},{label:_,value:(t.tooltipValueFormat||t.valueFormat||C)(z.value),color:I}]),F)}).on("pointermove",F=>v.position(F)).on("pointerleave",()=>v.hide());V&&H.transition().duration(w).ease(o.easeCubicOut).attr("y",E).attr("height",F=>m-E(F))});let S=k.append("g").attr("class","axis-x").attr("transform",`translate(0,${m})`).call(o.axisBottom(M).tickValues(Dt(M,t.axisTicks,t.xTickValues)).tickFormat(P)),Y=k.append("g").attr("class","axis-y").call(at(o.axisLeft(D),D,t.axisTicks,t.yTickValues).tickFormat(C));return[S,Y].forEach($=>$.selectAll("text").attr("fill",y("--color-text-muted","#6b7280")).attr("font-size",y("--font-size-xs","10px"))),{svg:k,x:M,y:D,width:L,height:m,series:d}}},Qo={createBasic(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.labelAccessor||Yo,l=t.valueAccessor||(T=>T.value),i=Uo(s,n,l,{minSlice:t.minSlice??0,otherLabel:t.otherLabel||"Other",sort:t.sort!==!1}),c=t.width||r.width,f=t.height||r.height,p=t.labels||"callout",u=p==="none"?{top:16,right:16,bottom:16,left:16}:{top:16,right:110,bottom:16,left:110},d=Math.max(40,c-u.left-u.right),h=f-u.top-u.bottom,b=Math.max(20,Math.min(d,h)/2),g=t.innerRatio??q("--donut-inner-ratio",.62),L=o.select(e).append("svg").attr("width",c).attr("height",f),m=L.append("g").attr("transform",`translate(${u.left+d/2},${u.top+h/2})`),k=t.colors||Ft(),M=y("--chart-neutral","#6b7280"),R=0,D=i.map(T=>t.colorMap&&t.colorMap[T.label]?(R++,t.colorMap[T.label]):T.isOther||!t.colors&&Qe(T.label)?M:k[R++%k.length]),B=(T,I)=>D[I],x=o.pie().value(T=>T.value).sort(null)(i),V=o.arc().innerRadius(b*g).outerRadius(b).padAngle(q("--donut-pad-angle",.008)).cornerRadius(q("--donut-corner-radius",2)),w=t.animate!==!1&&t.animated!==!1,X=q("--bar-animation-duration",800),v=new ct,G=t.valueFormat||(T=>T.toLocaleString()),C=t.shareFormat||(T=>(T*100).toFixed(1)+"%"),P=m.selectAll(".donut-slice").data(x).enter().append("path").attr("class","donut-slice").attr("data-series",(T,I)=>I).attr("fill",(T,I)=>B(T.data,I)).attr("stroke",y("--color-bg-container","white")).attr("stroke-width",1.5).style("cursor","pointer").on("pointerenter",function(T,I){if(o.select(this).attr("fill-opacity",.85),t.showTooltip!==!1){let _=I.data;v.show(lt(t,_,[{title:_.label},{value:(t.tooltipValueFormat||G)(_.value)},{note:C(_.share)+(_.isOther?` \xB7 ${_.members.length} items`:"")}]),T)}}).on("pointermove",T=>v.position(T)).on("pointerleave",function(){o.select(this).attr("fill-opacity",1),v.hide()});if(w?P.transition().duration(X).ease(o.easeCubicOut).attrTween("d",function(T){let I=o.interpolate({startAngle:T.startAngle,endAngle:T.startAngle},T);return _=>V(I(_))}):P.attr("d",V),g>0&&t.showTotal!==!1){let T=o.sum(i,I=>I.value);m.append("text").attr("class","donut-total").attr("text-anchor","middle").attr("dy",t.centerLabel?"-0.15em":"0.34em").attr("fill",y("--color-text-primary","#111")).attr("font-size",y("--font-size-xxl","22px")).attr("font-weight",q("--font-weight-bold",700)).text((t.totalFormat||G)(T)),t.centerLabel&&m.append("text").attr("class","donut-total-label").attr("text-anchor","middle").attr("dy","1.35em").attr("fill",y("--color-text-muted","#6b7280")).attr("font-size",y("--font-size-sm","11px")).text(t.centerLabel)}let E=y("--font-size-sm","11px"),S=y("--font-family","system-ui, sans-serif"),Y=Lt(),$=T=>{let I=o.arc().innerRadius(b+6).outerRadius(b+6),_=14,N=T.map(F=>{let[z,W]=I.centroid(F),O=(F.startAngle+F.endAngle)/2<Math.PI;return{a:F,cy:W,right:O,tx:O?b+16:-(b+16)}});for(let F of[!0,!1]){let z=N.filter(W=>W.right===F).sort((W,O)=>W.cy-O.cy);for(let W=1;W<z.length;W++)z[W].cy-z[W-1].cy<_&&(z[W].cy=z[W-1].cy+_)}let H=m.selectAll(".donut-callout").data(N).enter().append("g").attr("class","donut-callout").attr("data-series",F=>x.indexOf(F.a));H.append("polyline").attr("points",F=>{let[z,W]=o.arc().innerRadius(b).outerRadius(b).centroid(F.a);return`${z},${W} ${F.tx-(F.right?6:-6)},${F.cy}`}).attr("fill","none").attr("stroke",y("--color-border-light","#d1d5db")).attr("stroke-width",1),H.append("text").attr("x",F=>F.tx).attr("y",F=>F.cy).attr("dy","0.34em").attr("text-anchor",F=>F.right?"start":"end").attr("fill",y("--color-text-primary","#111")).attr("font-size",E).text(F=>`${F.a.data.label} ${C(F.a.data.share)}`)};if(p==="inside"){let T=b*Math.max(.66,(g+1)/2),I=o.arc().innerRadius(T).outerRadius(T),_=H=>{let F=H.endAngle-H.startAngle,z=2*T*Math.sin(Math.min(F,Math.PI)/2);return Y(String(H.data.label),600,E,S)<=z*.9},N=x.filter(H=>H.data.share>=(t.minLabelShare??.02));m.selectAll(".donut-label").data(N.filter(_)).enter().append("text").attr("class","donut-label").attr("transform",H=>`translate(${I.centroid(H)})`).attr("text-anchor","middle").attr("dy","0.34em").attr("fill",y("--color-bg-container","white")).attr("font-size",E).attr("font-weight",q("--font-weight-semibold",600)).text(H=>H.data.label),$(N.filter(H=>!_(H)))}else p==="callout"&&$(x.filter(T=>T.data.share>=(t.minLabelShare??.02)));return{svg:L,width:c,height:f,slices:i}}},Jo={createBasic(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.orientation==="horizontal",l;if(s.length&&s[0].q1!==void 0&&s[0].median!==void 0)l=s.map(F=>({name:F.name??F.category,stats:{lo:F.lo??F.min,q1:F.q1,median:F.median,q3:F.q3,hi:F.hi??F.max,outliers:F.outliers||[],values:[]}}));else{let F=t.categoryAccessor||Tt,z=t.valueAccessor||(O=>O.value);l=[...o.group(s,F)].map(([O,j])=>({name:O,stats:jo(j.map(z),t.whiskers||"tukey")})).filter(O=>O.stats)}let i=n?{top:20,right:30,bottom:40,left:110}:{top:20,right:20,bottom:40,left:55},c=t.width||r.width,f=t.height||r.height,p=Math.max(40,c-i.left-i.right),u=f-i.top-i.bottom,d=o.select(e).append("svg").attr("width",c).attr("height",f).append("g").attr("transform",`translate(${i.left},${i.top})`),h=l.flatMap(F=>[F.stats.lo,F.stats.hi,...F.stats.outliers]),[b,g]=o.extent(h),L=(g-b||1)*.06,m=t.yDomain||wt([b-L,g+L],t.yMin,t.yMax),k=o.scaleBand().domain(l.map(F=>F.name)).range(n?[0,u]:[0,p]).padding(.35),M=o.scaleLinear().domain(m).range(n?[0,p]:[u,0]),R=n?M:k,D=n?k:M,B=y("--color-border-row","#e5e7eb"),A=t.color||y("--chart-primary","#3b82f6"),x=F=>t.colorMap&&t.colorMap[F.name]||A,V=y("--color-text-primary","#374151"),w=new ct,X=t.valueFormat||(F=>typeof F=="number"?+F.toFixed(2):F),v=t.tooltipValueFormat||X,G=It(M,t.yTickValues)||M.ticks(t.axisTicks??5);d.append("g").attr("class",n?"grid grid-x":"grid grid-y").selectAll("line").data(G).enter().append("line").attr("x1",F=>n?M(F):0).attr("x2",F=>n?M(F):p).attr("y1",F=>n?0:M(F)).attr("y2",F=>n?u:M(F)).attr("stroke",B).attr("stroke-dasharray","2,2");let C=k.bandwidth(),P=d.selectAll(".box-group").data(l).enter().append("g").attr("class","box-group").attr("transform",F=>n?`translate(0,${k(F.name)})`:`translate(${k(F.name)},0)`).on("pointerenter",function(F,z){if(t.showTooltip!==!1){let W=z.stats;w.show(lt(t,z,[{title:String(z.name)},{label:"Max whisker",value:v(W.hi)},{label:"Q3",value:v(W.q3)},{label:"Median",value:v(W.median)},{label:"Q1",value:v(W.q1)},{label:"Min whisker",value:v(W.lo)},...W.outliers.length?[{note:`${W.outliers.length} outlier${W.outliers.length>1?"s":""}`}]:[]]),F)}}).on("pointermove",F=>w.position(F)).on("pointerleave",()=>w.hide()),E=C/2,S=C*.5,Y=(F,z,W,O,j,Q)=>F.append("line").attr("class",Q).attr(n?"y1":"x1",z).attr(n?"x1":"y1",W).attr(n?"y2":"x2",O).attr(n?"x2":"y2",j).attr("stroke",V).attr("stroke-width",1);if(P.each(function(F){let z=o.select(this),W=F.stats;Y(z,E,M(W.lo),E,M(W.q1),"box-whisker"),Y(z,E,M(W.q3),E,M(W.hi),"box-whisker"),Y(z,E-S/2,M(W.lo),E+S/2,M(W.lo),"box-cap"),Y(z,E-S/2,M(W.hi),E+S/2,M(W.hi),"box-cap")}),P.append("rect").attr("class","box-rect").attr(n?"y":"x",0).attr(n?"x":"y",F=>M(n?F.stats.q1:F.stats.q3)).attr(n?"height":"width",C).attr(n?"width":"height",F=>Math.max(1,Math.abs(M(F.stats.q3)-M(F.stats.q1)))).attr("rx",q("--bar-border-radius",3)*.7).attr("fill",x).attr("fill-opacity",q("--box-fill-opacity",.35)).attr("stroke",x).attr("stroke-width",1.2),P.each(function(F){o.select(this).append("line").attr("class","box-median").attr(n?"y1":"x1",0).attr(n?"y2":"x2",C).attr(n?"x1":"y1",M(F.stats.median)).attr(n?"x2":"y2",M(F.stats.median)).attr("stroke",x(F)).attr("stroke-width",q("--box-median-width",2.5))}),P.each(function(F,z){o.select(this).selectAll(".box-outlier").data(F.stats.outliers).enter().append("circle").attr("class","box-outlier").attr(n?"cy":"cx",E).attr(n?"cx":"cy",W=>M(W)).attr("r",q("--box-outlier-radius",3)).attr("fill","none").attr("stroke",x(F)).attr("stroke-width",1.2)}),t.jitter){let F=z=>{let W=z|0;return W=Math.imul(W^W>>>16,2246822507),W=Math.imul(W^W>>>13,3266489909),((W^=W>>>16)>>>0)/4294967296};P.each(function(z,W){let O=new Set(z.stats.outliers),j=(z.stats.values||[]).filter(Q=>!O.has(Q));o.select(this).selectAll(".box-jitter").data(j).enter().append("circle").attr("class","box-jitter").attr(n?"cy":"cx",(Q,ot)=>E+(F(ot*7349+W*131071+17)-.5)*C*.8).attr(n?"cx":"cy",Q=>M(Q)).attr("r",2).attr("fill",x(z)).attr("fill-opacity",.35).style("pointer-events","none")})}let $=n?o.axisLeft(k):o.axisBottom(k),T=n?o.axisBottom(M):o.axisLeft(M),I=t.xFormat||(F=>F),_=t.yFormat||(F=>o.format(",")(F)),N=d.append("g").attr("class",n?"axis-y":"axis-x").attr("transform",n?null:`translate(0,${u})`).call($.tickFormat(I)),H=d.append("g").attr("class",n?"axis-x":"axis-y").attr("transform",n?`translate(0,${u})`:null).call(at(T,M,t.axisTicks,t.yTickValues).tickFormat(_));return[N,H].forEach(F=>F.selectAll("text").attr("fill",y("--color-text-muted","#6b7280")).attr("font-size",y("--font-size-xs","10px"))),{svg:d,x:R,y:D,width:p,height:u,groups:l}}},tr={createHeatmap(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.dateAccessor||(z=>z.date),l=t.valueAccessor||(z=>z.value),i=["monthRows","vertical"].includes(t.layout)?t.layout:"weekly",c=t.weekStart??0,{cells:f,weeks:p,rows:u,months:d}=Ko(s,n,l,{layout:i,weekStart:c,aggregate:t.aggregate}),h=.18,b=i==="weekly"?26:34,g=16,L=i==="monthRows"?0:t.monthGap??q("--calendar-month-gap",3),m=i==="weekly"?d.slice(1).map(z=>z.col):[],k=z=>L*m.filter(W=>W<=z).length,M=i==="vertical"?d.slice(1).map(z=>z.row):[],R=z=>L*M.filter(W=>W<=z).length,D={top:g+4,right:4,bottom:4,left:b+4},B=t.width||r.width,A=Math.max(40,B-D.left-D.right-k(p)),x=p?A/p:12,V=i==="vertical"?Math.min(x,q("--calendar-max-cell",22)):x,w=Math.max(3,V*(1-h)),X=V*u+R(u),v=D.top+X+D.bottom,G=o.select(e).append("svg").attr("width",B).attr("height",v),C=G.append("g").attr("transform",`translate(${D.left},${D.top})`),P=f.filter(z=>z.value!=null).map(z=>z.value),E=o.scaleSequential(ae(t.colorScheme,o.interpolateGreens)).domain(t.colorDomain||[Math.min(0,o.min(P)??0),o.max(P)??1]);t.colorDomain&&E.clamp(!0);let S=y("--color-border-row","#e5e7eb"),Y=new ct,$=t.valueFormat||(z=>z.toLocaleString()),T=t.dateFormat||(z=>z),I=q("--calendar-cell-radius",2),_=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],N=t.monthFormat||(z=>{let[W,O]=z.split("-").map(Number);return new Date(Date.UTC(W,O-1,1)).toLocaleString("en-US",{month:"short",timeZone:"UTC"})});C.selectAll(".calendar-cell").data(f.filter(z=>!z.pad)).enter().append("rect").attr("class","calendar-cell").attr("x",z=>z.col*V+k(z.col)).attr("y",z=>z.row*V+R(z.row)).attr("width",w).attr("height",w).attr("rx",I).attr("fill",z=>z.value==null?S:E(z.value)).attr("fill-opacity",z=>z.value==null?.35:1).on("pointerenter",function(z,W){t.showTooltip!==!1&&Y.show(lt(t,W,[{title:T(W.date)},{value:W.value==null?"No data":(t.tooltipValueFormat||$)(W.value)}]),z)}).on("pointermove",z=>Y.position(z)).on("pointerleave",()=>Y.hide());let H=y("--color-text-muted","#6b7280"),F=y("--font-size-xs","9px");if(i==="vertical")C.selectAll(".calendar-month-label").data(d).enter().append("text").attr("class","calendar-month-label").attr("x",-6).attr("y",z=>z.row*V+R(z.row)+w/2).attr("dy","0.34em").attr("text-anchor","end").attr("fill",H).attr("font-size",F).text(z=>N(z.key)),C.selectAll(".calendar-day-label").data([0,1,2,3,4,5,6]).enter().append("text").attr("class","calendar-day-label").attr("x",z=>z*V+w/2).attr("y",-6).attr("text-anchor","middle").attr("fill",H).attr("font-size",F).text(z=>_[(z+c)%7]);else if(i==="monthRows")C.selectAll(".calendar-month-label").data(d).enter().append("text").attr("class","calendar-month-label").attr("x",-6).attr("y",z=>z.row*V+w/2).attr("dy","0.34em").attr("text-anchor","end").attr("fill",H).attr("font-size",F).text(z=>N(z.key)),C.selectAll(".calendar-dom-label").data([1,5,10,15,20,25,30]).enter().append("text").attr("class","calendar-dom-label").attr("x",z=>(z-1)*V+w/2).attr("y",-6).attr("text-anchor","middle").attr("fill",H).attr("font-size",F).text(z=>z);else{C.selectAll(".calendar-day-label").data([0,2,4,6]).enter().append("text").attr("class","calendar-day-label").attr("x",-6).attr("y",O=>O*V+w/2).attr("dy","0.34em").attr("text-anchor","end").attr("fill",H).attr("font-size",F).text(O=>_[(O+c)%7]);let z=-10,W=d.filter(O=>O.col-z<3?!1:(z=O.col,!0));C.selectAll(".calendar-month-label").data(W).enter().append("text").attr("class","calendar-month-label").attr("x",O=>O.col*V+k(O.col)).attr("y",-6).attr("fill",H).attr("font-size",F).text(O=>N(O.key))}return{svg:G,width:B,height:v,cells:f,colorScale:E}}};function er(e,a,r,t,s,n,l,i){let c=e.length,f=e.map(w=>({name:w,out:[],in:[]})),p=a.map(w=>({...w}));p.forEach(w=>{f[w.sourceIndex].out.push(w),f[w.targetIndex].in.push(w)});let u=new Array(c).fill(0);for(let w=0;w<=c;w++){let X=!1;for(let v of p)u[v.targetIndex]<u[v.sourceIndex]+1&&(u[v.targetIndex]=u[v.sourceIndex]+1,X=!0);if(!X)break;if(w===c)return null}let d=o.max(u)||0;l!=="left"&&f.forEach((w,X)=>{w.out.length||(u[X]=d)}),f.forEach((w,X)=>{w.depth=u[X],w.value=Math.max(i&&i[w.name]||0,o.sum(w.in,v=>v.value),o.sum(w.out,v=>v.value))});let h=w=>d?w/d*(r-s):0,b=o.groups(f,w=>w.depth).sort((w,X)=>w[0]-X[0]).map(w=>w[1]),g=.8*o.min(b,w=>(t-(w.length-1)*n)/(o.sum(w,X=>X.value)||1)),L=w=>{let X=o.sum(w,G=>G.value*g)+(w.length-1)*n,v=(t-X)/2;for(let G of w)G.y0=v,G.y1=v+G.value*g,v=G.y1+n},m=w=>(w.y0+w.y1)/2,k=w=>{if(!w.in.length)return null;let X=w.in[0];for(let v of w.in)v.value>X.value&&(X=v);return f[X.sourceIndex]},M=new Map;f.forEach(w=>{let X=k(w);X&&(M.has(X)||M.set(X,[]),M.get(X).push(w))});let R=w=>{let X=M.get(w);return!X||!X.length?0:1+o.max(X,R)};for(let w of M.values()){let X=new Map(w.map(v=>[v,R(v)]));w.sort((v,G)=>X.get(v)-X.get(G))}let D=0,B=w=>{w.seq=D++;for(let X of M.get(w)||[])B(X)};f.filter(w=>!k(w)).forEach(B),b.forEach(w=>{w.sort((X,v)=>X.seq-v.seq),L(w)}),b.forEach(w=>w.forEach((X,v)=>{X.orderIdx=v}));let A=w=>{w.sort((G,C)=>G.orderIdx-C.orderIdx);let X=0;for(let G of w){if(G.y0<X){let C=X-G.y0;G.y0+=C,G.y1+=C}X=G.y1+n}if(w[w.length-1].y1-t>0){X=t;for(let G=w.length-1;G>=0;G--){let C=w[G];if(C.y1>X){let P=C.y1-X;C.y0-=P,C.y1-=P}X=C.y0-n}}},x=w=>{let X=0,v=0;for(let G of w.in)v+=m(f[G.sourceIndex])*G.value,X+=G.value;for(let G of w.out)v+=m(f[G.targetIndex])*G.value,X+=G.value;return X?v/X:null};for(let w=0;w<10;w++){let X=Math.pow(.88,w);for(let v of b){for(let G of v){let C=x(G);if(C==null)continue;let P=(C-m(G))*X;G.y0+=P,G.y1+=P}A(v)}}let V=b[b.length-1];if(V.length>1){let w=[...V].sort((C,P)=>C.orderIdx-P.orderIdx),X=o.sum(w,C=>C.y1-C.y0),v=Math.max(n,Math.min((t-X)/(w.length-1),n*6)),G=Math.max(0,(t-X-v*(w.length-1))/2);for(let C of w){let P=C.y1-C.y0;C.y0=G,C.y1=G+P,G=C.y1+v}}for(let w=0;w<4;w++){let X=Math.pow(.8,w);for(let v=b.length-2;v>=0;v--){for(let G of b[v]){if(!G.out.length)continue;let C=0,P=0;for(let S of G.out)C+=m(f[S.targetIndex])*S.value*3,P+=S.value*3;for(let S of G.in)C+=m(f[S.sourceIndex])*S.value,P+=S.value;let E=(C/P-m(G))*X;G.y0+=E,G.y1+=E}A(b[v])}}return p.forEach(w=>{w.width=w.value*g}),f.forEach(w=>{w.x0=h(w.depth),w.x1=w.x0+s;let X=w.y0;w.out.sort((G,C)=>m(f[G.targetIndex])-m(f[C.targetIndex]));for(let G of w.out)G.y0=X+G.width/2,X+=G.width;let v=w.y0;w.in.sort((G,C)=>m(f[G.sourceIndex])-m(f[C.sourceIndex]));for(let G of w.in)G.y1=v+G.width/2,v+=G.width}),p.forEach(w=>{w.source=f[w.sourceIndex],w.target=f[w.targetIndex]}),{nodes:f,links:p}}var ar={createBasic(e,a={}){let r=nt[a.size||"full"],t={...r,...a},s=t.data||[],n=t.sourceAccessor||(K=>K.source),l=t.targetAccessor||(K=>K.target),i=t.valueAccessor||(K=>K.value),c=[],f=new Map,p=K=>String(K),u=[];for(let K of s){let U=+i(K);if(!(U>0))continue;let tt=p(n(K)),J=p(l(K));if(tt!==J){for(let rt of[tt,J])f.has(rt)||(f.set(rt,c.length),c.push(rt));u.push({sourceIndex:f.get(tt),targetIndex:f.get(J),value:U,datum:K})}}let d=t.orientation==="vertical",h=d?{top:22,right:12,bottom:10,left:12}:{top:12,right:130,bottom:12,left:12},b=t.width||r.width,g=t.height||r.height,L=Math.max(60,b-h.left-h.right),m=Math.max(60,g-h.top-h.bottom),k=d?m:L,M=d?L:m,R=t.nodeWidth??q("--sankey-node-width",12),D=t.nodePadding??q("--sankey-node-padding",12),B=t.nodeAlign||"justify",A=t.sankey||(typeof window<"u"&&window.d3&&window.d3.sankey?window.d3:void 0),x=t.nodeValues||null,V=null;if(!x&&A&&typeof A.sankey=="function"){let K={left:A.sankeyLeft,right:A.sankeyRight,center:A.sankeyCenter,justify:A.sankeyJustify}[B]||A.sankeyJustify,tt=A.sankey().nodeWidth(R).nodePadding(D).nodeAlign(K).extent([[0,0],[k,M]])({nodes:c.map(J=>({name:J})),links:u.map(J=>({source:J.sourceIndex,target:J.targetIndex,value:J.value}))});V={nodes:tt.nodes,links:tt.links}}else V=er(c,u,k,M,R,D,B,x);if(!V)return console.warn("[ChartFactory] Sankey.createBasic: cyclic flow detected \u2014 nothing rendered."),{svg:o.select(e).append("svg"),width:b,height:g,nodes:[],links:[]};let w=o.select(e).append("svg").attr("width",b).attr("height",g),X=w.append("g").attr("transform",`translate(${h.left},${h.top})`),v=t.colors||Ft(),G=new Map;c.forEach((K,U)=>{G.set(K,t.colorMap&&t.colorMap[K]||v[U%v.length])});let C=q("--sankey-link-opacity",.3),P=new ct,E=t.valueFormat||(K=>K.toLocaleString()),S=t.tooltipValueFormat||E,Y=t.linkColor||"gradient",$;if(Y==="gradient"){let K=w.append("defs");for(let U of V.links){U._gradId="sankey-grad-"+Xt();let tt=K.append("linearGradient").attr("id",U._gradId).attr("gradientUnits","userSpaceOnUse").attr(d?"y1":"x1",U.source.x1).attr(d?"y2":"x2",U.target.x0).attr(d?"x1":"y1",0).attr(d?"x2":"y2",0);tt.append("stop").attr("offset","0%").attr("stop-color",G.get(U.source.name)),tt.append("stop").attr("offset","100%").attr("stop-color",G.get(U.target.name))}$=U=>`url(#${U._gradId})`}else Y==="source"?$=K=>G.get(K.source.name):Y==="target"?$=K=>G.get(K.target.name):$=()=>Y;let T=t.linkShape?t.linkShape==="taper":!!x;if(T){let K=o.group(V.links,U=>U.source);for(let[U,tt]of K){let J=[...tt].sort((ft,mt)=>ft.y0-mt.y0),rt=o.sum(J,ft=>ft.width),pt=U.y1-U.y0,it=rt>0?pt/rt:1,ht=U.y0;for(let ft of J){let mt=ft.width*it;ft._s0=ht,ft._s1=ht+mt,ht+=mt}}for(let U of V.links)U._t0=U.y1-U.width/2,U._t1=U.y1+U.width/2}let I=.35,_=(K,U,tt)=>K+(U-K)*tt,N=(K,U,tt,J)=>{let rt=(K+U)/2,pt=_(_(K,U,1/3),rt,I),it=_(_(tt,J,1/3),tt,I),ht=_(_(K,U,2/3),rt,I),ft=_(_(tt,J,2/3),J,I);return{p1f:pt,p1c:it,p2f:ht,p2c:ft}},H=T?d?K=>{let U=K.source.x1,tt=K.target.x0,J=N(U,tt,K._s0,K._t0),rt=N(tt,U,K._t1,K._s1);return`M${K._s0},${U}C${J.p1c},${J.p1f} ${J.p2c},${J.p2f} ${K._t0},${tt}L${K._t1},${tt}C${rt.p1c},${rt.p1f} ${rt.p2c},${rt.p2f} ${K._s1},${U}Z`}:K=>{let U=K.source.x1,tt=K.target.x0,J=N(U,tt,K._s0,K._t0),rt=N(tt,U,K._t1,K._s1);return`M${U},${K._s0}C${J.p1f},${J.p1c} ${J.p2f},${J.p2c} ${tt},${K._t0}L${tt},${K._t1}C${rt.p1f},${rt.p1c} ${rt.p2f},${rt.p2c} ${U},${K._s1}Z`}:d?K=>{let U=K.source.x1,tt=K.target.x0,J=(U+tt)/2;return`M${K.y0},${U}C${K.y0},${J} ${K.y1},${J} ${K.y1},${tt}`}:K=>{let U=K.source.x1,tt=K.target.x0,J=(U+tt)/2;return`M${U},${K.y0}C${J},${K.y0} ${J},${K.y1} ${tt},${K.y1}`},F=T?"fill":"stroke",z=T?"fill-opacity":"stroke-opacity",W=X.append("g").attr("class","sankey-links").attr("fill",T?null:"none").selectAll("path").data(V.links).enter().append("path").attr("class","sankey-link").attr("d",H).attr(F,$).attr("stroke-width",K=>T?null:Math.max(1,K.width)).attr(z,C).style("cursor","pointer").on("pointerenter",function(K,U){o.select(this).attr(z,Math.min(1,C+.25)),t.showTooltip!==!1&&P.show(lt(t,U,[{title:`${U.source.name} \u2192 ${U.target.name}`},{value:S(U.value)}]),K)}).on("pointermove",K=>P.position(K)).on("pointerleave",function(){o.select(this).attr(z,C),P.hide()}),O=K=>{let U=new Set([K]),tt=new Set,J=[K];for(;J.length;){let pt=J.pop();for(let it of V.links)it.target===pt&&!tt.has(it)&&(tt.add(it),U.has(it.source)||(U.add(it.source),J.push(it.source)))}let rt=[K];for(;rt.length;){let pt=rt.pop();for(let it of V.links)it.source===pt&&!tt.has(it)&&(tt.add(it),U.has(it.target)||(U.add(it.target),rt.push(it.target)))}return{nodeSet:U,linkSet:tt}},j=K=>{if(!K){W.attr(z,C),Q.attr("fill-opacity",1),dt.attr("opacity",1);return}let{nodeSet:U,linkSet:tt}=K;W.attr(z,J=>tt.has(J)?Math.min(1,C+.25):.06),Q.attr("fill-opacity",J=>U.has(J)?1:.25),dt.attr("opacity",J=>U.has(J)?1:.35)},Q=X.append("g").attr("class","sankey-nodes").selectAll("rect").data(V.nodes).enter().append("rect").attr("class","sankey-node").attr("x",K=>d?K.y0:K.x0).attr("y",K=>d?K.x0:K.y0).attr("width",K=>d?Math.max(1,K.y1-K.y0):K.x1-K.x0).attr("height",K=>d?K.x1-K.x0:Math.max(1,K.y1-K.y0)).attr("rx",1.5).attr("fill",K=>G.get(K.name)).style("cursor","pointer").on("pointerenter",function(K,U){j(O(U)),t.showTooltip!==!1&&P.show(lt(t,U,[{title:U.name},{value:S(U.value)}]),K)}).on("pointermove",K=>P.position(K)).on("pointerleave",function(){j(null),P.hide()}),ot=t.showValues!==!1,dt=X.append("g").attr("class","sankey-labels").selectAll("text").data(V.nodes).enter().append("text").attr("class","sankey-label").attr("x",K=>d?(K.y0+K.y1)/2:K.x1+6).attr("y",K=>d?K.x0-5:(K.y0+K.y1)/2).attr("dy",d?null:"0.34em").attr("text-anchor",d?"middle":"start").attr("fill",y("--color-text-primary","#111")).attr("font-size",y("--font-size-sm","11px")).attr("stroke",d?y("--color-bg-container","white"):"none").attr("stroke-width",d?3:0).attr("paint-order","stroke").text(K=>ot?`${K.name} ${E(K.value)}`:K.name);if(t.animate!==!1&&t.animated!==!1){let K=q("--sankey-anim-duration",900),U=q("--sankey-anim-pause",300),tt=250,J=450,rt=ht=>tt+ht*(K+U),pt=new Map(V.nodes.map(ht=>[ht,0]));for(let ht of V.links)pt.set(ht.target,Math.max(pt.get(ht.target),rt(ht.source.depth)+K));let it=ht=>pt.get(ht)??0;if(Q.attr("opacity",0).transition().delay(it).duration(J).ease(o.easeCubicOut).attr("opacity",1),dt.attr("opacity",0).transition().delay(it).duration(J).ease(o.easeCubicOut).attr("opacity",1),T){let ht=w.append("defs").attr("class","sankey-anim-defs");W.each(function(ft){let mt="sankey-anim-"+Xt(),Mt=ft.source.x1,kt=ft.target.x0,St=ht.append("clipPath").attr("id",mt).append("rect");d?St.attr("x",-b).attr("width",b*3).attr("y",Mt-2).attr("height",0):St.attr("y",-g).attr("height",g*3).attr("x",Mt-2).attr("width",0);let Z=o.select(this).attr("clip-path",`url(#${mt})`);St.transition().delay(rt(ft.source.depth)).duration(K).ease(o.easeCubicOut).attr(d?"height":"width",kt-Mt+4).on("end",()=>Z.attr("clip-path",null))})}else W.each(function(ht){let ft=this.getTotalLength();o.select(this).attr("stroke-dasharray",`${ft} ${ft}`).attr("stroke-dashoffset",ft).transition().delay(rt(ht.source.depth)).duration(K).ease(o.easeCubicOut).attr("stroke-dashoffset",0).on("end",function(){o.select(this).attr("stroke-dasharray",null).attr("stroke-dashoffset",null)})})}return{svg:w,width:b,height:g,nodes:V.nodes,links:V.links}}},or={_D3TableClass:null,register(e){this._D3TableClass=e},_trackInstance(e){return Ke.add(e),e},_ensureRegistered(){if(!this._D3TableClass)throw new Error(`D3Table not registered. Import and register it first:
|
|
6
|
+
import { D3Table } from '../table/d3-table.js';
|
|
7
|
+
ChartFactory.Table.register(D3Table);`)},createSortable(e,a={}){return this._ensureRegistered(),this._trackInstance(new this._D3TableClass(e,{sortable:!0,...a}))},createBasic(e,a={}){return this._ensureRegistered(),this._trackInstance(new this._D3TableClass(e,{sortable:!1,...a}))},createWithBars(e,a={}){return this._ensureRegistered(),(!a.barColumns||a.barColumns.length===0)&&console.warn("createWithBars called without barColumns config"),this._trackInstance(new this._D3TableClass(e,{sortable:!0,...a}))},createWithHeatmap(e,a={}){return this._ensureRegistered(),(!a.heatmapColumns||a.heatmapColumns.length===0)&&console.warn("createWithHeatmap called without heatmapColumns config"),this._trackInstance(new this._D3TableClass(e,{sortable:!0,...a}))},createCombined(e,a={}){return this._ensureRegistered(),this._trackInstance(new this._D3TableClass(e,{sortable:!0,...a}))}},Ut=new WeakMap,Me=new Set,Ke=new Set;function Oa(){for(let e of[...Me]){if(e.destroyed){Me.delete(e);continue}e.rerender()}for(let e of[...Ke]){if(typeof document<"u"&&!document.getElementById(e.containerId)){Ke.delete(e);continue}typeof e.rerender=="function"&&e.rerender()}}function rr(e){let a=e&&e!=="light"?String(e):null;typeof document<"u"&&(a?document.documentElement.dataset.theme=a:delete document.documentElement.dataset.theme),Oa(),typeof window<"u"&&window.dispatchEvent(new CustomEvent("d3t:themechange",{detail:{theme:a||"light"}}))}var Te=new Map,Ie="linked-hover";function sr(e){let a=e&&e.linkGroup;return a?typeof a=="string"?{name:a,labels:!0,sharedX:!0}:typeof a=="object"&&a.name?{name:String(a.name),labels:a.labels!==!1,sharedX:a.sharedX!==!1}:null:null}function Ze(e){let a=e.group;if(a){if(a.members.delete(e),e.group=null,a.brushState&&a.brushState.source===e){a.brushState=null;for(let r of a.members)Je(r.result(),null)}a.members.size?Se(a):Te.delete(a.name),e.injectedXDomain&&(e.injectedXDomain=null,Ia(e))}}function ge(e,a){let r=sr(a);if(e.spec=r,e.hasUserXDomain=a.xDomain!==void 0||a.xMin!==void 0||a.xMax!==void 0,e.group&&(!r||e.group.name!==r.name)&&Ze(e),r&&!e.group){let t=Te.get(r.name);t||Te.set(r.name,t={name:r.name,members:new Set,colorAssignments:new Map}),t.members.add(e),e.group=t}}function Aa(e){let a=typeof e.xAccessor=="function"?e.xAccessor:i=>i&&i.x,r=Array.isArray(e.series)?e.series.map(i=>i&&Array.isArray(i.data)?i.data:[]):Array.isArray(e.data)?[e.data]:[],t=1/0,s=-1/0,n=!1,l=!1;for(let i of r)for(let c of i){let f;try{f=a(c)}catch{continue}if(f instanceof Date)n=!0,f=+f;else if(typeof f=="string"){let p=Date.parse(f);if(isNaN(p))continue;n=!0,f=p}typeof f!="number"||!isFinite(f)||(l=!0,f<t&&(t=f),f>s&&(s=f))}return l?{min:t,max:s,isDate:n}:null}function Se(e){let a=1/0,r=-1/0,t=!1,s=!1;for(let c of e.members)!c.spec||c.spec.sharedX===!1||!c.extent||(s=!0,t=t||c.extent.isDate,c.extent.min<a&&(a=c.extent.min),c.extent.max>r&&(r=c.extent.max));if(!s||!isFinite(a)||!isFinite(r))return;let n=t?[new Date(a),new Date(r)]:[a,r],l=e.brushState,i=l&&l.mode==="zoom"&&l.range?l.range:null;for(let c of e.members){if(!c.spec||c.spec.sharedX===!1||c.hasUserXDomain||!c.supportsXDomain)continue;let f=i&&c!==l.source?i:n,p=c.injectedXDomain;p&&+p[0]==+f[0]&&+p[1]==+f[1]||(c.injectedXDomain=f,Ia(c))}}var Ne=new Set,He=!1;function Ia(e){Ne.add(e),!He&&(He=!0,Promise.resolve().then(()=>{He=!1;let a=[...Ne];Ne.clear();for(let r of a)r.destroyed()||r.rerender()}))}function de(e,a,{labels:r=!0}={}){let t=e&&(e.g||e.svg);if(!t||typeof t.selectAll!="function")return;let s=()=>t.selectAll("."+Ie).remove();if(a==null){s();return}let n=e.x;if(typeof n!="function"||typeof n.domain!="function")return;let l=e.width,i=e.height,c=vt(n,a),f=typeof e.linkPoints=="function"?e.linkPoints(c)||[]:[],p=n(c);if(!Number.isFinite(p)||p<-.5||p>l+.5){s();return}let u=t.select(":scope > ."+Ie);u.empty()&&(u=t.append("g").attr("class",Ie).style("pointer-events","none")),u.raise(),u.selectAll("line").data([p]).join("line").attr("x1",m=>m).attr("x2",m=>m).attr("y1",0).attr("y2",i).attr("stroke",y("--color-text-faint","#9ca3af")).attr("stroke-dasharray",y("--hover-dash-pattern","3, 3")).attr("opacity",.8);let d=e.y,h=m=>n(vt(n,m.x)),b=typeof d=="function"?f.filter(m=>Number.isFinite(d(m.y))&&Number.isFinite(h(m))&&h(m)>=-.5&&h(m)<=l+.5):[];u.selectAll("circle").data(b).join("circle").attr("cx",h).attr("cy",m=>d(m.y)).attr("r",q("--link-dot-radius",3.5)).attr("fill",m=>m.color||y("--chart-primary","#3b82f6")).attr("stroke",y("--color-bg-container","white")).attr("stroke-width",1.5);let g=r?b:[],L=p>l*.85;u.selectAll("text").data(g).join("text").attr("x",m=>L?h(m)-8:h(m)+8).attr("y",m=>d(m.y)-8).attr("text-anchor",L?"end":"start").style("font-size",y("--font-size-xs","9px")).style("font-weight",q("--font-weight-semibold",600)).style("font-family",y("--font-family","-apple-system, BlinkMacSystemFont, sans-serif")).style("fill",m=>m.color||y("--color-text-secondary","#6b7280")).style("paint-order","stroke").style("stroke",y("--color-bg-container","white")).style("stroke-width",3).text(m=>typeof m.format=="function"?m.format(m.value):yt(m.value))}function nr(e){let a=e&&(e.g||e.svg);return!a||typeof a.select!="function"?!1:!a.select(".hover-line, .multi-hover-line").empty()}function Fa(e,a,r){for(let t of e.members){let s=t.result();if(!s)continue;let n=t.spec?t.spec.labels:!0;t===a&&(r==null||nr(s))?de(s,null):de(s,r,{labels:n})}}function La(e,a){let r=s=>{if(!e.group)return;let n=e.result(),l=n&&(n.g||n.svg),i=l&&typeof l.node=="function"?l.node():null;if(!i||!n.x||typeof n.x.invert!="function")return;let[c]=o.pointer(s,i),f=c>=-4&&c<=n.width+4;Fa(e.group,e,f?n.x.invert(c):null)},t=()=>{e.group&&Fa(e.group,e,null)};return a.addEventListener("pointermove",r),a.addEventListener("pointerleave",t),()=>{a.removeEventListener("pointermove",r),a.removeEventListener("pointerleave",t)}}function Ma(e,a){let r=Zt[`${e}.${a}`];return!!r&&r.universal&&r.universal.xDomain==="supported"}function ir(e){return e?e===!0?{mode:"highlight",onBrush:null}:typeof e=="object"?{mode:e.mode==="zoom"?"zoom":"highlight",onBrush:typeof e.onBrush=="function"?e.onBrush:null}:null:null}function Ta(e,a,r){if(e.onBrush)try{e.onBrush(a,r.facade)}catch(t){console.warn("ChartFactory: onBrush callback threw \u2014",t)}}function Je(e,a){let r=e&&(e.g||e.svg);if(!r||typeof r.selectAll!="function"||(r.selectAll(":scope > .brush-veil").remove(),!a))return;let t=e.x;if(typeof t!="function")return;let s=t(vt(t,a[0])),n=t(vt(t,a[1]));if(!Number.isFinite(s)||!Number.isFinite(n))return;let l=Math.max(0,Math.min(s,n)),i=Math.min(e.width,Math.max(s,n)),c=(f,p)=>r.append("rect").attr("class","brush-veil").attr("x",f).attr("y",0).attr("width",Math.max(0,p)).attr("height",e.height).attr("fill",y("--color-bg-container","white")).attr("opacity",q("--brush-veil-opacity",.65)).style("pointer-events","none");c(0,l),c(i,e.width-i)}function Sa(e){cr(e);let a=e.group,r=a&&a.brushState;!r||e===r.source||r.mode==="highlight"&&Je(e.result(),r.range)}var lr=/(^|\s)(axis-x|axis-y|grid|grid-x|grid-y|d3-annotations|chart-brush|linked-hover|brush-veil)(\s|$)/;function cr(e){let a=e.result(),r=a&&(a.g||a.svg);if(!r||typeof r.selectAll!="function"||typeof r.node!="function")return;r.selectAll(":scope > defs.zoom-clip-defs").remove(),r.selectAll(":scope > [data-zoom-clipped]").attr("clip-path",null).attr("data-zoom-clipped",null);let t=e.group&&e.group.brushState;if(!(t&&t.mode==="zoom"&&t.range&&e!==t.source))return;let s="zoom-clip-"+Xt();r.append("defs").attr("class","zoom-clip-defs").append("clipPath").attr("id",s).append("rect").attr("x",-.5).attr("y",-.5).attr("width",(a.width||0)+1).attr("height",(a.height||0)+1);for(let n of[...r.node().children])n.tagName!=="defs"&&(lr.test(n.getAttribute("class")||"")||(n.setAttribute("clip-path",`url(#${s})`),n.setAttribute("data-zoom-clipped","1")))}function be(e,a,r,{preview:t=!1}={}){let s=e.group;if(s){s.brushState=r||t?{range:r,mode:a.mode,source:e}:null;for(let n of s.members)n!==e&&a.mode==="highlight"&&Je(n.result(),r);a.mode==="zoom"&&!t&&Se(s)}}function $a(e,a,r){let t=ir(r.brush);if(!t||!a)return;let s=a.g||a.svg,n=a.x;if(!s||typeof s.append!="function"||typeof n!="function"||typeof n.invert!="function")return;let l=f=>{if(!f)return null;let[p,u]=f.map(d=>n.invert(d));return+u>+p?[p,u]:null},i=o.brushX().extent([[0,0],[a.width,a.height]]).on("brush",f=>{if(!f.sourceEvent)return;let p=l(f.selection);be(e,t,p,{preview:!0}),Ta(t,p,e)}).on("end",f=>{if(!f.sourceEvent)return;let p=l(f.selection);e.brushRange=p,be(e,t,p),Ta(t,p,e)}),c=s.append("g").attr("class","chart-brush").call(i);if(c.select(".selection").attr("fill",y("--chart-primary","#3b82f6")).attr("fill-opacity",q("--brush-selection-opacity",.08)).attr("stroke",y("--chart-primary","#3b82f6")).attr("stroke-opacity",.4),e.brushMove=f=>{if(e.brushRange=f,f){let p=n(vt(n,f[0])),u=n(vt(n,f[1]));Number.isFinite(p)&&Number.isFinite(u)&&u>p&&c.call(i.move,[p,u])}else c.call(i.move,null);be(e,t,f)},e.brushRange){let[f,p]=e.brushRange,u=n(vt(n,f)),d=n(vt(n,p));Number.isFinite(u)&&Number.isFinite(d)&&d>u?(c.call(i.move,[u,d]),be(e,t,e.brushRange)):e.brushRange=null}}function pr(e){let a=Te.get(e);return a?{name:a.name,get charts(){return[...a.members].map(r=>r.facade).filter(Boolean)},hover(r){for(let t of a.members){let s=t.result();s&&de(s,r,{labels:t.spec?t.spec.labels:!0})}},colorFor(r){if(!a.colorAssignments.has(r)){let t=Ft();a.colorAssignments.set(r,t[a.colorAssignments.size%t.length])}return a.colorAssignments.get(r)}}:null}var Na=[["startAccessor","beforeAccessor"],["endAccessor","afterAccessor"],["lowAccessor","lowerAccessor","ciLowAccessor"],["highAccessor","upperAccessor","ciHighAccessor"],["animate","animated"],["tooltipValueFormat","tooltipFormat"],["colorDomain","valueDomain"]],dr=new Set(["colorAccessor"]);function ur(e){typeof e.x=="string"&&e.xAccessor===void 0&&(e.xAccessor=e.x),typeof e.y=="string"&&e.yAccessor===void 0&&(e.yAccessor=e.y);for(let a of Object.keys(e)){if(!a.endsWith("Accessor")||dr.has(a))continue;let r=e[a];typeof r=="string"&&(e[a]=t=>t[r])}return e}var Ha={"Bar.createBasic":"x","Bar.createInline":"x","Bar.createLabelAbove":"x","Bar.createProgress":"x","Bar.createBullet":"x","Bar.createStacked":"x","Bar.createGrouped":"x","Bar.createVertical":"y","Bar.createVerticalStacked":"y"};function hr(e,a,r){let t=`${a}.${r}`,s=Ha[t];if(!s||e.allowNonZeroBaseline===!0)return e;let n=s+"Min",l=s+"Max",i=s+"Domain",c=e[n],f=e[l],p=typeof c=="number"&&c>0&&!(typeof f=="number"&&f<=0),u=typeof f=="number"&&f<0&&!(typeof c=="number"&&c>=0);if(!p&&!u)return e;let d=p?`${n}: ${c}`:`${l}: ${f}`;if(p&&(e[n]=0),u&&(e[l]=0),Array.isArray(e[i])&&e[i].length===2&&(e[i]=[p?0:e[i][0],u?0:e[i][1]]),e.diagnostics!==!1){let h=`${t}:zeroBaseline`;ne.has(h)||(ne.add(h),console.warn(`ChartFactory.${t}: ${d} excludes zero \u2014 bars encode length from a zero baseline, so the value axis was clamped to include 0. Pass allowNonZeroBaseline: true only if the truncation is deliberate.`))}return e}function ce(e,a,r){let t=ur({...e});if(typeof t.colors=="string"){let s=te(t.colors);s&&(t.colors=[...s])}for(let s of Na){let n=s.find(l=>t[l]!==void 0);if(n!==void 0)for(let l of s)t[l]===void 0&&(t[l]=t[n])}return Array.isArray(t.xDomain)&&t.xMin===void 0&&t.xMax===void 0?[t.xMin,t.xMax]=t.xDomain:!t.xDomain&&t.xMin!==void 0&&t.xMax!==void 0&&(t.xDomain=[t.xMin,t.xMax]),Array.isArray(t.yDomain)&&t.yMin===void 0&&t.yMax===void 0?[t.yMin,t.yMax]=t.yDomain:!t.yDomain&&t.yMin!==void 0&&t.yMax!==void 0&&(t.yDomain=[t.yMin,t.yMax]),a!==void 0&&hr(t,a,r),t}function Ca(e){return e&&typeof e=="object"&&(e.x===void 0&&e.xScale!==void 0&&(e.x=e.xScale),e.xScale===void 0&&e.x!==void 0&&(e.xScale=e.x),e.y===void 0&&e.yScale!==void 0&&(e.y=e.yScale),e.yScale===void 0&&e.y!==void 0&&(e.yScale=e.y)),e}function _e(e,a,r){if(Array.isArray(r.data))return;let t=r.series!==void 0||r.rankings!==void 0;r.data===void 0&&!t&&!r.state&&console.warn(`ChartFactory.${e}.${a}: 'data' is missing \u2014 the chart will render blank. (Pass data: [] to show the built-in empty state, or state: 'loading' while fetching.)`)}var fr=["data","series","rankings","size","width","height","maxHeight","aspectRatio","responsive","margin","diagnostics"],mr={xDomain:"xDomain",xMin:"xDomain",xMax:"xDomain",yDomain:"yDomain",yMin:"yDomain",yMax:"yDomain",xFormat:"xFormat",yFormat:"yFormat",xLabel:"xLabel",yLabel:"yLabel",color:"color",colors:"colors",colorMap:"colorMap",showTooltip:"showTooltip",tooltipContent:"tooltipContent",tooltipValueFormat:"tooltipValueFormat",tooltipFormat:"tooltipValueFormat",annotations:"annotations",extraLayers:"extraLayers",onRender:"onRender",animate:"animate",animated:"animate",title:"title",subtitle:"subtitle",footer:"footer",story:"story",legend:"legend",featured:"featured",state:"state",emptyMessage:"emptyMessage",errorMessage:"errorMessage",xScaleType:"logX",yScaleType:"logY",niceX:"niceX",linkGroup:"linkGroup",brush:"brush",showXAxis:"showXAxis",showYAxis:"showYAxis",showGridX:"showGridX",showGridY:"showGridY",showAxisLabels:"showAxisLabels",xTickValues:"xTickValues",yTickValues:"yTickValues"},We=new Map,ne=new Set;function yr(e){let a=We.get(e);if(a!==void 0)return a;let r=Zt[e];if(!r)return We.set(e,null),null;let t=new Set(r.options);for(let s of Na)s.some(n=>t.has(n))&&s.forEach(n=>t.add(n));t.has("xAccessor")&&t.add("x"),t.has("yAccessor")&&t.add("y");for(let s of fr)t.add(s);return a={optionKeys:t,universal:r.universal},We.set(e,a),a}function _a(e,a){let r=[],t=yr(e);if(!t)return r;for(let s of Object.keys(a)){if(a[s]===void 0||t.optionKeys.has(s))continue;let n=mr[s];if(n){let l=t.universal[n];if(n==="animate"&&a[s]===!1)continue;(l==="unsupported"||l==="na")&&r.push({level:"warning",code:"unsupported-option",key:s,dedupe:s,message:`ChartFactory.${e}: '${s}' is not supported by ${e} \u2014 see docs/conformance-matrix.md`});continue}r.push({level:"warning",code:"unknown-option",key:s,dedupe:s,message:`ChartFactory.${e}: unknown option '${s}' \u2014 not read by this builder (see docs/API.md)`})}for(let s of["xDomain","yDomain"]){let n=a[s];n!==void 0&&!(Array.isArray(n)&&n.length===2)&&r.push({level:"warning",code:"malformed-domain",key:s,dedupe:`${s}:shape`,message:`ChartFactory.${e}: '${s}' must be a [min, max] array of length 2.`})}return r}function xr(e,a,r){if(!r||typeof r!="object"||r.diagnostics===!1)return;let t=`${e}.${a}`;for(let s of _a(t,r)){let n=`${t}:${s.dedupe}`;ne.has(n)||(ne.add(n),console.warn(s.message))}}var ee={expects:"{ name, before, after }",fields:[{label:"name",keys:["name"]},{label:"before",keys:["before"]},{label:"after",keys:["after"]}]},se={expects:"{ category (or label), value }",fields:[{label:"category",accessor:"categoryAccessor",keys:["category","label"]},{label:"value",accessor:"valueAccessor",keys:["value"]}]},Da={expects:"{ name, start, end }",fields:[{label:"name",accessor:"nameAccessor",keys:["name"]},{label:"start",accessor:"startAccessor",keys:["start"]},{label:"end",accessor:"endAccessor",keys:["end"]}]};function gr(e,a){let r=[],t=Array.isArray(a.series)?a.series:[],s=i=>typeof i=="string"?c=>c[i]:typeof i=="function"?i:null,n=s(a.yAccessor),l=n||(i=>i.y);for(let i of t){let c=Array.isArray(i&&i.data)?i.data.slice(0,50):[];if(!c.length)continue;let f=s(i.yAccessor),p=f||l;if(!c.every(g=>{try{return p(g)===void 0}catch{return!0}}))continue;let d=i.name||"unnamed",h=Object.keys(c[0]||{}).join(", "),b=!f&&n?`ChartFactory.${e}: the top-level yAccessor is the fallback for every series, but it yields undefined for every row of series '${d}' (row keys: [${h}]) \u2014 that series will not draw. Give the series its own yAccessor (series: [{ name, data, yAccessor }]) or rename the field.`:`ChartFactory.${e}: series '${d}' has no usable y values \u2014 its y accessor (default: d => d.y) yields undefined for every row (row keys: [${h}]) \u2014 that series will not draw. Pass a per-series yAccessor or rename the field (see docs/API.md).`;r.push({level:"error",code:"data-shape",key:"series",dedupe:`dataShape:${d}`,message:b})}return r}var br={"Slope.createBasic":ee,"Slope.createTrend":ee,"Slope.createCategorical":ee,"Slope.createHighlight":ee,"Slope.createAnimated":ee,"Slope.createBands":ee,"Slope.createIndexed":ee,"Dot.createBasic":{expects:"{ name, <categories[].key fields> }",fields:[{label:"name",accessor:"nameAccessor",keys:["name"]}]},"Dot.createDumbbell":Da,"Dot.createGradient":Da,"Dot.createComet":{expects:"{ name, before, after }",fields:[{label:"name",accessor:"nameAccessor",keys:["name"]},{label:"before",accessor:"beforeAccessor",keys:["before"]},{label:"after",accessor:"afterAccessor",keys:["after"]}]},"Dot.createConfidence":{expects:"{ name, value, ci_low, ci_high }",fields:[{label:"name",accessor:"nameAccessor",keys:["name"]},{label:"value",accessor:"valueAccessor",keys:["value"]},{label:"ci_low",accessor:"lowAccessor",keys:["ci_low"]},{label:"ci_high",accessor:"highAccessor",keys:["ci_high"]}]},"Dot.createPercentile":{expects:"{ name (or season), value, <percentile fields> }",fields:[{label:"name",accessor:"nameAccessor",keys:["name","season"]},{label:"value",accessor:"valueAccessor",keys:["value"]}]},"Dot.createUnitHistogram":{expects:"{ category (or label), count }",fields:[{label:"category",accessor:"categoryAccessor",keys:["category","label"]},{label:"count",accessor:"countAccessor",keys:["count"]}]},"Bar.createBasic":se,"Bar.createInline":se,"Bar.createLabelAbove":se,"Bar.createProgress":se,"Bar.createDiverging":se,"Bar.createBullet":se,"Bar.createStacked":{expects:"{ category (or label), <keys[] fields> }",fields:[{label:"category",accessor:"categoryAccessor",keys:["category","label"]}],seriesKeysOption:"keys"},"Bar.createGrouped":{expects:"{ category (or label), <keys[] fields> }",fields:[{label:"category",accessor:"categoryAccessor",keys:["category","label"]}],seriesKeysOption:"keys"},"Bar.createLikert":{expects:"{ question, <keys[] fields> }",fields:[{label:"question",accessor:"categoryAccessor",keys:["question"]}],seriesKeysOption:"keys"},"Bar.createGantt":{expects:"{ label, start, end }",fields:[{label:"label",accessor:"labelAccessor",keys:["label"]},{label:"start",accessor:"startAccessor",keys:["start"]},{label:"end",accessor:"endAccessor",keys:["end"]}]},"Bar.createRange":{expects:"{ name, low, high }",fields:[{label:"name",accessor:"nameAccessor",keys:["name"]},{label:"low",accessor:"lowAccessor",keys:["low"]},{label:"high",accessor:"highAccessor",keys:["high"]}]},"Bar.createWaterfall":{expects:"{ name, value }",fields:[{label:"name",accessor:"nameAccessor",keys:["name"]},{label:"value",accessor:"valueAccessor",keys:["value","total"]}]},"Bar.createVertical":{expects:"{ x, y }",fields:[{label:"x",accessor:"xAccessor",keys:["x"]},{label:"y",accessor:"yAccessor",keys:["y"]}]},"Bar.createVerticalStacked":{expects:"{ x, <keys[] fields> }",fields:[{label:"x",accessor:"xAccessor",keys:["x"]}],seriesKeysOption:"keys"},"Bar.createVerticalNormalized":{expects:"{ x, <keys[] fields> }",fields:[{label:"x",accessor:"xAccessor",keys:["x"]}],seriesKeysOption:"keys"},"Line.createMulti":{validate:gr}};function wr(e,a,r){if(!r||typeof r!="object"||r.diagnostics===!1||r.state)return;let t=`${e}.${a}`;for(let s of Wa(t,r)){let n=`${t}:${s.dedupe}`;ne.has(n)||(ne.add(n),console.error(s.message))}}function Wa(e,a){let r=br[e];if(!r)return[];let t=ce(a);if(typeof r.validate=="function")return r.validate(e,t);let s=Array.isArray(t.data)?t.data.slice(0,50):null;if(!s||s.length===0)return[];let n=u=>d=>{if(d!=null){for(let h of u)if(d[h]!==void 0)return d[h]}},l=[],i=!1;for(let u of r.fields){let d=u.accessor&&typeof t[u.accessor]=="function"?t[u.accessor]:n(u.keys);s.every(b=>{try{return d(b)===void 0}catch{return!0}})&&(l.push(u.label),u.accessor&&(i=!0))}if(r.seriesKeysOption){let u=t[r.seriesKeysOption];if(Array.isArray(u))for(let d of u)typeof d=="string"&&s.every(h=>h==null||h[d]===void 0)&&l.push(`keys entry '${d}'`)}if(l.length===0)return[];let c=l.map(u=>u.startsWith("keys entry")?u:`'${u}'`).join(", "),f=Object.keys(s[0]||{}).join(", "),p=i?"Rename the fields or point the matching *Accessor options at your keys (see docs/API.md).":"Rename the data fields to match (see docs/API.md).";return[{level:"error",code:"data-shape",key:"data",dedupe:`dataShape:${l.join(",")}`,message:`ChartFactory.${e}: required data field(s) ${c} are undefined in every row \u2014 this builder reads rows shaped like ${r.expects}; received row keys [${f}]. The chart cannot render correctly. ${p}`}]}function kr(e,a={}){let r=typeof e=="string"?e:"";if(!Zt[r]){let l=Object.keys(Zt),i=(r.split(".").pop()||"").toLowerCase(),c=(d,h)=>{if(Math.abs(d.length-h.length)>2)return 3;let b=Array.from({length:h.length+1},(g,L)=>L);for(let g=1;g<=d.length;g++){let L=[g];for(let m=1;m<=h.length;m++)L.push(Math.min(b[m]+1,L[m-1]+1,b[m-1]+(d[g-1]===h[m-1]?0:1)));b=L}return b[h.length]},f=(r.split(".")[0]||"").toLowerCase(),p=i.length>=4?l.map(d=>{let h=d.toLowerCase(),b=h.includes(i)?0:c(h.split(".").pop(),i);return{k:d,d:b,fam:h.split(".")[0]===f?0:1}}).filter(d=>d.d<=2).sort((d,h)=>d.fam-h.fam||d.d-h.d).slice(0,3).map(d=>d.k):[],u=p.length?` \u2014 did you mean ${p.map(d=>`'${d}'`).join(" or ")}?`:" \u2014 see docs/conformance-matrix.md for the builder list.";return{valid:!1,issues:[{level:"error",code:"unknown-builder",message:`'${r}' is not a chart-factory builder${u}`}]}}if(!a||typeof a!="object"||Array.isArray(a))return{valid:!1,issues:[{level:"error",code:"invalid-config",message:`ChartFactory.${r}: config must be a plain object (got ${Array.isArray(a)?"array":typeof a}).`}]};let t=({level:l,code:i,key:c,message:f})=>c===void 0?{level:l,code:i,message:f}:{level:l,code:i,key:c,message:f},s=_a(r,a).map(t);a.state||(a.data===void 0&&a.series===void 0?s.push({level:"warning",code:"missing-data",key:"data",message:`ChartFactory.${r}: 'data' is missing \u2014 the chart will render blank. (Pass data: [] to show the built-in empty state, or state: 'loading' while fetching.)`}):s.push(...Wa(r,a).map(t)));let n=Ha[r];if(n&&a.allowNonZeroBaseline!==!0){let l=a[n+"Domain"],i=a[n+"Min"]??(Array.isArray(l)&&l.length===2?l[0]:void 0),c=a[n+"Max"]??(Array.isArray(l)&&l.length===2?l[1]:void 0),f=typeof i=="number"&&i>0&&!(typeof c=="number"&&c<=0),p=typeof c=="number"&&c<0&&!(typeof i=="number"&&i>=0);(f||p)&&s.push({level:"warning",code:"zero-baseline",key:n+"Domain",message:`ChartFactory.${r}: the ${n} domain excludes zero \u2014 bars encode length from a zero baseline, so the value axis will be clamped to include 0 at render. Pass allowNonZeroBaseline: true only if the truncation is deliberate.`})}return{valid:!s.some(l=>l.level==="error"),issues:s}}function we(e){if(e&&typeof e.stopAnimation=="function")try{e.stopAnimation()}catch{}}function qa(e){return typeof e=="string"?document.querySelector(e):e instanceof Element?e:null}function za(e){let a=e.getBoundingClientRect(),r=getComputedStyle(e),t=(parseFloat(r.paddingLeft)||0)+(parseFloat(r.paddingRight)||0);return a.width-t}function vr(e){for(let a of Qt.tiers)if(e<=a.maxWidth)return a.size;return"full"}function Ar(e){e.querySelectorAll(":scope > svg").forEach(a=>{let r=parseFloat(a.getAttribute("width")),t=parseFloat(a.getAttribute("height"));!r||!t||(a.getAttribute("viewBox")||a.setAttribute("viewBox",`0 0 ${r} ${t}`),a.style.width="100%",a.style.maxWidth=r+"px",a.style.height="auto")})}function Ga(e,a){let r=!1,t=(l,i)=>(...c)=>{if(e.destroyed){r||(r=!0,console.warn(`ChartFactory: ${l}() called on a destroyed chart \u2014 ignored. Create a new chart instead.`));return}return i(...c)},s={destroy:()=>{e.destroyed||a.destroy(),Me.delete(n)},rerender:t("rerender",()=>a.render(!0)),highlightSeries:t("highlightSeries",l=>{a.emphasis&&a.emphasis.set(l)}),hover:t("hover",l=>{typeof a.linkHover=="function"&&a.linkHover(l)}),setBrush:t("setBrush",l=>{typeof a.setBrush=="function"&&a.setBrush(l)}),setConfig:t("setConfig",l=>a.setConfig(l)),setData:t("setData",l=>a.setConfig({data:l})),get destroyed(){return e.destroyed===!0}},n=new Proxy({},{get(l,i){if(i in s)return s[i];let c=e.result;if(c==null)return;let f=c[i];return typeof f=="function"&&Object.keys(f).length===0?f.bind(c):f},has(l,i){return i in s||e.result!=null&&i in e.result},ownKeys(){let l=new Set(Object.keys(s));return e.result!=null&&Object.keys(e.result).forEach(i=>l.add(i)),[...l]},getOwnPropertyDescriptor(l,i){if(i in s||e.result!=null&&i in e.result)return{enumerable:!0,configurable:!0}}});return Me.add(n),n}function vt(e,a){return a==null||typeof e!="function"||typeof e.domain!="function"?a:e.domain()[0]instanceof Date&&!(a instanceof Date)?new Date(a):a}function Fr(e,a){let r=e&&(e.g||e.svg),t=e&&e.x,s=e&&e.y;if(!r||typeof r.append!="function"||typeof t!="function"||typeof s!="function")return;let n=e.width,l=e.height,i=y("--chart-neutral","#6b7280"),c=y("--font-size-xs","9px"),f=y("--annotation-title-size","13px"),p=(parseFloat(c)||9)+4,u=y("--font-family","system-ui, sans-serif"),d=Lt(),h=A=>d(A,600,c,u);r.selectAll(".d3-annotations, .d3-annotations-under").remove();let b=r.append("g").attr("class","d3-annotations").attr("pointer-events","none"),g=null,L=()=>(g||(g=r.insert("g",":first-child").attr("class","d3-annotations-under").attr("pointer-events","none")),g),m=[],k=typeof e._entranceDelayFor=="function"?e._entranceDelayFor:null,M=q("--annotation-fade-duration",200);if(a.forEach(A=>{if(!A||!A.type)return;let x=b.node().childNodes.length,V=g?g.node().childNodes.length:0,w=A.stroke||A.color||i,X=A.label,v=A.labelColor||A.color||i,G=(C,P,E,S)=>{if(!X)return null;let Y=h(X),$=3,T=E==="end"?C-Y:E==="middle"?C-Y/2:C,I=T+Y;if(I>n-$){let N=I-(n-$);C-=N,T-=N}T<$&&(C+=$-T);let _=b.append("text").attr("x",C).attr("y",P).attr("text-anchor",E).attr("dominant-baseline",S||"auto").attr("font-family",u).attr("font-size",c).attr("font-weight",600).attr("stroke",y("--color-bg-container","#fff")).attr("stroke-width",3.5).attr("paint-order","stroke").style("stroke-linejoin","round").attr("fill",v).text(X);return _.classed("anno-label",!0),_};switch(A.type){case"yLine":{let C=s(A.value);if(!isFinite(C))break;L().append("line").attr("x1",0).attr("x2",n).attr("y1",C).attr("y2",C).attr("stroke",w).attr("stroke-width",A.width||1).attr("stroke-dasharray",A.dash===!1?null:A.dash||"4,3"),G(A.labelAlign==="left"?2:n-2,C-3+(A.dy||0),A.labelAlign==="left"?"start":"end","auto");break}case"xLine":{let C=t(vt(t,A.value));if(!isFinite(C))break;L().append("line").attr("x1",C).attr("x2",C).attr("y1",0).attr("y2",l).attr("stroke",w).attr("stroke-width",A.width||1).attr("stroke-dasharray",A.dash===!1?null:A.dash||"4,3");{let P=G(C+3,2+(A.dy||0),"start","hanging");P&&P.classed("anno-top",!0)}break}case"yBand":{let C=s(A.to),P=s(A.from);if(!isFinite(C)||!isFinite(P))break;L().append("rect").attr("x",0).attr("width",n).attr("y",Math.min(C,P)).attr("height",Math.abs(P-C)).attr("fill",A.fill||A.color||i).attr("fill-opacity",A.opacity!=null?A.opacity:.08),G(n-2,Math.min(C,P)+10,"end","auto");break}case"xBand":{let C=t(vt(t,A.from)),P=t(vt(t,A.to));if(!isFinite(C)||!isFinite(P))break;L().append("rect").attr("y",0).attr("height",l).attr("x",Math.min(C,P)).attr("width",Math.abs(P-C)).attr("fill",A.fill||A.color||i).attr("fill-opacity",A.opacity!=null?A.opacity:.08);{let E=G(Math.min(C,P)+3,2,"start","hanging");E&&E.classed("anno-top",!0)}break}case"region":{if(typeof t.domain!="function"||typeof s.domain!="function")break;let C=t.domain(),P=s.domain(),E=t(vt(t,A.xFrom!=null?A.xFrom:C[0])),S=t(vt(t,A.xTo!=null?A.xTo:C[C.length-1])),Y=s(vt(s,A.yFrom!=null?A.yFrom:P[0])),$=s(vt(s,A.yTo!=null?A.yTo:P[P.length-1]));if(![E,S,Y,$].every(isFinite))break;L().append("rect").attr("x",Math.min(E,S)).attr("width",Math.abs(S-E)).attr("y",Math.min(Y,$)).attr("height",Math.abs($-Y)).attr("fill",A.fill||A.color||i).attr("fill-opacity",A.opacity!=null?A.opacity:.08);{let T=G(Math.min(E,S)+3,Math.min(Y,$)+2,"start","hanging");T&&T.classed("anno-top",!0)}break}case"segment":{let C=t(vt(t,A.x1)),P=t(vt(t,A.x2)),E=s(vt(s,A.y1)),S=s(vt(s,A.y2));if(![C,P,E,S].every(isFinite))break;L().append("line").attr("x1",C).attr("y1",E).attr("x2",P).attr("y2",S).attr("stroke",w).attr("stroke-width",A.width||1).attr("stroke-dasharray",A.dash===!1?null:A.dash||"4,3"),G((C+P)/2,(E+S)/2-4,"middle","auto");break}case"diagonal":{if(typeof t.invert!="function"||typeof s.invert!="function"||typeof t.domain!="function"||typeof s.domain!="function")break;let C=t.domain().map(Number),P=s.domain().map(Number),E=Math.max(Math.min(...C),Math.min(...P)),S=Math.min(Math.max(...C),Math.max(...P));if(!isFinite(E)||!isFinite(S)||E>=S)break;let Y=t(E),$=s(E),T=t(S),I=s(S);if(![Y,$,T,I].every(isFinite))break;L().append("line").attr("x1",Y).attr("y1",$).attr("x2",T).attr("y2",I).attr("stroke",w).attr("stroke-width",A.width||1).attr("stroke-dasharray",A.dash===!1?null:A.dash||"4,3"),G((Y+T)/2,($+I)/2-4,"middle","auto");break}case"event":{let C=t(vt(t,A.x!=null?A.x:A.value));if(!isFinite(C)||C<-.5||C>n+.5)break;m.push({a:A,xx:C});break}case"point":case"callout":{let C=t(vt(t,A.x)),P=s(A.y);if(!isFinite(C)||!isFinite(P))break;let E=A.r!=null?A.r:4;if(E>0&&b.append("circle").attr("cx",C).attr("cy",P).attr("r",E).attr("fill",A.color||w),X||A.title){let S=A.dx!=null?A.dx:6,Y=A.dy!=null?A.dy:A.title&&X?-6-p:-6,$=A.labelAlign||(S<0?"end":S>0?"start":"middle"),T;if(A.title){let I=C+S,_=P+Y,N=Math.max(d(A.title,700,f,u),X?h(X):0),H=3,F=$==="end"?I-N:$==="middle"?I-N/2:I,z=F+N;if(z>n-H){let W=z-(n-H);I-=W,F-=W}F<H&&(I+=H-F),T=b.append("text").attr("x",I).attr("y",_).attr("text-anchor",$).attr("font-family",u).attr("stroke",y("--color-bg-container","#fff")).attr("stroke-width",3.5).attr("paint-order","stroke").style("stroke-linejoin","round").attr("fill",v).classed("anno-label",!0),T.append("tspan").attr("x",I).attr("font-size",f).attr("font-weight",700).text(A.title),X&&T.append("tspan").attr("x",I).attr("dy",p).attr("font-size",c).attr("font-weight",600).attr("fill-opacity",.85).text(X)}else T=G(C+S,P+Y,$,"auto");T&&(T.classed("anno-pt",!0).attr("data-cx",C).attr("data-cy",P).attr("data-r",E).attr("data-leader",A.leader===!0?"force":A.leader===!1?"off":"auto"),A.leaderColor&&T.attr("data-leader-color",A.leaderColor))}break}default:break}if(k){let C=k(A);if(C>0){let P=Array.from(b.node().childNodes).slice(x).concat(g?Array.from(g.node().childNodes).slice(V):[]);o.selectAll(P).attr("opacity",0).transition().delay(C).duration(M).attr("opacity",1)}}}),m.length){m.sort((Y,$)=>Y.xx-$.xx);let A=y("--annotation-event-font-size","10px"),x=parseFloat(A)||10,V=Math.round(x*1.25),w=l+q("--annotation-event-band-offset",22),X=q("--annotation-event-tick-height",8),v=5,G=y("--annotation-event-guide-color","#d1d5db"),C=Y=>d(Y,400,A,u),P=(Y,$)=>{let T=[],I="";for(let _ of String(Y).split(/\s+/)){let N=I?I+" "+_:_;I&&C(N)>$?(T.push(I),I=_):I=N}return I&&T.push(I),T};m.forEach((Y,$)=>{let{a:T,xx:I}=Y;if(T.guide&&L().append("line").attr("x1",I).attr("x2",I).attr("y1",0).attr("y2",l).attr("stroke",T.guideColor||G).attr("stroke-width",T.guideWidth||1).attr("stroke-dasharray","1.5,3").attr("stroke-linecap","round"),Y.tick=b.append("line").attr("x1",I).attr("x2",I).attr("y1",w).attr("y2",w+X).attr("stroke",T.stroke||T.color||i).attr("stroke-width",1),!T.label)return;let _=($<m.length-1?m[$+1].xx:n)-I,N=I-($>0?m[$-1].xx:0),H=$===0||_>=N?"start":"end",F=H==="start"?Math.min(n-I+10,Math.max(_-10,54)):Math.min(I+10,Math.max(N-10,54)),z=Math.max(54,Math.min(118,F)),W=P(T.label,z),O=b.append("text").attr("x",I).attr("y",w+X+v+x*.85).attr("text-anchor",H).attr("font-family",u).attr("font-size",A).attr("fill",T.labelColor||T.color||i);W.forEach((Q,ot)=>O.append("tspan").attr("x",I).attr("dy",ot===0?0:V).text(Q)),Y.text=O;let j=Math.max(...W.map(C));Y.box={left:H==="start"?I:I-j,width:j,height:W.length*V,drop:0}});let E=m.filter(Y=>Y.box);if(E.length>1){let Y=Math.max(...E.map(T=>T.box.height))+v,$=[];for(let T of E){let I=0;for(;I<$.length&&$[I]+8>T.box.left;)I++;I===$.length&&$.push(-1/0),$[I]=T.box.left+T.box.width,I>0&&(T.box.drop=I*Y,T.text.attr("transform",`translate(0,${T.box.drop})`),T.tick.attr("y2",+T.tick.attr("y2")+T.box.drop))}}let S=b.node().ownerSVGElement;if(S){let Y=Math.max(...m.map(I=>w+X+(I.box?v+I.box.height+I.box.drop:0)))+6,$=typeof b.node().getCTM=="function"?b.node().getCTM():null,T=Math.ceil(Y+($?$.f:0));if(T>(parseFloat(S.getAttribute("height"))||0)){S.setAttribute("height",T);let I=S.getAttribute("viewBox");if(I){let _=I.trim().split(/[\s,]+/).map(Number);_.length===4&&S.setAttribute("viewBox",`${_[0]} ${_[1]} ${_[2]} ${T-_[1]}`)}}}}let R=b.selectAll("text.anno-top").nodes();if(R.length>1){let A=(parseFloat(c)||9)+4,x=6,V=R.map(X=>{let v=X.getBBox();return{node:X,left:v.x,right:v.x+v.width,baseY:+X.getAttribute("y")}}).sort((X,v)=>X.left-v.left),w=[];for(let X of V){let v=0;for(;v<w.length&&w[v]+x>X.left;)v++;v===w.length&&w.push(-1/0),w[v]=X.right,v>0&&X.node.setAttribute("y",X.baseY+v*A)}}let D=b.selectAll("text.anno-pt").nodes();if(D.length){let A=(parseFloat(c)||9)+4,x=2,V=(X,v)=>X.x<v.x+v.width+x&&v.x<X.x+X.width+x&&X.y<v.y+v.height+x&&v.y<X.y+X.height+x,w=b.selectAll("text.anno-label").nodes().filter(X=>!D.includes(X)).map(X=>X.getBBox());for(let X of D){let v=+X.getAttribute("y"),G=[0,-A,A,-2*A,2*A],C=!1;for(let P of G){X.setAttribute("y",v+P);let E=X.getBBox();if(E.y>=0&&E.y+E.height<=l+A&&!w.some(S=>V(E,S))){C=!0;break}}C||X.setAttribute("y",v),w.push(X.getBBox())}}let B=b.selectAll("text.anno-pt").nodes();if(B.length){let A=q("--annotation-leader-threshold",14);B.forEach(x=>{let V=x.getAttribute("data-leader")||"auto";if(V==="off")return;let w=parseFloat(x.getAttribute("data-cx")),X=parseFloat(x.getAttribute("data-cy")),v=parseFloat(x.getAttribute("data-r"))||0;if(!isFinite(w)||!isFinite(X))return;let G=x.getBBox(),C=Math.max(G.x,Math.min(w,G.x+G.width)),P=Math.max(G.y,Math.min(X,G.y+G.height)),E=Math.hypot(C-w,P-X);if(E<v+4||V!=="force"&&E<=A)return;let S=(C-w)/E,Y=(P-X)/E;b.insert("line","text").attr("class","anno-leader").attr("x1",w+S*(v+2)).attr("y1",X+Y*(v+2)).attr("x2",C-S*2).attr("y2",P-Y*2).attr("stroke",x.getAttribute("data-leader-color")||x.getAttribute("fill")||i).attr("stroke-width",1).attr("opacity",.7)})}return b}function Lr(e,a){let r=a.dotLabels,t=typeof r=="object"&&r!==null?r:{accessor:r},s=$=>typeof $=="function"?$:typeof $=="string"?T=>T[$]:null,n=s(t.accessor);if(!n){console.warn("ChartFactory: dotLabels needs an accessor \u2014 a field name or (d) => string.");return}let l=(typeof e._dotLabelPoints=="function"?e._dotLabelPoints():e._dotLabelPoints)||[],{width:i,height:c}=e,f=s(t.priority),p=l.filter($=>!t.filter||t.filter($.datum)).map($=>({...$,text:n($.datum)==null?"":String(n($.datum)),priority:f?+f($.datum)||0:$.r})).filter($=>$.text);if(p.sort(($,T)=>T.priority-$.priority),Number.isFinite(t.topN)&&(p=p.slice(0,Math.max(0,t.topN))),!p.length)return;let u=t.fontSize||y("--font-size-xs","10px"),d=t.fontWeight||q("--font-weight-semibold",600),h=y("--font-family","-apple-system, BlinkMacSystemFont, sans-serif"),b=parseFloat(u)||10,g=Lt(),L=4,m=b+3,k=2,M=4,R=($,T)=>$.x0<T.x1+k&&T.x0<$.x1+k&&$.y0<T.y1+k&&T.y0<$.y1+k,D=p.map($=>({x0:$.x-$.r,x1:$.x+$.r,y0:$.y-$.r,y1:$.y+$.r})),B=["below","above","right","left"],A=B.includes(t.placement)?t.placement:"below",x=[A,...B.filter($=>$!==A)],V=($,T,I,_,N)=>{let H=$.r+L+N;return T==="below"?{x0:$.x-I/2,x1:$.x+I/2,y0:$.y+H,y1:$.y+H+_,tx:$.x,ty:$.y+H+_/2,anchor:"middle"}:T==="above"?{x0:$.x-I/2,x1:$.x+I/2,y0:$.y-H-_,y1:$.y-H,tx:$.x,ty:$.y-H-_/2,anchor:"middle"}:T==="right"?{x0:$.x+H,x1:$.x+H+I,y0:$.y-_/2,y1:$.y+_/2,tx:$.x+H,ty:$.y,anchor:"start"}:{x0:$.x-H-I,x1:$.x-H,y0:$.y-_/2,y1:$.y+_/2,tx:$.x-H,ty:$.y,anchor:"end"}},w=[],X=[];for(let $ of p){let T=g($.text,d,u,h),I=b,_=null;for(let N of[0,m,2*m]){for(let H of x){let F=V($,H,T,I,N);if(!(F.x0<-M||F.x1>i+M||F.y0<0||F.y1>c)&&!w.some(z=>R(F,z))&&!D.some(z=>R(F,z))){_=F;break}}if(_)break}_&&(w.push(_),X.push({p:$,s:_}))}if(!X.length)return;let G=(e.g||e.svg).append("g").attr("class","dot-callouts").attr("pointer-events","none"),C=y("--color-bg-container","#fff"),P=y("--color-text-subtle","#4b5563"),E=typeof t.color=="function"?t.color:null,S=t.leader||"auto",Y=q("--annotation-leader-threshold",14);for(let{p:$,s:T}of X){let I=E?E($.datum):t.color||P;if(S!=="off"){let _=Math.max(T.x0,Math.min($.x,T.x1)),N=Math.max(T.y0,Math.min($.y,T.y1)),H=Math.hypot(_-$.x,N-$.y);if(H>=$.r+4&&(S==="force"||H-$.r>Y)){let F=(_-$.x)/H,z=(N-$.y)/H;G.append("line").attr("class","dot-callout-leader").attr("x1",$.x+F*($.r+2)).attr("y1",$.y+z*($.r+2)).attr("x2",_-F*2).attr("y2",N-z*2).attr("stroke",$.color||I).attr("stroke-width",1).attr("opacity",.7)}}G.append("text").attr("class","dot-callout-label").attr("x",T.tx).attr("y",T.ty).attr("text-anchor",T.anchor).attr("dominant-baseline","central").attr("font-family",h).attr("font-size",u).attr("font-weight",d).attr("stroke",C).attr("stroke-width",3).attr("paint-order","stroke").style("stroke-linejoin","round").attr("fill",I).text($.text)}}function Mr(e,a){if(a.showXAxis!==!1&&a.showYAxis!==!1&&a.showGridX!==!1&&a.showGridY!==!1&&a.showAxisLabels!==!1)return;let r=e.svg;if(!r||typeof r.node!="function")return;let t=r.node();if(!t)return;let s=o.select(t.ownerSVGElement||t);a.showXAxis===!1&&s.selectAll(".axis-x").remove(),a.showYAxis===!1&&s.selectAll(".axis-y").remove(),a.showGridX===!1&&s.selectAll(".grid-x").remove(),a.showGridY===!1&&s.selectAll(".grid-y, .grid:not(.grid-x)").remove(),a.showAxisLabels===!1&&s.selectAll(".axis-x text, .axis-y text").filter(function(){return!(this.classList.contains("axis-title")||this.classList.contains("axis-label"))}).remove()}function Tr(e){let a=e.legend;if(!a)return null;if(Array.isArray(a.items)&&Array.isArray(a.colors))return{items:a.items,colors:a.colors};if(a===!0){let r=Array.isArray(e.keys)?e.keys:null;if(!r||!r.length)return null;let t=e.labels||{},s=0,n=Array.isArray(e.colors)&&e.colors.length?e.colors:r.map(l=>Qe(l)?"var(--chart-neutral)":`var(--area-color-${s++%6+1})`);return{items:r.map(l=>t[l]!==void 0?t[l]:l),colors:n}}return null}var Sr={Line:"trend",Area:"trend",Bar:"rows",Dot:"rows",Scatter:"dots",Histogram:"columns",BoxPlot:"columns",Donut:"dots",Calendar:"dots",Sankey:"rows"},$r={"Bar.createVertical":"columns","Bar.createVerticalStacked":"columns","Bar.createVerticalNormalized":"columns","Dot.createUnitHistogram":"dots"};function Cr(e,a){return $r[`${e}.${a}`]||Sr[e]||"dots"}function Va(e,a,r,t){let s=a+"-grad",n=e.select("defs").append("linearGradient").attr("id",s).attr("gradientUnits","userSpaceOnUse").attr("x1",-r*.18).attr("y1",0).attr("x2",0).attr("y2",0);n.append("stop").attr("offset","0%").attr("stop-color","var(--color-text-faint)").attr("stop-opacity",0),n.append("stop").attr("offset","50%").attr("stop-color","var(--color-text-faint)").attr("stop-opacity",.16),n.append("stop").attr("offset","100%").attr("stop-color","var(--color-text-faint)").attr("stop-opacity",0),e.append("g").attr("clip-path",`url(#${a})`).append("rect").attr("x",0).attr("y",0).attr("width",r).attr("height",t).attr("fill",`url(#${s})`);let l=document.createElementNS("http://www.w3.org/2000/svg","animateTransform");l.setAttribute("attributeName","gradientTransform"),l.setAttribute("type","translate"),l.setAttribute("values",`0 0; ${r*1.4} 0; ${r*1.4} 0`),l.setAttribute("keyTimes","0;0.37;1"),l.setAttribute("dur","9s"),l.setAttribute("repeatCount","indefinite"),n.node().appendChild(l)}function Ra(e,a,r,t,s){let n=document.createElement("div"),l=a.state==="loading"?Cr(r,t):null;n.className=`d3-state d3-state--${a.state}`+(l?` d3-state--${l}`:""),n.style.height=s+"px",e.appendChild(n);let i=null;if(a.state==="empty"||a.state==="error"){let c=document.createElement("div");c.className="d3-state-glyph",c.textContent=a.state==="empty"?"\u25CC":"\u25B3";let f=document.createElement("div");return f.className="d3-state-msg",f.textContent=a.state==="empty"?a.emptyMessage||"No data":a.errorMessage||"Couldn\u2019t load this chart",n.appendChild(c),n.appendChild(f),()=>{}}if(l==="columns"){let d=[];for(let g=0;g<10;g++){let L=document.createElement("div");L.className="d3-skel-col",L.style.left=6+g*9.2+"%",L.style.width=6.5+"%",L.style.height=30+Math.random()*50+"%",L.style.setProperty("--sw-width",100/6.5*100+"%"),L.style.setProperty("--sw-left",-(6+g*9.2)/6.5*100+"%"),n.appendChild(L),d.push(L)}let h=()=>d.forEach(g=>{g.style.height=28+Math.random()*52+"%"});h();let b=setInterval(h,5e3);i=()=>clearInterval(b)}else if(l==="rows"||l==="trend"){let p=o.select(n).append("svg").attr("width","100%").attr("height","100%").attr("viewBox","0 0 100 60").attr("preserveAspectRatio","none");p.append("defs");let u=Xt()+"-skel",d=p.select("defs").append("clipPath").attr("id",u);if(l==="rows"){let b=[],g=[];for(let k=0;k<6;k++){let M=5+k*52/6,R=52/6*.62,D=22+Math.random()*58;for(let[B,A]of[[b,p],[g,d]]){let x=A.append("rect").attr("x",4).attr("y",M).attr("height",R).attr("rx",1.2).attr("fill","var(--color-bg-highlight)");x.node().style.width=D+"px",x.node().style.transition="width 5s ease-in-out",B.push(x.node())}}Va(p,u,100,60);let L=()=>{for(let k=0;k<6;k++){let M=20+Math.random()*60;b[k].style.width=M+"px",g[k].style.width=M+"px"}};L();let m=setInterval(L,5e3);i=()=>clearInterval(m)}else{let b=Array.from({length:13},(V,w)=>16+Math.random()*22+(w%2?6:-4)),g=V=>-4+V*(108/12),L=o.area().x((V,w)=>g(w)).y0(60).y1(V=>54-V).curve(o.curveBasis),m=o.line().x((V,w)=>g(w)).y(V=>54-V).curve(o.curveBasis),k=u+"-fill",M=p.select("defs").append("linearGradient").attr("id",k).attr("x1",0).attr("y1",0).attr("x2",0).attr("y2",1);M.append("stop").attr("offset","0%").attr("stop-color","var(--color-text-faint)").attr("stop-opacity",.28),M.append("stop").attr("offset","55%").attr("stop-color","var(--color-text-faint)").attr("stop-opacity",.1),M.append("stop").attr("offset","100%").attr("stop-color","var(--color-text-faint)").attr("stop-opacity",0);let R=d.append("path").attr("d",L(b)),D=p.append("path").attr("fill",`url(#${k})`).attr("d",L(b)),B=p.append("path").attr("fill","none").attr("stroke","var(--color-border-light)").attr("stroke-width",1.5).attr("vector-effect","non-scaling-stroke").attr("d",m(b));Va(p,u,100,60);let A=null,x=()=>{b=b.map(V=>Math.max(10,Math.min(42,V+(Math.random()-.5)*11)));for(let[V,w]of[[D,L],[R,L],[B,m]])V.transition().duration(2500).ease(o.easeSinInOut).attr("d",w(b));A=setTimeout(x,2500)};x(),i=()=>{clearTimeout(A);for(let V of[D,R,B])V.interrupt()}}}else{let c=document.createElement("div");c.className="d3-state-dots";for(let p=0;p<3;p++)c.appendChild(document.createElement("span"));let f=document.createElement("div");f.className="d3-state-msg",f.textContent="Loading\u2026",n.appendChild(c),n.appendChild(f)}return i||(()=>{})}function ke(e){e&&e.querySelectorAll(":scope > .d3-state").forEach(a=>a.remove())}function Xa(){return{el:null,isolated:null,apply(e){xa(this.el,e)},reapply(){xa(this.el,this.isolated)},toggle(e){this.isolated=this.isolated===e?null:e,this.reapply()},set(e){this.isolated=e??null,this.reapply()}}}function ve(e,a,r){if(!e)return;if(e.querySelectorAll(":scope > .d3-shell").forEach(i=>i.remove()),r&&(r.el=e),!a.title&&!a.subtitle&&!a.footer&&!a.legend&&!a.story){r&&r.reapply();return}let t=a.featured===!0?" d3-shell--featured":"",s=e.querySelector(":scope > svg")||e.querySelector(":scope > .d3-state"),n=(i,c)=>{let f=document.createElement("div");return f.className=`d3-shell ${i}${t}`,c&&s?e.insertBefore(f,s):e.appendChild(f),f};a.title&&(n("d3-shell-title",!0).textContent=a.title),a.subtitle&&(n("d3-shell-subtitle",!0).textContent=a.subtitle);let l=Tr(a);if(l){let c=r&&a.legend&&typeof a.legend=="object"&&a.legend.interactive?{onHover:f=>r.apply(f),onLeave:()=>r.reapply(),onToggle:f=>r.toggle(f),activeIndex:r.isolated}:{};Pa(n("d3-shell-legend",!0),l.items,l.colors,c)}if(a.story){let i=typeof a.story=="string"?{html:a.story}:a.story,c=["panel","bubble","band"].includes(i.variant)?i.variant:"panel",f=n(`chart-story chart-story--${c}`,!1);i.accent&&f.style.setProperty("--story-accent",i.accent);let p=document.createElement("p");p.className="chart-story-body",p.innerHTML=i.html||"";let u=()=>{let d=document.createElement("span");return d.className="chart-story-icon",d.innerHTML=i.icon,d};if(c==="panel"){if(i.icon&&f.appendChild(u()),i.label){let d=document.createElement("b");d.className="chart-story-label",d.textContent=i.label,p.insertBefore(document.createTextNode(" "),p.firstChild),p.insertBefore(d,p.firstChild)}f.appendChild(p)}else{if(i.label||c==="bubble"&&i.icon){let d=document.createElement("div");d.className="chart-story-overline",c==="bubble"&&i.icon&&d.appendChild(u()),i.label&&d.appendChild(document.createTextNode(i.label)),f.appendChild(d)}f.appendChild(p)}}if(a.footer){let i=n("d3-shell-footer",!1),c=typeof a.footer=="string"?{left:a.footer}:a.footer,f=document.createElement("span");if(f.textContent=c.left||"",i.appendChild(f),c.right){let p=document.createElement("span");p.textContent=c.right,i.appendChild(p)}}r&&r.reapply()}function Ba(e){e&&e.querySelectorAll(":scope > .d3-shell").forEach(a=>a.remove())}var Dr={linear:()=>o.curveLinear,monotone:()=>o.curveMonotoneX,basis:()=>o.curveBasis,step:()=>o.curveStep};function $e(e,a){return typeof e=="function"?e:typeof e=="string"?r=>r[e]:r=>r[a]}function Ea(e){if(!Array.isArray(e.extraLayers))return null;let a=[];for(let r of e.extraLayers){if(!r||!r.type||r.label==null)continue;let t=Array.isArray(r.data)?r.data:Array.isArray(e.data)?e.data:[];if(!t.length)continue;let s=$e(r.x,"x"),n=$e(r.y,"y"),l=typeof r.color=="function"?r.color:r.color||y("--chart-neutral","#6b7280");a.push({label:r.label,probe:Yt(t,s,[{yAcc:n,color:l,format:r.format}])})}return a.length?a:null}function zr(e,a,r){let t=e&&(e.g||e.svg),s=e&&e.x,n=e&&e.y;if(!t||typeof t.selectAll!="function"||typeof s!="function"||typeof n!="function"||(t.selectAll(":scope > .extra-layer, :scope > defs.extra-layer-defs").remove(),!Array.isArray(a)||!a.length))return;let l=e.width,i=e.height,c="extra-layers-"+Xt();t.append("defs").attr("class","extra-layer-defs").append("clipPath").attr("id",c).append("rect").attr("x",-.5).attr("y",-.5).attr("width",(l||0)+1).attr("height",(i||0)+1);let f=()=>[...t.node().children].find(p=>{let u=p.getAttribute("class")||"";return p.tagName!=="defs"&&!/(^|\s)(axis-x|axis-y|grid|grid-x|grid-y|extra-layer)(\s|$)/.test(u)})||null;for(let p of a){if(!p||!p.type)continue;let u=Array.isArray(p.data)?p.data:Array.isArray(r&&r.data)?r.data:[];if(!u.length)continue;let d=$e(p.x,"x"),h=$e(p.y,"y"),b=typeof s.bandwidth=="function"?s.bandwidth()/2:0,g=B=>s(vt(s,d(B)))+b,L=B=>n(h(B)),m=B=>{let A=h(B);return A==null||typeof A=="number"&&isNaN(A)?!1:Number.isFinite(+g(B))&&Number.isFinite(+L(B))},k=typeof p.color=="function"?B=>p.color(B):()=>p.color||y("--chart-neutral","#6b7280"),M=k(u[0]),R=p.opacity!=null?p.opacity:.85,D=t.append("g").attr("class","extra-layer extra-layer-"+p.type).attr("clip-path",`url(#${c})`).style("pointer-events","none");if(p.behind){let B=f();B&&t.node().insertBefore(D.node(),B)}if(p.type==="points")D.selectAll("circle").data(u.filter(m)).join("circle").attr("cx",g).attr("cy",L).attr("r",p.r!=null?p.r:3).attr("fill",B=>k(B)).attr("opacity",R);else if(p.type==="line"){let B=Dr[p.curve],A=o.line().defined(m).curve(B?B():o.curveLinear).x(g).y(L);D.append("path").datum(u).attr("d",A).attr("fill","none").attr("stroke",M).attr("stroke-width",p.width!=null?p.width:q("--line-stroke-width-thin",1.5)).attr("stroke-dasharray",p.dash||null).attr("opacity",R)}else if(p.type==="bars"){let B=u.filter(m),A=p.baseline!=null?p.baseline:0,x=n(A),V=p.barWidth!=null?p.barWidth:Math.max(1,Math.min(14,l/Math.max(1,B.length)*.6));D.selectAll("rect").data(B).join("rect").attr("x",w=>g(w)-V/2).attr("y",w=>Math.min(L(w),x)).attr("width",V).attr("height",w=>Math.abs(L(w)-x)).attr("fill",w=>k(w)).attr("opacity",R)}}}function Gr(e,a){let r=m=>typeof m=="string"&&m!==""?m:null,t=r(a.xLabel),s=r(a.yLabel);if(!t&&!s)return;let n=e&&(e.g||e.svg);if(!n||typeof n.append!="function")return;let l=e.width,i=e.height;if(!(l>0)||!(i>0))return;let c=n.node(),f=c&&c.ownerSVGElement;if(!f||f.querySelector("text.axis-label"))return;let p=typeof c.getCTM=="function"?c.getCTM():null,u=p?p.e:0,d=p?p.f:0,h=y("--color-text-muted","#6b7280"),b=y("--font-size-sm","11px"),g=parseFloat(b)||11,L=()=>{let m=f.getAttribute("viewBox");if(!m)return null;let k=m.trim().split(/[\s,]+/).map(Number);return k.length===4?k:null};if(t){let k=(parseFloat(f.getAttribute("height"))||d+i)-d+g;n.append("text").attr("class","axis-label axis-title-x").attr("x",l/2).attr("y",k).attr("text-anchor","middle").attr("fill",h).attr("font-size",b).text(t);let M=Math.ceil(d+k+4);f.setAttribute("height",M);let R=L();R&&f.setAttribute("viewBox",`${R[0]} ${R[1]} ${R[2]} ${M-R[1]}`)}if(s){let m=Math.ceil(g+8),k=parseFloat(f.getAttribute("width"))||u+l,M=parseFloat(f.getAttribute("height"))||d+i;f.setAttribute("width",k+m);let R=L();R?f.setAttribute("viewBox",`${R[0]-m} ${R[1]} ${R[2]+m} ${R[3]}`):f.setAttribute("viewBox",`${-m} 0 ${k+m} ${M}`),n.append("text").attr("class","axis-label axis-title-y").attr("transform","rotate(-90)").attr("x",-i/2).attr("y",-u-6).attr("text-anchor","middle").attr("fill",h).attr("font-size",b).text(s)}}function Vr(e,a){if(o.timeDay(e)<e)return null;if(+o.timeMonth(e)<+e)return a>=2?o.timeFormat("%-d")(e):o.timeFormat("%b %-d")(e);if(+o.timeYear(e)<+e){let r=o.timeFormat("%b")(e);return a>=2?r[0]:r}return a>=2?o.timeFormat("\u2019%y")(e):o.timeFormat("%Y")(e)}function Rr(e,a){!e||!e.svg||typeof e.svg.selectAll!="function"||a.xFormat||a.xTickValues||e.svg.selectAll(".axis-x").each(function(){let r=[];if(o.select(this).selectAll(".tick").each(function(l){let i=o.select(this).select("text").node(),c=/translate\(\s*([-+\d.eE]+)/.exec(this.getAttribute("transform")||"");i&&c&&r.push({d:l,text:i,x:+c[1]})}),r.length<2||r.some(l=>typeof l.d=="string"||(l.text.getAttribute("transform")||"").includes("rotate")))return;r.sort((l,i)=>l.x-i.x);let t=6,s=l=>{try{return l.text.getComputedTextLength()}catch{return 0}},n=l=>{for(let i=1;i<l.length;i++)if(l[i-1].x+s(l[i-1])/2+t>l[i].x-s(l[i])/2)return!0;return!1};if(n(r)){if(r.every(l=>l.d instanceof Date))for(let l=1;l<=2&&n(r);l++)r.forEach(i=>{let c=Vr(i.d,l);c!=null&&(i.text.textContent=c)});for(;n(r)&&r.length>2;)r.filter((l,i)=>i%2===1).forEach(l=>{l.text.style.display="none"}),r=r.filter((l,i)=>i%2===0)}})}function Ya(e,a){if(e&&(Mr(e,a),Rr(e,a),Array.isArray(a.extraLayers)&&a.extraLayers.length&&zr(e,a.extraLayers,a),a.dotLabels&&e._dotLabelPoints&&Lr(e,a),Array.isArray(a.annotations)&&a.annotations.length&&Fr(e,a.annotations),(a.xLabel||a.yLabel)&&Gr(e,a),typeof a.onRender=="function"))try{a.onRender(e)}catch(r){console.warn("ChartFactory: onRender callback threw \u2014",r)}}function Xr(e,a,r,t="Chart"){let s=e[a];return function(n,l={}){let i=qa(n);if(i===null&&typeof n=="string"&&console.warn(`ChartFactory.${t}.${a}: selector "${n}" matched no element \u2014 nothing will render.`),_e(t,a,l),xr(t,a,l),wr(t,a,l),!Qt.enabled||i===null||typeof l.width=="number"||l.responsive===!1||r.responsive===!1){if(i){let C=Ut.get(i);C&&C.destroy()}let B=ce(l,t,a),A=Xa(),x={result:null,destroyed:!1,stateCleanup:null},V={spec:null,group:null,facade:null,hasUserXDomain:!1,extent:null,injectedXDomain:null,supportsXDomain:Ma(t,a),result:()=>x.result,rerender:()=>{x.destroyed||w()},destroyed:()=>x.destroyed===!0};ge(V,B);let w=()=>{we(x.result),i&&i.querySelectorAll(":scope > svg").forEach(S=>S.remove()),x.stateCleanup&&(x.stateCleanup(),x.stateCleanup=null),ke(i);let C=B.state||(Array.isArray(B.data)&&B.data.length===0?"empty":null);if(C&&i){x.result=null;let S=nt[B.size||"full"];return x.stateCleanup=Ra(i,{...B,state:C},t,a,B.height||S.height),ve(i,B,A),null}V.extent=V.group?Aa(B):null;let P=B,E=Ea(B);return E&&(P={...P,__extraLayerProbes:E}),V.group&&V.spec.sharedX!==!1&&!V.hasUserXDomain&&V.injectedXDomain&&(P={...B,xDomain:V.injectedXDomain,xMin:V.injectedXDomain[0],xMax:V.injectedXDomain[1],niceX:!1}),x.result=Ca(s.call(e,n,P)),Ya(x.result,B),ve(i,B,A),$a(V,x.result,B),V.group&&Se(V.group),Sa(V),x.result};w();let X=i?La(V,i):()=>{},v={emphasis:A,render:w,linkHover:C=>de(x.result,C,{labels:V.spec?V.spec.labels:!0}),setBrush:C=>{typeof V.brushMove=="function"&&V.brushMove(C)},setConfig(C){return C&&Array.isArray(C.data)&&C.data.length&&C.state===void 0&&B.state==="loading"&&(C={...C,state:null}),B=ce({...B,...C},t,a),C&&"data"in C&&_e(t,a,B),ge(V,B),v.render(!0)},destroy(){x.destroyed||(x.destroyed=!0,X(),Ze(V),we(x.result),x.stateCleanup&&(x.stateCleanup(),x.stateCleanup=null),x.result=null,i&&(i.querySelectorAll(":scope > svg").forEach(C=>C.remove()),ke(i),Ba(i),Ut.get(i)===v&&Ut.delete(i)),Be())}};i&&Ut.set(i,v);let G=Ga(x,v);return V.facade=G,G}let f=Ut.get(i);f&&f.destroy();let p={result:null,destroyed:!1},u=Xa(),d=ce(l,t,a),h=null,b=null,g=null,L=!1,m={spec:null,group:null,facade:null,hasUserXDomain:!1,extent:null,injectedXDomain:null,supportsXDomain:Ma(t,a),result:()=>p.result,rerender:()=>{p.destroyed||k(!0)},destroyed:()=>p.destroyed===!0};ge(m,d);function k(B){let A=za(i);A>=Qt.minRenderWidth||(A=nt[d.size||"full"].width),h=A;let x=d.size||vr(A),V={...d,size:x,width:Math.round(A)};if(r.heightMode!=="intrinsic"){let v=d.aspectRatio||r.aspect||Qt.defaultAspect,G=d.height||Math.round(A/v);d.maxHeight!=null&&(G=Math.min(G,d.maxHeight)),V.height=G}B&&(V.animate=!1,V.animated=!1);let w=Ea(d);w&&(V.__extraLayerProbes=w),m.extent=m.group?Aa(d):null,m.group&&m.spec.sharedX!==!1&&!m.hasUserXDomain&&m.injectedXDomain&&(V.xDomain=m.injectedXDomain,[V.xMin,V.xMax]=m.injectedXDomain,V.niceX=!1),we(p.result),B&&Be(),i.querySelectorAll(":scope > svg").forEach(v=>v.remove()),p.stateCleanup&&(p.stateCleanup(),p.stateCleanup=null),ke(i);let X=d.state||(Array.isArray(d.data)&&d.data.length===0?"empty":null);return X?(p.result=null,p.stateCleanup=Ra(i,{...d,state:X},t,a,V.height||Math.round(A/(d.aspectRatio||r.aspect||Qt.defaultAspect))),ve(i,d,u),null):(p.result=Ca(s.call(e,typeof n=="string"?n:i,V)),Ya(p.result,d),ve(i,d,u),Ar(i),$a(m,p.result,d),m.group&&Se(m.group),Sa(m),p.result)}let M={render:k,emphasis:u,linkHover:B=>de(p.result,B,{labels:m.spec?m.spec.labels:!0}),setBrush:B=>{typeof m.brushMove=="function"&&m.brushMove(B)},setConfig(B){return B&&Array.isArray(B.data)&&B.data.length&&B.state===void 0&&d.state==="loading"&&(B={...B,state:null}),d=ce({...d,...B},t,a),B&&"data"in B&&_e(t,a,d),ge(m,d),k(!0)},destroy(){p.destroyed||(p.destroyed=!0,R(),Ze(m),g&&g.disconnect(),g=null,clearTimeout(b),we(p.result),p.stateCleanup&&(p.stateCleanup(),p.stateCleanup=null),p.result=null,i.querySelectorAll(":scope > svg").forEach(B=>B.remove()),ke(i),Ba(i),Be(),Ut.get(i)===M&&Ut.delete(i))}};Ut.set(i,M);let R=La(m,i);k(!1),typeof ResizeObserver<"u"&&(g=new ResizeObserver(()=>{if(!i.isConnected){M.destroy();return}let B=za(i);h!==null&&Math.abs(B-h)<Qt.minWidthDelta||(clearTimeout(b),b=setTimeout(()=>k(!0),Qt.debounceMs))}),g.observe(i)),document.fonts&&document.fonts.status!=="loaded"&&document.fonts.ready.then(()=>{!L&&i.isConnected&&Ut.get(i)===M&&(L=!0,k(!0))});let D=Ga(p,M);return m.facade=D,D}}function jt(e,a={},r="Chart"){let t={};for(let s of Object.keys(e)){let n=e[s];typeof n=="function"&&s.startsWith("create")?t[s]=Xr(e,s,a[s]||a["*"]||{},r):t[s]=n}return t}var Ae=new WeakMap;function qe(e,a,r){let t=Zt[`${e}.${a}`];return(t&&t.universal&&t.universal[r])==="supported"}function Br(e,a={}){let r=qa(e);if(!r)return console.warn("ChartFactory.facet: selector matched no element \u2014 nothing will render."),null;let t=a.chart||{},s=t.family,n=t.method,l=Ce[s];if(!l||typeof l[n]!="function")return console.warn(`ChartFactory.facet: unknown chart '${s}.${n}'.`),null;let i=Ae.get(r);i&&!i.destroyed&&i.destroy();let c=typeof a.by=="function"?a.by:R=>R[a.by],f=typeof a.titles=="function"?a.titles:a.titles===!1?null:R=>String(R),p=a.sharedX!==!1&&qe(s,n,"xDomain"),u=a.sharedY!==!1&&qe(s,n,"yDomain"),d=a.axes==="outer";d&&(a.sharedY===!1||a.sharedX===!1)&&console.warn("ChartFactory.facet: axes: 'outer' with sharedX/sharedY: false hides axes that differ between panels \u2014 use axes: 'all' with independent domains.");let h=a.colorByPanel&&qe(s,n,"color")?Ft():null,b={charts:[],categories:[],panels:[],destroyed:!1},g=R=>{let D=new Map;for(let A of R||[]){let x=c(A);if(x==null)continue;let V=D.get(x);V||D.set(x,V=[]),V.push(A)}let B=[...D.keys()];return typeof a.sort=="function"?B.sort(a.sort):(B.sort((A,x)=>typeof A=="number"&&typeof x=="number"?A-x:String(A).localeCompare(String(x))),a.sort==="desc"&&B.reverse()),{groups:D,cats:B}},L=()=>{for(let[R,D,B]of[["x","xDomain",p],["y","yDomain",u]]){if(!B)continue;let A=1/0,x=-1/0,V=!1,w=!1;for(let v of b.charts){let G=v[R];if(typeof G!="function"||typeof G.domain!="function"||typeof G.bandwidth=="function")continue;let C=G.domain(),P=+C[0],E=+C[C.length-1];!isFinite(P)||!isFinite(E)||(w=!0,V=V||C[0]instanceof Date,P<A&&(A=P),E>x&&(x=E))}if(!w||!(x>A))continue;let X=V?[new Date(A),new Date(x)]:[A,x];for(let v of b.charts){let G=typeof v[R]=="function"&&v[R].domain?v[R].domain():null;!G||+G[0]==+X[0]&&+G[G.length-1]==+X[1]||v.setConfig({[D]:X})}}},m=R=>{let{groups:D,cats:B}=g(R);b.categories=B;let A=a.columns||Math.min(B.length||1,3);r.classList.add("d3-facet-grid"),r.style.display="grid",r.style.gridTemplateColumns=`repeat(${A}, minmax(0, 1fr))`,r.style.gap="var(--space-4)";let x=B.length-(B.length%A||A);B.forEach((V,w)=>{let X=document.createElement("div");X.className="d3-facet-panel";let v=document.createElement("div");v.className="d3-facet-chart",v.style.display="block",X.appendChild(v),r.appendChild(X),b.panels.push(X);let G={...t.config||{},data:D.get(V)};f&&G.title===void 0&&(G.title=f(V)),d&&(w%A!==0&&(G.showYAxis=!1),w<x&&(G.showXAxis=!1)),h&&(G.color=h[w%h.length]),b.charts.push(l[n](v,G))}),L()},k=()=>{for(let R of b.charts)try{R&&R.destroy&&R.destroy()}catch{}b.charts=[];for(let R of b.panels)R.remove();b.panels=[]};(!Array.isArray(a.data)||!a.data.length)&&console.warn("ChartFactory.facet: data is empty \u2014 nothing to facet."),m(a.data||[]);let M={get charts(){return[...b.charts]},get categories(){return[...b.categories]},get destroyed(){return b.destroyed},setData(R){b.destroyed||(k(),m(R||[]))},rerender(){if(!b.destroyed)for(let R of b.charts)R.rerender()},destroy(){b.destroyed||(b.destroyed=!0,k(),r.classList.remove("d3-facet-grid"),r.style.display="",r.style.gridTemplateColumns="",r.style.gap="",Ae.get(r)===M&&Ae.delete(r))}};return Ae.set(r,M),M}var Er=jt(Oo,qt.Area,"Area"),Yr=jt(Io,qt.Line,"Line"),Pr=jt(No,qt.Slope,"Slope"),Or=jt(Ho,qt.Bar,"Bar"),Ir=jt(_o,qt.Scatter,"Scatter"),Nr=jt(Wo,qt.Dot,"Dot"),Hr=jt(Zo,qt.Histogram,"Histogram"),_r=jt(Qo,qt.Donut,"Donut"),Wr=jt(Jo,qt.BoxPlot,"BoxPlot"),qr=jt(tr,qt.Calendar,"Calendar"),jr=jt(ar,qt.Sankey,"Sankey"),Ur=or,Kr=ya(()=>Ce),Ce={suggest:Kr,validate:kr,Area:Er,Line:Yr,Slope:Pr,Bar:Or,Scatter:Ir,Dot:Nr,Histogram:Hr,Donut:_r,BoxPlot:Wr,Calendar:qr,Sankey:jr,Table:Ur,RESPONSIVE:Qt,data:na,palettes:pa,rerenderAll:Oa,setTheme:rr,getLinkGroup:pr,facet:Br,createLegend:Pa,TooltipManager:ct,beeswarmDodge:le,SIZE_PRESETS:nt,DOT_STYLES:Ue,getAreaColors:Ft,getLineColors:Fe,getCSSVar:y,getCSSVarNumber:q};var ds=Ce;typeof window<"u"&&(window.ChartFactory=Ce);})();
|