{"version":3,"sources":["webpack:///./node_modules/@antv/g2plot/esm/plots/bullet/utils.js","webpack:///./node_modules/@antv/g2plot/esm/plots/bullet/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/bullet/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/bullet/index.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/accessors.js","webpack:///./node_modules/@antv/g2plot/esm/plots/histogram/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/progress/utils.js","webpack:///./node_modules/@antv/g2plot/esm/plots/pie/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/funnel/geometries/common.js","webpack:///./node_modules/@antv/g2plot/esm/plots/funnel/geometries/basic.js","webpack:///./node_modules/@antv/g2plot/esm/plots/funnel/geometries/compare.js","webpack:///./node_modules/@antv/g2plot/esm/plots/funnel/geometries/facet.js","webpack:///./node_modules/@antv/g2plot/esm/plots/funnel/geometries/dynamic-height.js","webpack:///./node_modules/@antv/g2plot/esm/plots/funnel/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/adaptor/conversion-tag.js","webpack:///./node_modules/@antv/g2plot/esm/adaptor/connected-area.js","webpack:///./node_modules/@antv/g2plot/esm/plots/column/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/types/index.js","webpack:///./node_modules/@antv/g2plot/esm/utils/data.js","webpack:///./node_modules/@antv/g2plot/esm/plots/liquid/utils.js","webpack:///./node_modules/@antv/g2plot/esm/plots/liquid/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/liquid/constants.js","webpack:///./node_modules/@antv/g2plot/esm/plots/liquid/shapes/liquid.js","webpack:///./node_modules/@antv/g2plot/esm/plots/liquid/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/waterfall/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/waterfall/utils.js","webpack:///./node_modules/@antv/g2plot/esm/plots/waterfall/shape.js","webpack:///./node_modules/@antv/g2plot/esm/plots/waterfall/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/waterfall/index.js","webpack:///./node_modules/@antv/g2plot/esm/locales/en_US.js","webpack:///./node_modules/size-sensor/lib/sensors/index.js","webpack:///./node_modules/@antv/g2plot/esm/utils/number.js","webpack:///./node_modules/@antv/g2plot/esm/plots/area/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/utils/hierarchy/util.js","webpack:///./node_modules/fmin/build/fmin.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/pack/index.js","webpack:///./node_modules/@antv/g2plot/esm/adaptor/geometries/polygon.js","webpack:///./node_modules/@antv/g2plot/esm/plots/progress/constants.js","webpack:///./node_modules/@antv/g2plot/esm/utils/transform/word-cloud.js","webpack:///./node_modules/@antv/g2plot/esm/plots/word-cloud/utils.js","webpack:///./node_modules/@antv/g2plot/esm/plots/word-cloud/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/word-cloud/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/word-cloud/shapes/word-cloud.js","webpack:///./node_modules/@antv/g2plot/esm/plots/word-cloud/index.js","webpack:///./node_modules/@antv/g2plot/esm/utils/deep-assign.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/array.js","webpack:///./node_modules/@antv/g2plot/esm/plots/histogram/adaptor.js","webpack:///./node_modules/size-sensor/lib/debounce.js","webpack:///./node_modules/@antv/g2plot/esm/utils/hierarchy/treemap.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/treemap/squarify.js","webpack:///./node_modules/@antv/g2plot/esm/plots/pie/contants.js","webpack:///./node_modules/@antv/g2plot/esm/plots/mix/utils.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/pack/siblings.js","webpack:///./node_modules/@antv/g2plot/esm/utils/pick.js","webpack:///./node_modules/size-sensor/lib/sensorPool.js","webpack:///./node_modules/size-sensor/lib/sensors/object.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/count.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/each.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/find.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/sum.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/sort.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/path.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/ancestors.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/descendants.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/leaves.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/links.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/iterator.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/hierarchy/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/radial-bar/utils.js","webpack:///./node_modules/@antv/g2plot/esm/plots/radial-bar/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/radial-bar/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/radial-bar/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/pie/adaptor.js","webpack:///./node_modules/d3-regression/dist/d3-regression.js","webpack:///./node_modules/@antv/g2plot/esm/interactions/drill-down.js","webpack:///./node_modules/@antv/g2plot/esm/utils/transform/chord.js","webpack:///./node_modules/@antv/g2plot/esm/plots/chord/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/chord/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/chord/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/gauge/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/adaptor/geometries/base.js","webpack:///./node_modules/@antv/g2plot/esm/plots/scatter/util.js","webpack:///./node_modules/@antv/g2plot/esm/plots/scatter/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/line/constants.js","webpack:///./node_modules/@antv/g2plot/esm/plots/line/interactions/marker-active.js","webpack:///./node_modules/@antv/g2plot/esm/plots/line/interactions/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/line/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/gauge/shapes/indicator.js","webpack:///./node_modules/@antv/g2plot/esm/plots/gauge/shapes/meter-gauge.js","webpack:///./node_modules/@antv/g2plot/esm/plots/gauge/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/bar/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/ring-progress/constants.js","webpack:///./node_modules/@antv/g2plot/esm/plots/ring-progress/index.js","webpack:///./node_modules/@antv/g2plot/esm/utils/flow.js","webpack:///./node_modules/@antv/g2plot/esm/utils/template.js","webpack:///./node_modules/@antv/g2plot/esm/utils/dom.js","webpack:///./node_modules/@antv/g2plot/esm/utils/geometry.js","webpack:///./node_modules/@antv/g2plot/esm/utils/label.js","webpack:///./node_modules/@antv/g2plot/esm/utils/path.js","webpack:///./node_modules/@antv/g2plot/esm/utils/kebab-case.js","webpack:///./node_modules/@antv/g2plot/esm/utils/context.js","webpack:///./node_modules/@antv/g2plot/esm/utils/measure-text.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/treemap/slice.js","webpack:///./node_modules/@antv/g2plot/esm/plots/bar/constants.js","webpack:///./node_modules/@antv/g2plot/esm/plots/bar/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/funnel/index.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/treemap/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/sunburst/constant.js","webpack:///./node_modules/@antv/g2plot/esm/utils/hierarchy/partition.js","webpack:///./node_modules/@antv/g2plot/esm/plots/sunburst/utils.js","webpack:///./node_modules/@antv/g2plot/esm/plots/sunburst/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/sunburst/index.js","webpack:///./node_modules/size-sensor/lib/id.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/pack/enclose.js","webpack:///./node_modules/@antv/g2plot/esm/plots/treemap/utils.js","webpack:///./node_modules/@antv/g2plot/esm/plots/treemap/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/treemap/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/treemap/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/funnel/constant.js","webpack:///./node_modules/@antv/g2plot/esm/utils/transform/histogram.js","webpack:///./node_modules/@antv/g2plot/esm/plots/line/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/tiny-area/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/adaptor/pattern.js","webpack:///./node_modules/@antv/g2plot/esm/plots/pie/utils.js","webpack:///./node_modules/size-sensor/lib/sensors/resizeObserver.js","webpack:///./node_modules/@antv/g2plot/esm/plots/progress/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/tiny-line/utils.js","webpack:///./node_modules/@antv/g2plot/esm/plots/box/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/box/utils.js","webpack:///./node_modules/@antv/g2plot/esm/plots/box/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/box/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/ring-progress/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/tiny-column/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/utils/statistic.js","webpack:///./node_modules/@antv/g2plot/esm/plots/tiny-line/index.js","webpack:///./node_modules/@antv/g2plot/esm/interactions/actions/reset-button.js","webpack:///./node_modules/@antv/g2plot/esm/interactions/brush.js","webpack:///./node_modules/@antv/g2plot/esm/adaptor/brush.js","webpack:///./node_modules/@antv/g2plot/esm/plots/pie/interactions/actions/legend-active.js","webpack:///./node_modules/@antv/g2plot/esm/plots/pie/interactions/util.js","webpack:///./node_modules/@antv/g2plot/esm/plots/pie/interactions/actions/statistic-active.js","webpack:///./node_modules/@antv/g2plot/esm/plots/pie/interactions/index.js","webpack:///./node_modules/@antv/g2plot/esm/interactions/actions/drill-down.js","webpack:///./node_modules/@antv/g2plot/esm/constant.js","webpack:///./node_modules/@antv/g2plot/esm/adaptor/geometries/point.js","webpack:///./node_modules/@antv/g2plot/esm/utils/transform/quantile.js","webpack:///./node_modules/@antv/g2plot/esm/plots/violin/utils.js","webpack:///./node_modules/@antv/g2plot/esm/plots/violin/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/violin/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/violin/index.js","webpack:///./node_modules/@antv/g2plot/esm/utils/color/blend.js","webpack:///./node_modules/@antv/g2plot/esm/plots/venn/layout/circleintersection.js","webpack:///./node_modules/@antv/g2plot/esm/plots/venn/layout/layout.js","webpack:///./node_modules/@antv/g2plot/esm/plots/venn/layout/diagram.js","webpack:///./node_modules/@antv/g2plot/esm/plots/venn/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/venn/utils.js","webpack:///./node_modules/@antv/g2plot/esm/plots/venn/shape.js","webpack:///./node_modules/@antv/g2plot/esm/plots/venn/label.js","webpack:///./node_modules/@antv/g2plot/esm/plots/venn/interactions/util.js","webpack:///./node_modules/@antv/g2plot/esm/plots/venn/interactions/actions/active.js","webpack:///./node_modules/@antv/g2plot/esm/plots/venn/interactions/actions/highlight.js","webpack:///./node_modules/@antv/g2plot/esm/plots/venn/interactions/actions/selected.js","webpack:///./node_modules/@antv/g2plot/esm/plots/venn/interactions/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/venn/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/venn/index.js","webpack:///./node_modules/pdfast/src/index.js","webpack:///./node_modules/@antv/g2plot/esm/utils/hierarchy/pack.js","webpack:///./node_modules/@antv/g2plot/esm/plots/circle-packing/utils.js","webpack:///./node_modules/@antv/g2plot/esm/plots/circle-packing/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/circle-packing/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/circle-packing/index.js","webpack:///./node_modules/@antv/g2plot/esm/utils/matrix.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/partition.js","webpack:///./node_modules/@antv/g2plot/esm/plots/sankey/sankey/align.js","webpack:///./node_modules/@antv/g2plot/esm/plots/sankey/sankey/helper.js","webpack:///./node_modules/@antv/g2plot/esm/plots/sankey/sankey/sankey.js","webpack:///./node_modules/@antv/g2plot/esm/plots/sankey/layout.js","webpack:///./node_modules/@antv/g2plot/esm/plots/sankey/circle.js","webpack:///./node_modules/@antv/g2plot/esm/plots/sankey/helper.js","webpack:///./node_modules/@antv/g2plot/esm/plots/sankey/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/sankey/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/sankey/interactions/actions/node-drag.js","webpack:///./node_modules/@antv/g2plot/esm/plots/sankey/interactions/node-draggable.js","webpack:///./node_modules/@antv/g2plot/esm/plots/sankey/index.js","webpack:///./node_modules/@antv/g2plot/esm/core/locale.js","webpack:///./node_modules/@antv/g2plot/esm/utils/transform/percent.js","webpack:///./node_modules/@antv/g2plot/esm/plots/tiny-line/adaptor.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/histogram/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/scatter/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/scatter/index.js","webpack:///./node_modules/@antv/g2plot/esm/adaptor/geometries/area.js","webpack:///./node_modules/@antv/g2plot/esm/adaptor/geometries/line.js","webpack:///./node_modules/@antv/g2plot/esm/adaptor/geometries/interval.js","webpack:///./node_modules/@antv/g2plot/esm/adaptor/geometries/edge.js","webpack:///./node_modules/@antv/g2plot/esm/adaptor/geometries/schema.js","webpack:///./node_modules/@antv/g2plot/esm/adaptor/geometries/violin.js","webpack:///./node_modules/@antv/g2plot/esm/plots/area/constants.js","webpack:///./node_modules/@antv/g2plot/esm/plots/area/index.js","webpack:///./node_modules/size-sensor/lib/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/column/constants.js","webpack:///./node_modules/@antv/g2plot/esm/plots/column/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/progress/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/adaptor/common.js","webpack:///./node_modules/@antv/g2plot/esm/plots/gauge/constants.js","webpack:///./node_modules/@antv/g2plot/esm/plots/facet/utils.js","webpack:///./node_modules/@antv/g2plot/esm/plots/facet/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/facet/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/facet/index.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/treemap/round.js","webpack:///./node_modules/@antv/g2plot/esm/interactions/drag-move.js","webpack:///./node_modules/pdfast/src/helper.js","webpack:///./node_modules/@antv/g2plot/esm/plots/dual-axes/types.js","webpack:///./node_modules/@antv/g2plot/esm/plots/dual-axes/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/dual-axes/util/option.js","webpack:///./node_modules/@antv/g2plot/esm/plots/dual-axes/util/legend.js","webpack:///./node_modules/@antv/g2plot/esm/plots/dual-axes/util/geometry.js","webpack:///./node_modules/@antv/g2plot/esm/plots/dual-axes/util/render-sider.js","webpack:///./node_modules/@antv/g2plot/esm/plots/dual-axes/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/dual-axes/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/radar/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/radar/interactions/radar-tooltip-action.js","webpack:///./node_modules/@antv/g2plot/esm/plots/radar/interactions/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/radar/index.js","webpack:///./node_modules/@antv/g2plot/esm/core/plot.js","webpack:///./node_modules/@antv/g2plot/esm/plots/rose/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/rose/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/rose/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/tiny-column/constants.js","webpack:///./node_modules/@antv/g2plot/esm/plots/tiny-column/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/tiny-area/constants.js","webpack:///./node_modules/@antv/g2plot/esm/plots/tiny-area/index.js","webpack:///./node_modules/@antv/g2plot/esm/utils/pattern/util.js","webpack:///./node_modules/@antv/g2plot/esm/utils/pattern/dot.js","webpack:///./node_modules/@antv/g2plot/esm/utils/pattern/line.js","webpack:///./node_modules/@antv/g2plot/esm/utils/pattern/square.js","webpack:///./node_modules/@antv/g2plot/esm/utils/pattern/index.js","webpack:///./node_modules/size-sensor/lib/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/mix/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/mix/interactions/utils.js","webpack:///./node_modules/@antv/g2plot/esm/plots/mix/interactions/association.js","webpack:///./node_modules/@antv/g2plot/esm/plots/mix/index.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/cluster.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/stratify.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/tree.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/treemap/binary.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/treemap/sliceDice.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/treemap/resquarify.js","webpack:///./node_modules/@antv/g2plot/esm/utils/view.js","webpack:///./node_modules/@antv/g2plot/esm/lab.js","webpack:///./node_modules/@antv/g2plot/esm/utils/tooltip.js","webpack:///./node_modules/@antv/g2plot/esm/utils/conversion.js","webpack:///./node_modules/@antv/g2plot/esm/plots/bidirectional-bar/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/bidirectional-bar/utils.js","webpack:///./node_modules/@antv/g2plot/esm/plots/bidirectional-bar/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/bidirectional-bar/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/tiny-line/constants.js","webpack:///./node_modules/@antv/g2plot/esm/plugin/index.js","webpack:///./node_modules/@antv/g2plot/esm/locales/zh_CN.js","webpack:///./node_modules/@antv/g2plot/esm/utils/invariant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/gauge/utils.js","webpack:///./node_modules/@antv/g2plot/esm/utils/padding.js","webpack:///./node_modules/@antv/g2plot/esm/core/global.js","webpack:///./node_modules/@antv/g2plot/esm/plots/heatmap/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/heatmap/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/heatmap/shapes/circle.js","webpack:///./node_modules/@antv/g2plot/esm/plots/heatmap/shapes/square.js","webpack:///./node_modules/@antv/g2plot/esm/plots/heatmap/index.js","webpack:///./node_modules/@antv/g2plot/node_modules/d3-hierarchy/src/treemap/dice.js","webpack:///./node_modules/@antv/g2plot/esm/plots/stock/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/stock/utils.js","webpack:///./node_modules/@antv/g2plot/esm/plots/stock/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/stock/index.js"],"names":["transformData","options","data","xField","measureField","rangeField","targetField","layout","ds","scales","forEach","item","index","_a","sort","a","b","d","i","range","push","rKey","String","mKey","length","tKey","min","Math","apply","flat","Infinity","max","reverse","geometry","params","chart","bulletStyle","color","size","label","r","yField","seriesField","isStack","interval","style","geometries","tooltip","m","t","point","shape","coordinate","transpose","ext","meta","_b","xAxis","yAxis","extData","sync","axis","legend","removeInteraction","rangeGeometry","measureGeometry","targetGeometry","type","measure","target","adaptor","DEFAULT_OPTIONS","getDefaultOptions","tickLine","line","fillOpacity","position","showMarkers","_super","Bullet","_this","this","arguments","prototype","changeData","updateOption","getSchemaAdaptor","optional","f","required","Error","Histogram","binField","binNumber","binWidth","stackField","getProgressData","percent","clampPercent","Pie","emit","BEFORE_CHANGE_DATA","fromData","prevOptions","angleField","prevData","curData","update","render","AFTER_CHANGE_DATA","originData","formatData","maxSize","minSize","maxYFieldValue","row","conversionTagComponent","getLineCoordinate","conversionTag","getOptions","formatter_1","formatter","obj","Number","isNaN","lineOption","top","text","content","offsetX","offsetY","autoRotate","textAlign","textBaseline","annotation","field","funnelStyle","state","fields","base","colorField","tooltipFields","concat","mapping","geo","adjust","isTransposed","actions","datum","datumIndex","initLineOption","start","end","basicFunnel","scale","compareField","facet","padding","eachView","view","rowIndex","columnIndex","formatterData","defaultFacetLabel","offset","once","views","viewIndex","ratio","compareFunnel","facetFunnel","sum","total","x","y","preItemX","preItemY","dynamicHeightFunnel","defaultOptions","locale","i18n","defaultOption","title","name","value","get","conversion","lineWidth","stroke","dynamicHeight","getConversionTagOptionsWithDefaults","horizontal","spacing","arrow","headSize","fill","fontSize","parsePoints","element","getModel","points","convertPoint","renderArrowTag","config","elemPrev","elemNext","group","getCoordinate","pointPrev","pointNext","totalHeight","totalWidth","addShape","id","getElementId","mappingData","origin","nextElement","attrs","renderTextTag","_c","getData","textShape","textWidth","getBBox","width","cWidth","cEnd","ceil","textAdjusted","slice","attr","renderTag","disabled","theme","columnWidthRatio","container","addGroup","geom","elements","elem","idx","INTERACTION_MAP","hover","click","getStartStages","trigger","action","arg","connectedArea","disable","clear","interaction","columnStyle","isPercent","isGroup","groupField","percentData","chartData","stackedItem","find","v","tooltipOptions","toFixed","p","widthRatio","percentYMeta","minLimit","maxLimit","isRange","callback","cfg","undefined","join","columnTooltip","tooltipFormatter_1","customItems","originalItems","items","datas","_origin","isBar","pattern","brush","adjustYMetaByZero","numberData","filter","gtZero","every","ltZero","transformDataToNodeLinkData","sourceField","weightField","rawFields","Array","isArray","nodes","links","nodesMap","nodesIndex","source","weight","rawData","Object","values","processIllegalData","processData","WARN","CAT_VALUE","getLiquidData","liquidStyle","radius","outline","wave","animation","getTheme","defaultColor","background","customInfo","updated","statistic","getController","metaFormatter","contentOpt","plotType","opacity","lineHeight","border","distance","count","DURATION","lerp","factor","getFillAttrs","getLineAttrs","defaultAttrs","strokeOpacity","getWaterWavePositions","stage","waveLength","amplitude","PI","getWaterWavePath","waterLevel","phase","cx","cy","curves","path","_phase","left","waveRight","c","pos","addWaterWave","level","waveCount","waveAttrs","clip","bbox","maxX","minX","height","maxY","minY","matrix","stopAnimate","animate","duration","repeat","e","console","warn","pin","w","h","theta","asin","dy","sin","dx","cos","x0","y0","cpX","cpY","circle","rx","ry","diamond","triangle","rect","GOLDEN_SECTION_RATIO","draw","radio","center","parsePoint","minXPoint","halfWidth","outlineAttrs","innerRadius","builtInShapeByName","buildPath","shapePath","waves","clipPath","setClip","Liquid","Y_FIELD","DIFF_FIELD","ABSOLUTE_FIELD","IS_TOTAL","leaderLine","lineDash","interactions","risingFill","fallingFill","waterfallStyle","grid","newYField","newData","processed","map","dIdx","getRectPath","first","defaultStyle","localeTotalLabel","colorMapping","Y_FIELD_META","alias","marker","symbol","custom","labelMode","showCrosshairs","shared","geometry_1","nextPoints","rectPath","parsePath","fillAttrs","leaderLineCfg","linkPath","Waterfall","EN_US_LOCALE","general","increase","decrease","root","slider","scrollbar","waterfall","defineProperty","exports","createSensor","_object","_resizeObserver","ResizeObserver","isRealNumber","isBetween","areaStyle","pointMapping","lineMapping","startOnZero","pointState","primary","area","args","lineParams","sizeField","pointParams","areaGeometry","g","NODE_INDEX_FIELD","CHILD_NODE_COUNT","NODE_ANCESTORS_FIELD","INVALID_FIELD_ERR_MSG","getField","defaultField","TypeError","getAllNodes","parent_1","index_1","each","node","parent","ancestors","call","n","depth","children","eachNode","global","factory","bisect","parameters","maxIterations","tolerance","fA","fB","delta","mid","fMid","abs","zeros","zerosM","dot","ret","norm2","sqrt","weightedSum","w1","v1","w2","v2","j","nelderMead","maxDiff","nonZeroDelta","zeroDelta","minErrorDelta","minTolerance","rho","chi","psi","sigma","N","simplex","fx","updateSimplex","sortOrder","centroid","reflected","contracted","expanded","iteration","history","sortedSimplex","worst","shouldReduce","wolfeLineSearch","pk","current","next","c1","c2","phi0","phiPrime0","fxprime","phi","phi_old","phiPrime","a0","zoom","a_lo","a_high","phi_lo","conjugateGradient","initial","temp","yk","alpha","delta_k","beta_k","gradientDescent","learnRate","gradientDescentLineSearch","functionCalls","inner","defaultRadius","radiusLeaf","packChildren","k","translateChild","pack","eachBefore","eachAfter","polygon","DEFAULT_COLOR","font","spiral","timeInterval","wordCloud","words","transform","tagCloud","key","imageMask","createMask","result","tags","_tags","tag","cloudRadians","cw","ch","cloudText","cloudFont","cloudFontNormal","cloudFontSize","cloudRotate","random","cloudPadding","cloudSprite","contextAndRatio","di","sprite","context","clearRect","maxh","save","measureText","rotate","sr","cr","wcr","wsr","hcr","hsr","translate","fillText","strokeText","restore","xoff","yoff","x1","y1","hasText","pixels","getImageData","w32","seen","seenRow","cloudCollide","board","sw","last","lx","sx","msx","cloudBounds","bounds","b0","b1","collideRects","archimedeanSpiral","rectangularSpiral","sign","zeroArray","cloudCanvas","document","createElement","functor","spirals","archimedean","rectangular","fontWeight","fontStyle","canvas","cloud","getContext","fillStyle","strokeStyle","place","dxdy","startX","startY","maxDelta","s","dt","step","Date","now","hasImage","_bounds","img","can","cxt","drawImage","imageData","tmp","flag","_","rawOptions","chartPadding","appendPadding","ele","wordField","wordStyle","autoFit","placementStrategy","fontFamily","arr","getSingleKeyValues","getFontSizeMapping","getSize","getRotate","word","containerSize","resolvePadding","right","bottom","processImageMask","Promise","res","rej","HTMLImageElement","image_1","Image","crossOrigin","src","onload","onerror","ERROR","fMin_1","fMax_1","min_1","max_1","resolveRotate","rotation","rotationSteps","perSize","floor","numbers","WORD_CLOUD_COLOR_FIELD","showTitle","rotateRatio","reflect","nice","getTextAttrs","WordCloud","handler","then","catch","triggerResize","destroyed","execAdaptor","window","setTimeout","MAX_MIX_LEVEL","toString","isType","isObjectLike","isPlainObject","proto","getPrototypeOf","deep","dist","maxLevel","hasOwnProperty","deepAssign","rst","_i","shuffle","array","from","plotData","_default","fn","delay","timer","_len","_key","clearTimeout","tile","round","ignoreParentValue","paddingInner","paddingOuter","paddingTop","paddingRight","paddingBottom","paddingLeft","as","getTileMethod","treemap","tileMethod","partition","prop","indexOf","squarifyRatio","nodeValue","sumValue","minValue","maxValue","newRatio","minRatio","beta","rows","i0","i1","dice","squarify","pieStyle","components","PLOT_ADAPTORS","pie","column","bar","gauge","progress","scatter","histogram","funnel","PLOT_CONSTRUCTOR","DEFAULT_OPTIONS_MAP","execPlotAdaptor","plot","cls","module","error","a2","b2","d2","intersects","dr","score","ab","Node","previous","packEnclose","circles","aa","ca","sj","sk","pick","keys","removeSensor","getSensor","_id","_interopRequireDefault","_sensors","_constant","__esModule","Sensors","sensorId","getAttribute","SizeSensorId","newId","setAttribute","sensor","removeAttribute","destroy","_debounce","listeners","newSensor","getComputedStyle","contentDocument","defaultView","addEventListener","resizeListener","display","overflow","pointerEvents","zIndex","SensorClassName","SensorTabIndex","appendChild","listener","bind","cb","parentNode","removeEventListener","removeChild","unbind","splice","that","pop","compare","ancestor","leastCommonAncestor","aNodes","bNodes","leaves","hierarchy","Map","mapChildren","objectChildren","child","childs","computeHeight","node_copy","copyData","constructor","descendants","copy","Symbol","iterator","getScaleMax","maxAngle","yData","formatRadian","getStackedData","stackedData","valueItem","barStyle","minColumnWidth","minBarWidth","maxColumnWidth","maxBarWidth","columnBackground","barBackground","actualData","startAngle","endAngle","intervalGeometry","RadialBar","percentageField_1","zIndexReversed","sortZIndex","labelCfg","content_1","dataum","angleScale","getScaleByField","percentage","LABEL_LAYOUT_TYPE_MAP","outer","spider","labelLayoutType","labelLayoutCfg","transformStatisticOptions","titleOpt_1","contentOpt_1","dataValue","pieAnnotation","annotations","enable","startStages_1","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","_arr","_n","_d","_e","_s","done","err","u","isFinite","xv","yv","X","Float64Array","Y","ux","uy","visitPoints","iterations","determination","uY","predict","SSE","SST","sse","sst","angle","atan2","midpoint","interpose","xmin","xmax","l","log","LOG10E","precision","pow","maxIter","px","iter","found","p0","p1","mp","a1","ols","uX","uXY","uX2","slope","intercept","exponential","domain","YL","XY","XYL","X2Y","ly","xy","_ols","_ols2","exp","out","rSquared","linear","X2","median","maxiters","epsilon","loess","bandwidth","_points","_points2","bw","yhat","residuals","robustWeights","edge","W","denom","xk","tricube","xkw","updateInterval","medianResidual","_w","output","val","cnt","prev","logarithmic","E","lb","quad","quadratic","x2","X3","X4","n0","X2X2","polynomial","order","o","coefficients","_o","lhs","rhs","coef","gaussianElimination","uncenter","z","power","YS","regressionExp","regressionLinear","regressionLoess","regressionLog","regressionPoly","regressionPow","regressionQuad","isParentNode","inCenter","event","centerX","centerY","getRadius","showEnable","isEnable","nodeWidthRatio","nodePaddingRatio","sourceWeight","targetWeight","sortBy","processGraph","nodeById","edges","inEdges","outEdges","frequency","sortNodes","sortMethods","localeCompare","method","layoutNodes","len","nodePaddingRatio_1","margin_1","nodeWidthRatio_1","totalValue_1","deltaX","deltaX_1","locatingEdges","valueById_1","sId","tId","sNode","tNode","sValue","currentSValue","sStart","sEnd","tValue","currentTValue","tStart","tEnd","chordLayout","chordLayoutOptions","chordLayoutInputData","outputNodes","outputLinks","X_FIELD","NODE_COLOR_FIELD","EDGE_COLOR_FIELD","nodeStyle","edgeStyle","labelEmit","showContent","nodesData","isNode","edgesData","link","chordData","nodeGeometry","nodeView","createView","edgeGeometry","edgeView","edgeOptions","Chord","indicator","gaugeStyle","meter","rangeWidth","indicatorData","rangeData","rangeColor","contentOption","transformContent","other","getMappingField","shapeField","styleField","unshift","mappingFields","tileMappingField","includes","getMappingFunction","func","REGRESSION_MAP","poly","getQuadrantDefaultConfig","xBaseline","yBaseline","textOffset","defaultConfig","regionStyle","lineStyle","labelStyle","splinePath","xScaleView","yScaleView","pathData","convert","getPath","regressionLine","algorithm","reg","getMeta","xFieldValue","yFieldValue","xIsPositiveNumber","yIsPositiveNumber","getMetaMinMax","fieldMeta","getCustomValue","transformOptions","isOneX","isOneY","curr","meta_1","pointStyle","newOptions","shapeLegend","sizeLegend","showLegend","scatterGeometry","scatterAnnotation","quadrant","annotationOptions","labels_1","labels","regionStyle_1","defaultConfig_1","quadrants","split","style_1","top_1","defaultStyle_1","crosshairs","MarkerActiveAction","active","getView","evt","items_1","setState","reset","Line","pointer","y2","steps","STEP","stepRatio","STEP_RATIO","COORD_START_ANGLE","COORD_END_ANGLE","GAP","TOTAL","INTERVAL","getCenter","getAngle","START_ANGLE","END_ANGLE","getSectorPath","Gauge","indicatorView","rangeView","verticalAxis","horizontalAxis","barWidthRatio","RingProgress","flow","flows","param","reduce","template","replace","RegExp","getContainerSize","clientWidth","parseInt","clientHeight","findGeometry","getAllElements","getAllElementsRecursively","subView","getAllGeometriesRecursively","transformLabel","labelOptions","points2Path","isInCircle","length_1","smoothBezier","smooth","isLoop","constraint","prevPoint","nextPoint","cps","hasConstraint","sub","d0","d1","cp0","add","cp1","shift","catmullRom2bezier","crp","pointList","cp2","controlPointList","getSplinePath","constaint","prePoint","kebabCase","match","toLowerCase","getCanvasContext","fontVariant","ctx","metrics","marginRatio","Bar","switchedFieldOptions","Funnel","condition","status","getStates","stateObjects","states","CONVERSATION_FIELD","PERCENT_FIELD","TOTAL_PERCENT_FIELD","paddingStack","positionNode","SUNBURST_ANCESTOR_FIELD","SUNBURST_Y_FIELD","SUNBURST_PATH_FIELD","RAW_FIELDS","hierarchyConfig","sunburstStyle","drilldown","enabled","activeDepth","_f","ancestorNode","nodeInfo","coord","pathFormatter","valueFormatter","adaptorInteraction","drillDownConfig","Sunburst","extendBasis","B","enclosesWeakAll","enclosesNot","encloseBasis2","encloseBasis3","enclosesWeak","encloseBasis","encloseBasis1","r1","r2","x21","y21","r21","x3","y3","r3","a3","b3","c3","d3","xa","xb","ya","yb","A","C","findInteraction","interactionType","enableInteraction","enableDrillInteraction","resetDrillDown","drillDownInteraction","drillDownAction","enableDrillDown","curPath","assign","rectStyle","common","viewZoomInteraction","getCanvas","on","ev","preventDefault","off","breadCrumb","rootText","dividerText","textStyle","cursor","activeTextStyle","Treemap","transData","FUNNEL_PERCENT","FUNNEL_MAPPING_VALUE","FUNNEL_CONVERSATION","FUNNEL_TOTAL_PERCENT","PLOYGON_X","PLOYGON_Y","getBinKey","sturges","LN2","binHistogram","originData_copy","_binWidth","_defaultBinNumber","bins","groups","bin","binKey","groupKey","groupKeyBinKey","lineShape","areaMapping","areaState","second","areaParams","lineGeometry","pointOptions","lineOptions","seriesData","patternOption","colorAttribute","getFields","seriesValue","getMappingValue","CanvasPattern","backgroundColor","styleOption","getTotalValue","adaptOffset","defaultOffset","endsWith","parseFloat","isAllZero","observe","disconnect","Progress","getTinyData","BOX_RANGE","BOX_RANGE_ALIAS","BOX_SYNC_NAME","OUTLIERS_VIEW_ID","boxStyle","low_1","q1_1","median_1","q3_1","high_1","yFieldName","schema","outliersPoint","outliersField","outliersStyle","outliersView","outliersViewData","outliersData","baseMeta","syncName","Box","adapteStyle","styleObject","justifyContent","alignItems","shapeStyleKeys","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","setStatisticContainerStyle","renderStatistic","titleOpt","option","html","containerW","liquidShape","getCanvasBBox","getWidth","filteredData","customHtml","renderGaugeStatistic","polarCoord","polarCenter","polarRadius","polarMaxY","containerWidth","TinyLine","PADDING_RIGHT","PADDING_TOP","BUTTON_ACTION_CONFIG","default","buttonStyle","ButtonAction","buttonGroup","buttonCfg","getButtonCfg","drawButton","foregroundGroup","drawText","drawBackground","buttonShape","toBack","resetPosition","setMatrix","show","hide","remove","isPointInView","isInPlot","getInteractionCfg","brushType","mask","maskType","maskStyle","processing","rollback","isInShape","BRUSH_TYPES","brushInteraction","buttonConfig","button","PieLegendAction","getActiveElements","delegateObject","getDelegationObject","component","item_1","field_1","getActiveElementLabels","labelsContainer","getChildren","transfrom","elementLabels","labelShape","isPolar","middleAngle","getCurrentElement","StatisticAction","getAnnotations","_view","getInitialAnnotation","initialAnnotation","init","change","colorField_1","getGroupedFields","toFront","annotationController","initialStatistic","PIE_STATISTIC","PADDING","PADDING_LEFT","BREAD_CRUMB_NAME","DEFAULT_BREAD_CRUMB_CONFIG","HIERARCHY_DATA_TRANSFORM_PARAMS","DrillDownAction","historyCache","breadCrumbGroup","breadCrumbCfg","drill","drawBreadCrumb","back","backTo","hideCrumbGroup","drillData","nodeData","drawBreadCrumbGroup","cache","record","textShapeBox","targetId","newHistoryCache","findIndex","dividerShape","dividerBox","AXIS_META_CONFIG_KEYS","quantileSorted","swap","quickselect","sd","newLeft","newRight","quantile","multiQuantileSelect","results","quantileIndex","quantileSelect","indices","stack","toBoxValue","low","high","q1","q3","minMax","toViolinValue","pdfOptions","pdfResults","create","violinSize","violinY","transformViolinData","kde","sampleSize","group_1","records","resultList","seriesGroup","series","VIOLIN_Y_FIELD","VIOLIN_SIZE_FIELD","MIN_MAX_FIELD","QUANTILE_FIELD","MEDIAN_FIELD","VIOLIN_VIEW_ID","MIN_MAX_VIEW_ID","QUANTILE_VIEW_ID","MEDIAN_VIEW_ID","syncViewPadding","violinStyle","alignTick","TOOLTIP_FIELDS","adjustCfg","violin","boxView","box","minMaxView","quantileView","medianView","legendField_1","legendOptions","startsWith","violinView","Violin","c0","blendObject","normal","multiply","screen","overlay","darken","lighten","dodge","burn","innerBlend","mode","blend","blendRgbArr","colorToArr","r0","g0","g1","rgbaArr","rgb2arr","toRGB","SMALL","intersectionArea","stats","intersectionPoints","getIntersectionPoints","innerPoints","containedInCircles","arcArea","polygonArea","arcs","p2","midPoint","arc","parentIndex","angleDiff","circleArea","smallest","disjoint","intersect","circleCircleIntersection","acos","circleOverlap","venn","areas","initialLayout","bestInitialLayout","loss","lossFunction","addMissingAreas","setid","setids","solution","setid_1","positions","distanceFromIntersectArea","overlap","ids","pairs","sets","getDistanceMatrices","distances","constraints","constrainedMDSGradient","xi","yi","xj","yj","dij","squaredDistance","distance_1","greedyLayout","constrained","constrainedMDSLayout","constrainedLoss","greedyLoss","restarts","matrices","norm","best","set","setOverlaps","rowid","mostOverlapped","positioned","isPositioned","positionSet","setIndex","extraPoints","bestLoss","bestPoint","localLoss","overlaps","getCircles","getBoundingBox","hi","lo","xRange","yRange","scaleSolution","xScaling","yScaling","scaling","xOffset","yOffset","scaled","circleMargin","interior","exterior","margin","computeTextCentre","valid","areaStats","getOverlappingCircles","circleids","circleid","computeTextCentres","overlapped","areaids","exclude","centre","circlePath","intersectionAreaPath","wide","ID_FIELD","PATH_FIELD","blendMode","selected","inactive","defaultInteractions","getColorMap","colorPalette","setsField","colorMap","colorPaletteLen","colorArr","JSON","stringify","layoutVennData","vennData","textCenters","setCircles","test","islegalSets","legalArr","testArr","segments","getMarker","markerCfg","VennLabel","getLabelPoint","customLabelInfo","placeElementsOrdered","ElementActiveAction","VennElementActive","syncElementsPos","toggle","ElementHighlightAction","VennElementHighlight","highlight","ElementSelectedAction","ElementSingleSelectedAction","VennElementSelected","VennElementSingleSelected","LEGEND_SPACE","colors10","colors20","palette","transformColor","map_1","tempPadding","currSets","filterSets","viewBBox","colorOptions","vennInteraction","MAP_1","Venn","forceFit","DEFAULT_SIZE","DEFAULT_WIDTH","LN_2","self","helper","kernel","generatePartialAreas","partialAreas","accumulator","getUnifiedMinMax","getUnifiedMinMaxMulti","arrMulti","relaxMin","relaxMax","isNumber","findMinMulti","findMaxMulti","normalizedMinMax","buckets","xToBucket","partialArea","fullArea","initalValue","bucket","leftBlockCount","rightBlockCount","spilledAreaLeft","spilledAreaRight","startGradPos","inside","gradAccumulator","getExpectedValueFromPdf","pdf","expected","getXWithLeftTailArea","getPerplexity","entropy","ln","packLayout","resolvePaddingForCircle","wSize","hSize","restWidthPadding","restHeightPadding","finalTop","finalRight","finalBottom","finalLeft","finalPadding","finalSize","diameter","tempAppendPadding","appendPaddingByDrilldown","circleSize","nameFormatter","CirclePacking","ORIGIN_MATRIX","ulMatrix","targetDepth","justify","sourceLinks","targetLinks","constant","sumBy","maxValueBy","minValueBy","ascendingSourceBreadth","ascendingBreadth","ascendingTargetBreadth","defaultId","defaultNodes","graph","defaultLinks","computeLinkBreadths","nodes_1","py","linkSort","align","sankey","computeNodeLinks","computeNodeValues","computeNodeDepths","computeNodeHeights","computeNodeBreadths","nodes_2","nodes_3","fixedValue","Set","maxDepth","computeNodeLayers","kx","columns","nodes_4","layer","columns_1","initializeNodeBreadths","ky","columns_2","nodes_6","nodes_5","reorderLinks","relaxRightToLeft","relaxLeftToRight","column_1","value_1","targetTop","dy_1","reorderNodeLinks","resolveCollisions","column_2","value_2","sourceTop","dy_2","subject","resolveCollisionsBottomToTop","resolveCollisionsTopToBottom","dy_3","dy_4","targetLinks_1","sourceLinks_2","sourceLinks_1","targetLinks_2","nodes_7","nodeId","nodeAlign","nodeDepth","nodeSort","nodeWidth","nodePadding","extent","ALIGN_METHOD","getNodeAlignFunction","sankeyLayoutOptions","sankeyLayout","sankeyProcessor","layoutData","tx","getNodes","getMatrix","graphMatrix","pre","cutoffCircle","removedData","visited","DFS","dfsNode","isNodeLink","dataType","getNodeWidthRatio","getNodePaddingRatio","transformToViewsData","sankeyLayoutInputData","COLOR_FIELD","NODES_VIEW_ID","EDGES_VIEW_ID","nodeState","edgeState","nodeDraggable","DRAG_INTERACTION","nodeInteractions","edgeInteractions","SankeyNodeDragAction","isDragging","isNodeElement","getNodeView","getEdgeView","getCurrentDatumIdx","currentElementIdx","prevNodeAnimateCfg","prevEdgeAnimateCfg","currentPoint","prevDatum","datumGap_1","getHeight","nextDatum","name_1","edgeData","Sankey","isLast","appear","enter","nodesView","edgesView","LocaleMap","registerLocale","localeObj","getLocale","sumMap","groupValue","has","getDeepPercent","getDataWhetherPecentage","asField","constantZero","HISTOGRAM_X_FIELD","HISTOGRAM_Y_FIELD","Scatter","BEFORE_RENDER","FILTER","filterData","RESET","stepType","connectNulls","otherAdaptor","dodgeBy","dodgePadding","intervalPadding","Area","ver","_sensorPool","Column","progressStyle","axes","annotationOption","limitInPlot","some","RANGE_VALUE","RANGE_TYPE","PERCENT","INDICATEOR_VIEW_ID","RANGE_VIEW_ID","ticks","subTickLine","lineCap","tickCount","tickInterval","execViewAdaptor","viewOfG2","facetAdaptor","facetType","restFacetCfg","viewOptions","plotOptions","rowTitle","columnTitle","Facet","throttle","wait","leading","trailing","findMin","findMax","AxisType","DualAxesGeometry","LEFT_AXES_VIEW","RIGHT_AXES_VIEW","DEFAULT_YAXIS_CONFIG","autoHide","DEFAULT_LEFT_YAXIS_CONFIG","DEFAULT_RIGHT_YAXIS_CONFIG","isLine","geometryOption","isColumn","getGeometryOption","transformObjectToArray","transformAttribute","a1_1","a2_1","getYAxisWithDefault","axisType","Left","Right","getViewLegendItems","userMarker","legendItemName","isGeometry","viewId","attributes","getGroupAttributes","attrItems","getLegendItems","drawSingleGeometry","FIELD_KEY","adjust_1","customOffset","doSliderFilter","sliderValue","xScale","getXScale","dataSize","isHorizontal","xValues","xTickCount","minIndex","maxIndex","getRootView","geometryOptions","allLine","createViews","SORT_MAP","themeColor","groupScale","getGroupScales","leftView","rightView","leftLegend_1","rightLegend_1","leftItems","rightItems","yF","changeVisible","unchecked","legendItem_1","curLegendItem","originValue","DualAxes","areaOptions","RadarTooltipController","enumerable","configurable","getTooltipItems","getTooltipCfg","cfgTitle","hintItems","dataArray","title_1","result_1","displayTitle","RadarTooltipAction","controller","getTooltipController","showTooltip","hideTooltip","Radar","follow","SOURCE_ATTRIBUTE_NAME","PLOT_CONTAINER_OPTIONS","Plot","getElementById","createG2","bindEvents","renderer","minGap","getChartSize","localRefresh","chartSize","bindSizeSensor","changeSize","addAnnotations","incoming","getComponents","co","extra","_loop_1","removeAnnotations","_loop_2","unbindSizeSensor","sectorStyle","Rose","DEFAULT_TOOLTIP_OPTIONS","customContent","containerTpl","itemTpl","domStyles","TinyColumn","TinyArea","getPixelRatio","devicePixelRatio","initCanvas","pixelRatio","globalAlpha","beginPath","fillRect","closePath","getUnitPatternSize","isStagger","unitSize","getSymbolsPosition","symbolsPos","transformMatrix","dpr","radian","defaultDotPatternCfg","drawDot","createDotPattern","dotCfg","dots","dots_1","createPattern","setTransform","defaultLinePatternCfg","drawLine","Path2D","createLinePattern","lineCfg","defaultSquarePatternCfg","drawSquare","strokeRect","createSquarePattern","squareCfg","squares","squares_1","getCanvasPattern","multiView","region","multiPlot","plots","getElementValue","model","clearHighlight","el","hasState","Association","getAssociationItems","linkField","dim","data_1","getYScales","siblings","sibling","Mix","defaultSeparation","meanX","meanXReduce","maxYReduce","leafLeft","leafRight","separation","nodeSize","cluster","previousNode","preroot","ambiguous","defaultParentId","parentId","stratify","nodeKey","nodeByKey","nextLeft","nextRight","moveSubtree","wm","wp","executeShifts","nextAncestor","vim","TreeNode","treeRoot","tree","firstWalk","secondWalk","sizeNode","apportion","vip","vop","vom","sip","sop","sim","som","sums","valueOffset","valueTarget","valueLeft","valueRight","resquarify","_squarify","findViewById","getViews","getSiblingViews","Stage","notice","DEV","BETA","STABLE","Lab","getTooltipMapping","defaultFields","conversionTagFormatter","FIRST_AXES_VIEW","SECOND_AXES_VIEW","SERIES_FIELD_KEY","hopeData","groupData","data1","data2","autoPadding","__axisPosition","instance","firstView","secondView","firstViewData","secondViewData","aliasMap","metaKey","leftGeometry","rightGeometry","cfg_1","leftLabelCfg","textAlignMap","positionMap_1","middle","textBaselineMap","BidirectionalBar","P","ZH_CN_LOCALE","LEVEL","BRAND","getMessage","format","argIndex","processRangeData","getIndicatorData","getRangeData","clampTicks","normalPadding","getAdjustAppendPadding","append","currentAppendPadding","resolveAllPadding","paddings","normalPaddings","GLOBAL","sizeRatio","heatmapStyle","geometryType","checkedSizeRatio","dautm","sequenceColors","maxRadius","radiusRatio","maxSideLength","lenRatio","sideLength","Heatmap","TREND_FIELD","TREND_UP","TREND_DOWN","defaultContent","textContent","textBackground","getStockData","open_1","close_1","stockStyle","Stock"],"mappings":"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","file":"js/chunk-76cd74a5.568a44f3.js","sourcesContent":["/**\n * bullet 处理数据\n * @param options\n */\nexport function transformData(options) {\n var data = options.data, xField = options.xField, measureField = options.measureField, rangeField = options.rangeField, targetField = options.targetField, layout = options.layout;\n var ds = [];\n var scales = [];\n data.forEach(function (item, index) {\n var _a;\n // 构建 title * range\n item[rangeField].sort(function (a, b) { return a - b; });\n item[rangeField].forEach(function (d, i) {\n var _a;\n var range = i === 0 ? d : item[rangeField][i] - item[rangeField][i - 1];\n ds.push((_a = {\n rKey: rangeField + \"_\" + i\n },\n _a[xField] = xField ? item[xField] : String(index),\n _a[rangeField] = range,\n _a));\n });\n // 构建 title * measure\n item[measureField].forEach(function (d, i) {\n var _a;\n ds.push((_a = {\n mKey: item[measureField].length > 1 ? measureField + \"_\" + i : \"\" + measureField\n },\n _a[xField] = xField ? item[xField] : String(index),\n _a[measureField] = d,\n _a));\n });\n // 构建 title * target\n ds.push((_a = {\n tKey: \"\" + targetField\n },\n _a[xField] = xField ? item[xField] : String(index),\n _a[targetField] = item[targetField],\n _a));\n // 为了取最大值和最小值,先存储\n scales.push(item[rangeField], item[measureField], item[targetField]);\n });\n // scales 是嵌套的需要拍平\n var min = Math.min.apply(Math, scales.flat(Infinity));\n var max = Math.max.apply(Math, scales.flat(Infinity));\n // min 大于 0 从 0 开始\n min = min > 0 ? 0 : min;\n // 垂直情况,需要反转数据\n if (layout === 'vertical') {\n ds.reverse();\n }\n return { min: min, max: max, ds: ds };\n}\n//# sourceMappingURL=utils.js.map","import { __assign } from \"tslib\";\nimport { get, isFunction } from '@antv/util';\nimport { interaction, animation, theme, tooltip, scale } from '../../adaptor/common';\nimport { flow, transformLabel, deepAssign } from '../../utils';\nimport { interval, point } from '../../adaptor/geometries';\nimport { transformData } from './utils';\n/**\n * geometry 处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var bulletStyle = options.bulletStyle, targetField = options.targetField, rangeField = options.rangeField, measureField = options.measureField, xField = options.xField, color = options.color, layout = options.layout, size = options.size, label = options.label;\n // 处理数据\n var _a = transformData(options), min = _a.min, max = _a.max, ds = _a.ds;\n chart.data(ds);\n // rangeGeometry\n var r = deepAssign({}, params, {\n options: {\n xField: xField,\n yField: rangeField,\n seriesField: 'rKey',\n isStack: true,\n label: get(label, 'range'),\n interval: {\n color: get(color, 'range'),\n style: get(bulletStyle, 'range'),\n size: get(size, 'range'),\n },\n },\n });\n interval(r);\n // 范围值的 tooltip 隐藏掉\n chart.geometries[0].tooltip(false);\n // measureGeometry\n var m = deepAssign({}, params, {\n options: {\n xField: xField,\n yField: measureField,\n seriesField: 'mKey',\n isStack: true,\n label: get(label, 'measure'),\n interval: {\n color: get(color, 'measure'),\n style: get(bulletStyle, 'measure'),\n size: get(size, 'measure'),\n },\n },\n });\n interval(m);\n // targetGeometry\n var t = deepAssign({}, params, {\n options: {\n xField: xField,\n yField: targetField,\n seriesField: 'tKey',\n label: get(label, 'target'),\n point: {\n color: get(color, 'target'),\n style: get(bulletStyle, 'target'),\n size: isFunction(get(size, 'target'))\n ? function (data) { return get(size, 'target')(data) / 2; }\n : get(size, 'target') / 2,\n shape: layout === 'horizontal' ? 'line' : 'hyphen',\n },\n },\n });\n point(t);\n // 水平的时候,要转换坐标轴\n if (layout === 'horizontal') {\n chart.coordinate().transpose();\n }\n return __assign(__assign({}, params), { ext: { data: { min: min, max: max } } });\n}\n/**\n * meta 配置\n * @param params\n */\nexport function meta(params) {\n var _a, _b;\n var options = params.options, ext = params.ext;\n var xAxis = options.xAxis, yAxis = options.yAxis, targetField = options.targetField, rangeField = options.rangeField, measureField = options.measureField, xField = options.xField;\n var extData = ext.data;\n return flow(scale((_a = {},\n _a[xField] = xAxis,\n _a[measureField] = yAxis,\n _a), (_b = {},\n _b[measureField] = { min: extData === null || extData === void 0 ? void 0 : extData.min, max: extData === null || extData === void 0 ? void 0 : extData.max, sync: true },\n _b[targetField] = {\n sync: \"\" + measureField,\n },\n _b[rangeField] = {\n sync: \"\" + measureField,\n },\n _b)))(params);\n}\n/**\n * axis 配置\n * @param params\n */\nfunction axis(params) {\n var chart = params.chart, options = params.options;\n var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, measureField = options.measureField, rangeField = options.rangeField, targetField = options.targetField;\n chart.axis(\"\" + rangeField, false);\n chart.axis(\"\" + targetField, false);\n // 为 false 则是不显示轴\n if (xAxis === false) {\n chart.axis(\"\" + xField, false);\n }\n else {\n chart.axis(\"\" + xField, xAxis);\n }\n if (yAxis === false) {\n chart.axis(\"\" + measureField, false);\n }\n else {\n chart.axis(\"\" + measureField, yAxis);\n }\n return params;\n}\n/**\n * legend 配置\n * @param params\n */\nfunction legend(params) {\n var chart = params.chart, options = params.options;\n var legend = options.legend;\n chart.removeInteraction('legend-filter');\n // @TODO 后续看是否内部自定义一个 legend\n chart.legend(legend);\n // 默认关闭掉所在 color 字段的 legend, 从而不影响自定义的legend\n chart.legend('rKey', false);\n chart.legend('mKey', false);\n chart.legend('tKey', false);\n return params;\n}\n/**\n * label 配置\n * @param params\n */\nfunction label(params) {\n var chart = params.chart, options = params.options;\n var label = options.label, measureField = options.measureField, targetField = options.targetField, rangeField = options.rangeField;\n var _a = chart.geometries, rangeGeometry = _a[0], measureGeometry = _a[1], targetGeometry = _a[2];\n if (get(label, 'range')) {\n rangeGeometry.label(\"\" + rangeField, __assign({ layout: [{ type: 'limit-in-plot' }] }, transformLabel(label.range)));\n }\n else {\n rangeGeometry.label(false);\n }\n if (get(label, 'measure')) {\n measureGeometry.label(\"\" + measureField, __assign({ layout: [{ type: 'limit-in-plot' }] }, transformLabel(label.measure)));\n }\n else {\n measureGeometry.label(false);\n }\n if (get(label, 'target')) {\n targetGeometry.label(\"\" + targetField, __assign({ layout: [{ type: 'limit-in-plot' }] }, transformLabel(label.target)));\n }\n else {\n targetGeometry.label(false);\n }\n return params;\n}\n/**\n * 子弹图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n flow(geometry, meta, axis, legend, theme, label, tooltip, interaction, animation)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\n/**\n * 默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n layout: 'horizontal',\n size: {\n range: 30,\n measure: 20,\n target: 20,\n },\n xAxis: {\n tickLine: false,\n line: null,\n },\n bulletStyle: {\n range: {\n fillOpacity: 0.5,\n },\n },\n label: {\n measure: {\n position: 'right',\n },\n },\n tooltip: {\n // 默认关闭\n showMarkers: false,\n },\n});\n//# sourceMappingURL=constant.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor, meta } from './adaptor';\nimport { transformData } from './utils';\nimport { DEFAULT_OPTIONS } from './constant';\nvar Bullet = /** @class */ (function (_super) {\n __extends(Bullet, _super);\n function Bullet() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'bullet';\n return _this;\n }\n /**\n * 获取 子弹图 默认配置项\n * 供外部使用\n */\n Bullet.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n Bullet.prototype.changeData = function (data) {\n this.updateOption({ data: data });\n var _a = transformData(this.options), min = _a.min, max = _a.max, ds = _a.ds;\n // 处理scale\n meta({ options: this.options, ext: { data: { min: min, max: max } }, chart: this.chart });\n this.chart.changeData(ds);\n };\n /**\n * 获取子弹图的适配器\n */\n Bullet.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n /**\n * 获取 子弹图 默认配置\n */\n Bullet.prototype.getDefaultOptions = function () {\n return Bullet.getDefaultOptions();\n };\n return Bullet;\n}(Plot));\nexport { Bullet };\n//# sourceMappingURL=index.js.map","export function optional(f) {\n return f == null ? null : required(f);\n}\n\nexport function required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { binHistogram } from '../../utils/transform/histogram';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\nvar Histogram = /** @class */ (function (_super) {\n __extends(Histogram, _super);\n function Histogram() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'histogram';\n return _this;\n }\n /**\n * 获取 默认配置项\n * 供外部使用\n */\n Histogram.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n Histogram.prototype.changeData = function (data) {\n this.updateOption({ data: data });\n var _a = this.options, binField = _a.binField, binNumber = _a.binNumber, binWidth = _a.binWidth, stackField = _a.stackField;\n this.chart.changeData(binHistogram(data, binField, binWidth, binNumber, stackField));\n };\n /**\n * 获取直方图的适配器\n */\n Histogram.prototype.getDefaultOptions = function () {\n return Histogram.getDefaultOptions();\n };\n /**\n * 获取直方图的适配器\n */\n Histogram.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Histogram;\n}(Plot));\nexport { Histogram };\n//# sourceMappingURL=index.js.map","import { clamp } from '@antv/util';\nimport { isRealNumber } from '../../utils/number';\n/**\n * 获取进度条数据\n */\nexport function getProgressData(percent) {\n var clampPercent = clamp(isRealNumber(percent) ? percent : 0, 0, 1);\n return [\n {\n type: 'current',\n percent: clampPercent,\n },\n {\n type: 'target',\n percent: 1 - clampPercent,\n },\n ];\n}\n//# sourceMappingURL=utils.js.map","import { __extends } from \"tslib\";\nimport { VIEW_LIFE_CIRCLE, Event } from '@antv/g2';\nimport { Plot } from '../../core/plot';\nimport { processIllegalData } from '../../utils';\nimport { adaptor, pieAnnotation } from './adaptor';\nimport { DEFAULT_OPTIONS } from './contants';\nimport { isAllZero } from './utils';\nimport './interactions';\nvar Pie = /** @class */ (function (_super) {\n __extends(Pie, _super);\n function Pie() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'pie';\n return _this;\n }\n /**\n * 获取 饼图 默认配置项\n * 供外部使用\n */\n Pie.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n /**\n * 更新数据\n * @param data\n */\n Pie.prototype.changeData = function (data) {\n this.chart.emit(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, Event.fromData(this.chart, VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, null));\n var prevOptions = this.options;\n var angleField = this.options.angleField;\n var prevData = processIllegalData(prevOptions.data, angleField);\n var curData = processIllegalData(data, angleField);\n // 如果上一次或当前数据全为 0,则重新渲染\n if (isAllZero(prevData, angleField) || isAllZero(curData, angleField)) {\n this.update({ data: data });\n }\n else {\n this.updateOption({ data: data });\n this.chart.data(curData);\n // todo 后续让 G2 层在 afterrender 之后,来重绘 annotations\n pieAnnotation({ chart: this.chart, options: this.options });\n this.chart.render(true);\n }\n this.chart.emit(VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, Event.fromData(this.chart, VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, null));\n };\n /**\n * 获取 饼图 默认配置项, 供 base 获取\n */\n Pie.prototype.getDefaultOptions = function () {\n return Pie.getDefaultOptions();\n };\n /**\n * 获取 饼图 的适配器\n */\n Pie.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Pie;\n}(Plot));\nexport { Pie };\n//# sourceMappingURL=index.js.map","import { __assign } from \"tslib\";\nimport { isFunction, map, isNumber, maxBy, get } from '@antv/util';\nimport { FUNNEL_PERCENT, FUNNEL_CONVERSATION, FUNNEL_MAPPING_VALUE } from '../constant';\n/**\n * 漏斗图 transform\n * @param geometry\n */\nexport function transformData(data, originData, options) {\n var formatData = [];\n var yField = options.yField, maxSize = options.maxSize, minSize = options.minSize;\n var maxYFieldValue = get(maxBy(originData, yField), [yField]);\n var max = isNumber(maxSize) ? maxSize : 1;\n var min = isNumber(minSize) ? minSize : 0;\n // format 数据\n formatData = map(data, function (row, index) {\n var percent = (row[yField] || 0) / maxYFieldValue;\n row[FUNNEL_PERCENT] = percent;\n row[FUNNEL_MAPPING_VALUE] = (max - min) * percent + min;\n // 转化率数据存储前后数据\n row[FUNNEL_CONVERSATION] = [get(data, [index - 1, yField]), row[yField]];\n return row;\n });\n return formatData;\n}\n/**\n * 漏斗图通用转化率组件\n * @param getLineCoordinate 用于获取特定的 line 的位置及配置\n */\nexport function conversionTagComponent(getLineCoordinate) {\n return function (params) {\n var chart = params.chart, options = params.options;\n var conversionTag = options.conversionTag;\n var data = chart.getOptions().data;\n if (conversionTag) {\n var formatter_1 = conversionTag.formatter;\n data.forEach(function (obj, index) {\n if (index <= 0 || Number.isNaN(obj[FUNNEL_MAPPING_VALUE]))\n return;\n var lineOption = getLineCoordinate(obj, index, data, {\n top: true,\n text: {\n content: isFunction(formatter_1) ? formatter_1(obj, data) : formatter_1,\n offsetX: conversionTag.offsetX,\n offsetY: conversionTag.offsetY,\n position: 'end',\n autoRotate: false,\n style: __assign({ textAlign: 'start', textBaseline: 'middle' }, conversionTag.style),\n },\n });\n chart.annotation().line(lineOption);\n });\n }\n return params;\n };\n}\n//# sourceMappingURL=common.js.map","import { __assign } from \"tslib\";\nimport { isArray } from '@antv/util';\nimport { flow, findGeometry } from '../../../utils';\nimport { getTooltipMapping } from '../../../utils/tooltip';\nimport { geometry as baseGeometry } from '../../../adaptor/geometries/base';\nimport { FUNNEL_CONVERSATION, FUNNEL_PERCENT, FUNNEL_MAPPING_VALUE } from '../constant';\nimport { conversionTagComponent, transformData } from './common';\n/**\n * 处理字段数据\n * @param params\n */\nfunction field(params) {\n var chart = params.chart, options = params.options;\n var _a = options.data, data = _a === void 0 ? [] : _a, yField = options.yField, maxSize = options.maxSize, minSize = options.minSize;\n var formatData = transformData(data, data, {\n yField: yField,\n maxSize: maxSize,\n minSize: minSize,\n });\n // 绘制漏斗图\n chart.data(formatData);\n return params;\n}\n/**\n * geometry处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var xField = options.xField, yField = options.yField, color = options.color, tooltip = options.tooltip, label = options.label, _a = options.shape, shape = _a === void 0 ? 'funnel' : _a, funnelStyle = options.funnelStyle, state = options.state;\n var _b = getTooltipMapping(tooltip, [xField, yField]), fields = _b.fields, formatter = _b.formatter;\n baseGeometry({\n chart: chart,\n options: {\n type: 'interval',\n xField: xField,\n yField: FUNNEL_MAPPING_VALUE,\n colorField: xField,\n tooltipFields: isArray(fields) && fields.concat([FUNNEL_PERCENT, FUNNEL_CONVERSATION]),\n mapping: {\n shape: shape,\n tooltip: formatter,\n color: color,\n style: funnelStyle,\n },\n label: label,\n state: state,\n },\n });\n var geo = findGeometry(params.chart, 'interval');\n geo.adjust('symmetric');\n return params;\n}\n/**\n * 转置处理\n * @param params\n */\nfunction transpose(params) {\n var chart = params.chart, options = params.options;\n var isTransposed = options.isTransposed;\n chart.coordinate({\n type: 'rect',\n actions: !isTransposed ? [['transpose'], ['scale', 1, -1]] : [],\n });\n return params;\n}\n/**\n * 转化率组件\n * @param params\n */\nfunction conversionTag(params) {\n var options = params.options;\n var maxSize = options.maxSize;\n var getLineCoordinate = function (datum, datumIndex, data, initLineOption) {\n var percent = maxSize - (maxSize - datum[FUNNEL_MAPPING_VALUE]) / 2;\n return __assign(__assign({}, initLineOption), { start: [datumIndex - 0.5, percent], end: [datumIndex - 0.5, percent + 0.05] });\n };\n conversionTagComponent(getLineCoordinate)(params);\n return params;\n}\n/**\n * 基础漏斗\n * @param chart\n * @param options\n */\nexport function basicFunnel(params) {\n return flow(field, geometry, transpose, conversionTag)(params);\n}\n//# sourceMappingURL=basic.js.map","import { isArray } from '@antv/util';\nimport { flow, deepAssign } from '../../../utils';\nimport { getTooltipMapping } from '../../../utils/tooltip';\nimport { geometry as baseGeometry } from '../../../adaptor/geometries/base';\nimport { FUNNEL_PERCENT, FUNNEL_CONVERSATION, FUNNEL_MAPPING_VALUE } from '../constant';\nimport { conversionTagComponent, transformData } from './common';\n/**\n * 处理字段数据\n * @param params\n */\nfunction field(params) {\n var _a;\n var chart = params.chart, options = params.options;\n var _b = options.data, data = _b === void 0 ? [] : _b, yField = options.yField;\n // 绘制漏斗图\n chart.data(data);\n chart.scale((_a = {},\n _a[yField] = {\n sync: true,\n },\n _a));\n return params;\n}\n/**\n * geometry处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var data = options.data, xField = options.xField, yField = options.yField, color = options.color, compareField = options.compareField, isTransposed = options.isTransposed, tooltip = options.tooltip, maxSize = options.maxSize, minSize = options.minSize, label = options.label, funnelStyle = options.funnelStyle, state = options.state;\n chart.facet('mirror', {\n fields: [compareField],\n // 漏斗图的转置规则与分面相反,默认是垂直布局\n transpose: !isTransposed,\n padding: isTransposed ? 0 : [32, 0, 0, 0],\n eachView: function (view, facet) {\n var index = isTransposed ? facet.rowIndex : facet.columnIndex;\n if (!isTransposed) {\n view.coordinate({\n type: 'rect',\n actions: [['transpose'], ['scale', index === 0 ? -1 : 1, -1]],\n });\n }\n var formatterData = transformData(facet.data, data, {\n yField: yField,\n maxSize: maxSize,\n minSize: minSize,\n });\n view.data(formatterData);\n // 绘制图形\n var _a = getTooltipMapping(tooltip, [xField, yField, compareField]), fields = _a.fields, formatter = _a.formatter;\n var defaultFacetLabel = isTransposed\n ? {\n offset: index === 0 ? 10 : -23,\n position: (index === 0 ? 'bottom' : 'top'),\n }\n : {\n offset: 10,\n position: 'left',\n style: {\n textAlign: index === 0 ? 'end' : 'start',\n },\n };\n baseGeometry({\n chart: view,\n options: {\n type: 'interval',\n xField: xField,\n yField: FUNNEL_MAPPING_VALUE,\n colorField: xField,\n tooltipFields: isArray(fields) && fields.concat([FUNNEL_PERCENT, FUNNEL_CONVERSATION]),\n mapping: {\n // todo 暂时不提供 金字塔 shape,后续需要自定义下形状\n shape: 'funnel',\n tooltip: formatter,\n color: color,\n style: funnelStyle,\n },\n label: label === false ? false : deepAssign({}, defaultFacetLabel, label),\n state: state,\n },\n });\n },\n });\n return params;\n}\n/**\n * 转化率组件\n * @param params\n */\nfunction conversionTag(params) {\n var chart = params.chart, options = params.options;\n var conversionTag = options.conversionTag, isTransposed = options.isTransposed;\n // @ts-ignore\n chart.once('beforepaint', function () {\n chart.views.forEach(function (view, viewIndex) {\n var getLineCoordinate = function (datum, datumIndex, data, initLineOption) {\n var ratio = viewIndex === 0 ? -1 : 1;\n return deepAssign({}, initLineOption, {\n start: [datumIndex - 0.5, datum[FUNNEL_MAPPING_VALUE]],\n end: [datumIndex - 0.5, datum[FUNNEL_MAPPING_VALUE] + 0.05],\n text: isTransposed\n ? {\n style: {\n textAlign: 'start',\n },\n }\n : {\n offsetX: conversionTag !== false ? ratio * conversionTag.offsetX : 0,\n style: {\n textAlign: viewIndex === 0 ? 'end' : 'start',\n },\n },\n });\n };\n conversionTagComponent(getLineCoordinate)(deepAssign({}, {\n chart: view,\n options: options,\n }));\n });\n });\n return params;\n}\n/**\n * 对比漏斗\n * @param chart\n * @param options\n */\nexport function compareFunnel(params) {\n return flow(field, geometry, conversionTag)(params);\n}\n//# sourceMappingURL=compare.js.map","import { flow, deepAssign } from '../../../utils';\nimport { basicFunnel } from './basic';\n/**\n * 处理字段数据\n * @param params\n */\nfunction field(params) {\n var _a;\n var chart = params.chart, options = params.options;\n var _b = options.data, data = _b === void 0 ? [] : _b, yField = options.yField;\n // 绘制漏斗图\n chart.data(data);\n chart.scale((_a = {},\n _a[yField] = {\n sync: true,\n },\n _a));\n return params;\n}\n/**\n * geometry处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var seriesField = options.seriesField, isTransposed = options.isTransposed;\n chart.facet('rect', {\n fields: [seriesField],\n padding: [isTransposed ? 0 : 32, 10, 0, 10],\n eachView: function (view, facet) {\n basicFunnel(deepAssign({}, params, {\n chart: view,\n options: {\n data: facet.data,\n },\n }));\n },\n });\n return params;\n}\n/**\n * 分面漏斗\n * @param chart\n * @param options\n */\nexport function facetFunnel(params) {\n return flow(field, geometry)(params);\n}\n//# sourceMappingURL=facet.js.map","import { __assign } from \"tslib\";\nimport { map, reduce, maxBy, isArray, get } from '@antv/util';\nimport { flow } from '../../../utils';\nimport { FUNNEL_PERCENT, FUNNEL_CONVERSATION, FUNNEL_TOTAL_PERCENT, PLOYGON_X, PLOYGON_Y } from '../constant';\nimport { geometry as baseGeometry } from '../../../adaptor/geometries/base';\nimport { getTooltipMapping } from '../../../utils/tooltip';\nimport { conversionTagComponent } from './common';\n/**\n * 动态高度漏斗图\n * @param params\n * 需求: 每个漏斗项的高度根据 yfield 等比生成。漏斗上下宽度比为2,即斜率为 2。\n * 实现方式: 使用 g2 多边形,data -> 点坐标 -> 绘制\n * 以漏斗底部中心点为坐标轴原点,漏斗在 -0.5 <= x <= 0.5, 0 <= y <= 1 的正方形中绘制\n * 先计算第一象限的点, 第二象限的点即为镜像 x 轴取反。\n * 第一象限共需计算 data.length + 1 个点,在 y = 4x - 1 上。首尾分别是[0.5, 1], [0.25, 0]。根据 data 计算出 y 值,从而得到 y 值\n */\n/**\n * 处理数据\n * @param params\n */\nfunction field(params) {\n var chart = params.chart, options = params.options;\n var _a = options.data, data = _a === void 0 ? [] : _a, yField = options.yField;\n // 计算各数据项所占高度\n var sum = reduce(data, function (total, item) {\n return total + (item[yField] || 0);\n }, 0);\n var max = maxBy(data, yField)[yField];\n var formatData = map(data, function (row, index) {\n // 储存四个点 x,y 坐标,方向为顺时针,即 [左上, 右上,右下,左下]\n var x = [];\n var y = [];\n row[FUNNEL_TOTAL_PERCENT] = (row[yField] || 0) / sum;\n // 获取左上角,右上角坐标\n if (index) {\n var preItemX = data[index - 1][PLOYGON_X];\n var preItemY = data[index - 1][PLOYGON_Y];\n x[0] = preItemX[3];\n y[0] = preItemY[3];\n x[1] = preItemX[2];\n y[1] = preItemY[2];\n }\n else {\n x[0] = -0.5;\n y[0] = 1;\n x[1] = 0.5;\n y[1] = 1;\n }\n // 获取右下角坐标\n y[2] = y[1] - row[FUNNEL_TOTAL_PERCENT];\n x[2] = (y[2] + 1) / 4;\n y[3] = y[2];\n x[3] = -x[2];\n // 赋值\n row[PLOYGON_X] = x;\n row[PLOYGON_Y] = y;\n row[FUNNEL_PERCENT] = (row[yField] || 0) / max;\n row[FUNNEL_CONVERSATION] = [get(data, [index - 1, yField]), row[yField]];\n return row;\n });\n chart.data(formatData);\n return params;\n}\n/**\n * geometry处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var xField = options.xField, yField = options.yField, color = options.color, tooltip = options.tooltip, label = options.label, funnelStyle = options.funnelStyle, state = options.state;\n var _a = getTooltipMapping(tooltip, [xField, yField]), fields = _a.fields, formatter = _a.formatter;\n // 绘制漏斗图\n baseGeometry({\n chart: chart,\n options: {\n type: 'polygon',\n xField: PLOYGON_X,\n yField: PLOYGON_Y,\n colorField: xField,\n tooltipFields: isArray(fields) && fields.concat([FUNNEL_PERCENT, FUNNEL_CONVERSATION]),\n label: label,\n state: state,\n mapping: {\n tooltip: formatter,\n color: color,\n style: funnelStyle,\n },\n },\n });\n return params;\n}\n/**\n * 转置处理\n * @param params\n */\nfunction transpose(params) {\n var chart = params.chart, options = params.options;\n var isTransposed = options.isTransposed;\n chart.coordinate({\n type: 'rect',\n actions: isTransposed ? [['transpose'], ['reflect', 'x']] : [],\n });\n return params;\n}\n/**\n * 转化率组件\n * @param params\n */\nfunction conversionTag(params) {\n var getLineCoordinate = function (datum, datumIndex, data, initLineOption) {\n return __assign(__assign({}, initLineOption), { start: [datum[PLOYGON_X][1], datum[PLOYGON_Y][1]], end: [datum[PLOYGON_X][1] + 0.05, datum[PLOYGON_Y][1]] });\n };\n conversionTagComponent(getLineCoordinate)(params);\n return params;\n}\n/**\n * 动态高度漏斗\n * @param chart\n * @param options\n */\nexport function dynamicHeightFunnel(params) {\n return flow(field, geometry, transpose, conversionTag)(params);\n}\n//# sourceMappingURL=dynamic-height.js.map","import { isFunction, clone } from '@antv/util';\nimport { interaction, animation, theme, scale, annotation, tooltip } from '../../adaptor/common';\nimport { getLocale } from '../../core/locale';\nimport { flow, deepAssign } from '../../utils';\nimport { conversionTagFormatter } from '../../utils/conversion';\nimport { basicFunnel } from './geometries/basic';\nimport { compareFunnel } from './geometries/compare';\nimport { facetFunnel } from './geometries/facet';\nimport { dynamicHeightFunnel } from './geometries/dynamic-height';\nimport { FUNNEL_CONVERSATION, FUNNEL_PERCENT } from './constant';\n/**\n *\n * 各式漏斗图geometry实现细节有较大不同,\n * 1. 普通漏斗图:interval.shape('funnel')\n * 2. 对比漏斗图:分面\n * 3. 动态高度漏斗图:polypon\n * 4. 分面漏斗图:普通 + list 分面\n* /\n\n/**\n * options 处理\n * @param params\n */\nfunction defaultOptions(params) {\n var options = params.options;\n var compareField = options.compareField, xField = options.xField, yField = options.yField, locale = options.locale, funnelStyle = options.funnelStyle, data = options.data;\n var i18n = getLocale(locale);\n var defaultOption = {\n label: compareField\n ? {\n fields: [xField, yField, compareField, FUNNEL_PERCENT, FUNNEL_CONVERSATION],\n formatter: function (datum) { return \"\" + datum[yField]; },\n }\n : {\n fields: [xField, yField, FUNNEL_PERCENT, FUNNEL_CONVERSATION],\n offset: 0,\n position: 'middle',\n formatter: function (datum) { return datum[xField] + \" \" + datum[yField]; },\n },\n tooltip: {\n title: xField,\n formatter: function (datum) {\n return { name: datum[xField], value: datum[yField] };\n },\n },\n conversionTag: {\n // conversionTag 的计算和显示逻辑统一保持一致\n formatter: function (datum) {\n return i18n.get(['conversionTag', 'label']) + \": \" + conversionTagFormatter.apply(void 0, datum[FUNNEL_CONVERSATION]);\n },\n },\n };\n // 漏斗图样式\n var style;\n if (compareField || funnelStyle) {\n style = function (datum) {\n return deepAssign({}, \n // 对比漏斗图默认描边\n compareField && { lineWidth: 1, stroke: '#fff' }, isFunction(funnelStyle) ? funnelStyle(datum) : funnelStyle);\n };\n }\n return deepAssign({ options: defaultOption }, params, { options: { funnelStyle: style, data: clone(data) } });\n}\n/**\n * geometry处理\n * @param params\n */\nfunction geometry(params) {\n var options = params.options;\n var compareField = options.compareField, dynamicHeight = options.dynamicHeight, seriesField = options.seriesField;\n if (seriesField) {\n return facetFunnel(params);\n }\n if (compareField) {\n return compareFunnel(params);\n }\n if (dynamicHeight) {\n return dynamicHeightFunnel(params);\n }\n return basicFunnel(params);\n}\n/**\n * meta 配置\n * @param params\n */\nexport function meta(params) {\n var _a;\n var options = params.options;\n var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n return flow(scale((_a = {},\n _a[xField] = xAxis,\n _a[yField] = yAxis,\n _a)))(params);\n}\n/**\n * 坐标轴\n * @param params\n */\nfunction axis(params) {\n var chart = params.chart;\n chart.axis(false);\n return params;\n}\n/**\n * legend 配置\n * @param params\n */\nfunction legend(params) {\n var chart = params.chart, options = params.options;\n var legend = options.legend;\n if (legend === false) {\n chart.legend(false);\n }\n else {\n chart.legend(legend);\n // TODO FIX: legend-click 时间和转化率组件之间的关联\n }\n return params;\n}\n/**\n * 漏斗图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n return flow(defaultOptions, geometry, meta, axis, tooltip, interaction, legend, animation, theme, annotation())(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __assign } from \"tslib\";\nimport { map, find, each, isObject } from '@antv/util';\nimport { getTheme } from '@antv/g2';\nimport { deepAssign } from '../utils';\nimport { conversionTagFormatter } from '../utils/conversion';\nfunction getConversionTagOptionsWithDefaults(options, horizontal) {\n return deepAssign({\n size: horizontal ? 32 : 80,\n spacing: horizontal ? 8 : 12,\n offset: horizontal ? 32 : 0,\n arrow: options.arrow !== false && {\n headSize: 12,\n style: {\n fill: 'rgba(0, 0, 0, 0.05)',\n },\n },\n text: options.text !== false && {\n style: {\n fontSize: 12,\n fill: 'rgba(0, 0, 0, 0.85)',\n textAlign: 'center',\n textBaseline: 'middle',\n },\n formatter: conversionTagFormatter,\n },\n }, options);\n}\nfunction parsePoints(coordinate, element) {\n // @ts-ignore\n return map(element.getModel().points, function (point) { return coordinate.convertPoint(point); });\n}\nfunction renderArrowTag(config, elemPrev, elemNext) {\n var view = config.view, geometry = config.geometry, group = config.group, options = config.options, horizontal = config.horizontal;\n var offset = options.offset, size = options.size, arrow = options.arrow;\n var coordinate = view.getCoordinate();\n var pointPrev = parsePoints(coordinate, elemPrev)[3];\n var pointNext = parsePoints(coordinate, elemNext)[0];\n var totalHeight = pointNext.y - pointPrev.y;\n var totalWidth = pointNext.x - pointPrev.x;\n if (typeof arrow === 'boolean') {\n return;\n }\n var headSize = arrow.headSize;\n var spacing = options.spacing;\n var points;\n if (horizontal) {\n if ((totalWidth - headSize) / 2 < spacing) {\n // 当柱间距不足容纳箭头尖与间隔时,画三角并挤占间隔\n spacing = Math.max(1, (totalWidth - headSize) / 2);\n points = [\n [pointPrev.x + spacing, pointPrev.y - offset],\n [pointPrev.x + spacing, pointPrev.y - offset - size],\n [pointNext.x - spacing, pointNext.y - offset - size / 2],\n ];\n }\n else {\n // 当柱间距足够时,画完整图形并留出间隔。\n points = [\n [pointPrev.x + spacing, pointPrev.y - offset],\n [pointPrev.x + spacing, pointPrev.y - offset - size],\n [pointNext.x - spacing - headSize, pointNext.y - offset - size],\n [pointNext.x - spacing, pointNext.y - offset - size / 2],\n [pointNext.x - spacing - headSize, pointNext.y - offset],\n ];\n }\n }\n else {\n if ((totalHeight - headSize) / 2 < spacing) {\n // 当柱间距不足容纳箭头尖与间隔时,画三角并挤占间隔\n spacing = Math.max(1, (totalHeight - headSize) / 2);\n points = [\n [pointPrev.x + offset, pointPrev.y + spacing],\n [pointPrev.x + offset + size, pointPrev.y + spacing],\n [pointNext.x + offset + size / 2, pointNext.y - spacing],\n ];\n }\n else {\n // 当柱间距足够时,画完整图形并留出间隔。\n points = [\n [pointPrev.x + offset, pointPrev.y + spacing],\n [pointPrev.x + offset + size, pointPrev.y + spacing],\n [pointNext.x + offset + size, pointNext.y - spacing - headSize],\n [pointNext.x + offset + size / 2, pointNext.y - spacing],\n [pointNext.x + offset, pointNext.y - spacing - headSize],\n ];\n }\n }\n group.addShape('polygon', {\n id: view.id + \"-conversion-tag-arrow-\" + geometry.getElementId(elemPrev.getModel().mappingData),\n name: 'conversion-tag-arrow',\n origin: {\n element: elemPrev,\n nextElement: elemNext,\n },\n attrs: __assign(__assign({}, (arrow.style || {})), { points: points }),\n });\n}\nfunction renderTextTag(config, elemPrev, elemNext) {\n var _a, _b, _c;\n var view = config.view, geometry = config.geometry, group = config.group, options = config.options, field = config.field, horizontal = config.horizontal;\n var offset = options.offset, size = options.size;\n if (typeof options.text === 'boolean') {\n return;\n }\n var coordinate = view.getCoordinate();\n var text = ((_a = options.text) === null || _a === void 0 ? void 0 : _a.formatter) && ((_b = options.text) === null || _b === void 0 ? void 0 : _b.formatter(elemPrev.getData()[field], elemNext.getData()[field]));\n var pointPrev = parsePoints(coordinate, elemPrev)[horizontal ? 3 : 0];\n var pointNext = parsePoints(coordinate, elemNext)[horizontal ? 0 : 3];\n var textShape = group.addShape('text', {\n id: view.id + \"-conversion-tag-text-\" + geometry.getElementId(elemPrev.getModel().mappingData),\n name: 'conversion-tag-text',\n origin: {\n element: elemPrev,\n nextElement: elemNext,\n },\n attrs: __assign(__assign({}, (((_c = options.text) === null || _c === void 0 ? void 0 : _c.style) || {})), { text: text, x: horizontal ? (pointPrev.x + pointNext.x) / 2 : pointPrev.x + offset + size / 2, y: horizontal ? pointPrev.y - offset - size / 2 : (pointPrev.y + pointNext.y) / 2 }),\n });\n if (horizontal) {\n var totalWidth = pointNext.x - pointPrev.x;\n var textWidth = textShape.getBBox().width;\n if (textWidth > totalWidth) {\n var cWidth = textWidth / text.length;\n var cEnd = Math.max(1, Math.ceil(totalWidth / cWidth) - 1);\n var textAdjusted = text.slice(0, cEnd) + \"...\";\n textShape.attr('text', textAdjusted);\n }\n }\n}\nfunction renderTag(options, elemPrev, elemNext) {\n renderArrowTag(options, elemPrev, elemNext);\n renderTextTag(options, elemPrev, elemNext);\n}\n/**\n * 返回支持转化率组件的 adaptor,适用于柱形图/条形图\n * @param field 用户转化率计算的字段\n * @param horizontal 是否水平方向的转化率\n * @param disabled 是否禁用\n */\nexport function conversionTag(field, horizontal, disabled) {\n if (horizontal === void 0) { horizontal = true; }\n if (disabled === void 0) { disabled = false; }\n return function (params) {\n var options = params.options, chart = params.chart;\n var conversionTag = options.conversionTag, theme = options.theme;\n if (conversionTag && !disabled) {\n // 有转化率组件时,柱子宽度占比自动为 1/3\n chart.theme(deepAssign({}, isObject(theme) ? theme : getTheme(theme), {\n columnWidthRatio: 1 / 3,\n }));\n // 使用 shape annotation 绘制转化率组件\n chart.annotation().shape({\n render: function (container, view) {\n var group = container.addGroup({\n id: chart.id + \"-conversion-tag-group\",\n name: 'conversion-tag-group',\n });\n var interval = find(chart.geometries, function (geom) { return geom.type === 'interval'; });\n var config = {\n view: view,\n geometry: interval,\n group: group,\n field: field,\n horizontal: horizontal,\n options: getConversionTagOptionsWithDefaults(conversionTag, horizontal),\n };\n var elements = interval.elements;\n each(elements, function (elem, idx) {\n if (idx > 0) {\n renderTag(config, elements[idx - 1], elem);\n }\n });\n },\n });\n }\n return params;\n };\n}\n//# sourceMappingURL=conversion-tag.js.map","import { registerInteraction } from '@antv/g2';\nvar INTERACTION_MAP = {\n hover: '__interval-connected-area-hover__',\n click: '__interval-connected-area-click__',\n};\nvar getStartStages = function (trigger, style) {\n if (trigger === 'hover') {\n return [\n {\n trigger: \"interval:mouseenter\",\n action: ['element-highlight-by-color:highlight', 'element-link-by-color:link'],\n arg: [null, { style: style }],\n },\n ];\n }\n return [\n {\n trigger: \"interval:click\",\n action: [\n 'element-highlight-by-color:clear',\n 'element-highlight-by-color:highlight',\n 'element-link-by-color:clear',\n 'element-link-by-color:unlink',\n 'element-link-by-color:link',\n ],\n arg: [null, null, null, null, { style: style }],\n },\n ];\n};\n/** hover 触发的连通区域交互 */\nregisterInteraction(INTERACTION_MAP.hover, {\n start: getStartStages(INTERACTION_MAP.hover),\n end: [\n {\n trigger: 'interval:mouseleave',\n action: ['element-highlight-by-color:reset', 'element-link-by-color:unlink'],\n },\n ],\n});\n/** click 触发的联通区域交互 */\nregisterInteraction(INTERACTION_MAP.click, {\n start: getStartStages(INTERACTION_MAP.click),\n end: [\n {\n trigger: 'document:mousedown',\n action: ['element-highlight-by-color:clear', 'element-link-by-color:clear'],\n },\n ],\n});\n/**\n * 返回支持联通区域组件交互的 adaptor,适用于堆叠柱形图/堆叠条形图\n * @param disable\n */\nexport function connectedArea(disable) {\n if (disable === void 0) { disable = false; }\n return function (params) {\n var chart = params.chart, options = params.options;\n var connectedArea = options.connectedArea;\n var clear = function () {\n chart.removeInteraction(INTERACTION_MAP.hover);\n chart.removeInteraction(INTERACTION_MAP.click);\n };\n if (!disable && connectedArea) {\n var trigger = connectedArea.trigger || 'hover';\n clear();\n chart.interaction(INTERACTION_MAP[trigger], {\n start: getStartStages(trigger, connectedArea.style),\n });\n }\n else {\n clear();\n }\n return params;\n };\n}\n//# sourceMappingURL=connected-area.js.map","import { __assign, __rest } from \"tslib\";\nimport { each, filter, isMatch } from '@antv/util';\nimport { slider, interaction, animation, theme, scale, annotation, scrollbar, limitInPlot, state, } from '../../adaptor/common';\nimport { conversionTag } from '../../adaptor/conversion-tag';\nimport { connectedArea } from '../../adaptor/connected-area';\nimport { interval } from '../../adaptor/geometries';\nimport { pattern } from '../../adaptor/pattern';\nimport { brushInteraction } from '../../adaptor/brush';\nimport { flow, transformLabel, deepAssign, findGeometry, adjustYMetaByZero, pick } from '../../utils';\nimport { getDataWhetherPecentage, getDeepPercent } from '../../utils/transform/percent';\n/**\n * defaultOptions\n * @param params\n */\nfunction defaultOptions(params) {\n var options = params.options;\n // 默认 legend 位置\n var legend = options.legend;\n var seriesField = options.seriesField, isStack = options.isStack;\n if (seriesField) {\n if (legend !== false) {\n legend = __assign({ position: isStack ? 'right-top' : 'top-left' }, legend);\n }\n }\n else {\n legend = false;\n }\n // @ts-ignore 直接改值\n params.options.legend = legend;\n return params;\n}\n/**\n * 字段\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var data = options.data, columnStyle = options.columnStyle, color = options.color, columnWidthRatio = options.columnWidthRatio, isPercent = options.isPercent, isGroup = options.isGroup, isStack = options.isStack, xField = options.xField, yField = options.yField, seriesField = options.seriesField, groupField = options.groupField, tooltip = options.tooltip, shape = options.shape;\n var percentData = isPercent && isGroup && isStack\n ? getDeepPercent(data, yField, [xField, groupField], yField)\n : getDataWhetherPecentage(data, yField, xField, yField, isPercent);\n var chartData = [];\n // 存在堆叠,并且存在堆叠seriesField分类,并且不存在分组的时候 进行堆叠\n if (isStack && seriesField && !isGroup) {\n percentData.forEach(function (item) {\n var stackedItem = chartData.find(function (v) { return v[xField] === item[xField] && v[seriesField] === item[seriesField]; });\n if (stackedItem) {\n stackedItem[yField] += item[yField] || 0;\n }\n else {\n chartData.push(__assign({}, item));\n }\n });\n }\n else {\n chartData = percentData;\n }\n chart.data(chartData);\n // 百分比堆积图,默认会给一个 % 格式化逻辑, 用户可自定义\n var tooltipOptions = isPercent\n ? __assign({ formatter: function (datum) { return ({\n name: isGroup && isStack ? datum[seriesField] + \" - \" + datum[groupField] : datum[seriesField] || datum[xField],\n value: (Number(datum[yField]) * 100).toFixed(2) + '%',\n }); } }, tooltip) : tooltip;\n var p = deepAssign({}, params, {\n options: {\n data: chartData,\n widthRatio: columnWidthRatio,\n tooltip: tooltipOptions,\n interval: {\n shape: shape,\n style: columnStyle,\n color: color,\n },\n },\n });\n interval(p);\n return p;\n}\n/**\n * meta 配置\n * @param params\n */\nexport function meta(params) {\n var _a, _b;\n var options = params.options;\n var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField, data = options.data, isPercent = options.isPercent;\n var percentYMeta = isPercent ? { max: 1, min: 0, minLimit: 0, maxLimit: 1 } : {};\n return flow(scale((_a = {},\n _a[xField] = xAxis,\n _a[yField] = yAxis,\n _a), (_b = {},\n _b[xField] = {\n type: 'cat',\n },\n _b[yField] = __assign(__assign({}, adjustYMetaByZero(data, yField)), percentYMeta),\n _b)))(params);\n}\n/**\n * axis 配置\n * @param params\n */\nfunction axis(params) {\n var chart = params.chart, options = params.options;\n var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n // 为 false 则是不显示轴\n if (xAxis === false) {\n chart.axis(xField, false);\n }\n else {\n chart.axis(xField, xAxis);\n }\n if (yAxis === false) {\n chart.axis(yField, false);\n }\n else {\n chart.axis(yField, yAxis);\n }\n return params;\n}\n/**\n * legend 配置\n * @param params\n */\nexport function legend(params) {\n var chart = params.chart, options = params.options;\n var legend = options.legend, seriesField = options.seriesField;\n if (legend && seriesField) {\n chart.legend(seriesField, legend);\n }\n else if (legend === false) {\n chart.legend(false);\n }\n return params;\n}\n/**\n * 数据标签\n * @param params\n */\nfunction label(params) {\n var chart = params.chart, options = params.options;\n var label = options.label, yField = options.yField, isRange = options.isRange;\n var geometry = findGeometry(chart, 'interval');\n if (!label) {\n geometry.label(false);\n }\n else {\n var callback = label.callback, cfg = __rest(label, [\"callback\"]);\n geometry.label({\n fields: [yField],\n callback: callback,\n cfg: __assign({ \n // 配置默认的 label layout: 如果用户没有指定 layout 和 position, 则自动配置 layout\n layout: (cfg === null || cfg === void 0 ? void 0 : cfg.position) ? undefined\n : [\n { type: 'interval-adjust-position' },\n { type: 'interval-hide-overlap' },\n { type: 'adjust-color' },\n { type: 'limit-in-plot', cfg: { action: 'hide' } },\n ] }, transformLabel(isRange\n ? __assign({ content: function (item) {\n var _a;\n return (_a = item[yField]) === null || _a === void 0 ? void 0 : _a.join('-');\n } }, cfg) : cfg)),\n });\n }\n return params;\n}\n/**\n * 柱形图 tooltip 配置 (对堆叠、分组做特殊处理)\n * @param params\n */\nfunction columnTooltip(params) {\n var chart = params.chart, options = params.options;\n var tooltip = options.tooltip, isGroup = options.isGroup, isStack = options.isStack, groupField = options.groupField, data = options.data, xField = options.xField, yField = options.yField, seriesField = options.seriesField;\n if (tooltip === false) {\n chart.tooltip(false);\n }\n else {\n var tooltipOptions = tooltip;\n // fix: https://github.com/antvis/G2Plot/issues/2572\n if (isGroup && isStack) {\n var tooltipFormatter_1 = (tooltipOptions === null || tooltipOptions === void 0 ? void 0 : tooltipOptions.formatter) ||\n (function (datum) { return ({ name: datum[seriesField] + \" - \" + datum[groupField], value: datum[yField] }); });\n tooltipOptions = __assign(__assign({}, tooltipOptions), { customItems: function (originalItems) {\n var items = [];\n each(originalItems, function (item) {\n // Find datas in same cluster\n var datas = filter(data, function (d) { return isMatch(d, pick(item.data, [xField, seriesField])); });\n datas.forEach(function (datum) {\n items.push(__assign(__assign(__assign({}, item), { value: datum[yField], data: datum, mappingData: { _origin: datum } }), tooltipFormatter_1(datum)));\n });\n });\n return items;\n } });\n }\n chart.tooltip(tooltipOptions);\n }\n return params;\n}\n/**\n * 柱形图适配器\n * @param params\n */\nexport function adaptor(params, isBar) {\n if (isBar === void 0) { isBar = false; }\n var options = params.options;\n var seriesField = options.seriesField;\n return flow(defaultOptions, // 处理默认配置\n theme, // theme 需要在 geometry 之前\n pattern('columnStyle'), state, geometry, meta, axis, legend, columnTooltip, slider, scrollbar, label, brushInteraction, interaction, animation, annotation(), conversionTag(options.yField, !isBar, !!seriesField), // 有拆分的时候禁用转化率\n connectedArea(!options.isStack), limitInPlot)(params);\n}\n//# sourceMappingURL=adaptor.js.map","export * from './common';\nexport * from './tooltip';\nexport * from './state';\nexport * from './attr';\nexport * from './statistic';\nexport * from './meta';\nexport * from './axis';\nexport * from './interaction';\nexport * from './annotation';\nexport * from './locale';\nexport * from './button';\n//# sourceMappingURL=index.js.map","import { __assign } from \"tslib\";\nimport { get, isNumber, filter } from '@antv/util';\nimport { LEVEL, log } from './invariant';\nimport { pick } from './pick';\n/**\n * 查看数据是否是全负数、或者全正数\n * @param data\n * @param field\n */\nexport function adjustYMetaByZero(data, field) {\n if (!data)\n return {};\n // 过滤出数字数据\n var numberData = data.filter(function (datum) {\n var v = get(datum, [field]);\n return isNumber(v) && !isNaN(v);\n });\n var gtZero = numberData.every(function (datum) { return get(datum, [field]) >= 0; });\n var ltZero = numberData.every(function (datum) { return get(datum, [field]) <= 0; });\n // 目前是增量更新,对 { min: 0, max: undefined } 进行 update({ max: 0 }) 会得到 { min: 0, max: 0 }\n if (gtZero) {\n return { min: 0 };\n }\n if (ltZero) {\n return { max: 0 };\n }\n return {};\n}\n/**\n * 转换数据格式为带有节点与边的数据格式\n * @param data\n * @param sourceField\n * @param targetField\n * @param weightField\n * @param rawFields 存放一些原数据\n */\nexport function transformDataToNodeLinkData(data, sourceField, targetField, weightField, rawFields) {\n if (rawFields === void 0) { rawFields = []; }\n if (!Array.isArray(data)) {\n return {\n nodes: [],\n links: [],\n };\n }\n // const nodes = [];\n var links = [];\n // 先使用对象方式存储\n var nodesMap = {};\n var nodesIndex = -1;\n // 数组变换成 chord layout 的数据结构\n data.forEach(function (datum) {\n var source = datum[sourceField];\n var target = datum[targetField];\n var weight = datum[weightField];\n var rawData = pick(datum, rawFields);\n // source node\n if (!nodesMap[source]) {\n nodesMap[source] = __assign({ id: ++nodesIndex, name: source }, rawData);\n }\n if (!nodesMap[target]) {\n nodesMap[target] = __assign({ id: ++nodesIndex, name: target }, rawData);\n }\n // links\n links.push(__assign({ source: nodesMap[source].id, target: nodesMap[target].id, \n // sourceName: source,\n // targetName: target,\n value: weight }, rawData));\n });\n return {\n // 需要按照 id 的顺序\n nodes: Object.values(nodesMap).sort(function (a, b) { return a.id - b.id; }),\n links: links,\n };\n}\n/**\n * 处理不合法的数据(过滤 非数值型 和 NaN,保留 null)\n * @param data\n * @param angleField\n */\nexport function processIllegalData(data, field) {\n var processData = filter(data, function (d) {\n var v = d[field];\n return v === null || (typeof v === 'number' && !isNaN(v));\n });\n // 打印异常数据情况\n log(LEVEL.WARN, processData.length === data.length, 'illegal data existed in chart data.');\n return processData;\n}\n//# sourceMappingURL=data.js.map","var CAT_VALUE = 'liquid';\n/**\n * 获取水波图数据\n */\nexport function getLiquidData(percent) {\n return [{ percent: percent, type: CAT_VALUE }];\n}\n//# sourceMappingURL=utils.js.map","import { __assign } from \"tslib\";\nimport { get, isNil } from '@antv/util';\nimport { interaction, animation, theme, scale, pattern } from '../../adaptor/common';\nimport { flow, deepAssign, renderStatistic } from '../../utils';\nimport { interval } from '../../adaptor/geometries';\nimport { getLiquidData } from './utils';\n/**\n * geometry 处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var percent = options.percent, liquidStyle = options.liquidStyle, radius = options.radius, outline = options.outline, wave = options.wave, shape = options.shape, animation = options.animation;\n chart.scale({\n percent: {\n min: 0,\n max: 1,\n },\n });\n chart.data(getLiquidData(percent));\n var color = options.color || chart.getTheme().defaultColor;\n var p = deepAssign({}, params, {\n options: {\n xField: 'type',\n yField: 'percent',\n // radius 放到 columnWidthRatio 中。\n // 保证横向的大小是根据 radius 生成的\n widthRatio: radius,\n interval: {\n color: color,\n style: liquidStyle,\n shape: 'liquid-fill-gauge',\n },\n },\n });\n var ext = interval(p).ext;\n var geometry = ext.geometry;\n var background = chart.getTheme().background;\n var customInfo = {\n radius: radius,\n outline: outline,\n wave: wave,\n shape: shape,\n background: background,\n animation: animation,\n };\n // 将 radius 传入到自定义 shape 中\n geometry.customInfo(customInfo);\n // 关闭组件\n chart.legend(false);\n chart.axis(false);\n chart.tooltip(false);\n return params;\n}\n/**\n * 统计指标文档\n * @param params\n */\nexport function statistic(params, updated) {\n var chart = params.chart, options = params.options;\n var statistic = options.statistic, percent = options.percent, meta = options.meta;\n // 先清空标注,再重新渲染\n chart.getController('annotation').clear(true);\n var metaFormatter = get(meta, ['percent', 'formatter']) || (function (v) { return (v * 100).toFixed(2) + \"%\"; });\n var contentOpt = statistic.content;\n if (contentOpt) {\n contentOpt = deepAssign({}, contentOpt, {\n content: !isNil(contentOpt.content) ? contentOpt.content : metaFormatter(percent),\n });\n }\n renderStatistic(chart, { statistic: __assign(__assign({}, statistic), { content: contentOpt }), plotType: 'liquid' }, { percent: percent });\n if (updated) {\n chart.render(true);\n }\n return params;\n}\n/**\n * 水波图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API (主题前置,会影响绘制的取色)\n return flow(theme, pattern('liquidStyle'), geometry, statistic, scale({}), animation, interaction)(params);\n}\n//# sourceMappingURL=adaptor.js.map","/**\n * 水波图默认配置项\n */\nexport var DEFAULT_OPTIONS = {\n radius: 0.9,\n statistic: {\n title: false,\n content: {\n style: {\n opacity: 0.75,\n fontSize: '30px',\n lineHeight: '30px',\n textAlign: 'center',\n },\n },\n },\n outline: {\n border: 2,\n distance: 0,\n },\n wave: {\n count: 3,\n length: 192,\n },\n shape: 'circle',\n};\n//# sourceMappingURL=constants.js.map","import { __assign } from \"tslib\";\nimport { registerShape } from '@antv/g2';\nimport { reduce, isNumber, mix } from '@antv/util';\nimport { transform } from '../../../utils/matrix';\nvar DURATION = 5000;\n/**\n * 一个线性映射的函数\n * @param min\n * @param max\n * @param factor\n */\nfunction lerp(min, max, factor) {\n return min + (max - min) * factor;\n}\n/**\n * 波浪的 attrs\n * @param cfg\n */\nfunction getFillAttrs(cfg) {\n var attrs = __assign({ opacity: 1 }, cfg.style);\n if (cfg.color && !attrs.fill) {\n attrs.fill = cfg.color;\n }\n return attrs;\n}\n/**\n * shape 的 attrs\n * @param cfg\n */\nfunction getLineAttrs(cfg) {\n var defaultAttrs = {\n fill: '#fff',\n fillOpacity: 0,\n lineWidth: 4,\n };\n var attrs = mix({}, defaultAttrs, cfg.style);\n if (cfg.color && !attrs.stroke) {\n attrs.stroke = cfg.color;\n }\n if (isNumber(cfg.opacity)) {\n attrs.opacity = attrs.strokeOpacity = cfg.opacity;\n }\n return attrs;\n}\n/**\n * 用贝塞尔曲线模拟正弦波\n * Using Bezier curves to fit sine wave.\n * There is 4 control points for each curve of wave,\n * which is at 1/4 wave length of the sine wave.\n *\n * The control points for a wave from (a) to (d) are a-b-c-d:\n * c *----* d\n * b *\n * |\n * ... a * ..................\n *\n * whose positions are a: (0, 0), b: (0.5, 0.5), c: (1, 1), d: (PI / 2, 1)\n *\n * @param x x position of the left-most point (a)\n * @param stage 0-3, stating which part of the wave it is\n * @param waveLength wave length of the sine wave\n * @param amplitude wave amplitude\n * @return 正弦片段曲线\n */\nfunction getWaterWavePositions(x, stage, waveLength, amplitude) {\n if (stage === 0) {\n return [\n [x + ((1 / 2) * waveLength) / Math.PI / 2, amplitude / 2],\n [x + ((1 / 2) * waveLength) / Math.PI, amplitude],\n [x + waveLength / 4, amplitude],\n ];\n }\n if (stage === 1) {\n return [\n [x + (((1 / 2) * waveLength) / Math.PI / 2) * (Math.PI - 2), amplitude],\n [x + (((1 / 2) * waveLength) / Math.PI / 2) * (Math.PI - 1), amplitude / 2],\n [x + waveLength / 4, 0],\n ];\n }\n if (stage === 2) {\n return [\n [x + ((1 / 2) * waveLength) / Math.PI / 2, -amplitude / 2],\n [x + ((1 / 2) * waveLength) / Math.PI, -amplitude],\n [x + waveLength / 4, -amplitude],\n ];\n }\n return [\n [x + (((1 / 2) * waveLength) / Math.PI / 2) * (Math.PI - 2), -amplitude],\n [x + (((1 / 2) * waveLength) / Math.PI / 2) * (Math.PI - 1), -amplitude / 2],\n [x + waveLength / 4, 0],\n ];\n}\n/**\n * 获取水波路径\n * @param radius 半径\n * @param waterLevel 水位\n * @param waveLength 波长\n * @param phase 相位\n * @param amplitude 震幅\n * @param cx 圆心x\n * @param cy 圆心y\n * @return path 路径\n * @reference http://gitlab.alipay-inc.com/datavis/g6/blob/1.2.0/src/graph/utils/path.js#L135\n */\nfunction getWaterWavePath(radius, waterLevel, waveLength, phase, amplitude, cx, cy) {\n var curves = Math.ceil(((2 * radius) / waveLength) * 4) * 4;\n var path = [];\n var _phase = phase;\n // map phase to [-Math.PI * 2, 0]\n while (_phase < -Math.PI * 2) {\n _phase += Math.PI * 2;\n }\n while (_phase > 0) {\n _phase -= Math.PI * 2;\n }\n _phase = (_phase / Math.PI / 2) * waveLength;\n var left = cx - radius + _phase - radius * 2;\n /**\n * top-left corner as start point\n *\n * draws this point\n * |\n * \\|/\n * ~~~~~~~~\n * | |\n * +------+\n */\n path.push(['M', left, waterLevel]);\n /**\n * top wave\n *\n * ~~~~~~~~ <- draws this sine wave\n * | |\n * +------+\n */\n var waveRight = 0;\n for (var c = 0; c < curves; ++c) {\n var stage = c % 4;\n var pos = getWaterWavePositions((c * waveLength) / 4, stage, waveLength, amplitude);\n path.push([\n 'C',\n pos[0][0] + left,\n -pos[0][1] + waterLevel,\n pos[1][0] + left,\n -pos[1][1] + waterLevel,\n pos[2][0] + left,\n -pos[2][1] + waterLevel,\n ]);\n if (c === curves - 1) {\n waveRight = pos[2][0];\n }\n }\n /**\n * top-right corner\n *\n * ~~~~~~~~\n * 3. draws this line -> | | <- 1. draws this line\n * +------+\n * ^\n * |\n * 2. draws this line\n */\n path.push(['L', waveRight + left, cy + radius]);\n path.push(['L', left, cy + radius]);\n path.push(['Z']);\n // path.push(['L', left, waterLevel]);\n return path;\n}\n/**\n * 添加水波\n * @param x 中心x\n * @param y 中心y\n * @param level 水位等级 0~1\n * @param waveCount 水波数\n * @param waveAttrs 色值\n * @param group 图组\n * @param clip 用于剪切的图形\n * @param radius 绘制图形的高度\n * @param waveLength 波的长度\n */\nfunction addWaterWave(x, y, level, waveCount, waveAttrs, group, clip, radius, waveLength, animation) {\n var fill = waveAttrs.fill, opacity = waveAttrs.opacity;\n var bbox = clip.getBBox();\n var width = bbox.maxX - bbox.minX;\n var height = bbox.maxY - bbox.minY;\n for (var idx = 0; idx < waveCount; idx++) {\n var factor = waveCount <= 1 ? 0 : idx / (waveCount - 1);\n var wave = group.addShape('path', {\n name: \"waterwave-path\",\n attrs: {\n path: getWaterWavePath(radius, bbox.minY + height * level, waveLength, 0, width / 32, // 波幅高度\n x, y),\n fill: fill,\n opacity: lerp(0.2, 0.9, factor) * opacity,\n },\n });\n try {\n if (animation === false)\n return;\n var matrix = transform([['t', waveLength, 0]]);\n wave.stopAnimate();\n wave.animate({ matrix: matrix }, {\n duration: lerp(0.5 * DURATION, DURATION, factor),\n repeat: true,\n });\n }\n catch (e) {\n // TODO off-screen canvas 中动画会找不到 canvas\n console.warn('off-screen group animate error!');\n }\n }\n}\n/**\n *\n * @param x 中心 x\n * @param y 中心 y\n * @param width 外接矩形的宽\n * @param height 外接矩形的高\n */\nfunction pin(x, y, width, height) {\n var w = (width * 2) / 3;\n var h = Math.max(w, height);\n var r = w / 2;\n // attrs of the upper circle\n var cx = x;\n var cy = r + y - h / 2;\n var theta = Math.asin(r / ((h - r) * 0.85));\n var dy = Math.sin(theta) * r;\n var dx = Math.cos(theta) * r;\n // the start point of the path\n var x0 = cx - dx;\n var y0 = cy + dy;\n // control point\n var cpX = x;\n var cpY = cy + r / Math.sin(theta);\n return \"\\n M \" + x0 + \" \" + y0 + \"\\n A \" + r + \" \" + r + \" 0 1 1 \" + (x0 + dx * 2) + \" \" + y0 + \"\\n Q \" + cpX + \" \" + cpY + \" \" + x + \" \" + (y + h / 2) + \"\\n Q \" + cpX + \" \" + cpY + \" \" + x0 + \" \" + y0 + \"\\n Z \\n \";\n}\n/**\n *\n * @param x 中心 x\n * @param y 中心 y\n * @param width 外接矩形的宽\n * @param height 外接矩形的高\n */\nfunction circle(x, y, width, height) {\n var rx = width / 2;\n var ry = height / 2;\n return \"\\n M \" + x + \" \" + (y - ry) + \" \\n a \" + rx + \" \" + ry + \" 0 1 0 0 \" + ry * 2 + \"\\n a \" + rx + \" \" + ry + \" 0 1 0 0 \" + -ry * 2 + \"\\n Z\\n \";\n}\n/**\n *\n * @param x 中心 x\n * @param y 中心 y\n * @param width 外接矩形的宽\n * @param height 外接矩形的高\n */\nfunction diamond(x, y, width, height) {\n var h = height / 2;\n var w = width / 2;\n return \"\\n M \" + x + \" \" + (y - h) + \"\\n L \" + (x + w) + \" \" + y + \"\\n L \" + x + \" \" + (y + h) + \"\\n L \" + (x - w) + \" \" + y + \"\\n Z\\n \";\n}\n/**\n *\n * @param x 中心 x\n * @param y 中心 y\n * @param width 外接矩形的宽\n * @param height 外接矩形的高\n */\nfunction triangle(x, y, width, height) {\n var h = height / 2;\n var w = width / 2;\n return \"\\n M \" + x + \" \" + (y - h) + \"\\n L \" + (x + w) + \" \" + (y + h) + \"\\n L \" + (x - w) + \" \" + (y + h) + \"\\n Z\\n \";\n}\n/**\n *\n * @param x 中心 x\n * @param y 中心 y\n * @param width 外接矩形的宽\n * @param height 外接矩形的高\n */\nfunction rect(x, y, width, height) {\n var GOLDEN_SECTION_RATIO = 0.618;\n var h = height / 2;\n var w = (width / 2) * GOLDEN_SECTION_RATIO;\n return \"\\n M \" + (x - w) + \" \" + (y - h) + \"\\n L \" + (x + w) + \" \" + (y - h) + \"\\n L \" + (x + w) + \" \" + (y + h) + \"\\n L \" + (x - w) + \" \" + (y + h) + \"\\n Z\\n \";\n}\nregisterShape('interval', 'liquid-fill-gauge', {\n draw: function (cfg, container) {\n var cx = 0.5;\n var cy = 0.5;\n var customInfo = cfg.customInfo;\n var _a = customInfo, radio = _a.radius, shape = _a.shape, background = _a.background, animation = _a.animation;\n var outline = customInfo.outline;\n var wave = customInfo.wave;\n var border = outline.border, distance = outline.distance;\n var waveCount = wave.count, waveLength = wave.length;\n // 获取最小 minX\n var minX = reduce(cfg.points, function (r, p) {\n return Math.min(r, p.x);\n }, Infinity);\n var center = this.parsePoint({ x: cx, y: cy });\n var minXPoint = this.parsePoint({ x: minX, y: cy });\n var halfWidth = center.x - minXPoint.x;\n // 保证半径是 画布宽高最小值的 radius 值\n var radius = Math.min(halfWidth, minXPoint.y * radio);\n var waveAttrs = getFillAttrs(cfg);\n var outlineAttrs = getLineAttrs(mix({}, cfg, outline));\n var innerRadius = radius - border / 2;\n var builtInShapeByName = {\n pin: pin,\n circle: circle,\n diamond: diamond,\n triangle: triangle,\n rect: rect,\n };\n var buildPath = typeof shape === 'function' ? shape : builtInShapeByName[shape] || builtInShapeByName['circle'];\n var shapePath = buildPath(center.x, center.y, innerRadius * 2, innerRadius * 2);\n // 1. 绘制一个波\n var waves = container.addGroup({\n name: 'waves',\n });\n // 3. 波对应的 clip 裁剪形状\n var clipPath = waves.setClip({\n type: 'path',\n attrs: {\n path: shapePath,\n },\n });\n // 4. 绘制波形\n addWaterWave(center.x, center.y, 1 - cfg.points[1].y, waveCount, waveAttrs, waves, clipPath, radius * 2, waveLength, animation);\n // 2. 绘制一个 distance 宽的 border\n container.addShape('path', {\n name: 'distance',\n attrs: {\n path: shapePath,\n fill: 'transparent',\n lineWidth: border + distance * 2,\n stroke: background === 'transparent' ? '#fff' : background,\n },\n });\n // 3. 绘制一个 border 宽的 border\n container.addShape('path', {\n name: 'wrap',\n attrs: mix(outlineAttrs, {\n path: shapePath,\n fill: 'transparent',\n lineWidth: border,\n }),\n });\n return container;\n },\n});\n//# sourceMappingURL=liquid.js.map","import { __extends } from \"tslib\";\nimport { VIEW_LIFE_CIRCLE, Event } from '@antv/g2';\nimport { Plot } from '../../core/plot';\nimport { adaptor, statistic } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constants';\nimport { getLiquidData } from './utils';\n// register liquid shape\nimport './shapes/liquid';\n/**\n * 传说中的水波图\n */\nvar Liquid = /** @class */ (function (_super) {\n __extends(Liquid, _super);\n function Liquid() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'liquid';\n return _this;\n }\n /**\n * 获取 饼图 默认配置项\n * 供外部使用\n */\n Liquid.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n /**\n * 获取 水波图 默认配置项, 供 base 获取\n */\n Liquid.prototype.getDefaultOptions = function () {\n return Liquid.getDefaultOptions();\n };\n /**\n * 更新数据\n * @param percent\n */\n Liquid.prototype.changeData = function (percent) {\n this.chart.emit(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, Event.fromData(this.chart, VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, null));\n this.updateOption({ percent: percent });\n this.chart.data(getLiquidData(percent));\n statistic({ chart: this.chart, options: this.options }, true);\n this.chart.emit(VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, Event.fromData(this.chart, VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, null));\n };\n /**\n * 获取适配器\n */\n Liquid.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Liquid;\n}(Plot));\nexport { Liquid };\n//# sourceMappingURL=index.js.map","export var Y_FIELD = '$$yField$$';\nexport var DIFF_FIELD = '$$diffField$$';\nexport var ABSOLUTE_FIELD = '$$absoluteField$$';\nexport var IS_TOTAL = '$$isTotal$$';\n/**\n * 瀑布图 默认配置项\n */\nexport var DEFAULT_OPTIONS = {\n /** default: show label */\n label: {},\n /** default: show leaderLine */\n leaderLine: {\n style: {\n lineWidth: 1,\n stroke: '#8c8c8c',\n lineDash: [4, 2],\n },\n },\n /** default: show total */\n total: {\n style: {\n fill: 'rgba(0, 0, 0, 0.25)',\n },\n },\n interactions: [{ type: 'element-active' }],\n risingFill: '#f4664a',\n fallingFill: '#30bf78',\n waterfallStyle: {\n fill: 'rgba(0, 0, 0, 0.25)',\n },\n yAxis: {\n grid: {\n line: {\n style: {\n lineDash: [4, 2],\n },\n },\n },\n },\n};\n//# sourceMappingURL=constant.js.map","import { __assign } from \"tslib\";\nimport { isUndefined, isNumber, get, reduce, isObject } from '@antv/util';\nimport { LEVEL, log } from '../../utils';\nimport { ABSOLUTE_FIELD, DIFF_FIELD, IS_TOTAL, Y_FIELD } from './constant';\n/**\n * @desc 数据处理函数,统一将数据处理成[start, end]\n * @param data\n * @param xField\n * @param yField\n * @param totalLabel\n */\nexport function processData(data, xField, yField, newYField, total) {\n var _a;\n var newData = [];\n reduce(data, function (r, d) {\n var _a;\n // 校验数据合法性\n log(LEVEL.WARN, isNumber(d[yField]), d[yField] + \" is not a valid number\");\n var value = isUndefined(d[yField]) ? null : d[yField];\n newData.push(__assign(__assign({}, d), (_a = {}, _a[newYField] = [r, r + value], _a)));\n return r + value;\n }, 0);\n // 如果需要展示总和\n if (newData.length && total) {\n var sum = get(newData, [[data.length - 1], newYField, [1]]);\n newData.push((_a = {},\n _a[xField] = total.label,\n _a[yField] = sum,\n _a[newYField] = [0, sum],\n _a));\n }\n return newData;\n}\n/**\n * 处理为 瀑布图 数据\n */\nexport function transformData(data, xField, yField, total) {\n var processed = processData(data, xField, yField, Y_FIELD, total);\n return processed.map(function (d, dIdx) {\n var _a;\n if (!isObject(d)) {\n return d;\n }\n return __assign(__assign({}, d), (_a = {}, _a[ABSOLUTE_FIELD] = d[Y_FIELD][1], _a[DIFF_FIELD] = d[Y_FIELD][1] - d[Y_FIELD][0], _a[IS_TOTAL] = dIdx === data.length, _a));\n });\n}\n//# sourceMappingURL=utils.js.map","import { __assign } from \"tslib\";\nimport { registerShape } from '@antv/g2';\nimport { get } from '@antv/util';\nimport { deepAssign } from '../../utils';\n/**\n * 获取柱子 path\n * @param points\n */\nfunction getRectPath(points) {\n var path = [];\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n if (point) {\n var action = i === 0 ? 'M' : 'L';\n path.push([action, point.x, point.y]);\n }\n }\n var first = points[0];\n path.push(['L', first.x, first.y]);\n path.push(['z']);\n return path;\n}\n/**\n * 获取填充属性\n * @param cfg 图形绘制数据\n */\nfunction getFillAttrs(cfg) {\n return deepAssign({}, cfg.defaultStyle, cfg.style, { fill: cfg.color });\n}\nregisterShape('interval', 'waterfall', {\n draw: function (cfg, container) {\n var customInfo = cfg.customInfo, points = cfg.points, nextPoints = cfg.nextPoints;\n var group = container.addGroup();\n // ① 绘制柱体\n var rectPath = this.parsePath(getRectPath(points));\n var fillAttrs = getFillAttrs(cfg);\n group.addShape('path', {\n attrs: __assign(__assign({}, fillAttrs), { path: rectPath }),\n });\n // ② 绘制连接线\n var leaderLineCfg = get(customInfo, 'leaderLine');\n if (leaderLineCfg && nextPoints) {\n var linkPath = [\n ['M', points[2].x, points[2].y],\n ['L', nextPoints[0].x, nextPoints[0].y],\n ];\n if (points[2].y === nextPoints[1].y) {\n linkPath[1] = ['L', nextPoints[1].x, nextPoints[1].y];\n }\n linkPath = this.parsePath(linkPath);\n group.addShape('path', {\n attrs: __assign({ path: linkPath }, (leaderLineCfg.style || {})),\n });\n }\n return group;\n },\n});\n//# sourceMappingURL=shape.js.map","import { __assign, __rest } from \"tslib\";\nimport { get } from '@antv/util';\nimport { interaction, animation, theme, state, scale, annotation } from '../../adaptor/common';\nimport { interval } from '../../adaptor/geometries';\nimport { getLocale } from '../../core/locale';\nimport { findGeometry, flow, transformLabel, deepAssign } from '../../utils';\nimport { Y_FIELD, ABSOLUTE_FIELD, DIFF_FIELD, IS_TOTAL } from './constant';\nimport { transformData } from './utils';\nimport './shape';\n/**\n * 处理默认配置项\n * @param params\n * @returns\n */\nfunction defaultOptions(params) {\n var _a = params.options, locale = _a.locale, total = _a.total;\n var localeTotalLabel = getLocale(locale).get(['waterfall', 'total']);\n if (total && typeof total.label !== 'string' && localeTotalLabel) {\n // @ts-ignore\n params.options.total.label = localeTotalLabel;\n }\n return params;\n}\n/**\n * 字段\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var data = options.data, xField = options.xField, yField = options.yField, total = options.total, leaderLine = options.leaderLine, columnWidthRatio = options.columnWidthRatio, waterfallStyle = options.waterfallStyle, risingFill = options.risingFill, fallingFill = options.fallingFill, color = options.color;\n // 数据处理\n chart.data(transformData(data, xField, yField, total));\n // 瀑布图自带的 colorMapping\n var colorMapping = color ||\n function (datum) {\n if (get(datum, [IS_TOTAL])) {\n return get(total, ['style', 'fill'], '');\n }\n return get(datum, [Y_FIELD, 1]) - get(datum, [Y_FIELD, 0]) > 0 ? risingFill : fallingFill;\n };\n var p = deepAssign({}, params, {\n options: {\n xField: xField,\n yField: Y_FIELD,\n seriesField: xField,\n rawFields: [yField, DIFF_FIELD, IS_TOTAL, Y_FIELD],\n widthRatio: columnWidthRatio,\n interval: {\n style: waterfallStyle,\n shape: 'waterfall',\n color: colorMapping,\n },\n },\n });\n var ext = interval(p).ext;\n var geometry = ext.geometry;\n // 将 waterfall leaderLineCfg 传入到自定义 shape 中\n geometry.customInfo({ leaderLine: leaderLine });\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\nfunction meta(params) {\n var _a, _b;\n var options = params.options;\n var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField, meta = options.meta;\n var Y_FIELD_META = deepAssign({}, { alias: yField }, get(meta, yField));\n return flow(scale((_a = {},\n _a[xField] = xAxis,\n _a[yField] = yAxis,\n _a[Y_FIELD] = yAxis,\n _a), deepAssign({}, meta, (_b = {}, _b[Y_FIELD] = Y_FIELD_META, _b[DIFF_FIELD] = Y_FIELD_META, _b[ABSOLUTE_FIELD] = Y_FIELD_META, _b))))(params);\n}\n/**\n * axis 配置\n * @param params\n */\nfunction axis(params) {\n var chart = params.chart, options = params.options;\n var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n // 为 false 则是不显示轴\n if (xAxis === false) {\n chart.axis(xField, false);\n }\n else {\n chart.axis(xField, xAxis);\n }\n if (yAxis === false) {\n chart.axis(yField, false);\n chart.axis(Y_FIELD, false);\n }\n else {\n chart.axis(yField, yAxis);\n chart.axis(Y_FIELD, yAxis);\n }\n return params;\n}\n/**\n * legend 配置 todo 添加 hover 交互\n * @param params\n */\nfunction legend(params) {\n var chart = params.chart, options = params.options;\n var legend = options.legend, total = options.total, risingFill = options.risingFill, fallingFill = options.fallingFill, locale = options.locale;\n var i18n = getLocale(locale);\n if (legend === false) {\n chart.legend(false);\n }\n else {\n var items = [\n {\n name: i18n.get(['general', 'increase']),\n value: 'increase',\n marker: { symbol: 'square', style: { r: 5, fill: risingFill } },\n },\n {\n name: i18n.get(['general', 'decrease']),\n value: 'decrease',\n marker: { symbol: 'square', style: { r: 5, fill: fallingFill } },\n },\n ];\n if (total) {\n items.push({\n name: total.label || '',\n value: 'total',\n marker: {\n symbol: 'square',\n style: deepAssign({}, { r: 5 }, get(total, 'style')),\n },\n });\n }\n chart.legend(deepAssign({}, {\n custom: true,\n position: 'top',\n items: items,\n }, legend));\n chart.removeInteraction('legend-filter');\n }\n return params;\n}\n/**\n * 数据标签\n * @param params\n */\nfunction label(params) {\n var chart = params.chart, options = params.options;\n var label = options.label, labelMode = options.labelMode, xField = options.xField;\n var geometry = findGeometry(chart, 'interval');\n if (!label) {\n geometry.label(false);\n }\n else {\n var callback = label.callback, cfg = __rest(label, [\"callback\"]);\n geometry.label({\n fields: labelMode === 'absolute' ? [ABSOLUTE_FIELD, xField] : [DIFF_FIELD, xField],\n callback: callback,\n cfg: transformLabel(cfg),\n });\n }\n return params;\n}\n/**\n * tooltip 配置\n * @param params\n */\nexport function tooltip(params) {\n var chart = params.chart, options = params.options;\n var tooltip = options.tooltip, xField = options.xField, yField = options.yField;\n if (tooltip !== false) {\n chart.tooltip(__assign({ showCrosshairs: false, showMarkers: false, shared: true, \n // tooltip 默认展示 y 字段值\n fields: [yField] }, tooltip));\n // 瀑布图默认以 yField 作为 tooltip 内容\n var geometry_1 = chart.geometries[0];\n (tooltip === null || tooltip === void 0 ? void 0 : tooltip.formatter) ? geometry_1.tooltip(xField + \"*\" + yField, tooltip.formatter) : geometry_1.tooltip(yField);\n }\n else {\n chart.tooltip(false);\n }\n return params;\n}\n/**\n * 瀑布图适配器\n * @param params\n */\nexport function adaptor(params) {\n return flow(defaultOptions, theme, geometry, meta, axis, legend, tooltip, label, state, interaction, animation, annotation())(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\nimport { transformData } from './utils';\n/**\n * 瀑布图\n */\nvar Waterfall = /** @class */ (function (_super) {\n __extends(Waterfall, _super);\n function Waterfall() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'waterfall';\n return _this;\n }\n /**\n * 获取 瀑布图 默认配置项\n * 供外部使用\n */\n Waterfall.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n /**\n * @override\n * @param data\n */\n Waterfall.prototype.changeData = function (data) {\n var _a = this.options, xField = _a.xField, yField = _a.yField, total = _a.total;\n this.updateOption({ data: data });\n this.chart.changeData(transformData(data, xField, yField, total));\n };\n /**\n * 获取 瀑布图 的适配器\n */\n Waterfall.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n /**\n * 获取 瀑布图 的默认配置\n */\n Waterfall.prototype.getDefaultOptions = function () {\n return Waterfall.getDefaultOptions();\n };\n return Waterfall;\n}(Plot));\nexport { Waterfall };\n//# sourceMappingURL=index.js.map","export var EN_US_LOCALE = {\n locale: 'en-US',\n // General\n general: {\n increase: 'Increase',\n decrease: 'Decrease',\n root: 'Root',\n },\n // Plot Components\n /** statistic text component */\n statistic: {\n total: 'Total',\n },\n /** conversionTag component */\n conversionTag: {\n label: 'Rate',\n },\n legend: {},\n tooltip: {},\n slider: {},\n scrollbar: {},\n // Plots\n waterfall: {\n total: 'Total',\n },\n};\n//# sourceMappingURL=en_US.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.createSensor = void 0;\n\nvar _object = require(\"./object\");\n\nvar _resizeObserver = require(\"./resizeObserver\");\n\n/**\n * Created by hustcc on 18/7/5.\n * Contract: i@hust.cc\n */\n\n/**\n * sensor strategies\n */\n// export const createSensor = createObjectSensor;\nvar createSensor = typeof ResizeObserver !== 'undefined' ? _resizeObserver.createSensor : _object.createSensor;\nexports.createSensor = createSensor;","/**\n * 是否真实的是数字\n * @param v\n */\nexport function isRealNumber(v) {\n return typeof v === 'number' && !isNaN(v);\n}\n/**\n * @ignore\n * Determines whether between is\n * @param value\n * @param start\n * @param end\n * @returns true if between\n */\nexport function isBetween(value, start, end) {\n var min = Math.min(start, end);\n var max = Math.max(start, end);\n return value >= min && value <= max;\n}\n//# sourceMappingURL=number.js.map","import { __assign, __rest } from \"tslib\";\nimport { each, omit } from '@antv/util';\nimport { tooltip, slider, interaction, animation, theme, annotation, limitInPlot, pattern } from '../../adaptor/common';\nimport { findGeometry } from '../../utils';\nimport { area, point, line } from '../../adaptor/geometries';\nimport { flow, transformLabel, deepAssign } from '../../utils';\nimport { getDataWhetherPecentage } from '../../utils/transform/percent';\nimport { meta, legend, axis } from '../line/adaptor';\nexport { meta };\n/**\n * geometry 处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var data = options.data, areaStyle = options.areaStyle, color = options.color, pointMapping = options.point, lineMapping = options.line, isPercent = options.isPercent, xField = options.xField, yField = options.yField, tooltip = options.tooltip, seriesField = options.seriesField, startOnZero = options.startOnZero;\n var pointState = pointMapping === null || pointMapping === void 0 ? void 0 : pointMapping.state;\n var chartData = getDataWhetherPecentage(data, yField, xField, yField, isPercent);\n chart.data(chartData);\n // 百分比堆积图,默认会给一个 % 格式化逻辑, 用户可自定义\n var tooltipOptions = isPercent\n ? __assign({ formatter: function (datum) { return ({\n name: datum[seriesField] || datum[xField],\n value: (Number(datum[yField]) * 100).toFixed(2) + '%',\n }); } }, tooltip) : tooltip;\n var primary = deepAssign({}, params, {\n options: {\n area: { color: color, style: areaStyle },\n point: pointMapping && __assign({ color: color }, pointMapping),\n tooltip: tooltipOptions,\n // label 不传递给各个 geometry adaptor,由 label adaptor 处理\n label: undefined,\n args: {\n startOnZero: startOnZero,\n },\n },\n });\n // 线默认 2px (折线不能复用面积图的 state,因为 fill 和 stroke 不匹配)\n var lineParams = {\n chart: chart,\n options: deepAssign({ line: { size: 2 } }, omit(options, ['state']), {\n // 颜色保持一致,因为如果颜色不一致,会导致 tooltip 中元素重复。\n // 如果存在,才设置,否则为空\n line: lineMapping && __assign({ color: color }, lineMapping),\n sizeField: seriesField,\n state: lineMapping === null || lineMapping === void 0 ? void 0 : lineMapping.state,\n tooltip: false,\n // label 不传递给各个 geometry adaptor,由 label adaptor 处理\n label: undefined,\n args: {\n startOnZero: startOnZero,\n },\n }),\n };\n var pointParams = deepAssign({}, primary, { options: { tooltip: false, state: pointState } });\n // area geometry 处理\n area(primary);\n line(lineParams);\n point(pointParams);\n return params;\n}\n/**\n * 数据标签\n * @param params\n */\nfunction label(params) {\n var chart = params.chart, options = params.options;\n var label = options.label, yField = options.yField;\n var areaGeometry = findGeometry(chart, 'area');\n // label 为 false, 空 则不显示 label\n if (!label) {\n areaGeometry.label(false);\n }\n else {\n var callback = label.callback, cfg = __rest(label, [\"callback\"]);\n areaGeometry.label({\n fields: [yField],\n callback: callback,\n cfg: __assign({ layout: [\n { type: 'limit-in-plot' },\n { type: 'path-adjust-position' },\n { type: 'point-adjust-position' },\n { type: 'limit-in-plot', cfg: { action: 'hide' } },\n ] }, transformLabel(cfg)),\n });\n }\n return params;\n}\n/**\n * 处理 adjust\n * @param params\n */\nfunction adjust(params) {\n var chart = params.chart, options = params.options;\n var isStack = options.isStack, isPercent = options.isPercent, seriesField = options.seriesField;\n if ((isPercent || isStack) && seriesField) {\n each(chart.geometries, function (g) {\n g.adjust('stack');\n });\n }\n return params;\n}\n/**\n * 折线图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return flow(theme, pattern('areaStyle'), geometry, meta, adjust, axis, legend, tooltip, label, slider, annotation(), interaction, animation, limitInPlot)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { isArray, isString, filter } from '@antv/util';\n/** export 一些字段常量 */\n/** 在同层级,同一父节点下的节点索引顺序 */\nexport var NODE_INDEX_FIELD = 'nodeIndex';\n/** child 节点数量 */\nexport var CHILD_NODE_COUNT = 'childNodeCount';\n/** 节点的祖先节点 */\nexport var NODE_ANCESTORS_FIELD = 'nodeAncestor';\nvar INVALID_FIELD_ERR_MSG = 'Invalid field: it must be a string!';\nexport function getField(options, defaultField) {\n var field = options.field, fields = options.fields;\n if (isString(field)) {\n return field;\n }\n if (isArray(field)) {\n console.warn(INVALID_FIELD_ERR_MSG);\n return field[0];\n }\n console.warn(INVALID_FIELD_ERR_MSG + \" will try to get fields instead.\");\n if (isString(fields)) {\n return fields;\n }\n if (isArray(fields) && fields.length) {\n return fields[0];\n }\n if (defaultField) {\n return defaultField;\n }\n throw new TypeError(INVALID_FIELD_ERR_MSG);\n}\nexport function getAllNodes(root) {\n var nodes = [];\n if (root && root.each) {\n var parent_1;\n var index_1;\n // d3-hierarchy: Invokes the specified function for node and each descendant in **breadth-first order**\n root.each(function (node) {\n var _a, _b;\n if (node.parent !== parent_1) {\n parent_1 = node.parent;\n index_1 = 0;\n }\n else {\n index_1 += 1;\n }\n var ancestors = filter((((_a = node.ancestors) === null || _a === void 0 ? void 0 : _a.call(node)) || []).map(function (d) { return nodes.find(function (n) { return n.name === d.name; }) || d; }), function (_a) {\n var depth = _a.depth;\n return depth > 0 && depth < node.depth;\n });\n node[NODE_ANCESTORS_FIELD] = ancestors;\n node[CHILD_NODE_COUNT] = ((_b = node.children) === null || _b === void 0 ? void 0 : _b.length) || 0;\n node[NODE_INDEX_FIELD] = index_1;\n nodes.push(node);\n });\n }\n else if (root && root.eachNode) {\n // @antv/hierarchy\n root.eachNode(function (node) {\n nodes.push(node);\n });\n }\n return nodes;\n}\n//# sourceMappingURL=util.js.map","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (factory((global.fmin = global.fmin || {})));\n}(this, function (exports) { 'use strict';\n\n /** finds the zeros of a function, given two starting points (which must\n * have opposite signs */\n function bisect(f, a, b, parameters) {\n parameters = parameters || {};\n var maxIterations = parameters.maxIterations || 100,\n tolerance = parameters.tolerance || 1e-10,\n fA = f(a),\n fB = f(b),\n delta = b - a;\n\n if (fA * fB > 0) {\n throw \"Initial bisect points must have opposite signs\";\n }\n\n if (fA === 0) return a;\n if (fB === 0) return b;\n\n for (var i = 0; i < maxIterations; ++i) {\n delta /= 2;\n var mid = a + delta,\n fMid = f(mid);\n\n if (fMid * fA >= 0) {\n a = mid;\n }\n\n if ((Math.abs(delta) < tolerance) || (fMid === 0)) {\n return mid;\n }\n }\n return a + delta;\n }\n\n // need some basic operations on vectors, rather than adding a dependency,\n // just define here\n function zeros(x) { var r = new Array(x); for (var i = 0; i < x; ++i) { r[i] = 0; } return r; }\n function zerosM(x,y) { return zeros(x).map(function() { return zeros(y); }); }\n\n function dot(a, b) {\n var ret = 0;\n for (var i = 0; i < a.length; ++i) {\n ret += a[i] * b[i];\n }\n return ret;\n }\n\n function norm2(a) {\n return Math.sqrt(dot(a, a));\n }\n\n function scale(ret, value, c) {\n for (var i = 0; i < value.length; ++i) {\n ret[i] = value[i] * c;\n }\n }\n\n function weightedSum(ret, w1, v1, w2, v2) {\n for (var j = 0; j < ret.length; ++j) {\n ret[j] = w1 * v1[j] + w2 * v2[j];\n }\n }\n\n /** minimizes a function using the downhill simplex method */\n function nelderMead(f, x0, parameters) {\n parameters = parameters || {};\n\n var maxIterations = parameters.maxIterations || x0.length * 200,\n nonZeroDelta = parameters.nonZeroDelta || 1.05,\n zeroDelta = parameters.zeroDelta || 0.001,\n minErrorDelta = parameters.minErrorDelta || 1e-6,\n minTolerance = parameters.minErrorDelta || 1e-5,\n rho = (parameters.rho !== undefined) ? parameters.rho : 1,\n chi = (parameters.chi !== undefined) ? parameters.chi : 2,\n psi = (parameters.psi !== undefined) ? parameters.psi : -0.5,\n sigma = (parameters.sigma !== undefined) ? parameters.sigma : 0.5,\n maxDiff;\n\n // initialize simplex.\n var N = x0.length,\n simplex = new Array(N + 1);\n simplex[0] = x0;\n simplex[0].fx = f(x0);\n simplex[0].id = 0;\n for (var i = 0; i < N; ++i) {\n var point = x0.slice();\n point[i] = point[i] ? point[i] * nonZeroDelta : zeroDelta;\n simplex[i+1] = point;\n simplex[i+1].fx = f(point);\n simplex[i+1].id = i+1;\n }\n\n function updateSimplex(value) {\n for (var i = 0; i < value.length; i++) {\n simplex[N][i] = value[i];\n }\n simplex[N].fx = value.fx;\n }\n\n var sortOrder = function(a, b) { return a.fx - b.fx; };\n\n var centroid = x0.slice(),\n reflected = x0.slice(),\n contracted = x0.slice(),\n expanded = x0.slice();\n\n for (var iteration = 0; iteration < maxIterations; ++iteration) {\n simplex.sort(sortOrder);\n\n if (parameters.history) {\n // copy the simplex (since later iterations will mutate) and\n // sort it to have a consistent order between iterations\n var sortedSimplex = simplex.map(function (x) {\n var state = x.slice();\n state.fx = x.fx;\n state.id = x.id;\n return state;\n });\n sortedSimplex.sort(function(a,b) { return a.id - b.id; });\n\n parameters.history.push({x: simplex[0].slice(),\n fx: simplex[0].fx,\n simplex: sortedSimplex});\n }\n\n maxDiff = 0;\n for (i = 0; i < N; ++i) {\n maxDiff = Math.max(maxDiff, Math.abs(simplex[0][i] - simplex[1][i]));\n }\n\n if ((Math.abs(simplex[0].fx - simplex[N].fx) < minErrorDelta) &&\n (maxDiff < minTolerance)) {\n break;\n }\n\n // compute the centroid of all but the worst point in the simplex\n for (i = 0; i < N; ++i) {\n centroid[i] = 0;\n for (var j = 0; j < N; ++j) {\n centroid[i] += simplex[j][i];\n }\n centroid[i] /= N;\n }\n\n // reflect the worst point past the centroid and compute loss at reflected\n // point\n var worst = simplex[N];\n weightedSum(reflected, 1+rho, centroid, -rho, worst);\n reflected.fx = f(reflected);\n\n // if the reflected point is the best seen, then possibly expand\n if (reflected.fx < simplex[0].fx) {\n weightedSum(expanded, 1+chi, centroid, -chi, worst);\n expanded.fx = f(expanded);\n if (expanded.fx < reflected.fx) {\n updateSimplex(expanded);\n } else {\n updateSimplex(reflected);\n }\n }\n\n // if the reflected point is worse than the second worst, we need to\n // contract\n else if (reflected.fx >= simplex[N-1].fx) {\n var shouldReduce = false;\n\n if (reflected.fx > worst.fx) {\n // do an inside contraction\n weightedSum(contracted, 1+psi, centroid, -psi, worst);\n contracted.fx = f(contracted);\n if (contracted.fx < worst.fx) {\n updateSimplex(contracted);\n } else {\n shouldReduce = true;\n }\n } else {\n // do an outside contraction\n weightedSum(contracted, 1-psi * rho, centroid, psi*rho, worst);\n contracted.fx = f(contracted);\n if (contracted.fx < reflected.fx) {\n updateSimplex(contracted);\n } else {\n shouldReduce = true;\n }\n }\n\n if (shouldReduce) {\n // if we don't contract here, we're done\n if (sigma >= 1) break;\n\n // do a reduction\n for (i = 1; i < simplex.length; ++i) {\n weightedSum(simplex[i], 1 - sigma, simplex[0], sigma, simplex[i]);\n simplex[i].fx = f(simplex[i]);\n }\n }\n } else {\n updateSimplex(reflected);\n }\n }\n\n simplex.sort(sortOrder);\n return {fx : simplex[0].fx,\n x : simplex[0]};\n }\n\n /// searches along line 'pk' for a point that satifies the wolfe conditions\n /// See 'Numerical Optimization' by Nocedal and Wright p59-60\n /// f : objective function\n /// pk : search direction\n /// current: object containing current gradient/loss\n /// next: output: contains next gradient/loss\n /// returns a: step size taken\n function wolfeLineSearch(f, pk, current, next, a, c1, c2) {\n var phi0 = current.fx, phiPrime0 = dot(current.fxprime, pk),\n phi = phi0, phi_old = phi0,\n phiPrime = phiPrime0,\n a0 = 0;\n\n a = a || 1;\n c1 = c1 || 1e-6;\n c2 = c2 || 0.1;\n\n function zoom(a_lo, a_high, phi_lo) {\n for (var iteration = 0; iteration < 16; ++iteration) {\n a = (a_lo + a_high)/2;\n weightedSum(next.x, 1.0, current.x, a, pk);\n phi = next.fx = f(next.x, next.fxprime);\n phiPrime = dot(next.fxprime, pk);\n\n if ((phi > (phi0 + c1 * a * phiPrime0)) ||\n (phi >= phi_lo)) {\n a_high = a;\n\n } else {\n if (Math.abs(phiPrime) <= -c2 * phiPrime0) {\n return a;\n }\n\n if (phiPrime * (a_high - a_lo) >=0) {\n a_high = a_lo;\n }\n\n a_lo = a;\n phi_lo = phi;\n }\n }\n\n return 0;\n }\n\n for (var iteration = 0; iteration < 10; ++iteration) {\n weightedSum(next.x, 1.0, current.x, a, pk);\n phi = next.fx = f(next.x, next.fxprime);\n phiPrime = dot(next.fxprime, pk);\n if ((phi > (phi0 + c1 * a * phiPrime0)) ||\n (iteration && (phi >= phi_old))) {\n return zoom(a0, a, phi_old);\n }\n\n if (Math.abs(phiPrime) <= -c2 * phiPrime0) {\n return a;\n }\n\n if (phiPrime >= 0 ) {\n return zoom(a, a0, phi);\n }\n\n phi_old = phi;\n a0 = a;\n a *= 2;\n }\n\n return a;\n }\n\n function conjugateGradient(f, initial, params) {\n // allocate all memory up front here, keep out of the loop for perfomance\n // reasons\n var current = {x: initial.slice(), fx: 0, fxprime: initial.slice()},\n next = {x: initial.slice(), fx: 0, fxprime: initial.slice()},\n yk = initial.slice(),\n pk, temp,\n a = 1,\n maxIterations;\n\n params = params || {};\n maxIterations = params.maxIterations || initial.length * 20;\n\n current.fx = f(current.x, current.fxprime);\n pk = current.fxprime.slice();\n scale(pk, current.fxprime,-1);\n\n for (var i = 0; i < maxIterations; ++i) {\n a = wolfeLineSearch(f, pk, current, next, a);\n\n // todo: history in wrong spot?\n if (params.history) {\n params.history.push({x: current.x.slice(),\n fx: current.fx,\n fxprime: current.fxprime.slice(),\n alpha: a});\n }\n\n if (!a) {\n // faiiled to find point that satifies wolfe conditions.\n // reset direction for next iteration\n scale(pk, current.fxprime, -1);\n\n } else {\n // update direction using Polak–Ribiere CG method\n weightedSum(yk, 1, next.fxprime, -1, current.fxprime);\n\n var delta_k = dot(current.fxprime, current.fxprime),\n beta_k = Math.max(0, dot(yk, next.fxprime) / delta_k);\n\n weightedSum(pk, beta_k, pk, -1, next.fxprime);\n\n temp = current;\n current = next;\n next = temp;\n }\n\n if (norm2(current.fxprime) <= 1e-5) {\n break;\n }\n }\n\n if (params.history) {\n params.history.push({x: current.x.slice(),\n fx: current.fx,\n fxprime: current.fxprime.slice(),\n alpha: a});\n }\n\n return current;\n }\n\n function gradientDescent(f, initial, params) {\n params = params || {};\n var maxIterations = params.maxIterations || initial.length * 100,\n learnRate = params.learnRate || 0.001,\n current = {x: initial.slice(), fx: 0, fxprime: initial.slice()};\n\n for (var i = 0; i < maxIterations; ++i) {\n current.fx = f(current.x, current.fxprime);\n if (params.history) {\n params.history.push({x: current.x.slice(),\n fx: current.fx,\n fxprime: current.fxprime.slice()});\n }\n\n weightedSum(current.x, 1, current.x, -learnRate, current.fxprime);\n if (norm2(current.fxprime) <= 1e-5) {\n break;\n }\n }\n\n return current;\n }\n\n function gradientDescentLineSearch(f, initial, params) {\n params = params || {};\n var current = {x: initial.slice(), fx: 0, fxprime: initial.slice()},\n next = {x: initial.slice(), fx: 0, fxprime: initial.slice()},\n maxIterations = params.maxIterations || initial.length * 100,\n learnRate = params.learnRate || 1,\n pk = initial.slice(),\n c1 = params.c1 || 1e-3,\n c2 = params.c2 || 0.1,\n temp,\n functionCalls = [];\n\n if (params.history) {\n // wrap the function call to track linesearch samples\n var inner = f;\n f = function(x, fxprime) {\n functionCalls.push(x.slice());\n return inner(x, fxprime);\n };\n }\n\n current.fx = f(current.x, current.fxprime);\n for (var i = 0; i < maxIterations; ++i) {\n scale(pk, current.fxprime, -1);\n learnRate = wolfeLineSearch(f, pk, current, next, learnRate, c1, c2);\n\n if (params.history) {\n params.history.push({x: current.x.slice(),\n fx: current.fx,\n fxprime: current.fxprime.slice(),\n functionCalls: functionCalls,\n learnRate: learnRate,\n alpha: learnRate});\n functionCalls = [];\n }\n\n\n temp = current;\n current = next;\n next = temp;\n\n if ((learnRate === 0) || (norm2(current.fxprime) < 1e-5)) break;\n }\n\n return current;\n }\n\n exports.bisect = bisect;\n exports.nelderMead = nelderMead;\n exports.conjugateGradient = conjugateGradient;\n exports.gradientDescent = gradientDescent;\n exports.gradientDescentLineSearch = gradientDescentLineSearch;\n exports.zeros = zeros;\n exports.zerosM = zerosM;\n exports.norm2 = norm2;\n exports.weightedSum = weightedSum;\n exports.scale = scale;\n\n}));","import {packEnclose} from \"./siblings.js\";\nimport {optional} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nfunction defaultRadius(d) {\n return Math.sqrt(d.value);\n}\n\nexport default function() {\n var radius = null,\n dx = 1,\n dy = 1,\n padding = constantZero;\n\n function pack(root) {\n root.x = dx / 2, root.y = dy / 2;\n if (radius) {\n root.eachBefore(radiusLeaf(radius))\n .eachAfter(packChildren(padding, 0.5))\n .eachBefore(translateChild(1));\n } else {\n root.eachBefore(radiusLeaf(defaultRadius))\n .eachAfter(packChildren(constantZero, 1))\n .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))\n .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n }\n return root;\n }\n\n pack.radius = function(x) {\n return arguments.length ? (radius = optional(x), pack) : radius;\n };\n\n pack.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n };\n\n pack.padding = function(x) {\n return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n };\n\n return pack;\n}\n\nfunction radiusLeaf(radius) {\n return function(node) {\n if (!node.children) {\n node.r = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildren(padding, k) {\n return function(node) {\n if (children = node.children) {\n var children,\n i,\n n = children.length,\n r = padding(node) * k || 0,\n e;\n\n if (r) for (i = 0; i < n; ++i) children[i].r += r;\n e = packEnclose(children);\n if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n node.r = e + r;\n }\n };\n}\n\nfunction translateChild(k) {\n return function(node) {\n var parent = node.parent;\n node.r *= k;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n","import { __assign } from \"tslib\";\nimport { getTooltipMapping } from '../../utils/tooltip';\nimport { deepAssign } from '../../utils';\nimport { geometry } from './base';\n/**\n * polygon 的配置处理\n * @param params\n */\nexport function polygon(params) {\n var options = params.options;\n var polygon = options.polygon, xField = options.xField, yField = options.yField, seriesField = options.seriesField, tooltip = options.tooltip;\n var _a = getTooltipMapping(tooltip, [xField, yField, seriesField]), fields = _a.fields, formatter = _a.formatter;\n return polygon\n ? geometry(deepAssign({}, params, {\n options: {\n type: 'polygon',\n colorField: seriesField,\n tooltipFields: fields,\n mapping: __assign({ tooltip: formatter }, polygon),\n },\n }))\n : params;\n}\n//# sourceMappingURL=polygon.js.map","export var DEFAULT_COLOR = ['#FAAD14', '#E8EDF3'];\n/**\n * 默认配置项\n */\nexport var DEFAULT_OPTIONS = {\n percent: 0.2,\n color: DEFAULT_COLOR,\n animation: {},\n};\n//# sourceMappingURL=constants.js.map","import { isNil, isFunction, assign } from '@antv/util';\nvar DEFAULT_OPTIONS = {\n font: function () { return 'serif'; },\n padding: 1,\n size: [500, 500],\n spiral: 'archimedean',\n // timeInterval: Infinity // max execute time\n timeInterval: 3000,\n};\n/**\n * 根据对应的数据对象,计算每个\n * 词语在画布中的渲染位置,并返回\n * 计算后的数据对象\n * @param words\n * @param options\n */\nexport function wordCloud(words, options) {\n // 混入默认配置\n options = assign({}, DEFAULT_OPTIONS, options);\n return transform(words, options);\n}\n/**\n * 抛出没有混入默认配置的方法,用于测试。\n * @param words\n * @param options\n */\nexport function transform(words, options) {\n // 布局对象\n var layout = tagCloud();\n ['font', 'fontSize', 'fontWeight', 'padding', 'rotate', 'size', 'spiral', 'timeInterval', 'random'].forEach(function (key) {\n if (!isNil(options[key])) {\n layout[key](options[key]);\n }\n });\n layout.words(words);\n if (options.imageMask) {\n layout.createMask(options.imageMask);\n }\n var result = layout.start();\n var tags = result._tags;\n tags.forEach(function (tag) {\n tag.x += options.size[0] / 2;\n tag.y += options.size[1] / 2;\n });\n var _a = options.size, w = _a[0], h = _a[1];\n // 添加两个参照数据,分别表示左上角和右下角。\n // 不添加的话不会按照真实的坐标渲染,而是以\n // 数据中的边界坐标为边界进行拉伸,以铺满画布。\n // 这样的后果会导致词语之间的重叠。\n tags.push({\n text: '',\n value: 0,\n x: 0,\n y: 0,\n opacity: 0,\n });\n tags.push({\n text: '',\n value: 0,\n x: w,\n y: h,\n opacity: 0,\n });\n return tags;\n}\nvar cloudRadians = Math.PI / 180, cw = (1 << 11) >> 5, ch = 1 << 11;\nfunction cloudText(d) {\n return d.text;\n}\nfunction cloudFont() {\n return 'serif';\n}\nfunction cloudFontNormal() {\n return 'normal';\n}\nfunction cloudFontSize(d) {\n return d.value;\n}\nfunction cloudRotate() {\n return ~~(Math.random() * 2) * 90;\n}\nfunction cloudPadding() {\n return 1;\n}\n// Fetches a monochrome sprite bitmap for the specified text.\n// Load in batches for speed.\nfunction cloudSprite(contextAndRatio, d, data, di) {\n if (d.sprite)\n return;\n var c = contextAndRatio.context, ratio = contextAndRatio.ratio;\n c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\n var x = 0, y = 0, maxh = 0;\n var n = data.length;\n --di;\n while (++di < n) {\n d = data[di];\n c.save();\n c.font = d.style + ' ' + d.weight + ' ' + ~~((d.size + 1) / ratio) + 'px ' + d.font;\n var w = c.measureText(d.text + 'm').width * ratio, h = d.size << 1;\n if (d.rotate) {\n var sr = Math.sin(d.rotate * cloudRadians), cr = Math.cos(d.rotate * cloudRadians), wcr = w * cr, wsr = w * sr, hcr = h * cr, hsr = h * sr;\n w = ((Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f) >> 5) << 5;\n h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n }\n else {\n w = ((w + 0x1f) >> 5) << 5;\n }\n if (h > maxh)\n maxh = h;\n if (x + w >= cw << 5) {\n x = 0;\n y += maxh;\n maxh = 0;\n }\n if (y + h >= ch)\n break;\n c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\n if (d.rotate)\n c.rotate(d.rotate * cloudRadians);\n c.fillText(d.text, 0, 0);\n if (d.padding) {\n c.lineWidth = 2 * d.padding;\n c.strokeText(d.text, 0, 0);\n }\n c.restore();\n d.width = w;\n d.height = h;\n d.xoff = x;\n d.yoff = y;\n d.x1 = w >> 1;\n d.y1 = h >> 1;\n d.x0 = -d.x1;\n d.y0 = -d.y1;\n d.hasText = true;\n x += w;\n }\n var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data, sprite = [];\n while (--di >= 0) {\n d = data[di];\n if (!d.hasText)\n continue;\n var w = d.width, w32 = w >> 5;\n var h = d.y1 - d.y0;\n // Zero the buffer\n for (var i = 0; i < h * w32; i++)\n sprite[i] = 0;\n x = d.xoff;\n if (x == null)\n return;\n y = d.yoff;\n var seen = 0, seenRow = -1;\n for (var j = 0; j < h; j++) {\n for (var i = 0; i < w; i++) {\n var k = w32 * j + (i >> 5), m = pixels[((y + j) * (cw << 5) + (x + i)) << 2] ? 1 << (31 - (i % 32)) : 0;\n sprite[k] |= m;\n seen |= m;\n }\n if (seen)\n seenRow = j;\n else {\n d.y0++;\n h--;\n j--;\n y++;\n }\n }\n d.y1 = d.y0 + seenRow;\n d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\n }\n}\n// Use mask-based collision detection.\nfunction cloudCollide(tag, board, sw) {\n sw >>= 5;\n var sprite = tag.sprite, w = tag.width >> 5, lx = tag.x - (w << 4), sx = lx & 0x7f, msx = 32 - sx, h = tag.y1 - tag.y0;\n var x = (tag.y + tag.y0) * sw + (lx >> 5), last;\n for (var j = 0; j < h; j++) {\n last = 0;\n for (var i = 0; i <= w; i++) {\n if (((last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) & board[x + i])\n return true;\n }\n x += sw;\n }\n return false;\n}\nfunction cloudBounds(bounds, d) {\n var b0 = bounds[0], b1 = bounds[1];\n if (d.x + d.x0 < b0.x)\n b0.x = d.x + d.x0;\n if (d.y + d.y0 < b0.y)\n b0.y = d.y + d.y0;\n if (d.x + d.x1 > b1.x)\n b1.x = d.x + d.x1;\n if (d.y + d.y1 > b1.y)\n b1.y = d.y + d.y1;\n}\nfunction collideRects(a, b) {\n return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;\n}\nfunction archimedeanSpiral(size) {\n var e = size[0] / size[1];\n return function (t) {\n return [e * (t *= 0.1) * Math.cos(t), t * Math.sin(t)];\n };\n}\nfunction rectangularSpiral(size) {\n var dy = 4, dx = (dy * size[0]) / size[1];\n var x = 0, y = 0;\n return function (t) {\n var sign = t < 0 ? -1 : 1;\n // See triangular numbers: T_n = n * (n + 1) / 2.\n switch ((Math.sqrt(1 + 4 * sign * t) - sign) & 3) {\n case 0:\n x += dx;\n break;\n case 1:\n y += dy;\n break;\n case 2:\n x -= dx;\n break;\n default:\n y -= dy;\n break;\n }\n return [x, y];\n };\n}\n// TODO reuse arrays?\nfunction zeroArray(n) {\n var a = [];\n var i = -1;\n while (++i < n)\n a[i] = 0;\n return a;\n}\nfunction cloudCanvas() {\n return document.createElement('canvas');\n}\nexport function functor(d) {\n return isFunction(d)\n ? d\n : function () {\n return d;\n };\n}\nvar spirals = {\n archimedean: archimedeanSpiral,\n rectangular: rectangularSpiral,\n};\nfunction tagCloud() {\n var size = [256, 256], font = cloudFont, fontSize = cloudFontSize, fontWeight = cloudFontNormal, rotate = cloudRotate, padding = cloudPadding, spiral = archimedeanSpiral, random = Math.random, words = [], timeInterval = Infinity;\n var text = cloudText;\n var fontStyle = cloudFontNormal;\n var canvas = cloudCanvas;\n var cloud = {};\n cloud.start = function () {\n var width = size[0], height = size[1];\n var contextAndRatio = getContext(canvas()), board = cloud.board ? cloud.board : zeroArray((size[0] >> 5) * size[1]), n = words.length, tags = [], data = words\n .map(function (d, i, data) {\n d.text = text.call(this, d, i, data);\n d.font = font.call(this, d, i, data);\n d.style = fontStyle.call(this, d, i, data);\n d.weight = fontWeight.call(this, d, i, data);\n d.rotate = rotate.call(this, d, i, data);\n d.size = ~~fontSize.call(this, d, i, data);\n d.padding = padding.call(this, d, i, data);\n return d;\n })\n .sort(function (a, b) {\n return b.size - a.size;\n });\n var i = -1, bounds = !cloud.board\n ? null\n : [\n {\n x: 0,\n y: 0,\n },\n {\n x: width,\n y: height,\n },\n ];\n step();\n function step() {\n var start = Date.now();\n while (Date.now() - start < timeInterval && ++i < n) {\n var d = data[i];\n d.x = (width * (random() + 0.5)) >> 1;\n d.y = (height * (random() + 0.5)) >> 1;\n cloudSprite(contextAndRatio, d, data, i);\n if (d.hasText && place(board, d, bounds)) {\n tags.push(d);\n if (bounds) {\n if (!cloud.hasImage) {\n // update bounds if image mask not set\n cloudBounds(bounds, d);\n }\n }\n else {\n bounds = [\n { x: d.x + d.x0, y: d.y + d.y0 },\n { x: d.x + d.x1, y: d.y + d.y1 },\n ];\n }\n // Temporary hack\n d.x -= size[0] >> 1;\n d.y -= size[1] >> 1;\n }\n }\n cloud._tags = tags;\n cloud._bounds = bounds;\n }\n return cloud;\n };\n function getContext(canvas) {\n canvas.width = canvas.height = 1;\n var ratio = Math.sqrt(canvas.getContext('2d').getImageData(0, 0, 1, 1).data.length >> 2);\n canvas.width = (cw << 5) / ratio;\n canvas.height = ch / ratio;\n var context = canvas.getContext('2d');\n context.fillStyle = context.strokeStyle = 'red';\n context.textAlign = 'center';\n return { context: context, ratio: ratio };\n }\n function place(board, tag, bounds) {\n // const perimeter = [{ x: 0, y: 0 }, { x: size[0], y: size[1] }],\n var startX = tag.x, startY = tag.y, maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]), s = spiral(size), dt = random() < 0.5 ? 1 : -1;\n var dxdy, t = -dt, dx, dy;\n while ((dxdy = s((t += dt)))) {\n dx = ~~dxdy[0];\n dy = ~~dxdy[1];\n if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta)\n break;\n tag.x = startX + dx;\n tag.y = startY + dy;\n if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 || tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1])\n continue;\n // TODO only check for collisions within current bounds.\n if (!bounds || !cloudCollide(tag, board, size[0])) {\n if (!bounds || collideRects(tag, bounds)) {\n var sprite = tag.sprite, w = tag.width >> 5, sw = size[0] >> 5, lx = tag.x - (w << 4), sx = lx & 0x7f, msx = 32 - sx, h = tag.y1 - tag.y0;\n var last = void 0, x = (tag.y + tag.y0) * sw + (lx >> 5);\n for (var j = 0; j < h; j++) {\n last = 0;\n for (var i = 0; i <= w; i++) {\n board[x + i] |= (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n }\n x += sw;\n }\n delete tag.sprite;\n return true;\n }\n }\n }\n return false;\n }\n cloud.createMask = function (img) {\n var can = document.createElement('canvas');\n var width = size[0], height = size[1];\n // 当 width 或 height 为 0 时,调用 cxt.getImageData 会报错\n if (!width || !height) {\n return;\n }\n var w32 = width >> 5;\n var board = zeroArray((width >> 5) * height);\n can.width = width;\n can.height = height;\n var cxt = can.getContext('2d');\n cxt.drawImage(img, 0, 0, img.width, img.height, 0, 0, width, height);\n var imageData = cxt.getImageData(0, 0, width, height).data;\n for (var j = 0; j < height; j++) {\n for (var i = 0; i < width; i++) {\n var k = w32 * j + (i >> 5);\n var tmp = (j * width + i) << 2;\n var flag = imageData[tmp] >= 250 && imageData[tmp + 1] >= 250 && imageData[tmp + 2] >= 250;\n var m = flag ? 1 << (31 - (i % 32)) : 0;\n board[k] |= m;\n }\n }\n cloud.board = board;\n cloud.hasImage = true;\n };\n cloud.timeInterval = function (_) {\n timeInterval = _ == null ? Infinity : _;\n };\n cloud.words = function (_) {\n words = _;\n };\n cloud.size = function (_) {\n size = [+_[0], +_[1]];\n };\n cloud.font = function (_) {\n font = functor(_);\n };\n cloud.fontWeight = function (_) {\n fontWeight = functor(_);\n };\n cloud.rotate = function (_) {\n rotate = functor(_);\n };\n cloud.spiral = function (_) {\n spiral = spirals[_] || _;\n };\n cloud.fontSize = function (_) {\n fontSize = functor(_);\n };\n cloud.padding = function (_) {\n padding = functor(_);\n };\n cloud.random = function (_) {\n random = functor(_);\n };\n return cloud;\n}\n//# sourceMappingURL=word-cloud.js.map","import { __assign } from \"tslib\";\nimport { isArray, isFunction, isString } from '@antv/util';\nimport { normalPadding } from '../../utils/padding';\nimport { log, LEVEL, getContainerSize } from '../../utils';\nimport { functor, wordCloud } from '../../utils/transform/word-cloud';\n/**\n * 用 DataSet 转换词云图数据\n * @param params\n */\nexport function transform(params) {\n var rawOptions = params.options, chart = params.chart;\n var _a = chart, width = _a.width, height = _a.height, chartPadding = _a.padding, appendPadding = _a.appendPadding, ele = _a.ele;\n var data = rawOptions.data, imageMask = rawOptions.imageMask, wordField = rawOptions.wordField, weightField = rawOptions.weightField, colorField = rawOptions.colorField, wordStyle = rawOptions.wordStyle, timeInterval = rawOptions.timeInterval, random = rawOptions.random, spiral = rawOptions.spiral, _b = rawOptions.autoFit, autoFit = _b === void 0 ? true : _b, placementStrategy = rawOptions.placementStrategy;\n if (!data || !data.length) {\n return [];\n }\n var fontFamily = wordStyle.fontFamily, fontWeight = wordStyle.fontWeight, padding = wordStyle.padding, fontSize = wordStyle.fontSize;\n var arr = getSingleKeyValues(data, weightField);\n var range = [min(arr), max(arr)];\n // 变换出 text 和 value 字段\n var words = data.map(function (datum) { return ({\n text: datum[wordField],\n value: datum[weightField],\n color: datum[colorField],\n datum: datum,\n }); });\n var options = {\n imageMask: imageMask,\n font: fontFamily,\n fontSize: getFontSizeMapping(fontSize, range),\n fontWeight: fontWeight,\n // 图表宽高减去 padding 之后的宽高\n size: getSize({\n width: width,\n height: height,\n padding: chartPadding,\n appendPadding: appendPadding,\n autoFit: autoFit,\n container: ele,\n }),\n padding: padding,\n timeInterval: timeInterval,\n random: random,\n spiral: spiral,\n rotate: getRotate(rawOptions),\n };\n // 自定义布局函数\n if (isFunction(placementStrategy)) {\n var result = words.map(function (word, index, words) { return (__assign(__assign(__assign({}, word), { hasText: !!word.text, font: functor(options.font)(word, index, words), weight: functor(options.fontWeight)(word, index, words), rotate: functor(options.rotate)(word, index, words), size: functor(options.fontSize)(word, index, words), style: 'normal' }), placementStrategy.call(chart, word, index, words))); });\n // 添加两个参照数据,分别表示左上角和右下角\n result.push({\n text: '',\n value: 0,\n x: 0,\n y: 0,\n opacity: 0,\n });\n result.push({\n text: '',\n value: 0,\n x: options.size[0],\n y: options.size[1],\n opacity: 0,\n });\n return result;\n }\n // 数据准备在外部做,wordCloud 单纯就是做布局\n return wordCloud(words, options);\n}\n/**\n * 获取最终的实际绘图尺寸:[width, height]\n * @param chart\n */\nexport function getSize(options) {\n var width = options.width, height = options.height;\n var container = options.container, autoFit = options.autoFit, padding = options.padding, appendPadding = options.appendPadding;\n // 由于词云图每个词语的坐标都是先通过 DataSet 根据图表宽高计算出来的,\n // 也就是说,如果一开始提供给 DataSet 的宽高信息和最终显示的宽高不相同,\n // 那么就会出现布局错乱的情况,所以这里处理的目的就是让一开始提供给 DataSet 的\n // 宽高信息与最终显示的宽高信息相同,避免显示错乱。\n if (autoFit) {\n var containerSize = getContainerSize(container);\n width = containerSize.width;\n height = containerSize.height;\n }\n // 宽高不能为 0,否则会造成死循环\n width = width || 400;\n height = height || 400;\n var _a = resolvePadding({ padding: padding, appendPadding: appendPadding }), top = _a[0], right = _a[1], bottom = _a[2], left = _a[3];\n var result = [width - (left + right), height - (top + bottom)];\n return result;\n}\n/**\n * 根据图表的 padding 和 appendPadding 计算出图表的最终 padding\n * @param chart\n */\nfunction resolvePadding(options) {\n var padding = normalPadding(options.padding);\n var appendPadding = normalPadding(options.appendPadding);\n var top = padding[0] + appendPadding[0];\n var right = padding[1] + appendPadding[1];\n var bottom = padding[2] + appendPadding[2];\n var left = padding[3] + appendPadding[3];\n return [top, right, bottom, left];\n}\n/**\n * 处理 imageMask 可能为 url 字符串的情况\n * @param {HTMLImageElement | string} img\n * @return {Promise}\n */\nexport function processImageMask(img) {\n return new Promise(function (res, rej) {\n if (img instanceof HTMLImageElement) {\n res(img);\n return;\n }\n if (isString(img)) {\n var image_1 = new Image();\n image_1.crossOrigin = 'anonymous';\n image_1.src = img;\n image_1.onload = function () {\n res(image_1);\n };\n image_1.onerror = function () {\n log(LEVEL.ERROR, false, 'image %s load failed !!!', img);\n rej();\n };\n return;\n }\n log(LEVEL.WARN, img === undefined, 'The type of imageMask option must be String or HTMLImageElement.');\n rej();\n });\n}\n/**\n * 把用户提供的 fontSize 值转换成符合 DataSet 要求的值\n * @param options\n * @param range\n */\nexport function getFontSizeMapping(fontSize, range) {\n if (isFunction(fontSize)) {\n return fontSize;\n }\n if (isArray(fontSize)) {\n var fMin_1 = fontSize[0], fMax_1 = fontSize[1];\n if (!range) {\n return function () { return (fMax_1 + fMin_1) / 2; };\n }\n var min_1 = range[0], max_1 = range[1];\n if (max_1 === min_1) {\n return function () { return (fMax_1 + fMin_1) / 2; };\n }\n return function fontSize(_a) {\n var value = _a.value;\n return ((fMax_1 - fMin_1) / (max_1 - min_1)) * (value - min_1) + fMin_1;\n };\n }\n return function () { return fontSize; };\n}\nexport function getSingleKeyValues(data, key) {\n return data\n .map(function (v) { return v[key]; })\n .filter(function (v) {\n // 过滤非 number\n if (typeof v === 'number' && !isNaN(v))\n return true;\n return false;\n });\n}\n/**\n * 把用户提供的关于旋转角度的字段值转换成符合 DataSet 要求的值\n * @param options\n */\nfunction getRotate(options) {\n var _a = resolveRotate(options), rotation = _a.rotation, rotationSteps = _a.rotationSteps;\n if (!isArray(rotation))\n return rotation;\n var min = rotation[0];\n var max = rotation[1];\n // 等于 1 时不旋转,所以把每份大小设为 0\n var perSize = rotationSteps === 1 ? 0 : (max - min) / (rotationSteps - 1);\n return function rotate() {\n if (max === min)\n return max;\n return Math.floor(Math.random() * rotationSteps) * perSize;\n };\n}\n/**\n * 确保值在要求范围内\n * @param options\n */\nfunction resolveRotate(options) {\n var rotationSteps = options.wordStyle.rotationSteps;\n if (rotationSteps < 1) {\n log(LEVEL.WARN, false, 'The rotationSteps option must be greater than or equal to 1.');\n rotationSteps = 1;\n }\n return {\n rotation: options.wordStyle.rotation,\n rotationSteps: rotationSteps,\n };\n}\n/**\n * 传入一个元素为数字的数组,\n * 返回该数组中值最小的数字。\n * @param numbers\n */\nfunction min(numbers) {\n return Math.min.apply(Math, numbers);\n}\n/**\n * 传入一个元素为数字的数组,\n * 返回该数组中值最大的数字。\n * @param numbers\n */\nfunction max(numbers) {\n return Math.max.apply(Math, numbers);\n}\n//# sourceMappingURL=utils.js.map","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\n/** 词云图 color 通道映射字段 */\nexport var WORD_CLOUD_COLOR_FIELD = 'color';\n/**\n * 词云图 默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n timeInterval: 2000,\n legend: false,\n tooltip: {\n showTitle: false,\n showMarkers: false,\n showCrosshairs: false,\n fields: ['text', 'value', WORD_CLOUD_COLOR_FIELD],\n formatter: function (datum) {\n return { name: datum.text, value: datum.value };\n },\n },\n wordStyle: {\n fontFamily: 'Verdana',\n fontWeight: 'normal',\n padding: 1,\n fontSize: [12, 60],\n rotation: [0, 90],\n rotationSteps: 2,\n rotateRatio: 0.5,\n },\n});\n//# sourceMappingURL=constant.js.map","import { __spreadArrays } from \"tslib\";\nimport { isFunction, get } from '@antv/util';\nimport { tooltip, interaction, animation, theme, scale, state } from '../../adaptor/common';\nimport { flow, deepAssign } from '../../utils';\nimport { point } from '../../adaptor/geometries';\nimport { transform } from './utils';\nimport { WORD_CLOUD_COLOR_FIELD } from './constant';\n/**\n * geometry 配置处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var colorField = options.colorField, color = options.color;\n var data = transform(params);\n chart.data(data);\n var p = deepAssign({}, params, {\n options: {\n xField: 'x',\n yField: 'y',\n seriesField: colorField && WORD_CLOUD_COLOR_FIELD,\n rawFields: isFunction(color) && __spreadArrays(get(options, 'rawFields', []), ['datum']),\n point: {\n color: color,\n shape: 'word-cloud',\n },\n },\n });\n var ext = point(p).ext;\n ext.geometry.label(false);\n chart.coordinate().reflect('y');\n chart.axis(false);\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\nfunction meta(params) {\n return flow(scale({\n x: { nice: false },\n y: { nice: false },\n }))(params);\n}\n/**\n * 词云图 legend 配置\n * @param params\n */\nexport function legend(params) {\n var chart = params.chart, options = params.options;\n var legend = options.legend, colorField = options.colorField;\n if (legend === false) {\n chart.legend(false);\n }\n else if (colorField) {\n chart.legend(WORD_CLOUD_COLOR_FIELD, legend);\n }\n return params;\n}\n/**\n * 词云图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n flow(geometry, meta, tooltip, legend, interaction, animation, theme, state)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __assign } from \"tslib\";\nimport { registerShape, Util } from '@antv/g2';\nregisterShape('point', 'word-cloud', {\n draw: function (cfg, group) {\n var cx = cfg.x;\n var cy = cfg.y;\n var shape = group.addShape('text', {\n attrs: __assign(__assign({}, getTextAttrs(cfg)), { x: cx, y: cy }),\n });\n var rotate = cfg.data.rotate;\n if (typeof rotate === 'number') {\n Util.rotate(shape, (rotate * Math.PI) / 180);\n }\n return shape;\n },\n});\nfunction getTextAttrs(cfg) {\n return {\n fontSize: cfg.data.size,\n text: cfg.data.text,\n textAlign: 'center',\n fontFamily: cfg.data.font,\n fontWeight: cfg.data.weight,\n fill: cfg.color || cfg.defaultStyle.stroke,\n textBaseline: 'alphabetic',\n };\n}\n//# sourceMappingURL=word-cloud.js.map","import { __assign, __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\nimport { processImageMask, transform } from './utils';\n// 注册的shape\nimport './shapes/word-cloud';\nvar WordCloud = /** @class */ (function (_super) {\n __extends(WordCloud, _super);\n function WordCloud() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 词云图 */\n _this.type = 'word-cloud';\n return _this;\n }\n /**\n * 获取 词云图 默认配置项\n * 供外部使用\n */\n WordCloud.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n /**\n * @override\n * @param data\n */\n WordCloud.prototype.changeData = function (data) {\n this.updateOption({ data: data });\n if (this.options.imageMask) {\n this.render();\n }\n else {\n this.chart.changeData(transform({ chart: this.chart, options: this.options }));\n }\n };\n /**\n * 获取默认的 options 配置项\n */\n WordCloud.prototype.getDefaultOptions = function () {\n return WordCloud.getDefaultOptions();\n };\n /**\n * 覆写父类方法,词云图需要加载图片资源,所以需要异步渲染\n */\n WordCloud.prototype.render = function () {\n var _this = this;\n return new Promise(function (res) {\n var imageMask = _this.options.imageMask;\n if (!imageMask) {\n // 调用父类渲染函数\n _super.prototype.render.call(_this);\n res();\n return;\n }\n var handler = function (img) {\n _this.options = __assign(__assign({}, _this.options), { imageMask: img || null });\n // 调用父类渲染函数\n _super.prototype.render.call(_this);\n res();\n };\n processImageMask(imageMask).then(handler).catch(handler);\n });\n };\n /**\n * 获取 词云图 的适配器\n */\n WordCloud.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n /**\n * 覆写父类的方法,因为词云图使用 单独的函数 进行布局,原理上有些不一样\n */\n WordCloud.prototype.triggerResize = function () {\n var _this = this;\n if (!this.chart.destroyed) {\n // 当整个词云图图表的宽高信息发生变化时,每个词语的坐标\n // 需要重新执行 adaptor,不然会出现布局错乱,\n // 如相邻词语重叠的情况。\n this.execAdaptor();\n // 延迟执行,有利于动画更流畅\n // TODO: 在多次更改画布尺寸时,动画会越来越卡顿,原因未知\n window.setTimeout(function () {\n // 执行父类的方法\n _super.prototype.triggerResize.call(_this);\n });\n }\n };\n return WordCloud;\n}(Plot));\nexport { WordCloud };\n//# sourceMappingURL=index.js.map","var MAX_MIX_LEVEL = 5; // 最大比对层级\nvar toString = {}.toString;\n// 类型检测\nvar isType = function (value, type) { return toString.call(value) === '[object ' + type + ']'; };\nvar isArray = function (value) {\n return isType(value, 'Array');\n};\nvar isObjectLike = function (value) {\n /**\n * isObjectLike({}) => true\n * isObjectLike([1, 2, 3]) => true\n * isObjectLike(Function) => false\n */\n return typeof value === 'object' && value !== null;\n};\nvar isPlainObject = function (value) {\n /**\n * isObjectLike(new Foo) => false\n * isObjectLike([1, 2, 3]) => false\n * isObjectLike({ x: 0, y: 0 }) => true\n */\n if (!isObjectLike(value) || !isType(value, 'Object')) {\n return false;\n }\n var proto = value;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(value) === proto;\n};\n/***\n * @param {any} dist\n * @param {any} src\n * @param {number} level 当前层级\n * @param {number} maxLevel 最大层级\n */\nvar deep = function (dist, src, level, maxLevel) {\n level = level || 0;\n maxLevel = maxLevel || MAX_MIX_LEVEL;\n for (var key in src) {\n if (Object.prototype.hasOwnProperty.call(src, key)) {\n var value = src[key];\n if (!value) {\n // null 、 undefined 等情况直接赋值\n dist[key] = value;\n }\n else {\n if (isPlainObject(value)) {\n if (!isPlainObject(dist[key])) {\n dist[key] = {};\n }\n if (level < maxLevel) {\n deep(dist[key], value, level + 1, maxLevel);\n }\n else {\n // 层级过深直接赋值,性能问题\n dist[key] = src[key];\n }\n }\n else if (isArray(value)) {\n dist[key] = [];\n dist[key] = dist[key].concat(value);\n }\n else {\n dist[key] = value;\n }\n }\n }\n }\n};\n/**\n * deepAssign 功能类似 deepMix\n * 不同点在于 deepAssign 会将 null undefined 等类型直接覆盖给 source\n * 详细参考: __tests__/unit/utils/deep-assign-spec.ts\n */\nexport var deepAssign = function (rst) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n for (var i = 0; i < args.length; i += 1) {\n deep(rst, args[i]);\n }\n return rst;\n};\n//# sourceMappingURL=deep-assign.js.map","export default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n\nexport function shuffle(array) {\n var m = array.length,\n t,\n i;\n\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n\n return array;\n}\n","import { __rest } from \"tslib\";\nimport { tooltip, interaction, animation, theme, scale, state } from '../../adaptor/common';\nimport { pattern } from '../../adaptor/pattern';\nimport { findGeometry, deepAssign } from '../../utils';\nimport { flow, transformLabel } from '../../utils';\nimport { interval } from '../../adaptor/geometries';\nimport { binHistogram } from '../../utils/transform/histogram';\nimport { HISTOGRAM_X_FIELD, HISTOGRAM_Y_FIELD } from './constant';\n/**\n * geometry 处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var data = options.data, binField = options.binField, binNumber = options.binNumber, binWidth = options.binWidth, color = options.color, stackField = options.stackField, legend = options.legend, columnStyle = options.columnStyle;\n // 处理数据\n var plotData = binHistogram(data, binField, binWidth, binNumber, stackField);\n chart.data(plotData);\n var p = deepAssign({}, params, {\n options: {\n xField: HISTOGRAM_X_FIELD,\n yField: HISTOGRAM_Y_FIELD,\n seriesField: stackField,\n isStack: true,\n interval: {\n color: color,\n style: columnStyle,\n },\n },\n });\n interval(p);\n // 图例\n if (legend && stackField) {\n chart.legend(stackField, legend);\n }\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\nfunction meta(params) {\n var _a;\n var options = params.options;\n var xAxis = options.xAxis, yAxis = options.yAxis;\n return flow(scale((_a = {},\n _a[HISTOGRAM_X_FIELD] = xAxis,\n _a[HISTOGRAM_Y_FIELD] = yAxis,\n _a)))(params);\n}\n/**\n * axis 配置\n * @param params\n */\nfunction axis(params) {\n var chart = params.chart, options = params.options;\n var xAxis = options.xAxis, yAxis = options.yAxis;\n // 为 false 则是不显示轴\n if (xAxis === false) {\n chart.axis(HISTOGRAM_X_FIELD, false);\n }\n else {\n chart.axis(HISTOGRAM_X_FIELD, xAxis);\n }\n if (yAxis === false) {\n chart.axis(HISTOGRAM_Y_FIELD, false);\n }\n else {\n chart.axis(HISTOGRAM_Y_FIELD, yAxis);\n }\n return params;\n}\n/**\n * label 配置\n * @param params\n */\nfunction label(params) {\n var chart = params.chart, options = params.options;\n var label = options.label;\n var geometry = findGeometry(chart, 'interval');\n if (!label) {\n geometry.label(false);\n }\n else {\n var callback = label.callback, cfg = __rest(label, [\"callback\"]);\n geometry.label({\n fields: [HISTOGRAM_Y_FIELD],\n callback: callback,\n cfg: transformLabel(cfg),\n });\n }\n return params;\n}\n/**\n * 直方图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return flow(theme, pattern('columnStyle'), geometry, meta, axis, state, label, tooltip, interaction, animation)(params);\n}\n//# sourceMappingURL=adaptor.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\n/**\n * Created by hustcc on 18/6/9.\n * Contract: i@hust.cc\n */\nvar _default = function _default(fn) {\n var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 60;\n var timer = null;\n return function () {\n var _this = this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n clearTimeout(timer);\n timer = setTimeout(function () {\n fn.apply(_this, args);\n }, delay);\n };\n};\n\nexports[\"default\"] = _default;","import * as d3Hierarchy from 'd3-hierarchy';\nimport { assign, isArray } from '@antv/util';\nimport { getField, getAllNodes } from './util';\nvar DEFAULT_OPTIONS = {\n field: 'value',\n tile: 'treemapSquarify',\n size: [1, 1],\n round: false,\n ignoreParentValue: true,\n padding: 0,\n paddingInner: 0,\n paddingOuter: 0,\n paddingTop: 0,\n paddingRight: 0,\n paddingBottom: 0,\n paddingLeft: 0,\n as: ['x', 'y'],\n // 默认降序\n sort: function (a, b) { return b.value - a.value; },\n // 纵横比, treemapSquarify 布局时可用,默认黄金分割比例\n ratio: 0.5 * (1 + Math.sqrt(5)),\n};\nexport function getTileMethod(tile, ratio) {\n return tile === 'treemapSquarify' ? d3Hierarchy[tile].ratio(ratio) : d3Hierarchy[tile];\n}\nexport function treemap(data, options) {\n options = assign({}, DEFAULT_OPTIONS, options);\n var as = options.as;\n if (!isArray(as) || as.length !== 2) {\n throw new TypeError('Invalid as: it must be an array with 2 strings (e.g. [ \"x\", \"y\" ])!');\n }\n var field;\n try {\n field = getField(options);\n }\n catch (e) {\n console.warn(e);\n }\n var tileMethod = getTileMethod(options.tile, options.ratio);\n var partition = function (data) {\n return d3Hierarchy\n .treemap()\n .tile(tileMethod)\n .size(options.size)\n .round(options.round)\n .padding(options.padding)\n .paddingInner(options.paddingInner)\n .paddingOuter(options.paddingOuter)\n .paddingTop(options.paddingTop)\n .paddingRight(options.paddingRight)\n .paddingBottom(options.paddingBottom)\n .paddingLeft(options.paddingLeft)(\n /**\n * d3Hierarchy 布局中需指定 sum 函数计算 node 值,规则是:从当前 node 开始以 post-order traversal 的次序为当前节点以及每个后代节点调用指定的 value 函数,并返回当前 node。\n * for example:\n * { node: 'parent', value: 10, children: [{node: 'child1', value: 5}, {node: 'child2', value: 5}, ]}\n * parent 所得的计算值是 sum(node(parent)) + sum(node(child1)) + sum(node(child2))\n * ignoreParentValue 为 true(默认) 时,父元素的值由子元素累加而来,该值为 0 + 5 + 5 = 10\n * ignoreParentValue 为 false 时,父元素的值由当前节点 及子元素累加而来,该值为 10 + 5 + 5 = 20\n * sum 函数中,d 为用户传入的 data, children 为保留字段\n */\n d3Hierarchy\n .hierarchy(data)\n .sum(function (d) { return (options.ignoreParentValue && d.children ? 0 : d[field]); })\n .sort(options.sort));\n };\n var root = partition(data);\n /*\n * points:\n * 3 2\n * 0 1\n */\n var x = as[0];\n var y = as[1];\n root.each(function (node) {\n node[x] = [node.x0, node.x1, node.x1, node.x0];\n node[y] = [node.y1, node.y1, node.y0, node.y0];\n ['x0', 'x1', 'y0', 'y1'].forEach(function (prop) {\n if (as.indexOf(prop) === -1) {\n delete node[prop];\n }\n });\n });\n return getAllNodes(root);\n}\n//# sourceMappingURL=treemap.js.map","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [],\n nodes = parent.children,\n row,\n nodeValue,\n i0 = 0,\n i1 = 0,\n n = nodes.length,\n dx, dy,\n value = parent.value,\n sumValue,\n minValue,\n maxValue,\n newRatio,\n minRatio,\n alpha,\n beta;\n\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n\n // Find the next non-empty node.\n do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n minValue = maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n sumValue += nodeValue = nodes[i1].value;\n if (nodeValue < minValue) minValue = nodeValue;\n if (nodeValue > maxValue) maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n\n return rows;\n}\n\nexport default (function custom(ratio) {\n\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n\n squarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return squarify;\n})(phi);\n","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\n/**\n * 饼图默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n legend: {\n position: 'right',\n radio: {},\n },\n tooltip: {\n shared: false,\n showTitle: false,\n showMarkers: false,\n },\n label: {\n layout: { type: 'limit-in-plot', cfg: { action: 'ellipsis' } },\n },\n /** 饼图样式, 不影响暗黑主题 */\n pieStyle: {\n stroke: 'white',\n lineWidth: 1,\n },\n /** 饼图中心文本默认样式 */\n statistic: {\n title: {\n style: { fontWeight: 300, color: '#4B535E', textAlign: 'center', fontSize: '20px', lineHeight: 1 },\n },\n content: {\n style: {\n fontWeight: 'bold',\n color: 'rgba(44,53,66,0.85)',\n textAlign: 'center',\n fontSize: '32px',\n lineHeight: 1,\n },\n },\n },\n /** 默认关闭 text-annotation 动画 */\n theme: {\n components: {\n annotation: {\n text: {\n animate: false,\n },\n },\n },\n },\n});\n//# sourceMappingURL=contants.js.map","import { get } from '@antv/util';\nimport { deepAssign } from '../../utils';\nimport { adaptor as lineAdaptor } from '../line/adaptor';\nimport { adaptor as pieAdaptor } from '../pie/adaptor';\nimport { adaptor as columnAdaptor } from '../column/adaptor';\nimport { adaptor as barAdaptor } from '../bar/adaptor';\nimport { adaptor as areaAdaptor } from '../area/adaptor';\nimport { adaptor as gaugeAdaptor } from '../gauge/adaptor';\nimport { adaptor as tinyLineAdaptor } from '../tiny-line/adaptor';\nimport { adaptor as tinyColumnAdaptor } from '../tiny-column/adaptor';\nimport { adaptor as tinyAreadaptor } from '../tiny-area/adaptor';\nimport { adaptor as ringProgressAdaptor } from '../ring-progress/adaptor';\nimport { adaptor as progressAdaptor } from '../progress/adaptor';\nimport { adaptor as scatterAdaptor } from '../scatter/adaptor';\nimport { adaptor as histogramAdaptor } from '../histogram/adaptor';\nimport { adaptor as funnelAdaptor } from '../funnel/adaptor';\nimport { Line } from '../line';\nimport { Pie } from '../pie';\nimport { Bar } from '../bar';\nimport { Column } from '../column';\nimport { Area } from '../area';\nimport { Gauge } from '../gauge';\nimport { TinyLine } from '../tiny-line';\nimport { TinyArea } from '../tiny-area';\nimport { TinyColumn } from '../tiny-column';\nimport { RingProgress } from '../ring-progress';\nimport { Progress } from '../progress';\nimport { Scatter } from '../scatter';\nimport { Histogram } from '../histogram';\nimport { Funnel } from '../funnel';\n/**\n * 可在 multi-view 中使用的 plots\n */\nvar PLOT_ADAPTORS = {\n line: lineAdaptor,\n pie: pieAdaptor,\n column: columnAdaptor,\n bar: barAdaptor,\n area: areaAdaptor,\n gauge: gaugeAdaptor,\n 'tiny-line': tinyLineAdaptor,\n 'tiny-column': tinyColumnAdaptor,\n 'tiny-area': tinyAreadaptor,\n 'ring-progress': ringProgressAdaptor,\n progress: progressAdaptor,\n scatter: scatterAdaptor,\n histogram: histogramAdaptor,\n funnel: funnelAdaptor,\n};\n/**\n * 获取指定 plot 的 class contructor\n * @param {string} plot\n */\nvar PLOT_CONSTRUCTOR = {\n line: Line,\n pie: Pie,\n column: Column,\n bar: Bar,\n area: Area,\n gauge: Gauge,\n 'tiny-line': TinyLine,\n 'tiny-column': TinyColumn,\n 'tiny-area': TinyArea,\n 'ring-progress': RingProgress,\n progress: Progress,\n scatter: Scatter,\n histogram: Histogram,\n funnel: Funnel,\n};\n/**\n * 在 mix 图表以及 facet 图表中,defaultOptions 进行复写简化\n */\nvar DEFAULT_OPTIONS_MAP = {\n pie: { label: false },\n column: { tooltip: { showMarkers: false } },\n bar: { tooltip: { showMarkers: false } },\n};\n/**\n * 执行 plot 的 adaptor, 默认都带上 defaultOptions\n * @param {string} plot\n */\nexport function execPlotAdaptor(plot, view, options) {\n var cls = PLOT_CONSTRUCTOR[plot];\n if (!cls) {\n console.error(\"could not find \" + plot + \" plot\");\n return;\n }\n var module = PLOT_ADAPTORS[plot];\n module({\n chart: view,\n options: deepAssign({}, cls.getDefaultOptions(), get(DEFAULT_OPTIONS_MAP, plot, {}), options),\n });\n}\n//# sourceMappingURL=utils.js.map","import array from \"../array.js\";\nimport enclose from \"./enclose.js\";\n\nfunction place(b, a, c) {\n var dx = b.x - a.x, x, a2,\n dy = b.y - a.y, y, b2,\n d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.r + c.r, a2 *= a2;\n b2 = b.r + c.r, b2 *= b2;\n if (a2 > b2) {\n x = (d2 + b2 - a2) / (2 * d2);\n y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n c.x = b.x - x * dx - y * dy;\n c.y = b.y - x * dy + y * dx;\n } else {\n x = (d2 + a2 - b2) / (2 * d2);\n y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n c.x = a.x + x * dx - y * dy;\n c.y = a.y + x * dy + y * dx;\n }\n } else {\n c.x = a.x + c.r;\n c.y = a.y;\n }\n}\n\nfunction intersects(a, b) {\n var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n var a = node._,\n b = node.next._,\n ab = a.r + b.r,\n dx = (a.x * b.r + b.x * a.r) / ab,\n dy = (a.y * b.r + b.y * a.r) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n this._ = circle;\n this.next = null;\n this.previous = null;\n}\n\nexport function packEnclose(circles) {\n if (!(n = (circles = array(circles)).length)) return 0;\n\n var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n // Place the first circle.\n a = circles[0], a.x = 0, a.y = 0;\n if (!(n > 1)) return a.r;\n\n // Place the second circle.\n b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n if (!(n > 2)) return a.r + b.r;\n\n // Place the third circle.\n place(b, a, c = circles[2]);\n\n // Initialize the front-chain using the first three circles a, b and c.\n a = new Node(a), b = new Node(b), c = new Node(c);\n a.next = c.previous = b;\n b.next = a.previous = c;\n c.next = b.previous = a;\n\n // Attempt to place each remaining circle…\n pack: for (i = 3; i < n; ++i) {\n place(a._, b._, c = circles[i]), c = new Node(c);\n\n // Find the closest intersecting circle on the front-chain, if any.\n // “Closeness” is determined by linear distance along the front-chain.\n // “Ahead” or “behind” is likewise determined by linear distance.\n j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n do {\n if (sj <= sk) {\n if (intersects(j._, c._)) {\n b = j, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sj += j._.r, j = j.next;\n } else {\n if (intersects(k._, c._)) {\n a = k, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sk += k._.r, k = k.previous;\n }\n } while (j !== k.next);\n\n // Success! Insert the new circle c between a and b.\n c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(a);\n while ((c = c.next) !== b) {\n if ((ca = score(c)) < aa) {\n a = c, aa = ca;\n }\n }\n b = a.next;\n }\n\n // Compute the enclosing circle of the front chain.\n a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n return c.r;\n}\n\nexport default function(circles) {\n packEnclose(circles);\n return circles;\n}\n","/**\n * 类似 lodash.pick 的方法\n * @param obj\n * @param keys\n */\nexport function pick(obj, keys) {\n var r = {};\n if (obj !== null && typeof obj === 'object') {\n keys.forEach(function (key) {\n var v = obj[key];\n if (v !== undefined) {\n r[key] = v;\n }\n });\n }\n return r;\n}\n//# sourceMappingURL=pick.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.removeSensor = exports.getSensor = void 0;\n\nvar _id = _interopRequireDefault(require(\"./id\"));\n\nvar _sensors = require(\"./sensors\");\n\nvar _constant = require(\"./constant\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n/**\n * Created by hustcc on 18/6/9.\n * Contract: i@hust.cc\n */\n\n/**\n * all the sensor objects.\n * sensor pool\n */\nvar Sensors = {};\n/**\n * get one sensor\n * @param element\n * @returns {*}\n */\n\nvar getSensor = function getSensor(element) {\n var sensorId = element.getAttribute(_constant.SizeSensorId); // 1. if the sensor exists, then use it\n\n if (sensorId && Sensors[sensorId]) {\n return Sensors[sensorId];\n } // 2. not exist, then create one\n\n\n var newId = (0, _id[\"default\"])();\n element.setAttribute(_constant.SizeSensorId, newId);\n var sensor = (0, _sensors.createSensor)(element); // add sensor into pool\n\n Sensors[newId] = sensor;\n return sensor;\n};\n/**\n * 移除 sensor\n * @param sensor\n */\n\n\nexports.getSensor = getSensor;\n\nvar removeSensor = function removeSensor(sensor) {\n var sensorId = sensor.element.getAttribute(_constant.SizeSensorId); // remove attribute\n\n sensor.element.removeAttribute(_constant.SizeSensorId); // remove event, dom of the sensor used\n\n sensor.destroy(); // exist, then remove from pool\n\n if (sensorId && Sensors[sensorId]) {\n delete Sensors[sensorId];\n }\n};\n\nexports.removeSensor = removeSensor;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.createSensor = void 0;\n\nvar _debounce = _interopRequireDefault(require(\"../debounce\"));\n\nvar _constant = require(\"../constant\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n/**\n * Created by hustcc on 18/6/9.\n * Contract: i@hust.cc\n */\nvar createSensor = function createSensor(element) {\n var sensor = undefined; // callback\n\n var listeners = [];\n /**\n * create object DOM of sensor\n * @returns {HTMLObjectElement}\n */\n\n var newSensor = function newSensor() {\n // adjust style\n if (getComputedStyle(element).position === 'static') {\n element.style.position = 'relative';\n }\n\n var obj = document.createElement('object');\n\n obj.onload = function () {\n obj.contentDocument.defaultView.addEventListener('resize', resizeListener); // 直接触发一次 resize\n\n resizeListener();\n };\n\n obj.style.display = 'block';\n obj.style.position = 'absolute';\n obj.style.top = '0';\n obj.style.left = '0';\n obj.style.height = '100%';\n obj.style.width = '100%';\n obj.style.overflow = 'hidden';\n obj.style.pointerEvents = 'none';\n obj.style.zIndex = '-1';\n obj.style.opacity = '0';\n obj.setAttribute('class', _constant.SensorClassName);\n obj.setAttribute('tabindex', _constant.SensorTabIndex);\n obj.type = 'text/html'; // append into dom\n\n element.appendChild(obj); // for ie, should set data attribute delay, or will be white screen\n\n obj.data = 'about:blank';\n return obj;\n };\n /**\n * trigger listeners\n */\n\n\n var resizeListener = (0, _debounce[\"default\"])(function () {\n // trigger all listener\n listeners.forEach(function (listener) {\n listener(element);\n });\n });\n /**\n * listen with one callback function\n * @param cb\n */\n\n var bind = function bind(cb) {\n // if not exist sensor, then create one\n if (!sensor) {\n sensor = newSensor();\n }\n\n if (listeners.indexOf(cb) === -1) {\n listeners.push(cb);\n }\n };\n /**\n * destroy all\n */\n\n\n var destroy = function destroy() {\n if (sensor && sensor.parentNode) {\n if (sensor.contentDocument) {\n // remote event\n sensor.contentDocument.defaultView.removeEventListener('resize', resizeListener);\n } // remove dom\n\n\n sensor.parentNode.removeChild(sensor); // initial variable\n\n sensor = undefined;\n listeners = [];\n }\n };\n /**\n * cancel listener bind\n * @param cb\n */\n\n\n var unbind = function unbind(cb) {\n var idx = listeners.indexOf(cb);\n\n if (idx !== -1) {\n listeners.splice(idx, 1);\n } // no listener, and sensor is exist\n // then destroy the sensor\n\n\n if (listeners.length === 0 && sensor) {\n destroy();\n }\n };\n\n return {\n element: element,\n bind: bind,\n destroy: destroy,\n unbind: unbind\n };\n};\n\nexports.createSensor = createSensor;","function count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], children, i, index = -1;\n while (node = nodes.pop()) {\n callback.call(that, node, ++index, this);\n if (children = node.children) {\n for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n }\n return this;\n}\n","export default function(callback, that) {\n var node = this, nodes = [node], next = [], children, i, n, index = -1;\n while (node = nodes.pop()) {\n next.push(node);\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n }\n while (node = next.pop()) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n","export default function(callback, that) {\n let index = -1;\n for (const node of this) {\n if (callback.call(that, node, ++index, this)) {\n return node;\n }\n }\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","export default function*() {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n yield node;\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n }\n } while (next.length);\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_find from \"./find.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\nimport node_iterator from \"./iterator.js\";\n\nexport default function hierarchy(data, children) {\n if (data instanceof Map) {\n data = [undefined, data];\n if (children === undefined) children = mapChildren;\n } else if (children === undefined) {\n children = objectChildren;\n }\n\n var root = new Node(data),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n while (node = nodes.pop()) {\n if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n node.children = childs;\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = childs[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n return d.children;\n}\n\nfunction mapChildren(d) {\n return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n if (node.data.value !== undefined) node.value = node.data.value;\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n find: node_find,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy,\n [Symbol.iterator]: node_iterator\n};\n","import { __assign } from \"tslib\";\nexport function getScaleMax(maxAngle, yField, data) {\n var yData = data.map(function (item) { return item[yField]; }).filter(function (v) { return v !== undefined; });\n var maxValue = yData.length > 0 ? Math.max.apply(Math, yData) : 0;\n var formatRadian = Math.abs(maxAngle) % 360;\n if (!formatRadian) {\n return maxValue;\n }\n return (maxValue * 360) / formatRadian;\n}\n/**\n * 获取堆叠之后的数据\n */\nexport function getStackedData(data, xField, yField) {\n var stackedData = [];\n data.forEach(function (item) {\n var valueItem = stackedData.find(function (v) { return v[xField] === item[xField]; });\n if (valueItem) {\n valueItem[yField] += item[yField] || null;\n }\n else {\n stackedData.push(__assign({}, item));\n }\n });\n return stackedData;\n}\n//# sourceMappingURL=utils.js.map","import { __assign, __rest } from \"tslib\";\nimport { interaction, animation, theme, scale, tooltip, legend, annotation } from '../../adaptor/common';\nimport { flow, deepAssign, findGeometry, transformLabel } from '../../utils';\nimport { interval, point } from '../../adaptor/geometries';\nimport { pattern } from '../../adaptor/pattern';\nimport { processIllegalData } from '../../utils';\nimport { getScaleMax, getStackedData } from './utils';\n/**\n * geometry 处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var style = options.barStyle, color = options.color, tooltip = options.tooltip, colorField = options.colorField, type = options.type, xField = options.xField, yField = options.yField, data = options.data;\n // 处理不合法的数据\n var processData = processIllegalData(data, yField);\n chart.data(processData);\n var p = deepAssign({}, params, {\n options: {\n tooltip: tooltip,\n seriesField: colorField,\n interval: {\n style: style,\n color: color,\n shape: type === 'line' ? 'line' : 'intervel',\n },\n // 柱子的一些样式设置:柱子最小宽度、柱子最大宽度、柱子背景\n minColumnWidth: options.minBarWidth,\n maxColumnWidth: options.maxBarWidth,\n columnBackground: options.barBackground,\n },\n });\n interval(p);\n if (type === 'line') {\n point({\n chart: chart,\n options: { xField: xField, yField: yField, seriesField: colorField, point: { shape: 'circle', color: color } },\n });\n }\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\nexport function meta(params) {\n var _a;\n var options = params.options;\n var yField = options.yField, xField = options.xField, data = options.data, isStack = options.isStack, isGroup = options.isGroup, colorField = options.colorField, maxAngle = options.maxAngle;\n var actualData = isStack && !isGroup && colorField ? getStackedData(data, xField, yField) : data;\n var processData = processIllegalData(actualData, yField);\n return flow(scale((_a = {},\n _a[yField] = {\n min: 0,\n max: getScaleMax(maxAngle, yField, processData),\n },\n _a)))(params);\n}\n/**\n * coordinate 配置\n * @param params\n */\nfunction coordinate(params) {\n var chart = params.chart, options = params.options;\n var radius = options.radius, innerRadius = options.innerRadius, startAngle = options.startAngle, endAngle = options.endAngle;\n chart\n .coordinate({\n type: 'polar',\n cfg: {\n radius: radius,\n innerRadius: innerRadius,\n startAngle: startAngle,\n endAngle: endAngle,\n },\n })\n .transpose();\n return params;\n}\n/**\n * axis 配置\n * @param params\n */\nexport function axis(params) {\n var chart = params.chart, options = params.options;\n var xField = options.xField, xAxis = options.xAxis;\n chart.axis(xField, xAxis);\n return params;\n}\n/**\n * 数据标签\n * @param params\n */\nfunction label(params) {\n var chart = params.chart, options = params.options;\n var label = options.label, yField = options.yField;\n var intervalGeometry = findGeometry(chart, 'interval');\n // label 为 false, 空 则不显示 label\n if (!label) {\n intervalGeometry.label(false);\n }\n else {\n var callback = label.callback, cfg = __rest(label, [\"callback\"]);\n intervalGeometry.label({\n fields: [yField],\n callback: callback,\n cfg: __assign(__assign({}, transformLabel(cfg)), { type: 'polar' }),\n });\n }\n return params;\n}\n/**\n * 图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n return flow(pattern('barStyle'), geometry, meta, axis, coordinate, interaction, animation, theme, tooltip, legend, annotation(), label)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\n/**\n * 玉珏图 默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n interactions: [{ type: 'element-active' }],\n legend: false,\n tooltip: {\n showMarkers: false,\n },\n xAxis: {\n grid: null,\n tickLine: null,\n line: null,\n },\n maxAngle: 240,\n});\n//# sourceMappingURL=constant.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor, meta } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\n/**\n * 玉珏图\n */\nvar RadialBar = /** @class */ (function (_super) {\n __extends(RadialBar, _super);\n function RadialBar() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'radial-bar';\n return _this;\n }\n RadialBar.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n /**\n * @override\n * @param data\n */\n RadialBar.prototype.changeData = function (data) {\n this.updateOption({ data: data });\n // 更新玉珏图的 scale\n meta({ chart: this.chart, options: this.options });\n this.chart.changeData(data);\n };\n /**\n * 获取默认配置\n */\n RadialBar.prototype.getDefaultOptions = function () {\n return RadialBar.getDefaultOptions();\n };\n /**\n * 获取适配器\n */\n RadialBar.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return RadialBar;\n}(Plot));\nexport { RadialBar };\n//# sourceMappingURL=index.js.map","import { __assign, __rest } from \"tslib\";\nimport { isFunction, isString, isNil, get, isArray, isNumber, each, toString, isEmpty } from '@antv/util';\nimport { legend, animation, theme, state, annotation } from '../../adaptor/common';\nimport { getMappingFunction } from '../../adaptor/geometries/base';\nimport { interval } from '../../adaptor/geometries';\nimport { pattern } from '../../adaptor/pattern';\nimport { getLocale } from '../../core/locale';\nimport { flow, template, transformLabel, deepAssign, renderStatistic, processIllegalData } from '../../utils';\nimport { DEFAULT_OPTIONS } from './contants';\nimport { adaptOffset, getTotalValue, isAllZero } from './utils';\nimport { PIE_STATISTIC } from './interactions';\n/**\n * 字段\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var data = options.data, angleField = options.angleField, colorField = options.colorField, color = options.color, pieStyle = options.pieStyle;\n // 处理不合法的数据\n var processData = processIllegalData(data, angleField);\n if (isAllZero(processData, angleField)) {\n // 数据全 0 处理,调整 position 映射\n var percentageField_1 = '$$percentage$$';\n processData = processData.map(function (d) {\n var _a;\n return (__assign(__assign({}, d), (_a = {}, _a[percentageField_1] = 1 / processData.length, _a)));\n });\n chart.data(processData);\n var p = deepAssign({}, params, {\n options: {\n xField: '1',\n yField: percentageField_1,\n seriesField: colorField,\n isStack: true,\n interval: {\n color: color,\n style: pieStyle,\n },\n args: {\n zIndexReversed: true,\n sortZIndex: true,\n },\n },\n });\n interval(p);\n }\n else {\n chart.data(processData);\n var p = deepAssign({}, params, {\n options: {\n xField: '1',\n yField: angleField,\n seriesField: colorField,\n isStack: true,\n interval: {\n color: color,\n style: pieStyle,\n },\n args: {\n zIndexReversed: true,\n sortZIndex: true,\n },\n },\n });\n interval(p);\n }\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\nfunction meta(params) {\n var _a;\n var chart = params.chart, options = params.options;\n var meta = options.meta, colorField = options.colorField;\n // meta 直接是 scale 的信息\n var scales = deepAssign({}, meta);\n chart.scale(scales, (_a = {},\n _a[colorField] = { type: 'cat' },\n _a));\n return params;\n}\n/**\n * coord 配置\n * @param params\n */\nfunction coordinate(params) {\n var chart = params.chart, options = params.options;\n var radius = options.radius, innerRadius = options.innerRadius, startAngle = options.startAngle, endAngle = options.endAngle;\n chart.coordinate({\n type: 'theta',\n cfg: {\n radius: radius,\n innerRadius: innerRadius,\n startAngle: startAngle,\n endAngle: endAngle,\n },\n });\n return params;\n}\n/**\n * label 配置\n * @param params\n */\nfunction label(params) {\n var chart = params.chart, options = params.options;\n var label = options.label, colorField = options.colorField, angleField = options.angleField;\n var geometry = chart.geometries[0];\n // label 为 false, 空 则不显示 label\n if (!label) {\n geometry.label(false);\n }\n else {\n var callback = label.callback, cfg = __rest(label, [\"callback\"]);\n var labelCfg = transformLabel(cfg);\n // ① 提供模板字符串的 label content 配置\n if (labelCfg.content) {\n var content_1 = labelCfg.content;\n labelCfg.content = function (data, dataum, index) {\n var name = data[colorField];\n var value = data[angleField];\n // dymatic get scale, scale is ready this time\n var angleScale = chart.getScaleByField(angleField);\n var percent = angleScale === null || angleScale === void 0 ? void 0 : angleScale.scale(value);\n return isFunction(content_1)\n ? // append pecent (number) to data, users can get origin data from `dataum._origin`\n content_1(__assign(__assign({}, data), { percent: percent }), dataum, index)\n : isString(content_1)\n ? template(content_1, {\n value: value,\n name: name,\n // percentage (string), default keep 2\n percentage: isNumber(percent) && !isNil(value) ? (percent * 100).toFixed(2) + \"%\" : null,\n })\n : content_1;\n };\n }\n var LABEL_LAYOUT_TYPE_MAP = {\n inner: '',\n outer: 'pie-outer',\n spider: 'pie-spider',\n };\n var labelLayoutType = labelCfg.type ? LABEL_LAYOUT_TYPE_MAP[labelCfg.type] : 'pie-outer';\n var labelLayoutCfg = labelCfg.layout ? (!isArray(labelCfg.layout) ? [labelCfg.layout] : labelCfg.layout) : [];\n labelCfg.layout = (labelLayoutType ? [{ type: labelLayoutType }] : []).concat(labelLayoutCfg);\n geometry.label({\n // fix: could not create scale, when field is undefined(attributes 中的 fields 定义都会被用来创建 scale)\n fields: colorField ? [angleField, colorField] : [angleField],\n callback: callback,\n cfg: __assign(__assign({}, labelCfg), { offset: adaptOffset(labelCfg.type, labelCfg.offset), type: 'pie' }),\n });\n }\n return params;\n}\n/**\n * statistic options 处理\n * 1. 默认继承 default options 的样式\n * 2. 默认使用 meta 的 formatter\n */\nexport function transformStatisticOptions(options) {\n var innerRadius = options.innerRadius, statistic = options.statistic, angleField = options.angleField, colorField = options.colorField, meta = options.meta, locale = options.locale;\n var i18n = getLocale(locale);\n if (innerRadius && statistic) {\n var _a = deepAssign({}, DEFAULT_OPTIONS.statistic, statistic), titleOpt_1 = _a.title, contentOpt_1 = _a.content;\n if (titleOpt_1 !== false) {\n titleOpt_1 = deepAssign({}, {\n formatter: function (datum) {\n // 交互中\n if (datum) {\n return datum[colorField];\n }\n return !isNil(titleOpt_1.content) ? titleOpt_1.content : i18n.get(['statistic', 'total']);\n },\n }, titleOpt_1);\n }\n if (contentOpt_1 !== false) {\n contentOpt_1 = deepAssign({}, {\n formatter: function (datum, data) {\n var dataValue = datum ? datum[angleField] : getTotalValue(data, angleField);\n var metaFormatter = get(meta, [angleField, 'formatter']) || (function (v) { return v; });\n // 交互中\n if (datum) {\n return metaFormatter(dataValue);\n }\n return !isNil(contentOpt_1.content) ? contentOpt_1.content : metaFormatter(dataValue);\n },\n }, contentOpt_1);\n }\n return deepAssign({}, { statistic: { title: titleOpt_1, content: contentOpt_1 } }, options);\n }\n return options;\n}\n/**\n * statistic 中心文本配置\n * @param params\n */\nexport function pieAnnotation(params) {\n var chart = params.chart, options = params.options;\n var _a = transformStatisticOptions(options), innerRadius = _a.innerRadius, statistic = _a.statistic;\n // 先清空标注,再重新渲染\n chart.getController('annotation').clear(true);\n // 先进行其他 annotations,再去渲染统计文本\n flow(annotation())(params);\n /** 中心文本 指标卡 */\n if (innerRadius && statistic) {\n renderStatistic(chart, { statistic: statistic, plotType: 'pie' });\n }\n return params;\n}\n/**\n * 饼图 tooltip 配置\n * 1. 强制 tooltip.shared 为 false\n * @param params\n */\nfunction tooltip(params) {\n var chart = params.chart, options = params.options;\n var tooltip = options.tooltip, colorField = options.colorField, angleField = options.angleField, data = options.data;\n if (tooltip === false) {\n chart.tooltip(tooltip);\n }\n else {\n chart.tooltip(deepAssign({}, tooltip, { shared: false }));\n // 主要解决 all zero, 对于非 all zero 不再适用\n if (isAllZero(data, angleField)) {\n var fields = get(tooltip, 'fields');\n var formatter = get(tooltip, 'formatter');\n if (isEmpty(get(tooltip, 'fields'))) {\n fields = [colorField, angleField];\n formatter = formatter || (function (datum) { return ({ name: datum[colorField], value: toString(datum[angleField]) }); });\n }\n chart.geometries[0].tooltip(fields.join('*'), getMappingFunction(fields, formatter));\n }\n }\n return params;\n}\n/**\n * Interaction 配置 (饼图特殊的 interaction, 中心文本变更的时候,需要将一些配置参数传进去)\n * @param params\n */\nexport function interaction(params) {\n var chart = params.chart, options = params.options;\n var _a = transformStatisticOptions(options), interactions = _a.interactions, statistic = _a.statistic, annotations = _a.annotations;\n each(interactions, function (i) {\n var _a, _b;\n if (i.enable === false) {\n chart.removeInteraction(i.type);\n }\n else if (i.type === 'pie-statistic-active') {\n // 只针对 start 阶段的配置,进行添加参数信息\n var startStages_1 = [];\n if (!((_a = i.cfg) === null || _a === void 0 ? void 0 : _a.start)) {\n startStages_1 = [\n {\n trigger: 'element:mouseenter',\n action: PIE_STATISTIC + \":change\",\n arg: { statistic: statistic, annotations: annotations },\n },\n ];\n }\n each((_b = i.cfg) === null || _b === void 0 ? void 0 : _b.start, function (stage) {\n startStages_1.push(__assign(__assign({}, stage), { arg: { statistic: statistic, annotations: annotations } }));\n });\n chart.interaction(i.type, deepAssign({}, i.cfg, { start: startStages_1 }));\n }\n else {\n chart.interaction(i.type, i.cfg || {});\n }\n });\n return params;\n}\n/**\n * 饼图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return flow(pattern('pieStyle'), geometry, meta, theme, coordinate, legend, tooltip, label, state, \n /** 指标卡中心文本 放在下层 */\n pieAnnotation, interaction, animation)(params);\n}\n//# sourceMappingURL=adaptor.js.map","// https://github.com/HarryStevens/d3-regression#readme Version 1.3.10. Copyright 2022 Harry Stevens.\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = global || self, factory(global.d3 = {}));\n}(this, (function (exports) { 'use strict';\n\n function _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n }\n\n function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n }\n\n function _iterableToArrayLimit(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n\n // Adapted from vega-statistics by Jeffrey Heer\n // License: https://github.com/vega/vega/blob/f058b099decad9db78301405dd0d2e9d8ba3d51a/LICENSE\n // Source: https://github.com/vega/vega/blob/f058b099decad9db78301405dd0d2e9d8ba3d51a/packages/vega-statistics/src/regression/points.js\n function points(data, x, y, sort) {\n data = data.filter(function (d, i) {\n var u = x(d, i),\n v = y(d, i);\n return u != null && isFinite(u) && v != null && isFinite(v);\n });\n\n if (sort) {\n data.sort(function (a, b) {\n return x(a) - x(b);\n });\n }\n\n var n = data.length,\n X = new Float64Array(n),\n Y = new Float64Array(n); // extract values, calculate means\n\n var ux = 0,\n uy = 0,\n xv,\n yv,\n d;\n\n for (var i = 0; i < n;) {\n d = data[i];\n X[i] = xv = +x(d, i, data);\n Y[i] = yv = +y(d, i, data);\n ++i;\n ux += (xv - ux) / i;\n uy += (yv - uy) / i;\n } // mean center the data\n\n\n for (var _i = 0; _i < n; ++_i) {\n X[_i] -= ux;\n Y[_i] -= uy;\n }\n\n return [X, Y, ux, uy];\n }\n function visitPoints(data, x, y, cb) {\n var iterations = 0;\n\n for (var i = 0, n = data.length; i < n; i++) {\n var d = data[i],\n dx = +x(d, i, data),\n dy = +y(d, i, data);\n\n if (dx != null && isFinite(dx) && dy != null && isFinite(dy)) {\n cb(dx, dy, iterations++);\n }\n }\n }\n\n // return the coefficient of determination, or R squared.\n\n function determination(data, x, y, uY, predict) {\n var SSE = 0,\n SST = 0;\n visitPoints(data, x, y, function (dx, dy) {\n var sse = dy - predict(dx),\n sst = dy - uY;\n SSE += sse * sse;\n SST += sst * sst;\n });\n return 1 - SSE / SST;\n }\n\n // Returns the angle of a line in degrees.\n function angle(line) {\n return Math.atan2(line[1][1] - line[0][1], line[1][0] - line[0][0]) * 180 / Math.PI;\n } // Returns the midpoint of a line.\n\n function midpoint(line) {\n return [(line[0][0] + line[1][0]) / 2, (line[0][1] + line[1][1]) / 2];\n }\n\n // returns a smooth line.\n\n function interpose(xmin, xmax, predict) {\n var l = Math.log(xmax - xmin) * Math.LOG10E + 1 | 0;\n var precision = 1 * Math.pow(10, -l / 2 - 1),\n maxIter = 1e4;\n var points = [px(xmin), px(xmax)],\n iter = 0;\n\n while (find(points) && iter < maxIter) {\n }\n\n return points;\n\n function px(x) {\n return [x, predict(x)];\n }\n\n function find(points) {\n iter++;\n var n = points.length;\n var found = false;\n\n for (var i = 0; i < n - 1; i++) {\n var p0 = points[i],\n p1 = points[i + 1],\n m = midpoint([p0, p1]),\n mp = px(m[0]),\n a0 = angle([p0, m]),\n a1 = angle([p0, mp]),\n a = Math.abs(a0 - a1);\n\n if (a > precision) {\n points.splice(i + 1, 0, mp);\n found = true;\n }\n }\n\n return found;\n }\n }\n\n // Ordinary Least Squares from vega-statistics by Jeffrey Heer\n // License: https://github.com/vega/vega/blob/f058b099decad9db78301405dd0d2e9d8ba3d51a/LICENSE\n // Source: https://github.com/vega/vega/blob/f058b099decad9db78301405dd0d2e9d8ba3d51a/packages/vega-statistics/src/regression/ols.js\n function ols(uX, uY, uXY, uX2) {\n var delta = uX2 - uX * uX,\n slope = Math.abs(delta) < 1e-24 ? 0 : (uXY - uX * uY) / delta,\n intercept = uY - slope * uX;\n return [intercept, slope];\n }\n\n function exponential () {\n var x = function x(d) {\n return d[0];\n },\n y = function y(d) {\n return d[1];\n },\n domain;\n\n function exponential(data) {\n var n = 0,\n Y = 0,\n YL = 0,\n XY = 0,\n XYL = 0,\n X2Y = 0,\n xmin = domain ? +domain[0] : Infinity,\n xmax = domain ? +domain[1] : -Infinity;\n visitPoints(data, x, y, function (dx, dy) {\n var ly = Math.log(dy),\n xy = dx * dy;\n ++n;\n Y += (dy - Y) / n;\n XY += (xy - XY) / n;\n X2Y += (dx * xy - X2Y) / n;\n YL += (dy * ly - YL) / n;\n XYL += (xy * ly - XYL) / n;\n\n if (!domain) {\n if (dx < xmin) xmin = dx;\n if (dx > xmax) xmax = dx;\n }\n });\n\n var _ols = ols(XY / Y, YL / Y, XYL / Y, X2Y / Y),\n _ols2 = _slicedToArray(_ols, 2),\n a = _ols2[0],\n b = _ols2[1];\n\n a = Math.exp(a);\n\n var fn = function fn(x) {\n return a * Math.exp(b * x);\n },\n out = interpose(xmin, xmax, fn);\n\n out.a = a;\n out.b = b;\n out.predict = fn;\n out.rSquared = determination(data, x, y, Y, fn);\n return out;\n }\n\n exponential.domain = function (arr) {\n return arguments.length ? (domain = arr, exponential) : domain;\n };\n\n exponential.x = function (fn) {\n return arguments.length ? (x = fn, exponential) : x;\n };\n\n exponential.y = function (fn) {\n return arguments.length ? (y = fn, exponential) : y;\n };\n\n return exponential;\n }\n\n function linear () {\n var x = function x(d) {\n return d[0];\n },\n y = function y(d) {\n return d[1];\n },\n domain;\n\n function linear(data) {\n var n = 0,\n X = 0,\n // sum of x\n Y = 0,\n // sum of y\n XY = 0,\n // sum of x * y\n X2 = 0,\n // sum of x * x\n xmin = domain ? +domain[0] : Infinity,\n xmax = domain ? +domain[1] : -Infinity;\n visitPoints(data, x, y, function (dx, dy) {\n ++n;\n X += (dx - X) / n;\n Y += (dy - Y) / n;\n XY += (dx * dy - XY) / n;\n X2 += (dx * dx - X2) / n;\n\n if (!domain) {\n if (dx < xmin) xmin = dx;\n if (dx > xmax) xmax = dx;\n }\n });\n\n var _ols = ols(X, Y, XY, X2),\n _ols2 = _slicedToArray(_ols, 2),\n intercept = _ols2[0],\n slope = _ols2[1],\n fn = function fn(x) {\n return slope * x + intercept;\n },\n out = [[xmin, fn(xmin)], [xmax, fn(xmax)]];\n\n out.a = slope;\n out.b = intercept;\n out.predict = fn;\n out.rSquared = determination(data, x, y, Y, fn);\n return out;\n }\n\n linear.domain = function (arr) {\n return arguments.length ? (domain = arr, linear) : domain;\n };\n\n linear.x = function (fn) {\n return arguments.length ? (x = fn, linear) : x;\n };\n\n linear.y = function (fn) {\n return arguments.length ? (y = fn, linear) : y;\n };\n\n return linear;\n }\n\n // Returns the medium value of an array of numbers.\n function median(arr) {\n arr.sort(function (a, b) {\n return a - b;\n });\n var i = arr.length / 2;\n return i % 1 === 0 ? (arr[i - 1] + arr[i]) / 2 : arr[Math.floor(i)];\n }\n\n var maxiters = 2,\n epsilon = 1e-12;\n function loess () {\n var x = function x(d) {\n return d[0];\n },\n y = function y(d) {\n return d[1];\n },\n bandwidth = .3;\n\n function loess(data) {\n var _points = points(data, x, y, true),\n _points2 = _slicedToArray(_points, 4),\n xv = _points2[0],\n yv = _points2[1],\n ux = _points2[2],\n uy = _points2[3],\n n = xv.length,\n bw = Math.max(2, ~~(bandwidth * n)),\n yhat = new Float64Array(n),\n residuals = new Float64Array(n),\n robustWeights = new Float64Array(n).fill(1);\n\n for (var iter = -1; ++iter <= maxiters;) {\n var interval = [0, bw - 1];\n\n for (var i = 0; i < n; ++i) {\n var dx = xv[i],\n i0 = interval[0],\n i1 = interval[1],\n edge = dx - xv[i0] > xv[i1] - dx ? i0 : i1;\n var W = 0,\n X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n denom = 1 / Math.abs(xv[edge] - dx || 1); // Avoid singularity\n\n for (var k = i0; k <= i1; ++k) {\n var xk = xv[k],\n yk = yv[k],\n w = tricube(Math.abs(dx - xk) * denom) * robustWeights[k],\n xkw = xk * w;\n W += w;\n X += xkw;\n Y += yk * w;\n XY += yk * xkw;\n X2 += xk * xkw;\n } // Linear regression fit\n\n\n var _ols = ols(X / W, Y / W, XY / W, X2 / W),\n _ols2 = _slicedToArray(_ols, 2),\n a = _ols2[0],\n b = _ols2[1];\n\n yhat[i] = a + b * dx;\n residuals[i] = Math.abs(yv[i] - yhat[i]);\n updateInterval(xv, i + 1, interval);\n }\n\n if (iter === maxiters) {\n break;\n }\n\n var medianResidual = median(residuals);\n if (Math.abs(medianResidual) < epsilon) break;\n\n for (var _i = 0, arg, _w; _i < n; ++_i) {\n arg = residuals[_i] / (6 * medianResidual); // Default to epsilon (rather than zero) for large deviations\n // Keeping weights tiny but non-zero prevents singularites\n\n robustWeights[_i] = arg >= 1 ? epsilon : (_w = 1 - arg * arg) * _w;\n }\n }\n\n return output(xv, yhat, ux, uy);\n }\n\n loess.bandwidth = function (bw) {\n return arguments.length ? (bandwidth = bw, loess) : bandwidth;\n };\n\n loess.x = function (fn) {\n return arguments.length ? (x = fn, loess) : x;\n };\n\n loess.y = function (fn) {\n return arguments.length ? (y = fn, loess) : y;\n };\n\n return loess;\n } // Weighting kernel for local regression\n\n function tricube(x) {\n return (x = 1 - x * x * x) * x * x;\n } // Advance sliding window interval of nearest neighbors\n\n\n function updateInterval(xv, i, interval) {\n var val = xv[i],\n left = interval[0],\n right = interval[1] + 1;\n if (right >= xv.length) return; // Step right if distance to new right edge is <= distance to old left edge\n // Step when distance is equal to ensure movement over duplicate x values\n\n while (i > left && xv[right] - val <= val - xv[left]) {\n interval[0] = ++left;\n interval[1] = right;\n ++right;\n }\n } // Generate smoothed output points\n // Average points with repeated x values\n\n\n function output(xv, yhat, ux, uy) {\n var n = xv.length,\n out = [];\n var i = 0,\n cnt = 0,\n prev = [],\n v;\n\n for (; i < n; ++i) {\n v = xv[i] + ux;\n\n if (prev[0] === v) {\n // Average output values via online update\n prev[1] += (yhat[i] - prev[1]) / ++cnt;\n } else {\n // Add new output point\n cnt = 0;\n prev[1] += uy;\n prev = [v, yhat[i]];\n out.push(prev);\n }\n }\n\n prev[1] += uy;\n return out;\n }\n\n function logarithmic () {\n var x = function x(d) {\n return d[0];\n },\n y = function y(d) {\n return d[1];\n },\n base = Math.E,\n domain;\n\n function logarithmic(data) {\n var n = 0,\n X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n xmin = domain ? +domain[0] : Infinity,\n xmax = domain ? +domain[1] : -Infinity,\n lb = Math.log(base);\n visitPoints(data, x, y, function (dx, dy) {\n var lx = Math.log(dx) / lb;\n ++n;\n X += (lx - X) / n;\n Y += (dy - Y) / n;\n XY += (lx * dy - XY) / n;\n X2 += (lx * lx - X2) / n;\n\n if (!domain) {\n if (dx < xmin) xmin = dx;\n if (dx > xmax) xmax = dx;\n }\n });\n\n var _ols = ols(X, Y, XY, X2),\n _ols2 = _slicedToArray(_ols, 2),\n intercept = _ols2[0],\n slope = _ols2[1],\n fn = function fn(x) {\n return slope * Math.log(x) / lb + intercept;\n },\n out = interpose(xmin, xmax, fn);\n\n out.a = slope;\n out.b = intercept;\n out.predict = fn;\n out.rSquared = determination(data, x, y, Y, fn);\n return out;\n }\n\n logarithmic.domain = function (arr) {\n return arguments.length ? (domain = arr, logarithmic) : domain;\n };\n\n logarithmic.x = function (fn) {\n return arguments.length ? (x = fn, logarithmic) : x;\n };\n\n logarithmic.y = function (fn) {\n return arguments.length ? (y = fn, logarithmic) : y;\n };\n\n logarithmic.base = function (n) {\n return arguments.length ? (base = n, logarithmic) : base;\n };\n\n return logarithmic;\n }\n\n function quad () {\n var x = function x(d) {\n return d[0];\n },\n y = function y(d) {\n return d[1];\n },\n domain;\n\n function quadratic(data) {\n var _points = points(data, x, y),\n _points2 = _slicedToArray(_points, 4),\n xv = _points2[0],\n yv = _points2[1],\n ux = _points2[2],\n uy = _points2[3],\n n = xv.length;\n\n var X2 = 0,\n X3 = 0,\n X4 = 0,\n XY = 0,\n X2Y = 0,\n i,\n dx,\n dy,\n x2;\n\n for (i = 0; i < n;) {\n dx = xv[i];\n dy = yv[i++];\n x2 = dx * dx;\n X2 += (x2 - X2) / i;\n X3 += (x2 * dx - X3) / i;\n X4 += (x2 * x2 - X4) / i;\n XY += (dx * dy - XY) / i;\n X2Y += (x2 * dy - X2Y) / i;\n }\n\n var Y = 0,\n n0 = 0,\n xmin = domain ? +domain[0] : Infinity,\n xmax = domain ? +domain[1] : -Infinity;\n visitPoints(data, x, y, function (dx, dy) {\n n0++;\n Y += (dy - Y) / n0;\n\n if (!domain) {\n if (dx < xmin) xmin = dx;\n if (dx > xmax) xmax = dx;\n }\n });\n\n var X2X2 = X4 - X2 * X2,\n d = X2 * X2X2 - X3 * X3,\n a = (X2Y * X2 - XY * X3) / d,\n b = (XY * X2X2 - X2Y * X3) / d,\n c = -a * X2,\n fn = function fn(x) {\n x = x - ux;\n return a * x * x + b * x + c + uy;\n };\n\n var out = interpose(xmin, xmax, fn);\n out.a = a;\n out.b = b - 2 * a * ux;\n out.c = c - b * ux + a * ux * ux + uy;\n out.predict = fn;\n out.rSquared = determination(data, x, y, Y, fn);\n return out;\n }\n\n quadratic.domain = function (arr) {\n return arguments.length ? (domain = arr, quadratic) : domain;\n };\n\n quadratic.x = function (fn) {\n return arguments.length ? (x = fn, quadratic) : x;\n };\n\n quadratic.y = function (fn) {\n return arguments.length ? (y = fn, quadratic) : y;\n };\n\n return quadratic;\n }\n\n // Source: https://github.com/Tom-Alexander/regression-js/blob/master/src/regression.js#L246\n // License: https://github.com/Tom-Alexander/regression-js/blob/master/LICENSE\n // ...with ideas from vega-statistics by Jeffrey Heer\n // Source: https://github.com/vega/vega/blob/f21cb8792b4e0cbe2b1a3fd44b0f5db370dbaadb/packages/vega-statistics/src/regression/poly.js\n // License: https://github.com/vega/vega/blob/f058b099decad9db78301405dd0d2e9d8ba3d51a/LICENSE\n\n function polynomial () {\n var x = function x(d) {\n return d[0];\n },\n y = function y(d) {\n return d[1];\n },\n order = 3,\n domain;\n\n function polynomial(data) {\n // Use more efficient methods for lower orders\n if (order === 1) {\n var o = linear().x(x).y(y).domain(domain)(data);\n o.coefficients = [o.b, o.a];\n delete o.a;\n delete o.b;\n return o;\n }\n\n if (order === 2) {\n var _o = quad().x(x).y(y).domain(domain)(data);\n\n _o.coefficients = [_o.c, _o.b, _o.a];\n delete _o.a;\n delete _o.b;\n delete _o.c;\n return _o;\n }\n\n var _points = points(data, x, y),\n _points2 = _slicedToArray(_points, 4),\n xv = _points2[0],\n yv = _points2[1],\n ux = _points2[2],\n uy = _points2[3],\n n = xv.length,\n lhs = [],\n rhs = [],\n k = order + 1;\n\n var Y = 0,\n n0 = 0,\n xmin = domain ? +domain[0] : Infinity,\n xmax = domain ? +domain[1] : -Infinity;\n visitPoints(data, x, y, function (dx, dy) {\n ++n0;\n Y += (dy - Y) / n0;\n\n if (!domain) {\n if (dx < xmin) xmin = dx;\n if (dx > xmax) xmax = dx;\n }\n });\n var i, j, l, v, c;\n\n for (i = 0; i < k; ++i) {\n for (l = 0, v = 0; l < n; ++l) {\n v += Math.pow(xv[l], i) * yv[l];\n }\n\n lhs.push(v);\n c = new Float64Array(k);\n\n for (j = 0; j < k; ++j) {\n for (l = 0, v = 0; l < n; ++l) {\n v += Math.pow(xv[l], i + j);\n }\n\n c[j] = v;\n }\n\n rhs.push(c);\n }\n\n rhs.push(lhs);\n\n var coef = gaussianElimination(rhs),\n fn = function fn(x) {\n x -= ux;\n var y = uy + coef[0] + coef[1] * x + coef[2] * x * x;\n\n for (i = 3; i < k; ++i) {\n y += coef[i] * Math.pow(x, i);\n }\n\n return y;\n },\n out = interpose(xmin, xmax, fn);\n\n out.coefficients = uncenter(k, coef, -ux, uy);\n out.predict = fn;\n out.rSquared = determination(data, x, y, Y, fn);\n return out;\n }\n\n polynomial.domain = function (arr) {\n return arguments.length ? (domain = arr, polynomial) : domain;\n };\n\n polynomial.x = function (fn) {\n return arguments.length ? (x = fn, polynomial) : x;\n };\n\n polynomial.y = function (fn) {\n return arguments.length ? (y = fn, polynomial) : y;\n };\n\n polynomial.order = function (n) {\n return arguments.length ? (order = n, polynomial) : order;\n };\n\n return polynomial;\n }\n\n function uncenter(k, a, x, y) {\n var z = Array(k);\n var i, j, v, c; // initialize to zero\n\n for (i = 0; i < k; ++i) {\n z[i] = 0;\n } // polynomial expansion\n\n\n for (i = k - 1; i >= 0; --i) {\n v = a[i];\n c = 1;\n z[i] += v;\n\n for (j = 1; j <= i; ++j) {\n c *= (i + 1 - j) / j; // binomial coefficent\n\n z[i - j] += v * Math.pow(x, j) * c;\n }\n } // bias term\n\n\n z[0] += y;\n return z;\n } // Given an array for a two-dimensional matrix and the polynomial order,\n // solve A * x = b using Gaussian elimination.\n\n\n function gaussianElimination(matrix) {\n var n = matrix.length - 1,\n coef = [];\n var i, j, k, r, t;\n\n for (i = 0; i < n; ++i) {\n r = i; // max row\n\n for (j = i + 1; j < n; ++j) {\n if (Math.abs(matrix[i][j]) > Math.abs(matrix[i][r])) {\n r = j;\n }\n }\n\n for (k = i; k < n + 1; ++k) {\n t = matrix[k][i];\n matrix[k][i] = matrix[k][r];\n matrix[k][r] = t;\n }\n\n for (j = i + 1; j < n; ++j) {\n for (k = n; k >= i; k--) {\n matrix[k][j] -= matrix[k][i] * matrix[i][j] / matrix[i][i];\n }\n }\n }\n\n for (j = n - 1; j >= 0; --j) {\n t = 0;\n\n for (k = j + 1; k < n; ++k) {\n t += matrix[k][j] * coef[k];\n }\n\n coef[j] = (matrix[n][j] - t) / matrix[j][j];\n }\n\n return coef;\n }\n\n function power () {\n var x = function x(d) {\n return d[0];\n },\n y = function y(d) {\n return d[1];\n },\n domain;\n\n function power(data) {\n var n = 0,\n X = 0,\n Y = 0,\n XY = 0,\n X2 = 0,\n YS = 0,\n xmin = domain ? +domain[0] : Infinity,\n xmax = domain ? +domain[1] : -Infinity;\n visitPoints(data, x, y, function (dx, dy) {\n var lx = Math.log(dx),\n ly = Math.log(dy);\n ++n;\n X += (lx - X) / n;\n Y += (ly - Y) / n;\n XY += (lx * ly - XY) / n;\n X2 += (lx * lx - X2) / n;\n YS += (dy - YS) / n;\n\n if (!domain) {\n if (dx < xmin) xmin = dx;\n if (dx > xmax) xmax = dx;\n }\n });\n\n var _ols = ols(X, Y, XY, X2),\n _ols2 = _slicedToArray(_ols, 2),\n a = _ols2[0],\n b = _ols2[1];\n\n a = Math.exp(a);\n\n var fn = function fn(x) {\n return a * Math.pow(x, b);\n },\n out = interpose(xmin, xmax, fn);\n\n out.a = a;\n out.b = b;\n out.predict = fn;\n out.rSquared = determination(data, x, y, YS, fn);\n return out;\n }\n\n power.domain = function (arr) {\n return arguments.length ? (domain = arr, power) : domain;\n };\n\n power.x = function (fn) {\n return arguments.length ? (x = fn, power) : x;\n };\n\n power.y = function (fn) {\n return arguments.length ? (y = fn, power) : y;\n };\n\n return power;\n }\n\n exports.regressionExp = exponential;\n exports.regressionLinear = linear;\n exports.regressionLoess = loess;\n exports.regressionLog = logarithmic;\n exports.regressionPoly = polynomial;\n exports.regressionPow = power;\n exports.regressionQuad = quad;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","import { registerInteraction, registerAction } from '@antv/g2';\nimport { get, isArray } from '@antv/util';\nimport { DrillDownAction } from './actions/drill-down';\n/**\n * 判断是否为父节点\n */\nexport function isParentNode(context) {\n var data = get(context, ['event', 'data', 'data'], {});\n return isArray(data.children) && data.children.length > 0;\n}\n/**\n * 判断是否在中心\n */\nfunction inCenter(context) {\n var coordinate = context.view.getCoordinate();\n var innerRadius = coordinate.innerRadius;\n if (innerRadius) {\n var _a = context.event, x = _a.x, y = _a.y;\n var _b = coordinate.center, centerX = _b.x, centerY = _b.y;\n var r = coordinate.getRadius() * innerRadius;\n var distance = Math.sqrt(Math.pow((centerX - x), 2) + Math.pow((centerY - y), 2));\n return distance < r;\n }\n return false;\n}\nregisterAction('drill-down-action', DrillDownAction);\nregisterInteraction('drill-down', {\n showEnable: [\n { trigger: 'element:mouseenter', action: 'cursor:pointer', isEnable: isParentNode },\n { trigger: 'element:mouseleave', action: 'cursor:default' },\n // 中心处,肯定会触发 element:mouseleave 操作\n { trigger: 'element:mouseleave', action: 'cursor:pointer', isEnable: inCenter },\n ],\n start: [\n {\n trigger: 'element:click',\n isEnable: isParentNode,\n action: ['drill-down-action:click'],\n },\n {\n trigger: 'afterchangesize',\n action: ['drill-down-action:resetPosition'],\n },\n {\n // 点击中心,返回上一层\n trigger: 'click',\n isEnable: inCenter,\n action: ['drill-down-action:back'],\n },\n ],\n});\n//# sourceMappingURL=drill-down.js.map","/*\n * for Arc Diagram (edges without weight) / Chord Diagram (edges with source and target weight)\n * graph data required (nodes, edges)\n */\nimport { assign, forIn, isFunction } from '@antv/util';\nvar DEFAULT_OPTIONS = {\n y: 0,\n nodeWidthRatio: 0.05,\n weight: false,\n nodePaddingRatio: 0.1,\n id: function (node) { return node.id; },\n source: function (edge) { return edge.source; },\n target: function (edge) { return edge.target; },\n sourceWeight: function (edge) { return edge.value || 1; },\n targetWeight: function (edge) { return edge.value || 1; },\n sortBy: null,\n};\n/**\n * 处理节点的value、edges\n * @param nodeById\n * @param edges\n * @param options\n */\nfunction processGraph(nodeById, edges, options) {\n forIn(nodeById, function (node, id) {\n // in edges, out edges\n node.inEdges = edges.filter(function (edge) { return \"\" + options.target(edge) === \"\" + id; });\n node.outEdges = edges.filter(function (edge) { return \"\" + options.source(edge) === \"\" + id; });\n // frequency\n node.edges = node.outEdges.concat(node.inEdges);\n node.frequency = node.edges.length;\n // weight\n node.value = 0;\n node.inEdges.forEach(function (edge) {\n node.value += options.targetWeight(edge);\n });\n node.outEdges.forEach(function (edge) {\n node.value += options.sourceWeight(edge);\n });\n });\n}\n/**\n * 节点排序\n * @param nodes\n * @param options\n */\nfunction sortNodes(nodes, options) {\n var sortMethods = {\n weight: function (a, b) { return b.value - a.value; },\n frequency: function (a, b) { return b.frequency - a.frequency; },\n id: function (a, b) { return (\"\" + options.id(a)).localeCompare(\"\" + options.id(b)); },\n };\n var method = sortMethods[options.sortBy];\n if (!method && isFunction(options.sortBy)) {\n method = options.sortBy;\n }\n if (method) {\n nodes.sort(method);\n }\n}\nfunction layoutNodes(nodes, options) {\n var len = nodes.length;\n if (!len) {\n throw new TypeError(\"Invalid nodes: it's empty!\");\n }\n if (options.weight) {\n var nodePaddingRatio_1 = options.nodePaddingRatio;\n if (nodePaddingRatio_1 < 0 || nodePaddingRatio_1 >= 1) {\n throw new TypeError('Invalid nodePaddingRatio: it must be in range [0, 1)!');\n }\n var margin_1 = nodePaddingRatio_1 / (2 * len);\n var nodeWidthRatio_1 = options.nodeWidthRatio;\n if (nodeWidthRatio_1 <= 0 || nodeWidthRatio_1 >= 1) {\n throw new TypeError('Invalid nodeWidthRatio: it must be in range (0, 1)!');\n }\n var totalValue_1 = 0;\n nodes.forEach(function (node) {\n totalValue_1 += node.value;\n });\n nodes.forEach(function (node) {\n node.weight = node.value / totalValue_1;\n node.width = node.weight * (1 - nodePaddingRatio_1);\n node.height = nodeWidthRatio_1;\n });\n nodes.forEach(function (node, index) {\n // x\n var deltaX = 0;\n for (var i = index - 1; i >= 0; i--) {\n deltaX += nodes[i].width + 2 * margin_1;\n }\n var minX = (node.minX = margin_1 + deltaX);\n var maxX = (node.maxX = node.minX + node.width);\n var minY = (node.minY = options.y - nodeWidthRatio_1 / 2);\n var maxY = (node.maxY = minY + nodeWidthRatio_1);\n node.x = [minX, maxX, maxX, minX];\n node.y = [minY, minY, maxY, maxY];\n /* points\n * 3---2\n * | |\n * 0---1\n */\n // node.x = minX + 0.5 * node.width;\n // node.y = options.y;\n });\n }\n else {\n var deltaX_1 = 1 / len;\n nodes.forEach(function (node, index) {\n node.x = (index + 0.5) * deltaX_1;\n node.y = options.y;\n });\n }\n return nodes;\n}\nfunction locatingEdges(nodeById, edges, options) {\n if (options.weight) {\n var valueById_1 = {};\n forIn(nodeById, function (node, id) {\n valueById_1[id] = node.value;\n });\n edges.forEach(function (edge) {\n var sId = options.source(edge);\n var tId = options.target(edge);\n var sNode = nodeById[sId];\n var tNode = nodeById[tId];\n if (sNode && tNode) {\n var sValue = valueById_1[sId];\n var currentSValue = options.sourceWeight(edge);\n var sStart = sNode.minX + ((sNode.value - sValue) / sNode.value) * sNode.width;\n var sEnd = sStart + (currentSValue / sNode.value) * sNode.width;\n valueById_1[sId] -= currentSValue;\n var tValue = valueById_1[tId];\n var currentTValue = options.targetWeight(edge);\n var tStart = tNode.minX + ((tNode.value - tValue) / tNode.value) * tNode.width;\n var tEnd = tStart + (currentTValue / tNode.value) * tNode.width;\n valueById_1[tId] -= currentTValue;\n var y = options.y;\n edge.x = [sStart, sEnd, tStart, tEnd];\n edge.y = [y, y, y, y];\n // 将edge的source与target的id换为 sourceNode与targetNode\n edge.source = sNode;\n edge.target = tNode;\n }\n });\n }\n else {\n edges.forEach(function (edge) {\n var sNode = nodeById[options.source(edge)];\n var tNode = nodeById[options.target(edge)];\n if (sNode && tNode) {\n edge.x = [sNode.x, tNode.x];\n edge.y = [sNode.y, tNode.y];\n // 将edge的source与target的id换为 sourceNode与targetNode\n edge.source = sNode;\n edge.target = tNode;\n }\n });\n }\n return edges;\n}\nexport function getDefaultOptions(options) {\n return assign({}, DEFAULT_OPTIONS, options);\n}\nexport function chordLayout(chordLayoutOptions, chordLayoutInputData) {\n var options = getDefaultOptions(chordLayoutOptions);\n var nodeById = {};\n var nodes = chordLayoutInputData.nodes;\n var links = chordLayoutInputData.links;\n nodes.forEach(function (node) {\n var id = options.id(node);\n nodeById[id] = node;\n });\n processGraph(nodeById, links, options);\n sortNodes(nodes, options);\n var outputNodes = layoutNodes(nodes, options);\n var outputLinks = locatingEdges(nodeById, links, options);\n return {\n nodes: outputNodes,\n links: outputLinks,\n };\n}\n//# sourceMappingURL=chord.js.map","import { get } from '@antv/util';\nexport var X_FIELD = 'x';\nexport var Y_FIELD = 'y';\nexport var NODE_COLOR_FIELD = 'name';\nexport var EDGE_COLOR_FIELD = 'source';\nexport var DEFAULT_OPTIONS = {\n nodeStyle: {\n opacity: 1,\n fillOpacity: 1,\n lineWidth: 1,\n },\n edgeStyle: {\n opacity: 0.5,\n lineWidth: 2,\n },\n label: {\n fields: ['x', 'name'],\n callback: function (x, name) {\n var centerX = (x[0] + x[1]) / 2;\n var offsetX = centerX > 0.5 ? -4 : 4;\n return {\n labelEmit: true,\n style: {\n fill: '#8c8c8c',\n },\n offsetX: offsetX,\n content: name,\n };\n },\n },\n tooltip: {\n showTitle: false,\n showMarkers: false,\n fields: ['source', 'target', 'value', 'isNode'],\n // 内置:node 不显示 tooltip (业务层自行处理),edge 显示 tooltip\n showContent: function (items) {\n return !get(items, [0, 'data', 'isNode']);\n },\n formatter: function (datum) {\n var source = datum.source, target = datum.target, value = datum.value;\n return {\n name: source + \" -> \" + target,\n value: value,\n };\n },\n },\n interactions: [\n {\n type: 'element-active',\n },\n ],\n weight: true,\n nodePaddingRatio: 0.1,\n nodeWidthRatio: 0.05,\n};\n//# sourceMappingURL=constant.js.map","import { __assign, __spreadArrays } from \"tslib\";\nimport { each } from '@antv/util';\nimport { interaction, theme, state } from '../../adaptor/common';\nimport { flow, pick } from '../../utils';\nimport { polygon, edge } from '../../adaptor/geometries';\nimport { chordLayout } from '../../utils/transform/chord';\nimport { getAllGeometriesRecursively, transformDataToNodeLinkData } from '../../utils';\nimport { X_FIELD, Y_FIELD, NODE_COLOR_FIELD, EDGE_COLOR_FIELD } from './constant';\nfunction transformData(params) {\n // 将弦图数据放到ext中,nodeGeometry edgeGeometry使用\n var options = params.options;\n var data = options.data, sourceField = options.sourceField, targetField = options.targetField, weightField = options.weightField, nodePaddingRatio = options.nodePaddingRatio, nodeWidthRatio = options.nodeWidthRatio, _a = options.rawFields, rawFields = _a === void 0 ? [] : _a;\n // 将数据转换为node link格式\n var chordLayoutInputData = transformDataToNodeLinkData(data, sourceField, targetField, weightField);\n var _b = chordLayout({ weight: true, nodePaddingRatio: nodePaddingRatio, nodeWidthRatio: nodeWidthRatio }, chordLayoutInputData), nodes = _b.nodes, links = _b.links;\n // 1. 生成绘制node使用数据\n var nodesData = nodes.map(function (node) {\n return __assign(__assign({}, pick(node, __spreadArrays(['id', 'x', 'y', 'name'], rawFields))), { isNode: true });\n });\n // 2. 生成 edge 使用数据 (同桑基图)\n var edgesData = links.map(function (link) {\n return __assign(__assign({ source: link.source.name, target: link.target.name, name: link.source.name || link.target.name }, pick(link, __spreadArrays(['x', 'y', 'value'], rawFields))), { isNode: false });\n });\n return __assign(__assign({}, params), { ext: __assign(__assign({}, params.ext), { \n // 将chordData放到ext中,方便下面的geometry使用\n chordData: { nodesData: nodesData, edgesData: edgesData } }) });\n}\n/**\n * scale配置\n * @param params 参数\n */\nfunction scale(params) {\n var _a;\n var chart = params.chart;\n chart.scale((_a = {\n x: { sync: true, nice: true },\n y: { sync: true, nice: true, max: 1 }\n },\n _a[NODE_COLOR_FIELD] = { sync: 'color' },\n _a[EDGE_COLOR_FIELD] = { sync: 'color' },\n _a));\n return params;\n}\n/**\n * axis配置\n * @param params 参数\n */\nfunction axis(params) {\n var chart = params.chart;\n chart.axis(false);\n return params;\n}\n/**\n * legend配置\n * @param params 参数\n */\nfunction legend(params) {\n var chart = params.chart;\n chart.legend(false);\n return params;\n}\n/**\n * tooltip配置\n * @param params 参数\n */\nfunction tooltip(params) {\n var chart = params.chart, options = params.options;\n var tooltip = options.tooltip;\n chart.tooltip(tooltip);\n return params;\n}\n/**\n * coordinate配置\n * @param params 参数\n */\nfunction coordinate(params) {\n var chart = params.chart;\n chart.coordinate('polar').reflect('y');\n return params;\n}\n/**\n * nodeGeometry配置\n * @param params 参数\n */\nfunction nodeGeometry(params) {\n // node view\n var chart = params.chart, options = params.options;\n var nodesData = params.ext.chordData.nodesData;\n var nodeStyle = options.nodeStyle, label = options.label, tooltip = options.tooltip;\n var nodeView = chart.createView();\n nodeView.data(nodesData);\n // 面\n polygon({\n chart: nodeView,\n options: {\n xField: X_FIELD,\n yField: Y_FIELD,\n seriesField: NODE_COLOR_FIELD,\n polygon: {\n style: nodeStyle,\n },\n label: label,\n tooltip: tooltip,\n },\n });\n return params;\n}\n/**\n * edgeGeometry配置\n * @param params 参数\n */\nfunction edgeGeometry(params) {\n var chart = params.chart, options = params.options;\n var edgesData = params.ext.chordData.edgesData;\n var edgeStyle = options.edgeStyle, tooltip = options.tooltip;\n var edgeView = chart.createView();\n edgeView.data(edgesData);\n // edge\n var edgeOptions = {\n xField: X_FIELD,\n yField: Y_FIELD,\n seriesField: EDGE_COLOR_FIELD,\n edge: {\n style: edgeStyle,\n shape: 'arc',\n },\n tooltip: tooltip,\n };\n edge({\n chart: edgeView,\n options: edgeOptions,\n });\n return params;\n}\nfunction animation(params) {\n var chart = params.chart, options = params.options;\n var animation = options.animation;\n // 同时设置整个 view 动画选项\n if (typeof animation === 'boolean') {\n chart.animate(animation);\n }\n else {\n chart.animate(true);\n }\n // 所有的 Geometry 都使用同一动画(各个图形如有区别,自行覆盖)\n each(getAllGeometriesRecursively(chart), function (g) {\n g.animate(animation);\n });\n return params;\n}\n/**\n * 弦图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return flow(theme, transformData, coordinate, scale, axis, legend, tooltip, edgeGeometry, nodeGeometry, interaction, state, animation)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\n/**\n * 弦图 Chord\n */\nvar Chord = /** @class */ (function (_super) {\n __extends(Chord, _super);\n function Chord() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'chord';\n return _this;\n }\n /**\n * 获取 面积图 默认配置项\n * 供外部使用\n */\n Chord.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n Chord.prototype.getDefaultOptions = function () {\n return Chord.getDefaultOptions();\n };\n /**\n * 获取适配器\n */\n Chord.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Chord;\n}(Plot));\nexport { Chord };\n//# sourceMappingURL=index.js.map","import { __assign } from \"tslib\";\nimport { isString } from '@antv/util';\nimport { interaction, animation, theme, scale, annotation } from '../../adaptor/common';\nimport { interval } from '../../adaptor/geometries';\nimport { AXIS_META_CONFIG_KEYS } from '../../constant';\nimport { deepAssign, flow, pick, renderGaugeStatistic } from '../../utils';\nimport { RANGE_TYPE, RANGE_VALUE, PERCENT, DEFAULT_COLOR, INDICATEOR_VIEW_ID, RANGE_VIEW_ID } from './constants';\nimport { getIndicatorData, getRangeData } from './utils';\n/**\n * geometry 处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var percent = options.percent, range = options.range, radius = options.radius, innerRadius = options.innerRadius, startAngle = options.startAngle, endAngle = options.endAngle, axis = options.axis, indicator = options.indicator, gaugeStyle = options.gaugeStyle, type = options.type, meter = options.meter;\n var color = range.color, rangeWidth = range.width;\n // 指标 & 指针\n // 如果开启在应用\n if (indicator) {\n var indicatorData = getIndicatorData(percent);\n var v1 = chart.createView({ id: INDICATEOR_VIEW_ID });\n v1.data(indicatorData);\n v1.point()\n .position(PERCENT + \"*1\")\n .shape(indicator.shape || 'gauge-indicator')\n // 传入指针的样式到自定义 shape 中\n .customInfo({\n defaultColor: chart.getTheme().defaultColor,\n indicator: indicator,\n });\n v1.coordinate('polar', {\n startAngle: startAngle,\n endAngle: endAngle,\n radius: innerRadius * radius,\n });\n v1.axis(PERCENT, axis);\n // 一部分应用到 scale 中\n v1.scale(PERCENT, pick(axis, AXIS_META_CONFIG_KEYS));\n }\n // 辅助 range\n // [{ range: 1, type: '0', percent: 原始进度百分比 }]\n var rangeData = getRangeData(percent, options.range);\n var v2 = chart.createView({ id: RANGE_VIEW_ID });\n v2.data(rangeData);\n var rangeColor = isString(color) ? [color, DEFAULT_COLOR] : color;\n var ext = interval({\n chart: v2,\n options: {\n xField: '1',\n yField: RANGE_VALUE,\n seriesField: RANGE_TYPE,\n rawFields: [PERCENT],\n isStack: true,\n interval: {\n color: rangeColor,\n style: gaugeStyle,\n shape: type === 'meter' ? 'meter-gauge' : null,\n },\n args: {\n zIndexReversed: true,\n sortZIndex: true,\n },\n minColumnWidth: rangeWidth,\n maxColumnWidth: rangeWidth,\n },\n }).ext;\n var geometry = ext.geometry;\n // 传入到自定义 shape 中\n geometry.customInfo({ meter: meter });\n v2.coordinate('polar', {\n innerRadius: innerRadius,\n radius: radius,\n startAngle: startAngle,\n endAngle: endAngle,\n }).transpose();\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\nfunction meta(params) {\n var _a;\n return flow(scale((_a = {\n range: {\n min: 0,\n max: 1,\n maxLimit: 1,\n minLimit: 0,\n }\n },\n _a[PERCENT] = {},\n _a)))(params);\n}\n/**\n * 统计指标文档\n * @param params\n */\nfunction statistic(params, updated) {\n var chart = params.chart, options = params.options;\n var statistic = options.statistic, percent = options.percent;\n // 先清空标注,再重新渲染\n chart.getController('annotation').clear(true);\n if (statistic) {\n var contentOption = statistic.content;\n var transformContent = void 0;\n // 当设置 content 的时候,设置默认样式\n if (contentOption) {\n transformContent = deepAssign({}, {\n content: (percent * 100).toFixed(2) + \"%\",\n style: {\n opacity: 0.75,\n fontSize: '30px',\n lineHeight: 1,\n textAlign: 'center',\n color: 'rgba(44,53,66,0.85)',\n },\n }, contentOption);\n }\n renderGaugeStatistic(chart, { statistic: __assign(__assign({}, statistic), { content: transformContent }) }, { percent: percent });\n }\n if (updated) {\n chart.render(true);\n }\n return params;\n}\n/**\n * other 配置\n * @param params\n */\nfunction other(params) {\n var chart = params.chart;\n chart.legend(false);\n chart.tooltip(false);\n return params;\n}\n/**\n * 对外暴露的 adaptor\n */\nexport { statistic };\n/**\n * 图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return flow(theme, \n // animation 配置必须在 createView 之前,不然无法让子 View 生效\n animation, geometry, meta, statistic, interaction, annotation(), other\n // ... 其他的 adaptor flow\n )(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __assign, __rest, __spreadArrays } from \"tslib\";\nimport { uniq, isFunction, isObject, isString, isNumber, isEmpty } from '@antv/util';\nimport { transformLabel } from '../../utils';\n/**\n * 获得映射的字段列表\n * @param options\n * @param field\n */\nexport function getMappingField(o, field) {\n var type = o.type, xField = o.xField, yField = o.yField, colorField = o.colorField, shapeField = o.shapeField, sizeField = o.sizeField, styleField = o.styleField, _a = o.rawFields, rawFields = _a === void 0 ? [] : _a;\n var fields = [];\n // 因为 color 会影响到数据分组,以及最后的图形映射。所以导致 bar 图中的 widthRatio 设置不生效\n // 所以对于 color 字段,仅仅保留 colorField 好了! + rawFields\n // shape, size 同理\n if (field === 'color') {\n fields = __spreadArrays([colorField || xField], rawFields);\n }\n else if (field === 'shape') {\n fields = __spreadArrays([shapeField || xField], rawFields);\n }\n else if (field === 'size') {\n fields = __spreadArrays([sizeField || xField], rawFields);\n }\n else {\n fields = __spreadArrays([xField, yField, colorField, shapeField, sizeField, styleField], rawFields);\n // 一定能找到的!\n var idx = ['x', 'y', 'color', 'shape', 'size', 'style'].indexOf(field);\n var f = fields[idx];\n // 删除当前字段\n fields.splice(idx, 1);\n // 插入到第一个\n fields.unshift(f);\n }\n var mappingFields = uniq(fields.filter(function (f) { return !!f; }));\n /**\n * 修复 line geometry 无拆分时 color 回调错误\n * eg:\n * geometry.color(xField, ()=> '#f24')\n */\n var tileMappingField = type === 'line' && [xField, yField].includes(mappingFields.join('*')) ? '' : mappingFields.join('*');\n return {\n mappingFields: mappingFields,\n tileMappingField: tileMappingField,\n };\n}\n/**\n * 获得映射函数\n * @param mappingFields\n * @param func\n */\nexport function getMappingFunction(mappingFields, func) {\n if (!func)\n return undefined;\n // 返回函数\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var params = {};\n mappingFields.forEach(function (f, idx) {\n params[f] = args[idx];\n });\n // 删除 undefined\n delete params['undefined'];\n return func(params);\n };\n}\n/**\n * 通用 geometry 的配置处理的 adaptor\n * @param params\n */\nexport function geometry(params) {\n var chart = params.chart, options = params.options;\n var type = options.type, args = options.args, mapping = options.mapping, xField = options.xField, yField = options.yField, colorField = options.colorField, shapeField = options.shapeField, sizeField = options.sizeField, tooltipFields = options.tooltipFields, label = options.label, state = options.state, customInfo = options.customInfo;\n // 如果没有 mapping 信息,那么直接返回\n if (!mapping) {\n return params;\n }\n var color = mapping.color, shape = mapping.shape, size = mapping.size, style = mapping.style, tooltip = mapping.tooltip;\n // 创建 geometry\n var geometry = chart[type](args).position(xField + \"*\" + yField);\n /**\n * color 的几种情况\n * g.color('red');\n * g.color('color', ['red', 'blue']);\n * g.color('x', (x, y) => 'red');\n * g.color('color', (color, x, y) => 'red');\n */\n if (isString(color)) {\n colorField ? geometry.color(colorField, color) : geometry.color(color);\n }\n else if (isFunction(color)) {\n var _a = getMappingField(options, 'color'), mappingFields = _a.mappingFields, tileMappingField = _a.tileMappingField;\n geometry.color(tileMappingField, getMappingFunction(mappingFields, color));\n }\n else {\n colorField && geometry.color(colorField, color);\n }\n /**\n * shape 的几种情况\n * g.shape('rect');\n * g.shape('shape', ['rect', 'circle']);\n * g.shape('x*y', (x, y) => 'rect');\n * g.shape('shape*x*y', (shape, x, y) => 'rect');\n */\n if (isString(shape)) {\n shapeField ? geometry.shape(shapeField, [shape]) : geometry.shape(shape); // [shape] 需要在 G2 做掉\n }\n else if (isFunction(shape)) {\n var _b = getMappingField(options, 'shape'), mappingFields = _b.mappingFields, tileMappingField = _b.tileMappingField;\n geometry.shape(tileMappingField, getMappingFunction(mappingFields, shape));\n }\n else {\n shapeField && geometry.shape(shapeField, shape);\n }\n /**\n * size 的几种情况\n * g.size(10);\n * g.size('size', [10, 20]);\n * g.size('x*y', (x, y) => 10);\n * g.color('size*x*y', (size, x, y) => 1-);\n */\n if (isNumber(size)) {\n sizeField ? geometry.size(sizeField, size) : geometry.size(size);\n }\n else if (isFunction(size)) {\n var _c = getMappingField(options, 'size'), mappingFields = _c.mappingFields, tileMappingField = _c.tileMappingField;\n geometry.size(tileMappingField, getMappingFunction(mappingFields, size));\n }\n else {\n sizeField && geometry.size(sizeField, size);\n }\n /**\n * style 的几种情况\n * g.style({ fill: 'red' });\n * g.style('x*y*color', (x, y, color) => ({ fill: 'red' }));\n */\n if (isFunction(style)) {\n var _d = getMappingField(options, 'style'), mappingFields = _d.mappingFields, tileMappingField = _d.tileMappingField;\n geometry.style(tileMappingField, getMappingFunction(mappingFields, style));\n }\n else if (isObject(style)) {\n geometry.style(style);\n }\n /**\n * tooltip 的 API\n * g.tooltip('x*y*color', (x, y, color) => ({ name, value }));\n * g.tooltip(false);\n */\n if (tooltipFields === false) {\n geometry.tooltip(false);\n }\n else if (!isEmpty(tooltipFields)) {\n geometry.tooltip(tooltipFields.join('*'), getMappingFunction(tooltipFields, tooltip));\n }\n /**\n * label 的映射\n */\n if (label === false) {\n geometry.label(false);\n }\n else if (label) {\n var callback = label.callback, fields = label.fields, cfg = __rest(label, [\"callback\", \"fields\"]);\n geometry.label({\n fields: fields || [yField],\n callback: callback,\n cfg: transformLabel(cfg),\n });\n }\n /**\n * state 状态样式\n */\n if (state) {\n geometry.state(state);\n }\n /**\n * 自定义信息\n */\n if (customInfo) {\n geometry.customInfo(customInfo);\n }\n // 防止因为 x y 字段做了通道映射,导致生成图例\n [xField, yField]\n .filter(function (f) { return f !== colorField; })\n .forEach(function (f) {\n chart.legend(f, false);\n });\n return __assign(__assign({}, params), { \n // geometry adaptor 额外需要做的事情,就是将创建好的 geometry 返回到下一层 adaptor,防止通过 type 查询的时候容易误判\n ext: { geometry: geometry } });\n}\n//# sourceMappingURL=base.js.map","import { __assign } from \"tslib\";\nimport { regressionLinear, regressionExp, regressionLoess, regressionLog, regressionPoly, regressionPow, regressionQuad, } from 'd3-regression';\nimport { isArray, get, isNumber } from '@antv/util';\nimport { getSplinePath } from '../../utils';\nvar REGRESSION_MAP = {\n exp: regressionExp,\n linear: regressionLinear,\n loess: regressionLoess,\n log: regressionLog,\n poly: regressionPoly,\n pow: regressionPow,\n quad: regressionQuad,\n};\n/**\n * 获取四象限默认配置\n * @param {number} xBaseline\n * @param {number} yBaseline\n */\nexport function getQuadrantDefaultConfig(xBaseline, yBaseline) {\n // 文本便宜距离\n var textOffset = 10;\n // 四象限默认样式\n var defaultConfig = {\n regionStyle: [\n {\n position: {\n start: [xBaseline, 'max'],\n end: ['max', yBaseline],\n },\n style: {\n fill: '#d8d0c0',\n opacity: 0.4,\n },\n },\n {\n position: {\n start: ['min', 'max'],\n end: [xBaseline, yBaseline],\n },\n style: {\n fill: '#a3dda1',\n opacity: 0.4,\n },\n },\n {\n position: {\n start: ['min', yBaseline],\n end: [xBaseline, 'min'],\n },\n style: {\n fill: '#d8d0c0',\n opacity: 0.4,\n },\n },\n {\n position: {\n start: [xBaseline, yBaseline],\n end: ['max', 'min'],\n },\n style: {\n fill: '#a3dda1',\n opacity: 0.4,\n },\n },\n ],\n lineStyle: {\n stroke: '#9ba29a',\n lineWidth: 1,\n },\n labelStyle: [\n {\n position: ['max', yBaseline],\n offsetX: -textOffset,\n offsetY: -textOffset,\n style: {\n textAlign: 'right',\n textBaseline: 'bottom',\n fontSize: 14,\n fill: '#ccc',\n },\n },\n {\n position: ['min', yBaseline],\n offsetX: textOffset,\n offsetY: -textOffset,\n style: {\n textAlign: 'left',\n textBaseline: 'bottom',\n fontSize: 14,\n fill: '#ccc',\n },\n },\n {\n position: ['min', yBaseline],\n offsetX: textOffset,\n offsetY: textOffset,\n style: {\n textAlign: 'left',\n textBaseline: 'top',\n fontSize: 14,\n fill: '#ccc',\n },\n },\n {\n position: ['max', yBaseline],\n offsetX: -textOffset,\n offsetY: textOffset,\n style: {\n textAlign: 'right',\n textBaseline: 'top',\n fontSize: 14,\n fill: '#ccc',\n },\n },\n ],\n };\n return defaultConfig;\n}\nvar splinePath = function (data, config) {\n var view = config.view, _a = config.options, xField = _a.xField, yField = _a.yField;\n var xScaleView = view.getScaleByField(xField);\n var yScaleView = view.getScaleByField(yField);\n var pathData = data.map(function (d) {\n return view.getCoordinate().convert({ x: xScaleView.scale(d[0]), y: yScaleView.scale(d[1]) });\n });\n return getSplinePath(pathData, false);\n};\nexport var getPath = function (config) {\n var options = config.options;\n var xField = options.xField, yField = options.yField, data = options.data, regressionLine = options.regressionLine;\n var _a = regressionLine.type, type = _a === void 0 ? 'linear' : _a, algorithm = regressionLine.algorithm;\n var pathData;\n if (algorithm) {\n pathData = isArray(algorithm) ? algorithm : algorithm(data);\n }\n else {\n var reg = REGRESSION_MAP[type]()\n .x(function (d) { return d[xField]; })\n .y(function (d) { return d[yField]; });\n pathData = reg(data);\n }\n return splinePath(pathData, config);\n};\n/**\n * 调整散点图 meta: { min, max } ① data.length === 1 ② 所有数据 y 值相等 ③ 所有数据 x 值相等\n * @param options\n * @returns\n */\nexport var getMeta = function (options) {\n var _a;\n var _b = options.meta, meta = _b === void 0 ? {} : _b, xField = options.xField, yField = options.yField, data = options.data;\n var xFieldValue = data[0][xField];\n var yFieldValue = data[0][yField];\n var xIsPositiveNumber = xFieldValue > 0;\n var yIsPositiveNumber = yFieldValue > 0;\n /**\n * 获得对应字段的 min max scale 配置\n */\n function getMetaMinMax(field, axis) {\n var fieldMeta = get(meta, [field]);\n function getCustomValue(type) {\n return get(fieldMeta, type);\n }\n var range = {};\n if (axis === 'x') {\n if (isNumber(xFieldValue)) {\n if (!isNumber(getCustomValue('min'))) {\n range['min'] = xIsPositiveNumber ? 0 : xFieldValue * 2;\n }\n if (!isNumber(getCustomValue('max'))) {\n range['max'] = xIsPositiveNumber ? xFieldValue * 2 : 0;\n }\n }\n return range;\n }\n if (isNumber(yFieldValue)) {\n if (!isNumber(getCustomValue('min'))) {\n range['min'] = yIsPositiveNumber ? 0 : yFieldValue * 2;\n }\n if (!isNumber(getCustomValue('max'))) {\n range['max'] = yIsPositiveNumber ? yFieldValue * 2 : 0;\n }\n }\n return range;\n }\n return __assign(__assign({}, meta), (_a = {}, _a[xField] = __assign(__assign({}, meta[xField]), getMetaMinMax(xField, 'x')), _a[yField] = __assign(__assign({}, meta[yField]), getMetaMinMax(yField, 'y')), _a));\n};\n//# sourceMappingURL=util.js.map","import { __assign, __rest } from \"tslib\";\nimport { isNumber } from '@antv/util';\nimport { flow, deepAssign, pick } from '../../utils';\nimport { point } from '../../adaptor/geometries';\nimport { brushInteraction } from '../../adaptor/brush';\nimport { interaction, animation, theme, scale, annotation, slider, scrollbar } from '../../adaptor/common';\nimport { findGeometry, transformLabel } from '../../utils';\nimport { getQuadrantDefaultConfig, getPath, getMeta } from './util';\n/**\n * 散点图默认美观\n * ① data.length === 1 ② 所有数据 y 值相等 ③ 所有数据 x 值相等\n * @param params\n * @returns params\n */\nexport function transformOptions(options) {\n var _a = options.data, data = _a === void 0 ? [] : _a, xField = options.xField, yField = options.yField;\n if (data.length) {\n // x y 字段知否只有一个值,如果只有一个值,则进行优化\n var isOneX = true;\n var isOneY = true;\n var prev = data[0];\n var curr = void 0;\n for (var i = 1; i < data.length; i++) {\n curr = data[i];\n if (prev[xField] !== curr[xField]) {\n isOneX = false;\n }\n if (prev[yField] !== curr[yField]) {\n isOneY = false;\n }\n // 如果都不是 oneValue,那么可提前跳出循环\n if (!isOneX && !isOneY) {\n break;\n }\n prev = curr;\n }\n var keys = [];\n isOneX && keys.push(xField);\n isOneY && keys.push(yField);\n var meta_1 = pick(getMeta(options), keys);\n return deepAssign({}, options, { meta: meta_1 });\n }\n return options;\n}\n/**\n * 字段\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var data = options.data, type = options.type, color = options.color, shape = options.shape, pointStyle = options.pointStyle, shapeField = options.shapeField, colorField = options.colorField, xField = options.xField, yField = options.yField, sizeField = options.sizeField;\n var size = options.size;\n var tooltip = options.tooltip;\n if (sizeField) {\n if (!size) {\n size = [2, 8];\n }\n if (isNumber(size)) {\n size = [size, size];\n }\n }\n if (tooltip && !tooltip.fields) {\n tooltip = __assign(__assign({}, tooltip), { fields: [xField, yField, colorField, sizeField, shapeField] });\n }\n // 数据\n chart.data(data);\n // geometry\n point(deepAssign({}, params, {\n options: {\n seriesField: colorField,\n point: {\n color: color,\n shape: shape,\n size: size,\n style: pointStyle,\n },\n tooltip: tooltip,\n },\n }));\n var geometry = findGeometry(chart, 'point');\n // 数据调整\n if (type) {\n geometry.adjust(type);\n }\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\nexport function meta(params) {\n var _a;\n var options = params.options;\n var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n var newOptions = transformOptions(options);\n return flow(scale((_a = {},\n _a[xField] = xAxis,\n _a[yField] = yAxis,\n _a)))(deepAssign({}, params, { options: newOptions }));\n}\n/**\n * axis 配置\n * @param params\n */\nfunction axis(params) {\n var chart = params.chart, options = params.options;\n var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n chart.axis(xField, xAxis);\n chart.axis(yField, yAxis);\n return params;\n}\n/**\n * legend 配置\n * @param params\n */\nfunction legend(params) {\n var chart = params.chart, options = params.options;\n var legend = options.legend, colorField = options.colorField, shapeField = options.shapeField, sizeField = options.sizeField, shapeLegend = options.shapeLegend, sizeLegend = options.sizeLegend;\n /** legend 不为 false, 则展示图例, 优先展示 color 分类图例 */\n var showLegend = legend !== false;\n if (colorField) {\n chart.legend(colorField, showLegend ? legend : false);\n }\n // 优先取 shapeLegend, 否则取 legend\n if (shapeField) {\n if (shapeLegend) {\n chart.legend(shapeField, shapeLegend);\n }\n else {\n chart.legend(shapeField, shapeLegend === false ? false : legend);\n }\n }\n if (sizeField) {\n chart.legend(sizeField, sizeLegend ? sizeLegend : false);\n }\n /** 默认不展示 shape 图例,当 shapeLegend 为 undefined 也不展示图例 */\n /** 默认没有 sizeField,则隐藏连续图例 */\n if (!showLegend && !shapeLegend && !sizeLegend) {\n chart.legend(false);\n }\n return params;\n}\n/**\n * 数据标签\n * @param params\n */\nfunction label(params) {\n var chart = params.chart, options = params.options;\n var label = options.label, yField = options.yField;\n var scatterGeometry = findGeometry(chart, 'point');\n // label 为 false, 空 则不显示 label\n if (!label) {\n scatterGeometry.label(false);\n }\n else {\n var callback = label.callback, cfg = __rest(label, [\"callback\"]);\n scatterGeometry.label({\n fields: [yField],\n callback: callback,\n cfg: transformLabel(cfg),\n });\n }\n return params;\n}\n/**\n * annotation 配置\n * - 特殊 annotation: quadrant(四象限)\n * @param params\n */\nfunction scatterAnnotation(params) {\n var options = params.options;\n var quadrant = options.quadrant;\n var annotationOptions = [];\n if (quadrant) {\n var _a = quadrant.xBaseline, xBaseline = _a === void 0 ? 0 : _a, _b = quadrant.yBaseline, yBaseline = _b === void 0 ? 0 : _b, labels_1 = quadrant.labels, regionStyle_1 = quadrant.regionStyle, lineStyle = quadrant.lineStyle;\n var defaultConfig_1 = getQuadrantDefaultConfig(xBaseline, yBaseline);\n // 仅支持四象限\n var quadrants = new Array(4).join(',').split(',');\n quadrants.forEach(function (_, index) {\n annotationOptions.push(__assign(__assign({ type: 'region', top: false }, defaultConfig_1.regionStyle[index].position), { style: deepAssign({}, defaultConfig_1.regionStyle[index].style, regionStyle_1 === null || regionStyle_1 === void 0 ? void 0 : regionStyle_1[index]) }), __assign({ type: 'text', top: true }, deepAssign({}, defaultConfig_1.labelStyle[index], labels_1 === null || labels_1 === void 0 ? void 0 : labels_1[index])));\n });\n // 生成坐标轴\n annotationOptions.push({\n type: 'line',\n top: false,\n start: ['min', yBaseline],\n end: ['max', yBaseline],\n style: deepAssign({}, defaultConfig_1.lineStyle, lineStyle),\n }, {\n type: 'line',\n top: false,\n start: [xBaseline, 'min'],\n end: [xBaseline, 'max'],\n style: deepAssign({}, defaultConfig_1.lineStyle, lineStyle),\n });\n }\n return flow(annotation(annotationOptions))(params);\n}\n// 趋势线\nfunction regressionLine(params) {\n var options = params.options, chart = params.chart;\n var regressionLine = options.regressionLine;\n if (regressionLine) {\n var style_1 = regressionLine.style, _a = regressionLine.top, top_1 = _a === void 0 ? false : _a;\n var defaultStyle_1 = {\n stroke: '#9ba29a',\n lineWidth: 2,\n opacity: 0.5,\n };\n chart.annotation().shape({\n top: top_1,\n render: function (container, view) {\n var group = container.addGroup({\n id: chart.id + \"-regression-line\",\n name: 'regression-line-group',\n });\n var path = getPath({\n view: view,\n options: options,\n });\n group.addShape('path', {\n name: 'regression-line',\n attrs: __assign(__assign({ path: path }, defaultStyle_1), style_1),\n });\n },\n });\n }\n return params;\n}\n/**\n * tooltip 配置\n * @param params\n */\nexport function tooltip(params) {\n var chart = params.chart, options = params.options;\n var tooltip = options.tooltip;\n if (tooltip) {\n chart.tooltip(tooltip);\n }\n else if (tooltip === false) {\n chart.tooltip(false);\n }\n return params;\n}\n/**\n * 散点图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return flow(geometry, meta, axis, legend, tooltip, label, \n // 需要在 interaction 前面\n brushInteraction, slider, scrollbar, interaction, scatterAnnotation, animation, theme, regressionLine)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\n/**\n * 折线图默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n tooltip: {\n shared: true,\n showMarkers: true,\n showCrosshairs: true,\n crosshairs: {\n type: 'x',\n },\n },\n legend: {\n position: 'top-left',\n radio: {},\n },\n isStack: false,\n});\n//# sourceMappingURL=constants.js.map","import { __extends } from \"tslib\";\nimport { each, findIndex } from '@antv/util';\nimport { InteractionAction } from '@antv/g2';\nvar MarkerActiveAction = /** @class */ (function (_super) {\n __extends(MarkerActiveAction, _super);\n function MarkerActiveAction() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n MarkerActiveAction.prototype.active = function () {\n var view = this.getView();\n var evt = this.context.event;\n if (evt.data) {\n // items: 数组对象,当前 tooltip 显示的每条内容\n var items_1 = evt.data.items;\n var points = view.geometries.filter(function (geom) { return geom.type === 'point'; });\n each(points, function (point) {\n each(point.elements, function (element) {\n var active = findIndex(items_1, function (item) { return item.data === element.data; }) !== -1;\n element.setState('active', active);\n });\n });\n }\n };\n MarkerActiveAction.prototype.reset = function () {\n var view = this.getView();\n var points = view.geometries.filter(function (geom) { return geom.type === 'point'; });\n each(points, function (point) {\n each(point.elements, function (element) {\n element.setState('active', false);\n });\n });\n };\n MarkerActiveAction.prototype.getView = function () {\n return this.context.view;\n };\n return MarkerActiveAction;\n}(InteractionAction));\nexport { MarkerActiveAction };\n//# sourceMappingURL=marker-active.js.map","import { registerAction, registerInteraction } from '@antv/g2';\nimport { MarkerActiveAction } from './marker-active';\nregisterAction('marker-active', MarkerActiveAction);\nregisterInteraction('marker-active', {\n start: [\n {\n trigger: 'tooltip:show',\n action: 'marker-active:active',\n },\n ],\n end: [\n {\n trigger: 'tooltip:hide',\n action: 'marker-active:reset',\n },\n ],\n});\n//# sourceMappingURL=index.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor, meta } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constants';\nimport './interactions';\nvar Line = /** @class */ (function (_super) {\n __extends(Line, _super);\n function Line() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'line';\n return _this;\n }\n /**\n * 获取 折线图 默认配置项\n * 供外部使用\n */\n Line.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n /**\n * @override\n * @param data\n */\n Line.prototype.changeData = function (data) {\n this.updateOption({ data: data });\n var _a = this, chart = _a.chart, options = _a.options;\n meta({ chart: chart, options: options });\n this.chart.changeData(data);\n };\n /**\n * 获取 折线图 默认配置\n */\n Line.prototype.getDefaultOptions = function () {\n return Line.getDefaultOptions();\n };\n /**\n * 获取 折线图 的适配器\n */\n Line.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Line;\n}(Plot));\nexport { Line };\n//# sourceMappingURL=index.js.map","import { __assign } from \"tslib\";\nimport { registerShape } from '@antv/g2';\n// 自定义Shape 部分\nregisterShape('point', 'gauge-indicator', {\n draw: function (cfg, container) {\n // 使用 customInfo 传递参数\n var _a = cfg.customInfo, indicator = _a.indicator, defaultColor = _a.defaultColor;\n var _b = indicator, pointer = _b.pointer, pin = _b.pin;\n var group = container.addGroup();\n // 获取极坐标系下画布中心点\n var center = this.parsePoint({ x: 0, y: 0 });\n // 绘制指针\n if (pointer) {\n // pointer\n group.addShape('line', {\n name: 'pointer',\n attrs: __assign({ x1: center.x, y1: center.y, x2: cfg.x, y2: cfg.y, stroke: defaultColor }, pointer.style),\n });\n }\n // pin\n if (pin) {\n group.addShape('circle', {\n name: 'pin',\n attrs: __assign({ x: center.x, y: center.y, stroke: defaultColor }, pin.style),\n });\n }\n return group;\n },\n});\n//# sourceMappingURL=indicator.js.map","import { registerShape, Util } from '@antv/g2';\nimport { clamp } from '@antv/util';\n/**\n * 自定义 Shape 部分: 自定义米轨仪表盘\n * 定义 STEP, STEP_RATIO. 可绘制区域: 1 / (STEP + 1) * i -> 1 / (STEP + 1) * i + (STEP_RATIO / (STEP + 1))\n */\nregisterShape('interval', 'meter-gauge', {\n draw: function (cfg, container) {\n // 使用 customInfo 传递参数\n var _a = cfg.customInfo.meter, meter = _a === void 0 ? {} : _a;\n var _b = meter.steps, STEP = _b === void 0 ? 50 : _b, _c = meter.stepRatio, STEP_RATIO = _c === void 0 ? 0.5 : _c;\n STEP = STEP < 1 ? 1 : STEP;\n // stepRatio 取值范围: (0, 1]\n STEP_RATIO = clamp(STEP_RATIO, 0, 1);\n var _d = this.coordinate, COORD_START_ANGLE = _d.startAngle, COORD_END_ANGLE = _d.endAngle;\n var GAP = 0;\n if (STEP_RATIO > 0 && STEP_RATIO < 1) {\n var TOTAL = COORD_END_ANGLE - COORD_START_ANGLE;\n GAP = TOTAL / STEP / (STEP_RATIO / (1 - STEP_RATIO) + 1 - 1 / STEP);\n }\n var INTERVAL = (GAP / (1 - STEP_RATIO)) * STEP_RATIO;\n var group = container.addGroup();\n // 绘制图形的时候,留下 gap\n var center = this.coordinate.getCenter();\n var radius = this.coordinate.getRadius();\n var _e = Util.getAngle(cfg, this.coordinate), START_ANGLE = _e.startAngle, END_ANGLE = _e.endAngle;\n for (var startAngle = START_ANGLE; startAngle < END_ANGLE;) {\n var endAngle = void 0;\n var r = (startAngle - COORD_START_ANGLE) % (INTERVAL + GAP);\n if (r < INTERVAL) {\n endAngle = startAngle + (INTERVAL - r);\n }\n else {\n startAngle += INTERVAL + GAP - r;\n endAngle = startAngle + INTERVAL;\n }\n var path = Util.getSectorPath(center.x, center.y, radius, startAngle, Math.min(endAngle, END_ANGLE), radius * this.coordinate.innerRadius);\n group.addShape('path', {\n name: 'meter-gauge',\n attrs: {\n path: path,\n fill: cfg.color,\n stroke: cfg.color,\n lineWidth: 0.5,\n },\n });\n startAngle = endAngle + GAP;\n }\n return group;\n },\n});\n//# sourceMappingURL=meter-gauge.js.map","import { __extends } from \"tslib\";\nimport { VIEW_LIFE_CIRCLE, Event } from '@antv/g2';\nimport { Plot } from '../../core/plot';\nimport { adaptor, statistic } from './adaptor';\nimport { INDICATEOR_VIEW_ID, RANGE_VIEW_ID, DEFAULT_OPTIONS } from './constants';\nimport { getIndicatorData, getRangeData } from './utils';\n// 注册 shape\nimport './shapes/indicator';\nimport './shapes/meter-gauge';\n/**\n * 仪表盘\n */\nvar Gauge = /** @class */ (function (_super) {\n __extends(Gauge, _super);\n function Gauge() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'gauge';\n return _this;\n }\n /**\n * 获取 仪表盘 默认配置项\n * 供外部使用\n */\n Gauge.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n /**\n * 更新数据\n * @param percent\n */\n Gauge.prototype.changeData = function (percent) {\n this.chart.emit(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, Event.fromData(this.chart, VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, null));\n this.updateOption({ percent: percent });\n var indicatorView = this.chart.views.find(function (v) { return v.id === INDICATEOR_VIEW_ID; });\n if (indicatorView) {\n indicatorView.data(getIndicatorData(percent));\n }\n var rangeView = this.chart.views.find(function (v) { return v.id === RANGE_VIEW_ID; });\n if (rangeView) {\n rangeView.data(getRangeData(percent, this.options.range));\n }\n // todo 后续让 G2 层在 afterrender 之后,来重绘 annotations\n statistic({ chart: this.chart, options: this.options }, true);\n this.chart.emit(VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, Event.fromData(this.chart, VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, null));\n };\n /**\n * 获取默认配置\n * 供 base 使用\n */\n Gauge.prototype.getDefaultOptions = function () {\n return Gauge.getDefaultOptions();\n };\n /**\n * 获取适配器\n */\n Gauge.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Gauge;\n}(Plot));\nexport { Gauge };\n//# sourceMappingURL=index.js.map","import { __assign } from \"tslib\";\nimport { tooltip } from '../../adaptor/common';\nimport { deepAssign, flow } from '../../utils';\nimport { adaptor as columnAdaptor } from '../column/adaptor';\nexport { meta } from '../column/adaptor';\n/**\n * 处理默认配置项\n * 1. switch xField、 yField\n * 2. switch xAxis、 yAxis and adjust axis.position configuration\n */\nfunction defaultOptions(params) {\n var options = params.options;\n var xField = options.xField, yField = options.yField, xAxis = options.xAxis, yAxis = options.yAxis;\n var position = {\n left: 'bottom',\n right: 'top',\n top: 'left',\n bottom: 'right',\n };\n var verticalAxis = yAxis !== false\n ? __assign({ position: position[(yAxis === null || yAxis === void 0 ? void 0 : yAxis.position) || 'left'] }, yAxis) : false;\n var horizontalAxis = xAxis !== false\n ? __assign({ position: position[(xAxis === null || xAxis === void 0 ? void 0 : xAxis.position) || 'bottom'] }, xAxis) : false;\n return __assign(__assign({}, params), { options: __assign(__assign({}, options), { xField: yField, yField: xField, \n // 条形图 xAxis,yAxis 不可以做 deepAssign\n xAxis: verticalAxis, yAxis: horizontalAxis }) });\n}\n/**\n * label 适配器\n * @param params\n */\nfunction label(params) {\n var options = params.options;\n var label = options.label;\n // label of bar charts default position is left, if plot has label\n if (label && !label.position) {\n label.position = 'left';\n // 配置默认的 label layout: 如果用户没有指定 layout 和 position, 则自动配置 layout\n if (!label.layout) {\n label.layout = [\n { type: 'interval-adjust-position' },\n { type: 'interval-hide-overlap' },\n { type: 'adjust-color' },\n { type: 'limit-in-plot', cfg: { action: 'hide' } },\n ];\n }\n }\n return deepAssign({}, params, { options: { label: label } });\n}\n/**\n * legend 适配器\n * @param params\n */\nfunction legend(params) {\n var options = params.options;\n // 默认 legend 位置\n var seriesField = options.seriesField, isStack = options.isStack;\n var legend = options.legend;\n if (seriesField) {\n if (legend !== false) {\n legend = __assign({ position: isStack ? 'top-left' : 'right-top' }, (legend || {}));\n }\n }\n else {\n legend = false;\n }\n return deepAssign({}, params, { options: { legend: legend } });\n}\n/**\n * coordinate 适配器\n * @param params\n */\nfunction coordinate(params) {\n var chart = params.chart;\n // transpose column to bar 对角变换 & y 方向镜像变换\n chart.coordinate({ actions: [['transpose'], ['reflect', 'y']] });\n return params;\n}\n/**\n * 柱形图适配器\n * @param params\n */\nexport function geometry(params) {\n var chart = params.chart, options = params.options;\n var barStyle = options.barStyle, barWidthRatio = options.barWidthRatio, minBarWidth = options.minBarWidth, maxBarWidth = options.maxBarWidth, barBackground = options.barBackground;\n return columnAdaptor({\n chart: chart,\n options: __assign(__assign({}, options), { \n // rename attrs as column\n columnStyle: barStyle, columnWidthRatio: barWidthRatio, minColumnWidth: minBarWidth, maxColumnWidth: maxBarWidth, columnBackground: barBackground }),\n }, true);\n}\n/**\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return flow(defaultOptions, label, legend, tooltip, coordinate, geometry)(params);\n}\n//# sourceMappingURL=adaptor.js.map","/**\n * 仪表盘默认配置项\n */\nexport var DEFAULT_OPTIONS = {\n percent: 0.2,\n innerRadius: 0.8,\n radius: 0.98,\n color: ['#FAAD14', '#E8EDF3'],\n statistic: {\n title: false,\n content: {\n style: {\n fontSize: '14px',\n fontWeight: 300,\n fill: '#4D4D4D',\n textAlign: 'center',\n textBaseline: 'middle',\n },\n },\n },\n animation: {},\n};\n//# sourceMappingURL=constants.js.map","import { __extends } from \"tslib\";\nimport { VIEW_LIFE_CIRCLE, Event } from '@antv/g2';\nimport { Plot } from '../../core/plot';\nimport { getProgressData } from '../progress/utils';\nimport { adaptor, statistic } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constants';\nvar RingProgress = /** @class */ (function (_super) {\n __extends(RingProgress, _super);\n function RingProgress() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'ring-process';\n return _this;\n }\n /**\n * 获取默认配置项\n * 供外部使用\n */\n RingProgress.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n /**\n * 更新数据\n * @param percent\n */\n RingProgress.prototype.changeData = function (percent) {\n this.chart.emit(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, Event.fromData(this.chart, VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, null));\n this.updateOption({ percent: percent });\n this.chart.data(getProgressData(percent));\n // todo 后续让 G2 层在 afterrender 之后,来重绘 annotations\n statistic({ chart: this.chart, options: this.options }, true);\n this.chart.emit(VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, Event.fromData(this.chart, VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, null));\n };\n RingProgress.prototype.getDefaultOptions = function () {\n return RingProgress.getDefaultOptions();\n };\n /**\n * 获取 环形进度图 的适配器\n */\n RingProgress.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return RingProgress;\n}(Plot));\nexport { RingProgress };\n//# sourceMappingURL=index.js.map","/**\n * 类似 lodash.flow 的方法\n * @param flows\n */\nexport function flow() {\n var flows = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n flows[_i] = arguments[_i];\n }\n return function (param) {\n return flows.reduce(function (result, f) {\n return f(result);\n }, param);\n };\n}\n//# sourceMappingURL=flow.js.map","import { reduce } from '@antv/util';\n/**\n * 简单的模板引擎,使用方式如下(空格自动忽略):\n * template('hello, {name}', { name: 'AntV' }); // hello, AntV\n * @param string\n * @param options\n */\nexport function template(source, data) {\n if (!data) {\n return source;\n }\n return reduce(\n // @ts-ignore\n data, function (r, v, k) { return r.replace(new RegExp(\"{\\\\s*\" + k + \"\\\\s*}\", 'g'), v); }, source);\n}\n//# sourceMappingURL=template.js.map","/**\n * get the element's bounding size\n * @param ele dom element\n * @returns the element width and height\n */\nexport function getContainerSize(ele) {\n if (!ele) {\n return { width: 0, height: 0 };\n }\n var style = getComputedStyle(ele);\n return {\n width: (ele.clientWidth || parseInt(style.width, 10)) -\n parseInt(style.paddingLeft, 10) -\n parseInt(style.paddingRight, 10),\n height: (ele.clientHeight || parseInt(style.height, 10)) -\n parseInt(style.paddingTop, 10) -\n parseInt(style.paddingBottom, 10),\n };\n}\n//# sourceMappingURL=dom.js.map","import { reduce, get } from '@antv/util';\n/**\n * 在 View 中查找第一个指定 type 类型的 geometry\n * @param view\n * @param type\n */\nexport function findGeometry(view, type) {\n return view.geometries.find(function (g) { return g.type === type; });\n}\n/**\n * 获取 View 的 所有 elements\n */\nexport function getAllElements(view) {\n return reduce(view.geometries, function (r, geometry) {\n return r.concat(geometry.elements);\n }, []);\n}\n/**\n * 递归获取 View 的 所有 elements, 包括 View 的子 View\n */\nexport function getAllElementsRecursively(view) {\n if (get(view, ['views', 'length'], 0) <= 0) {\n return getAllElements(view);\n }\n return reduce(view.views, function (ele, subView) {\n return ele.concat(getAllElementsRecursively(subView));\n }, getAllElements(view));\n}\n/**\n * 递归获取 View 的 所有 geometries, 包括 View 的子 View\n */\nexport function getAllGeometriesRecursively(view) {\n if (get(view, ['views', 'length'], 0) <= 0) {\n return view.geometries;\n }\n return reduce(view.views, function (ele, subView) {\n return ele.concat(subView.geometries);\n }, view.geometries);\n}\n//# sourceMappingURL=geometry.js.map","import { __assign } from \"tslib\";\nimport { isType } from '@antv/util';\n/**\n * 兼容 v1 label formatter\n * @param labelOptions\n */\nexport function transformLabel(labelOptions) {\n if (!isType(labelOptions, 'Object')) {\n return labelOptions;\n }\n var label = __assign({}, labelOptions);\n if (label.formatter && !label.content) {\n label.content = label.formatter;\n }\n return label;\n}\n//# sourceMappingURL=label.js.map","import { vec2 } from '@antv/matrix-util';\nexport function points2Path(points, isInCircle) {\n var path = [];\n if (points.length) {\n path.push(['M', points[0].x, points[0].y]);\n for (var i = 1, length_1 = points.length; i < length_1; i += 1) {\n var item = points[i];\n path.push(['L', item.x, item.y]);\n }\n if (isInCircle) {\n path.push(['Z']);\n }\n }\n return path;\n}\n/**\n * @ignore\n * 计算光滑的贝塞尔曲线\n */\nexport var smoothBezier = function (points, smooth, isLoop, constraint) {\n var cps = [];\n var prevPoint;\n var nextPoint;\n var hasConstraint = !!constraint;\n var min;\n var max;\n if (hasConstraint) {\n min = [Infinity, Infinity];\n max = [-Infinity, -Infinity];\n for (var i = 0, l = points.length; i < l; i++) {\n var point = points[i];\n min = vec2.min([0, 0], min, point);\n max = vec2.max([0, 0], max, point);\n }\n min = vec2.min([0, 0], min, constraint[0]);\n max = vec2.max([0, 0], max, constraint[1]);\n }\n for (var i = 0, len = points.length; i < len; i++) {\n var point = points[i];\n if (isLoop) {\n prevPoint = points[i ? i - 1 : len - 1];\n nextPoint = points[(i + 1) % len];\n }\n else {\n if (i === 0 || i === len - 1) {\n cps.push(point);\n continue;\n }\n else {\n prevPoint = points[i - 1];\n nextPoint = points[i + 1];\n }\n }\n var v = [0, 0];\n v = vec2.sub(v, nextPoint, prevPoint);\n v = vec2.scale(v, v, smooth);\n var d0 = vec2.distance(point, prevPoint);\n var d1 = vec2.distance(point, nextPoint);\n var sum = d0 + d1;\n if (sum !== 0) {\n d0 /= sum;\n d1 /= sum;\n }\n var v1 = vec2.scale([0, 0], v, -d0);\n var v2 = vec2.scale([0, 0], v, d1);\n var cp0 = vec2.add([0, 0], point, v1);\n var cp1 = vec2.add([0, 0], point, v2);\n if (hasConstraint) {\n cp0 = vec2.max([0, 0], cp0, min);\n cp0 = vec2.min([0, 0], cp0, max);\n cp1 = vec2.max([0, 0], cp1, min);\n cp1 = vec2.min([0, 0], cp1, max);\n }\n cps.push(cp0);\n cps.push(cp1);\n }\n if (isLoop) {\n cps.push(cps.shift());\n }\n return cps;\n};\n/**\n * @ignore\n * 贝塞尔曲线\n */\nexport function catmullRom2bezier(crp, z, constraint) {\n var isLoop = !!z;\n var pointList = [];\n for (var i = 0, l = crp.length; i < l; i += 2) {\n pointList.push([crp[i], crp[i + 1]]);\n }\n var controlPointList = smoothBezier(pointList, 0.4, isLoop, constraint);\n var len = pointList.length;\n var d1 = [];\n var cp1;\n var cp2;\n var p;\n for (var i = 0; i < len - 1; i++) {\n cp1 = controlPointList[i * 2];\n cp2 = controlPointList[i * 2 + 1];\n p = pointList[i + 1];\n d1.push(['C', cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]]);\n }\n if (isLoop) {\n cp1 = controlPointList[len];\n cp2 = controlPointList[len + 1];\n p = pointList[0];\n d1.push(['C', cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]]);\n }\n return d1;\n}\n/**\n * @ignore\n * 根据关键点获取限定了范围的平滑线\n */\nexport function getSplinePath(points, isInCircle, constaint) {\n var data = [];\n var first = points[0];\n var prePoint = null;\n if (points.length <= 2) {\n // 两点以内直接绘制成路径\n return points2Path(points, isInCircle);\n }\n for (var i = 0, len = points.length; i < len; i++) {\n var point = points[i];\n if (!prePoint || !(prePoint.x === point.x && prePoint.y === point.y)) {\n data.push(point.x);\n data.push(point.y);\n prePoint = point;\n }\n }\n var constraint = constaint || [\n // 范围\n [0, 0],\n [1, 1],\n ];\n var splinePath = catmullRom2bezier(data, isInCircle, constraint);\n splinePath.unshift(['M', first.x, first.y]);\n return splinePath;\n}\n//# sourceMappingURL=path.js.map","/**\n * @desc simple kebabCase like lodash\n *\n * kebabCase('fooBar'); => 'foo-bar'\n */\nexport function kebabCase(word) {\n if (!word) {\n return word;\n }\n var result = word.match(/(([A-Z]{0,1}[a-z]*[^A-Z])|([A-Z]{1}))/g);\n return result.map(function (s) { return s.toLowerCase(); }).join('-');\n}\n//# sourceMappingURL=kebab-case.js.map","var ctx;\n/**\n * 获取 canvas context\n */\nexport function getCanvasContext() {\n if (!ctx) {\n ctx = document.createElement('canvas').getContext('2d');\n }\n return ctx;\n}\n//# sourceMappingURL=context.js.map","import { __spreadArrays } from \"tslib\";\nimport { isString, memoize, values } from '@antv/util';\nimport { getCanvasContext } from './context';\n/**\n * 计算文本在画布中的宽度\n * @param text 文本\n * @param font 字体\n */\nexport var measureTextWidth = memoize(function (text, font) {\n if (font === void 0) { font = {}; }\n var fontSize = font.fontSize, _a = font.fontFamily, fontFamily = _a === void 0 ? 'sans-serif' : _a, fontWeight = font.fontWeight, fontStyle = font.fontStyle, fontVariant = font.fontVariant;\n var ctx = getCanvasContext();\n // @see https://developer.mozilla.org/zh-CN/docs/Web/CSS/font\n ctx.font = [fontStyle, fontWeight, fontVariant, fontSize + \"px\", fontFamily].join(' ');\n var metrics = ctx.measureText(isString(text) ? text : '');\n return metrics.width;\n}, function (text, font) {\n if (font === void 0) { font = {}; }\n return __spreadArrays([text], values(font)).join('');\n});\n//# sourceMappingURL=measure-text.js.map","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.x0 = x0, node.x1 = x1;\n node.y0 = y0, node.y1 = y0 += node.value * k;\n }\n}\n","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\n/**\n * 条形图默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n barWidthRatio: 0.6,\n marginRatio: 1 / 32,\n tooltip: {\n shared: true,\n showMarkers: false,\n offset: 20,\n },\n legend: {\n radio: {},\n },\n interactions: [{ type: 'active-region' }],\n});\n//# sourceMappingURL=constants.js.map","import { __assign, __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { getDataWhetherPecentage } from '../../utils/transform/percent';\nimport { adaptor, meta } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constants';\n/**\n * 条形图\n */\nvar Bar = /** @class */ (function (_super) {\n __extends(Bar, _super);\n function Bar() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'bar';\n return _this;\n }\n /**\n * 获取 条形图 默认配置项\n * 供外部使用\n */\n Bar.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n /**\n * @override\n */\n Bar.prototype.changeData = function (data) {\n this.updateOption({ data: data });\n var _a = this, chart = _a.chart, options = _a.options;\n var xField = options.xField, yField = options.yField, isPercent = options.isPercent;\n var switchedFieldOptions = __assign(__assign({}, options), { xField: yField, yField: xField });\n meta({ chart: chart, options: switchedFieldOptions });\n chart.changeData(getDataWhetherPecentage(data, xField, yField, xField, isPercent));\n };\n /**\n * 获取 条形图 默认配置\n */\n Bar.prototype.getDefaultOptions = function () {\n return Bar.getDefaultOptions();\n };\n /**\n * 获取 条形图 的适配器\n */\n Bar.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Bar;\n}(Plot));\nexport { Bar };\n//# sourceMappingURL=index.js.map","import { __extends } from \"tslib\";\nimport { each } from '@antv/util';\nimport { Plot } from '../../core/plot';\nimport { getAllElementsRecursively } from '../../utils';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS, FUNNEL_CONVERSATION as FUNNEL_CONVERSATION_FIELD, FUNNEL_PERCENT, FUNNEL_TOTAL_PERCENT, } from './constant';\nexport { FUNNEL_CONVERSATION_FIELD };\nvar Funnel = /** @class */ (function (_super) {\n __extends(Funnel, _super);\n function Funnel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'funnel';\n return _this;\n }\n Funnel.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n /**\n * 获取 漏斗图 默认配置项\n */\n Funnel.prototype.getDefaultOptions = function () {\n // 由于不同漏斗图 defaultOption 有部分逻辑不同,此处仅处理 core.getDefaultOptions 覆盖范围,funnel 的 defaulOption 为不分散逻辑统一写到 adaptor 的 defaultOption 中\n return Funnel.getDefaultOptions();\n };\n /**\n * 获取 漏斗图 的适配器\n */\n Funnel.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n /**\n * 设置状态\n * @param type 状态类型,支持 'active' | 'inactive' | 'selected' 三种\n * @param conditions 条件,支持数组\n * @param status 是否激活,默认 true\n */\n Funnel.prototype.setState = function (type, condition, status) {\n if (status === void 0) { status = true; }\n var elements = getAllElementsRecursively(this.chart);\n each(elements, function (ele) {\n if (condition(ele.getData())) {\n ele.setState(type, status);\n }\n });\n };\n /**\n * 获取状态\n */\n Funnel.prototype.getStates = function () {\n var elements = getAllElementsRecursively(this.chart);\n var stateObjects = [];\n each(elements, function (element) {\n var data = element.getData();\n var states = element.getStates();\n each(states, function (state) {\n stateObjects.push({ data: data, state: state, geometry: element.geometry, element: element });\n });\n });\n return stateObjects;\n };\n // 内部变量\n /** 漏斗 转化率 字段 */\n Funnel.CONVERSATION_FIELD = FUNNEL_CONVERSATION_FIELD;\n /** 漏斗 百分比 字段 */\n Funnel.PERCENT_FIELD = FUNNEL_PERCENT;\n /** 漏斗 总转换率百分比 字段 */\n Funnel.TOTAL_PERCENT_FIELD = FUNNEL_TOTAL_PERCENT;\n return Funnel;\n}(Plot));\nexport { Funnel };\n//# sourceMappingURL=index.js.map","import roundNode from \"./round.js\";\nimport squarify from \"./squarify.js\";\nimport {required} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nexport default function() {\n var tile = squarify,\n round = false,\n dx = 1,\n dy = 1,\n paddingStack = [0],\n paddingInner = constantZero,\n paddingTop = constantZero,\n paddingRight = constantZero,\n paddingBottom = constantZero,\n paddingLeft = constantZero;\n\n function treemap(root) {\n root.x0 =\n root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(node) {\n var p = paddingStack[node.depth],\n x0 = node.x0 + p,\n y0 = node.y0 + p,\n x1 = node.x1 - p,\n y1 = node.y1 - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n\n treemap.round = function(x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n\n treemap.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n\n treemap.tile = function(x) {\n return arguments.length ? (tile = required(x), treemap) : tile;\n };\n\n treemap.padding = function(x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n\n treemap.paddingInner = function(x) {\n return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\n };\n\n treemap.paddingOuter = function(x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n\n treemap.paddingTop = function(x) {\n return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\n };\n\n treemap.paddingRight = function(x) {\n return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\n };\n\n treemap.paddingBottom = function(x) {\n return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\n };\n\n treemap.paddingLeft = function(x) {\n return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\n };\n\n return treemap;\n}\n","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\nimport { CHILD_NODE_COUNT, NODE_ANCESTORS_FIELD, NODE_INDEX_FIELD } from '../../utils/hierarchy/util';\n/**\n * 祖先节点,非 root 根节点\n */\nexport var SUNBURST_ANCESTOR_FIELD = 'ancestor-node';\nexport var SUNBURST_Y_FIELD = 'value';\nexport var SUNBURST_PATH_FIELD = 'path';\n/** 默认的源字段 */\nexport var RAW_FIELDS = [\n SUNBURST_PATH_FIELD,\n NODE_INDEX_FIELD,\n NODE_ANCESTORS_FIELD,\n CHILD_NODE_COUNT,\n 'name',\n 'depth',\n 'height',\n];\n/**\n * 旭日图 默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n innerRadius: 0,\n radius: 0.85,\n // 分层配置\n hierarchyConfig: {\n // 数值字段,默认是 value(可配置)\n field: 'value',\n },\n // 组件\n tooltip: {\n shared: true,\n showMarkers: false,\n offset: 20,\n showTitle: false,\n },\n legend: false,\n // 样式设置\n sunburstStyle: {\n lineWidth: 0.5,\n stroke: '#FFF',\n },\n // 默认开启交互\n drilldown: { enabled: true },\n});\n//# sourceMappingURL=constant.js.map","import * as d3Hierarchy from 'd3-hierarchy';\nimport { assign, isArray, reduce, size } from '@antv/util';\nimport { getField, getAllNodes } from './util';\nvar DEFAULT_OPTIONS = {\n field: 'value',\n size: [1, 1],\n round: false,\n padding: 0,\n // 默认降序\n sort: function (a, b) { return b.value - a.value; },\n as: ['x', 'y'],\n // 是否忽略 parentValue, 当设置为 true 时,父节点的权重由子元素决定\n ignoreParentValue: true,\n};\nexport function partition(data, options) {\n options = assign({}, DEFAULT_OPTIONS, options);\n var as = options.as;\n if (!isArray(as) || as.length !== 2) {\n throw new TypeError('Invalid as: it must be an array with 2 strings (e.g. [ \"x\", \"y\" ])!');\n }\n var field;\n try {\n field = getField(options);\n }\n catch (e) {\n console.warn(e);\n }\n var partition = function (data) {\n return d3Hierarchy.partition().size(options.size).round(options.round).padding(options.padding)(\n /**\n * d3Hierarchy 布局中需指定 sum 函数计算 node 值,规则是:从当前 node 开始以 post-order traversal 的次序为当前节点以及每个后代节点调用指定的 value 函数,并返回当前 node。\n * for example:\n * { node: 'parent', value: 10, children: [{node: 'child1', value: 5}, {node: 'child2', value: 5}, ]}\n * parent 所得的计算值是 sum(node(parent)) + sum(node(child1)) + sum(node(child2))\n * sum 函数中,d 为用户传入的 data, children 为保留字段\n */\n d3Hierarchy\n .hierarchy(data)\n .sum(function (d) {\n return size(d.children)\n ? options.ignoreParentValue\n ? 0\n : d[field] - reduce(d.children, function (a, b) { return a + b[field]; }, 0)\n : d[field];\n })\n .sort(options.sort));\n };\n var root = partition(data);\n /*\n * points:\n * 3 2\n * 0 1\n */\n var x = as[0];\n var y = as[1];\n root.each(function (node) {\n var _a, _b;\n node[x] = [node.x0, node.x1, node.x1, node.x0];\n node[y] = [node.y1, node.y1, node.y0, node.y0];\n // 旭日图兼容下 旧版本\n node.name = node.name || ((_a = node.data) === null || _a === void 0 ? void 0 : _a.name) || ((_b = node.data) === null || _b === void 0 ? void 0 : _b.label);\n node.data.name = node.name;\n ['x0', 'x1', 'y0', 'y1'].forEach(function (prop) {\n if (as.indexOf(prop) === -1) {\n delete node[prop];\n }\n });\n });\n return getAllNodes(root);\n}\n//# sourceMappingURL=partition.js.map","import { __assign, __spreadArrays } from \"tslib\";\nimport { omit } from '@antv/util';\nimport { HIERARCHY_DATA_TRANSFORM_PARAMS } from '../../interactions/actions/drill-down';\nimport { pick } from '../../utils';\nimport { partition } from '../../utils/hierarchy/partition';\nimport { treemap } from '../../utils/hierarchy/treemap';\nimport { SUNBURST_ANCESTOR_FIELD, SUNBURST_PATH_FIELD } from './constant';\n/**\n * sunburst 处理数据\n * @param options\n */\nexport function transformData(options) {\n var data = options.data, colorField = options.colorField, rawFields = options.rawFields, _a = options.hierarchyConfig, hierarchyConfig = _a === void 0 ? {} : _a;\n var activeDepth = hierarchyConfig.activeDepth;\n var transform = {\n partition: partition,\n treemap: treemap,\n };\n // @ts-ignore 兼容旧版本,支持 seriesField 来作为 hierarchyConfig.field\n var seriesField = options.seriesField;\n // @ts-ignore 兼容旧版本,支持矩阵树图形状的旭日图\n var type = options.type || 'partition';\n var nodes = transform[type](data, __assign(__assign({ field: seriesField || 'value' }, omit(hierarchyConfig, ['activeDepth'])), { \n // @ts-ignore\n type: \"hierarchy.\" + type, as: ['x', 'y'] }));\n var result = [];\n nodes.forEach(function (node) {\n var _a;\n var _b, _c, _d, _e, _f;\n if (node.depth === 0) {\n return null;\n }\n if (activeDepth > 0 && node.depth > activeDepth) {\n return null;\n }\n var path = node.data.name;\n var ancestorNode = __assign({}, node);\n while (ancestorNode.depth > 1) {\n path = ((_b = ancestorNode.parent.data) === null || _b === void 0 ? void 0 : _b.name) + \" / \" + path;\n ancestorNode = ancestorNode.parent;\n }\n var nodeInfo = __assign(__assign(__assign({}, pick(node.data, __spreadArrays((rawFields || []), [hierarchyConfig.field]))), (_a = {}, _a[SUNBURST_PATH_FIELD] = path, _a[SUNBURST_ANCESTOR_FIELD] = ancestorNode.data.name, _a)), node);\n // note: 兼容旧版本\n if (seriesField) {\n nodeInfo[seriesField] = node.data[seriesField] || ((_d = (_c = node.parent) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d[seriesField]);\n }\n if (colorField) {\n nodeInfo[colorField] = node.data[colorField] || ((_f = (_e = node.parent) === null || _e === void 0 ? void 0 : _e.data) === null || _f === void 0 ? void 0 : _f[colorField]);\n }\n nodeInfo.ext = hierarchyConfig;\n nodeInfo[HIERARCHY_DATA_TRANSFORM_PARAMS] = { hierarchyConfig: hierarchyConfig, colorField: colorField, rawFields: rawFields };\n result.push(nodeInfo);\n });\n return result;\n}\n//# sourceMappingURL=utils.js.map","import { __assign, __rest, __spreadArrays } from \"tslib\";\nimport { isFunction, get, uniq } from '@antv/util';\nimport { polygon as polygonAdaptor } from '../../adaptor/geometries';\nimport { interaction as baseInteraction, animation, theme, annotation, scale, pattern, legend, } from '../../adaptor/common';\nimport { flow, findGeometry, transformLabel, deepAssign } from '../../utils';\nimport { getAdjustAppendPadding } from '../../utils/padding';\nimport { RAW_FIELDS, SUNBURST_ANCESTOR_FIELD, SUNBURST_PATH_FIELD, SUNBURST_Y_FIELD } from './constant';\nimport { transformData } from './utils';\n/**\n * geometry 配置处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var color = options.color, _a = options.colorField, colorField = _a === void 0 ? SUNBURST_ANCESTOR_FIELD : _a, sunburstStyle = options.sunburstStyle, _b = options.rawFields, rawFields = _b === void 0 ? [] : _b;\n var data = transformData(options);\n chart.data(data);\n // 特殊处理下样式,如果没有设置 fillOpacity 的时候,默认根据层级进行填充透明度\n var style;\n if (sunburstStyle) {\n style = function (datum) {\n return deepAssign({}, {\n fillOpacity: Math.pow(0.85, datum.depth),\n }, isFunction(sunburstStyle) ? sunburstStyle(datum) : sunburstStyle);\n };\n }\n // geometry\n polygonAdaptor(deepAssign({}, params, {\n options: {\n xField: 'x',\n yField: 'y',\n seriesField: colorField,\n rawFields: uniq(__spreadArrays(RAW_FIELDS, rawFields)),\n polygon: {\n color: color,\n style: style,\n },\n },\n }));\n return params;\n}\n/**\n * axis 配置\n * @param params\n */\nexport function axis(params) {\n var chart = params.chart;\n chart.axis(false);\n return params;\n}\n/**\n * 数据标签\n * @param params\n */\nfunction label(params) {\n var chart = params.chart, options = params.options;\n var label = options.label;\n var geometry = findGeometry(chart, 'polygon');\n // 默认不展示,undefined 也不展示\n if (!label) {\n geometry.label(false);\n }\n else {\n var _a = label.fields, fields = _a === void 0 ? ['name'] : _a, callback = label.callback, cfg = __rest(label, [\"fields\", \"callback\"]);\n geometry.label({\n fields: fields,\n callback: callback,\n cfg: transformLabel(cfg),\n });\n }\n return params;\n}\n/**\n * coord 配置\n * @param params\n */\nfunction coordinate(params) {\n var chart = params.chart, options = params.options;\n var innerRadius = options.innerRadius, radius = options.radius, reflect = options.reflect;\n var coord = chart.coordinate({\n type: 'polar',\n cfg: {\n innerRadius: innerRadius,\n radius: radius,\n },\n });\n if (reflect) {\n coord.reflect(reflect);\n }\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\nexport function meta(params) {\n var _a;\n var options = params.options;\n var hierarchyConfig = options.hierarchyConfig, meta = options.meta;\n return flow(scale({}, (_a = {},\n _a[SUNBURST_Y_FIELD] = get(meta, get(hierarchyConfig, ['field'], 'value')),\n _a)))(params);\n}\n/**\n * tooltip 配置\n * @param params\n */\nexport function tooltip(params) {\n var chart = params.chart, options = params.options;\n var tooltip = options.tooltip;\n if (tooltip === false) {\n chart.tooltip(false);\n }\n else {\n var tooltipOptions = tooltip;\n // 设置了 fields,就不进行 customItems 了; 设置 formatter 时,需要搭配 fields\n if (!get(tooltip, 'fields')) {\n tooltipOptions = deepAssign({}, {\n customItems: function (items) {\n return items.map(function (item) {\n var scales = get(chart.getOptions(), 'scales');\n var pathFormatter = get(scales, [SUNBURST_PATH_FIELD, 'formatter'], function (v) { return v; });\n var valueFormatter = get(scales, [SUNBURST_Y_FIELD, 'formatter'], function (v) { return v; });\n return __assign(__assign({}, item), { name: pathFormatter(item.data[SUNBURST_PATH_FIELD]), value: valueFormatter(item.data.value) });\n });\n },\n }, tooltipOptions);\n }\n chart.tooltip(tooltipOptions);\n }\n return params;\n}\nfunction adaptorInteraction(options) {\n var drilldown = options.drilldown, _a = options.interactions, interactions = _a === void 0 ? [] : _a;\n if (drilldown === null || drilldown === void 0 ? void 0 : drilldown.enabled) {\n return deepAssign({}, options, {\n interactions: __spreadArrays(interactions, [\n {\n type: 'drill-down',\n cfg: { drillDownConfig: drilldown, transformData: transformData },\n },\n ]),\n });\n }\n return options;\n}\n/**\n * 交互配置\n * @param params\n * @returns\n */\nfunction interaction(params) {\n var chart = params.chart, options = params.options;\n var drilldown = options.drilldown;\n baseInteraction({\n chart: chart,\n options: adaptorInteraction(options),\n });\n // 适应下钻交互面包屑\n if (drilldown === null || drilldown === void 0 ? void 0 : drilldown.enabled) {\n // 为面包屑留出 25px 的空间\n chart.appendPadding = getAdjustAppendPadding(chart.appendPadding, get(drilldown, ['breadCrumb', 'position']));\n }\n return params;\n}\n/**\n * 旭日图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return flow(theme, pattern('sunburstStyle'), geometry, axis, meta, legend, coordinate, tooltip, label, interaction, animation, annotation())(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { NODE_ANCESTORS_FIELD } from '../../utils/hierarchy/util';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS, SUNBURST_ANCESTOR_FIELD, SUNBURST_PATH_FIELD } from './constant';\nimport './interactions';\nvar Sunburst = /** @class */ (function (_super) {\n __extends(Sunburst, _super);\n function Sunburst() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'sunburst';\n return _this;\n }\n /**\n * 获取 旭日图 默认配置项\n * 供外部使用\n */\n Sunburst.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n /**\n * 获取 旭日图 默认配置\n */\n Sunburst.prototype.getDefaultOptions = function () {\n return Sunburst.getDefaultOptions();\n };\n /**\n * 获取旭日图的适配器\n */\n Sunburst.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n /** 旭日图 节点的祖先节点 */\n Sunburst.SUNBURST_ANCESTOR_FIELD = SUNBURST_ANCESTOR_FIELD;\n /** 旭日图 节点的路径 */\n Sunburst.SUNBURST_PATH_FIELD = SUNBURST_PATH_FIELD;\n /** 节点的祖先节点 */\n Sunburst.NODE_ANCESTORS_FIELD = NODE_ANCESTORS_FIELD;\n return Sunburst;\n}(Plot));\nexport { Sunburst };\n//# sourceMappingURL=index.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\n/**\n * Created by hustcc on 18/6/9.\n * Contract: i@hust.cc\n */\nvar id = 1;\n/**\n * generate unique id in application\n * @return {string}\n */\n\nvar _default = function _default() {\n return \"\".concat(id++);\n};\n\nexports[\"default\"] = _default;","import {shuffle} from \"../array.js\";\n\nexport default function(circles) {\n var i = 0, n = (circles = shuffle(Array.from(circles))).length, B = [], p, e;\n\n while (i < n) {\n p = circles[i];\n if (e && enclosesWeak(e, p)) ++i;\n else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n }\n\n return e;\n}\n\nfunction extendBasis(B, p) {\n var i, j;\n\n if (enclosesWeakAll(p, B)) return [p];\n\n // If we get here then B must have at least one element.\n for (i = 0; i < B.length; ++i) {\n if (enclosesNot(p, B[i])\n && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n return [B[i], p];\n }\n }\n\n // If we get here then B must have at least two elements.\n for (i = 0; i < B.length - 1; ++i) {\n for (j = i + 1; j < B.length; ++j) {\n if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n && enclosesNot(encloseBasis2(B[i], p), B[j])\n && enclosesNot(encloseBasis2(B[j], p), B[i])\n && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n var dr = a.r - b.r + Math.max(a.r, b.r, 1) * 1e-9, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n for (var i = 0; i < B.length; ++i) {\n if (!enclosesWeak(a, B[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction encloseBasis(B) {\n switch (B.length) {\n case 1: return encloseBasis1(B[0]);\n case 2: return encloseBasis2(B[0], B[1]);\n case 3: return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a) {\n return {\n x: a.x,\n y: a.y,\n r: a.r\n };\n}\n\nfunction encloseBasis2(a, b) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n l = Math.sqrt(x21 * x21 + y21 * y21);\n return {\n x: (x1 + x2 + x21 / l * r21) / 2,\n y: (y1 + y2 + y21 / l * r21) / 2,\n r: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a, b, c) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x3 = c.x, y3 = c.y, r3 = c.r,\n a2 = x1 - x2,\n a3 = x1 - x3,\n b2 = y1 - y2,\n b3 = y1 - y3,\n c2 = r2 - r1,\n c3 = r3 - r1,\n d1 = x1 * x1 + y1 * y1 - r1 * r1,\n d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n ab = a3 * b2 - a2 * b3,\n xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n xb = (b3 * c2 - b2 * c3) / ab,\n ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n yb = (a2 * c3 - a3 * c2) / ab,\n A = xb * xb + yb * yb - 1,\n B = 2 * (r1 + xa * xb + ya * yb),\n C = xa * xa + ya * ya - r1 * r1,\n r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n r: r\n };\n}\n","import { __assign } from \"tslib\";\nimport { isArray, get } from '@antv/util';\nimport { HIERARCHY_DATA_TRANSFORM_PARAMS } from '../../interactions/actions/drill-down';\nimport { treemap } from '../../utils/hierarchy/treemap';\nexport function findInteraction(interactions, interactionType) {\n if (!isArray(interactions))\n return undefined;\n return interactions.find(function (i) { return i.type === interactionType; });\n}\nexport function enableInteraction(interactions, interactionType) {\n var interaction = findInteraction(interactions, interactionType);\n return interaction && interaction.enable !== false;\n}\n/**\n * 是否允许下钻交互\n * @param interactions\n * @param interactionType\n * @returns\n */\nexport function enableDrillInteraction(options) {\n var interactions = options.interactions, drilldown = options.drilldown;\n // 兼容旧版本, treemap-drill-down\n return get(drilldown, 'enabled') || enableInteraction(interactions, 'treemap-drill-down');\n}\nexport function resetDrillDown(chart) {\n var drillDownInteraction = chart.interactions['drill-down'];\n if (!drillDownInteraction)\n return;\n // @ts-ignore\n var drillDownAction = drillDownInteraction.context.actions.find(function (i) { return i.name === 'drill-down-action'; });\n drillDownAction.reset();\n}\nexport function transformData(options) {\n var data = options.data, colorField = options.colorField, enableDrillDown = options.enableDrillDown, hierarchyConfig = options.hierarchyConfig;\n var nodes = treemap(data, __assign(__assign({}, hierarchyConfig), { \n // @ts-ignore\n type: 'hierarchy.treemap', field: 'value', as: ['x', 'y'] }));\n var result = [];\n nodes.forEach(function (node) {\n if (node.depth === 0) {\n return null;\n }\n // 开启下钻,仅加载 depth === 1 的数据\n if (enableDrillDown && node.depth !== 1) {\n return null;\n }\n // 不开启下钻,加载所有叶子节点\n if (!enableDrillDown && node.children) {\n return null;\n }\n // path 信息仅挑选必要祖先元素属性,因为在有些属性是不必要(x, y), 或是不准确的(下钻时的 depth),不对外透出\n var curPath = node.ancestors().map(function (n) { return ({\n data: n.data,\n height: n.height,\n value: n.value,\n }); });\n // 在下钻树图中,每次绘制的是当前层级信息,将父元素的层级信息(data.path) 做一层拼接。\n var path = enableDrillDown && isArray(data.path) ? curPath.concat(data.path.slice(1)) : curPath;\n var nodeInfo = Object.assign({}, node.data, __assign({ x: node.x, y: node.y, depth: node.depth, value: node.value, path: path }, node));\n if (!node.data[colorField] && node.parent) {\n var ancestorNode = node.ancestors().find(function (n) { return n.data[colorField]; });\n nodeInfo[colorField] = ancestorNode === null || ancestorNode === void 0 ? void 0 : ancestorNode.data[colorField];\n }\n else {\n nodeInfo[colorField] = node.data[colorField];\n }\n nodeInfo[HIERARCHY_DATA_TRANSFORM_PARAMS] = { hierarchyConfig: hierarchyConfig, colorField: colorField, enableDrillDown: enableDrillDown };\n result.push(nodeInfo);\n });\n return result;\n}\n//# sourceMappingURL=utils.js.map","import { __spreadArrays } from \"tslib\";\nimport { get } from '@antv/util';\nimport { polygon as basePolygon } from '../../adaptor/geometries/polygon';\nimport { interaction as commonInteraction, animation, theme, legend, annotation, tooltip } from '../../adaptor/common';\nimport { pattern } from '../../adaptor/pattern';\nimport { flow, deepAssign } from '../../utils';\nimport { getAdjustAppendPadding } from '../../utils/padding';\nimport { transformData, findInteraction, enableDrillInteraction } from './utils';\n/**\n * 获取默认 option\n * @param params\n */\nfunction defaultOptions(params) {\n var options = params.options;\n var colorField = options.colorField;\n return deepAssign({\n options: {\n rawFields: ['value'],\n tooltip: {\n fields: ['name', 'value', colorField, 'path'],\n formatter: function (data) {\n return {\n name: data.name,\n value: data.value,\n };\n },\n },\n },\n }, params);\n}\n/**\n * 字段\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var color = options.color, colorField = options.colorField, rectStyle = options.rectStyle, hierarchyConfig = options.hierarchyConfig, rawFields = options.rawFields;\n var data = transformData({\n data: options.data,\n colorField: options.colorField,\n enableDrillDown: enableDrillInteraction(options),\n hierarchyConfig: hierarchyConfig,\n });\n chart.data(data);\n // geometry\n basePolygon(deepAssign({}, params, {\n options: {\n xField: 'x',\n yField: 'y',\n seriesField: colorField,\n rawFields: rawFields,\n polygon: {\n color: color,\n style: rectStyle,\n },\n },\n }));\n // 做一个反转,这样配合排序,可以将最大值放到左上角,最小值放到右下角\n chart.coordinate().reflect('y');\n return params;\n}\n/**\n * 坐标轴\n * @param params\n */\nfunction axis(params) {\n var chart = params.chart;\n chart.axis(false);\n return params;\n}\nfunction adaptorInteraction(options) {\n var drilldown = options.drilldown, _a = options.interactions, interactions = _a === void 0 ? [] : _a;\n var enableDrillDown = enableDrillInteraction(options);\n if (enableDrillDown) {\n return deepAssign({}, options, {\n interactions: __spreadArrays(interactions, [\n {\n type: 'drill-down',\n // 🚓 这不是一个规范的 API,后续会变更。慎重参考\n cfg: { drillDownConfig: drilldown, transformData: transformData },\n },\n ]),\n });\n }\n return options;\n}\n/**\n * Interaction 配置\n * @param params\n */\nexport function interaction(params) {\n var chart = params.chart, options = params.options;\n var interactions = options.interactions, drilldown = options.drilldown;\n commonInteraction({\n chart: chart,\n options: adaptorInteraction(options),\n });\n // 适配 view-zoom\n var viewZoomInteraction = findInteraction(interactions, 'view-zoom');\n if (viewZoomInteraction) {\n // 开启缩放 interaction 后,则阻止默认滚动事件,避免整个窗口的滚动\n if (viewZoomInteraction.enable !== false) {\n chart.getCanvas().on('mousewheel', function (ev) {\n ev.preventDefault();\n });\n }\n else {\n // 手动关闭后,清除。仅对声明 viewZoomInteraction 的清除。\n chart.getCanvas().off('mousewheel');\n }\n }\n // 适应下钻交互面包屑\n var enableDrillDown = enableDrillInteraction(options);\n if (enableDrillDown) {\n // 为面包屑在底部留出 25px 的空间\n chart.appendPadding = getAdjustAppendPadding(chart.appendPadding, get(drilldown, ['breadCrumb', 'position']));\n }\n return params;\n}\n/**\n * 矩形树图\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n return flow(defaultOptions, theme, pattern('rectStyle'), geometry, axis, legend, tooltip, interaction, animation, annotation())(params);\n}\n//# sourceMappingURL=adaptor.js.map","export var DEFAULT_OPTIONS = {\n // 默认按照 name 字段对颜色进行分类\n colorField: 'name',\n rectStyle: {\n lineWidth: 1,\n stroke: '#fff',\n },\n hierarchyConfig: {\n tile: 'treemapSquarify',\n },\n label: {\n fields: ['name'],\n layout: {\n type: 'limit-in-shape',\n },\n },\n tooltip: {\n showMarkers: false,\n showTitle: false,\n },\n // 下钻交互配置,默认不开启\n drilldown: {\n enabled: false,\n breadCrumb: {\n position: 'bottom-left',\n rootText: '初始',\n dividerText: '/',\n textStyle: {\n fontSize: 12,\n fill: 'rgba(0, 0, 0, 0.65)',\n cursor: 'pointer',\n },\n activeTextStyle: {\n fill: '#87B5FF',\n },\n },\n },\n};\n//# sourceMappingURL=constant.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\nimport { transformData, enableInteraction, resetDrillDown } from './utils';\nimport './interactions';\nvar Treemap = /** @class */ (function (_super) {\n __extends(Treemap, _super);\n function Treemap() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'treemap';\n return _this;\n }\n /**\n * 获取 矩阵树图 默认配置项\n * 供外部使用\n */\n Treemap.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n /**\n * changeData\n */\n Treemap.prototype.changeData = function (data) {\n var _a = this.options, colorField = _a.colorField, interactions = _a.interactions, hierarchyConfig = _a.hierarchyConfig;\n this.updateOption({ data: data });\n var transData = transformData({\n data: data,\n colorField: colorField,\n enableDrillDown: enableInteraction(interactions, 'treemap-drill-down'),\n hierarchyConfig: hierarchyConfig,\n });\n this.chart.changeData(transData);\n resetDrillDown(this.chart);\n };\n /**\n * 获取 矩阵树图 默认配置\n */\n Treemap.prototype.getDefaultOptions = function () {\n return Treemap.getDefaultOptions();\n };\n Treemap.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Treemap;\n}(Plot));\nexport { Treemap };\n//# sourceMappingURL=index.js.map","var _a;\n// 漏斗占比: data[n][yField] / data[0][yField]\nexport var FUNNEL_PERCENT = '$$percentage$$';\n// 漏斗映射值\nexport var FUNNEL_MAPPING_VALUE = '$$mappingValue$$';\n// 漏斗转化率: data[n][yField] / data[n-1][yField];\nexport var FUNNEL_CONVERSATION = '$$conversion$$';\n// 漏斗单项占总体和的百分比,用于动态漏斗图计算高度:\n// data[n][yField] / sum(data[0-n][yField])\nexport var FUNNEL_TOTAL_PERCENT = '$$totalPercentage$$';\n// 漏斗多边型 x 坐标\nexport var PLOYGON_X = '$$x$$';\nexport var PLOYGON_Y = '$$y$$';\n/**\n * 漏斗图 默认配置项\n */\nexport var DEFAULT_OPTIONS = {\n appendPadding: [0, 80],\n minSize: 0,\n maxSize: 1,\n meta: (_a = {},\n _a[FUNNEL_MAPPING_VALUE] = {\n min: 0,\n max: 1,\n nice: false,\n },\n _a),\n label: {\n style: {\n fill: '#fff',\n fontSize: 12,\n },\n },\n tooltip: {\n showTitle: false,\n showMarkers: false,\n shared: false,\n },\n conversionTag: {\n offsetX: 10,\n offsetY: 0,\n style: {\n fontSize: 12,\n fill: 'rgba(0,0,0,0.45)',\n },\n },\n};\n//# sourceMappingURL=constant.js.map","import { clone, sortBy, valuesOfKey, getRange, each, hasKey, groupBy, isEmpty } from '@antv/util';\n// 进行转换得到值所在的 range\nfunction getBinKey(value, binWidth, binNumber) {\n // 做一点特殊处理\n if (binNumber === 1) {\n return [0, binWidth];\n }\n var index = Math.floor(value / binWidth);\n return [binWidth * index, binWidth * (index + 1)];\n}\n// 默认 sturges 转换\nfunction sturges(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n/**\n * 对数据进行百分比化\n * @param data\n * @param binField\n * @param binWidth\n * @param binNumber\n * @param stackField\n */\nexport function binHistogram(data, binField, binWidth, binNumber, stackField) {\n var originData_copy = clone(data);\n // 根据 binField 对源数据进行排序\n sortBy(originData_copy, binField);\n // 获取源数据 binField 的 range\n var values = valuesOfKey(originData_copy, binField);\n var range = getRange(values);\n var rangeWidth = range.max - range.min;\n // 计算分箱,直方图分箱的计算基于 binWidth,如配置了 binNumber 则将其转为 binWidth 进行计算\n var _binWidth = binWidth;\n if (!binWidth && binNumber) {\n _binWidth = binNumber > 1 ? rangeWidth / (binNumber - 1) : range.max;\n }\n // 当 binWidth 和 binNumber 都没有指定的情况,采用 Sturges formula 自动生成 binWidth\n if (!binWidth && !binNumber) {\n var _defaultBinNumber = sturges(values);\n _binWidth = rangeWidth / _defaultBinNumber;\n }\n // 构建 key - StatisticData 结构\n var bins = {};\n var groups = groupBy(originData_copy, stackField);\n // 判断分组是否为空,如果为空,说明没有 stackField 字段\n if (isEmpty(groups)) {\n each(originData_copy, function (data) {\n var value = data[binField];\n var bin = getBinKey(value, _binWidth, binNumber);\n var binKey = bin[0] + \"-\" + bin[1];\n if (!hasKey(bins, binKey)) {\n bins[binKey] = { range: bin, count: 0 };\n }\n bins[binKey].count += 1;\n });\n }\n else {\n Object.keys(groups).forEach(function (groupKey) {\n each(groups[groupKey], function (data) {\n var value = data[binField];\n var bin = getBinKey(value, _binWidth, binNumber);\n var binKey = bin[0] + \"-\" + bin[1];\n var groupKeyBinKey = binKey + \"-\" + groupKey;\n if (!hasKey(bins, groupKeyBinKey)) {\n bins[groupKeyBinKey] = { range: bin, count: 0 };\n bins[groupKeyBinKey][stackField] = groupKey;\n }\n bins[groupKeyBinKey].count += 1;\n });\n });\n }\n // 将分箱数据转换为 plotData 才是图表所需要的\n var plotData = [];\n each(bins, function (bin) {\n plotData.push(bin);\n });\n return plotData;\n}\n//# sourceMappingURL=histogram.js.map","import { __assign, __rest } from \"tslib\";\nimport { each, isArray } from '@antv/util';\nimport { tooltip, slider, interaction, animation, theme, scale, annotation, limitInPlot, scrollbar, } from '../../adaptor/common';\nimport { findGeometry, transformLabel, deepAssign } from '../../utils';\nimport { point, line, area } from '../../adaptor/geometries';\nimport { flow } from '../../utils';\nimport { adjustYMetaByZero } from '../../utils/data';\n/**\n * geometry 配置处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var data = options.data, color = options.color, lineStyle = options.lineStyle, lineShape = options.lineShape, pointMapping = options.point, areaMapping = options.area, seriesField = options.seriesField;\n var pointState = pointMapping === null || pointMapping === void 0 ? void 0 : pointMapping.state;\n var areaState = areaMapping === null || areaMapping === void 0 ? void 0 : areaMapping.state;\n chart.data(data);\n // line geometry 处理\n var primary = deepAssign({}, params, {\n options: {\n shapeField: seriesField,\n line: {\n color: color,\n style: lineStyle,\n shape: lineShape,\n },\n // 颜色保持一致,因为如果颜色不一致,会导致 tooltip 中元素重复。\n // 如果存在,才设置,否则为空\n point: pointMapping && __assign({ color: color, shape: 'circle' }, pointMapping),\n // 面积配置\n area: areaMapping && __assign({ color: color }, areaMapping),\n // label 不传递给各个 geometry adaptor,由 label adaptor 处理\n label: undefined,\n },\n });\n var second = deepAssign({}, primary, { options: { tooltip: false, state: pointState } });\n var areaParams = deepAssign({}, primary, { options: { tooltip: false, state: areaState } });\n line(primary);\n point(second);\n area(areaParams);\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\nexport function meta(params) {\n var _a, _b;\n var options = params.options;\n var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField, data = options.data;\n return flow(scale((_a = {},\n _a[xField] = xAxis,\n _a[yField] = yAxis,\n _a), (_b = {},\n _b[xField] = {\n type: 'cat',\n },\n _b[yField] = adjustYMetaByZero(data, yField),\n _b)))(params);\n}\n/**\n * 坐标系配置. 支持 reflect 镜像处理\n * @param params\n */\nfunction coordinate(params) {\n var chart = params.chart, options = params.options;\n var reflect = options.reflect;\n if (reflect) {\n var p = reflect;\n if (!isArray(p)) {\n p = [p];\n }\n var actions = p.map(function (d) { return ['reflect', d]; });\n chart.coordinate({ type: 'rect', actions: actions });\n }\n return params;\n}\n/**\n * axis 配置\n * @param params\n */\nexport function axis(params) {\n var chart = params.chart, options = params.options;\n var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n // 为 false 则是不显示轴\n if (xAxis === false) {\n chart.axis(xField, false);\n }\n else {\n chart.axis(xField, xAxis);\n }\n if (yAxis === false) {\n chart.axis(yField, false);\n }\n else {\n chart.axis(yField, yAxis);\n }\n return params;\n}\n/**\n * legend 配置\n * @param params\n */\nexport function legend(params) {\n var chart = params.chart, options = params.options;\n var legend = options.legend, seriesField = options.seriesField;\n if (legend && seriesField) {\n chart.legend(seriesField, legend);\n }\n else if (legend === false) {\n chart.legend(false);\n }\n return params;\n}\n/**\n * 数据标签\n * @param params\n */\nfunction label(params) {\n var chart = params.chart, options = params.options;\n var label = options.label, yField = options.yField;\n var lineGeometry = findGeometry(chart, 'line');\n // label 为 false, 空 则不显示 label\n if (!label) {\n lineGeometry.label(false);\n }\n else {\n var callback = label.callback, cfg = __rest(label, [\"callback\"]);\n lineGeometry.label({\n fields: [yField],\n callback: callback,\n cfg: __assign({ layout: [\n { type: 'limit-in-plot' },\n { type: 'path-adjust-position' },\n { type: 'point-adjust-position' },\n { type: 'limit-in-plot', cfg: { action: 'hide' } },\n ] }, transformLabel(cfg)),\n });\n }\n return params;\n}\n/**\n * 统一处理 adjust\n * @param params\n */\nexport function adjust(params) {\n var chart = params.chart, options = params.options;\n var isStack = options.isStack;\n if (isStack) {\n each(chart.geometries, function (g) {\n g.adjust('stack');\n });\n }\n return params;\n}\n/**\n * 折线图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return flow(geometry, meta, adjust, theme, coordinate, axis, legend, tooltip, label, slider, scrollbar, interaction, animation, annotation(), limitInPlot)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { theme, scale, animation, annotation, tooltip, pattern } from '../../adaptor/common';\nimport { flow, deepAssign } from '../../utils';\nimport { area, line, point } from '../../adaptor/geometries';\nimport { X_FIELD, Y_FIELD } from '../tiny-line/constants';\nimport { getTinyData } from '../tiny-line/utils';\nimport { adjustYMetaByZero } from '../../utils/data';\n/**\n * 字段\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var data = options.data, color = options.color, areaStyle = options.areaStyle, pointOptions = options.point, lineOptions = options.line;\n var pointState = pointOptions === null || pointOptions === void 0 ? void 0 : pointOptions.state;\n var seriesData = getTinyData(data);\n chart.data(seriesData);\n var primary = deepAssign({}, params, {\n options: {\n xField: X_FIELD,\n yField: Y_FIELD,\n area: { color: color, style: areaStyle },\n line: lineOptions,\n point: pointOptions,\n },\n });\n var second = deepAssign({}, primary, { options: { tooltip: false } });\n var pointParams = deepAssign({}, primary, { options: { tooltip: false, state: pointState } });\n // area geometry 处理\n area(primary);\n line(second);\n point(pointParams);\n chart.axis(false);\n chart.legend(false);\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\nexport function meta(params) {\n var _a, _b;\n var options = params.options;\n var xAxis = options.xAxis, yAxis = options.yAxis, data = options.data;\n var seriesData = getTinyData(data);\n return flow(scale((_a = {},\n _a[X_FIELD] = xAxis,\n _a[Y_FIELD] = yAxis,\n _a), (_b = {},\n _b[X_FIELD] = {\n type: 'cat',\n },\n _b[Y_FIELD] = adjustYMetaByZero(seriesData, Y_FIELD),\n _b)))(params);\n}\n/**\n * 迷你面积图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n return flow(pattern('areaStyle'), geometry, meta, tooltip, theme, animation, annotation())(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __assign, __spreadArrays } from \"tslib\";\nimport { Util } from '@antv/g2';\nimport { get } from '@antv/util';\nimport { getCanvasPattern } from '../utils/pattern';\nimport { deepAssign } from '../utils';\n/**\n * Pattern 通道,处理图案填充\n * 🚀 目前支持图表类型:饼图、柱状图、条形图、玉珏图等(不支持在多 view 图表中,后续按需扩展)\n *\n * @param key key of style property\n * @returns\n */\nexport function pattern(key) {\n var _this = this;\n return function (params) {\n var _a;\n var options = params.options, chart = params.chart;\n var patternOption = options.pattern;\n // 没有 pattern 配置,则直接返回\n if (!patternOption) {\n return params;\n }\n /** ~~~~~~~ 进行贴图图案处理 ~~~~~~~ */\n var style = function (datum) {\n var _a, _b, _c;\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n var defaultColor = chart.getTheme().defaultColor;\n var color = defaultColor;\n var colorAttribute = (_b = (_a = chart.geometries) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.getAttribute('color');\n if (colorAttribute) {\n var colorField = colorAttribute.getFields()[0];\n var seriesValue = get(datum, colorField);\n color = Util.getMappingValue(colorAttribute, seriesValue, ((_c = colorAttribute.values) === null || _c === void 0 ? void 0 : _c[0]) || defaultColor);\n }\n var pattern = patternOption;\n // 1. 如果 patternOption 是一个回调,则获取回调结果。`(datum: Datum, color: string) => CanvasPattern`\n if (typeof patternOption === 'function') {\n pattern = patternOption.call(_this, datum, color);\n }\n // 2. 如果 pattern 不是 CanvasPattern,则进一步处理,否则直接赋予给 fill\n if (pattern instanceof CanvasPattern === false) {\n // 通过 createPattern(PatternStyle) 转换为 CanvasPattern\n pattern = getCanvasPattern(deepAssign({}, { cfg: { backgroundColor: color } }, pattern));\n }\n var styleOption = options[key];\n return __assign(__assign({}, (typeof styleOption === 'function' ? styleOption.call.apply(styleOption, __spreadArrays([_this, datum], args)) : styleOption || {})), { fill: pattern || color });\n };\n return deepAssign({}, params, { options: (_a = {}, _a[key] = style, _a) });\n };\n}\n//# sourceMappingURL=pattern.js.map","import { each, every, isString } from '@antv/util';\nimport { processIllegalData } from '../../utils';\n/**\n * 获取总计值\n * @param data\n * @param field\n */\nexport function getTotalValue(data, field) {\n var total = null;\n each(data, function (item) {\n if (typeof item[field] === 'number') {\n total += item[field];\n }\n });\n return total;\n}\n/**\n * pie label offset adaptor\n */\nexport function adaptOffset(type, offset) {\n var defaultOffset;\n switch (type) {\n case 'inner':\n defaultOffset = '-30%';\n if (isString(offset) && offset.endsWith('%')) {\n return parseFloat(offset) * 0.01 > 0 ? defaultOffset : offset;\n }\n return offset < 0 ? offset : defaultOffset;\n case 'outer':\n defaultOffset = 12;\n if (isString(offset) && offset.endsWith('%')) {\n return parseFloat(offset) * 0.01 < 0 ? defaultOffset : offset;\n }\n return offset > 0 ? offset : defaultOffset;\n default:\n return offset;\n }\n}\n/**\n * 判断数据是否全部为 0\n * @param data\n * @param angleField\n */\nexport function isAllZero(data, angleField) {\n return every(processIllegalData(data, angleField), function (d) { return d[angleField] === 0; });\n}\n//# sourceMappingURL=utils.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.createSensor = void 0;\n\nvar _debounce = _interopRequireDefault(require(\"../debounce\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n/**\n * Created by hustcc on 18/7/5.\n * Contract: i@hust.cc\n */\nvar createSensor = function createSensor(element) {\n var sensor = undefined; // callback\n\n var listeners = [];\n /**\n * trigger listeners\n */\n\n var resizeListener = (0, _debounce[\"default\"])(function () {\n // trigger all\n listeners.forEach(function (listener) {\n listener(element);\n });\n });\n /**\n * create ResizeObserver sensor\n * @returns\n */\n\n var newSensor = function newSensor() {\n var s = new ResizeObserver(resizeListener); // listen element\n\n s.observe(element); // trigger once\n\n resizeListener();\n return s;\n };\n /**\n * listen with callback\n * @param cb\n */\n\n\n var bind = function bind(cb) {\n if (!sensor) {\n sensor = newSensor();\n }\n\n if (listeners.indexOf(cb) === -1) {\n listeners.push(cb);\n }\n };\n /**\n * destroy\n */\n\n\n var destroy = function destroy() {\n sensor.disconnect();\n listeners = [];\n sensor = undefined;\n };\n /**\n * cancel bind\n * @param cb\n */\n\n\n var unbind = function unbind(cb) {\n var idx = listeners.indexOf(cb);\n\n if (idx !== -1) {\n listeners.splice(idx, 1);\n } // no listener, and sensor is exist\n // then destroy the sensor\n\n\n if (listeners.length === 0 && sensor) {\n destroy();\n }\n };\n\n return {\n element: element,\n bind: bind,\n destroy: destroy,\n unbind: unbind\n };\n};\n\nexports.createSensor = createSensor;","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constants';\nimport { getProgressData } from './utils';\nvar Progress = /** @class */ (function (_super) {\n __extends(Progress, _super);\n function Progress() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'process';\n return _this;\n }\n /**\n * 获取 仪表盘 默认配置项\n * 供外部使用\n */\n Progress.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n /**\n * 更新数据\n * @param percent\n */\n Progress.prototype.changeData = function (percent) {\n this.updateOption({ percent: percent });\n this.chart.changeData(getProgressData(percent));\n };\n Progress.prototype.getDefaultOptions = function () {\n return Progress.getDefaultOptions();\n };\n /**\n * 获取 进度图 的适配器\n */\n Progress.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Progress;\n}(Plot));\nexport { Progress };\n//# sourceMappingURL=index.js.map","import { map } from '@antv/util';\nexport function getTinyData(data) {\n return map(data || [], function (y, x) { return ({ x: \"\" + x, y: y }); });\n}\n//# sourceMappingURL=utils.js.map","var _a;\nimport { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\nexport var BOX_RANGE = '$$range$$';\nexport var BOX_RANGE_ALIAS = 'low-q1-median-q3-high';\nexport var BOX_SYNC_NAME = '$$y_outliers$$';\nexport var OUTLIERS_VIEW_ID = 'outliers_view';\n/**\n * 面积图默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n meta: (_a = {},\n _a[BOX_RANGE] = { min: 0, alias: BOX_RANGE_ALIAS },\n _a),\n // 默认区域交互\n interactions: [{ type: 'active-region' }],\n // 默认 tooltips 共享,不显示 markers\n tooltip: {\n showMarkers: false,\n shared: true,\n },\n boxStyle: {\n lineWidth: 1,\n },\n});\n//# sourceMappingURL=constant.js.map","import { map } from '@antv/util';\nimport { BOX_RANGE } from './constant';\n/**\n * @desc 将数据转换为 box 需要的的图表数据,如果yField为数组,从data中解构出对应数组值并写入data,否则直接返回data\n * @param data\n * @param yField\n */\nexport var transformData = function (data, yField) {\n var newData = data;\n // formate data when `yField` is Array\n if (Array.isArray(yField)) {\n var low_1 = yField[0], q1_1 = yField[1], median_1 = yField[2], q3_1 = yField[3], high_1 = yField[4];\n newData = map(data, function (obj) {\n obj[BOX_RANGE] = [obj[low_1], obj[q1_1], obj[median_1], obj[q3_1], obj[high_1]];\n return obj;\n });\n }\n return newData;\n};\n//# sourceMappingURL=utils.js.map","import { __assign } from \"tslib\";\nimport { isArray } from '@antv/util';\nimport { interaction, animation, theme, tooltip } from '../../adaptor/common';\nimport { point, schema } from '../../adaptor/geometries';\nimport { flow, pick, deepAssign } from '../../utils';\nimport { AXIS_META_CONFIG_KEYS } from '../../constant';\nimport { BOX_RANGE, BOX_SYNC_NAME, OUTLIERS_VIEW_ID } from './constant';\nimport { transformData } from './utils';\n/**\n * 字段\n * @param params\n */\nfunction field(params) {\n var chart = params.chart, options = params.options;\n var xField = options.xField, yField = options.yField, groupField = options.groupField, color = options.color, tooltip = options.tooltip, boxStyle = options.boxStyle;\n chart.data(transformData(options.data, yField));\n var yFieldName = isArray(yField) ? BOX_RANGE : yField;\n var rawFields = yField ? (isArray(yField) ? yField : [yField]) : [];\n var tooltipOptions = tooltip;\n if (tooltipOptions !== false) {\n tooltipOptions = deepAssign({}, { fields: isArray(yField) ? yField : [] }, tooltipOptions);\n }\n var ext = schema(deepAssign({}, params, {\n options: {\n xField: xField,\n yField: yFieldName,\n seriesField: groupField,\n tooltip: tooltipOptions,\n rawFields: rawFields,\n // 只有异常点视图展示 label\n label: false,\n schema: {\n shape: 'box',\n color: color,\n style: boxStyle,\n },\n },\n })).ext;\n if (groupField) {\n ext.geometry.adjust('dodge');\n }\n return params;\n}\n/**\n * 创建异常点 view\n */\nfunction outliersPoint(params) {\n var chart = params.chart, options = params.options;\n var xField = options.xField, data = options.data, outliersField = options.outliersField, outliersStyle = options.outliersStyle, padding = options.padding, label = options.label;\n if (!outliersField)\n return params;\n var outliersView = chart.createView({ padding: padding, id: OUTLIERS_VIEW_ID });\n var outliersViewData = data.reduce(function (ret, datum) {\n var outliersData = datum[outliersField];\n outliersData.forEach(function (d) {\n var _a;\n return ret.push(__assign(__assign({}, datum), (_a = {}, _a[outliersField] = d, _a)));\n });\n return ret;\n }, []);\n outliersView.data(outliersViewData);\n point({\n chart: outliersView,\n options: {\n xField: xField,\n yField: outliersField,\n point: { shape: 'circle', style: outliersStyle },\n label: label,\n },\n });\n outliersView.axis(false);\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\nfunction meta(params) {\n var _a, _b;\n var chart = params.chart, options = params.options;\n var meta = options.meta, xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField, outliersField = options.outliersField;\n var yFieldName = Array.isArray(yField) ? BOX_RANGE : yField;\n var baseMeta = {};\n // make yField and outliersField share y mate\n if (outliersField) {\n var syncName = BOX_SYNC_NAME;\n baseMeta = (_a = {},\n _a[outliersField] = { sync: syncName, nice: true },\n _a[yFieldName] = { sync: syncName, nice: true },\n _a);\n }\n var scales = deepAssign(baseMeta, meta, (_b = {},\n _b[xField] = pick(xAxis, AXIS_META_CONFIG_KEYS),\n _b[yFieldName] = pick(yAxis, AXIS_META_CONFIG_KEYS),\n _b));\n chart.scale(scales);\n return params;\n}\n/**\n * axis 配置\n * @param params\n */\nfunction axis(params) {\n var chart = params.chart, options = params.options;\n var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n var yFieldName = Array.isArray(yField) ? BOX_RANGE : yField;\n // 为 false 则是不显示轴\n if (xAxis === false) {\n chart.axis(xField, false);\n }\n else {\n chart.axis(xField, xAxis);\n }\n if (yAxis === false) {\n chart.axis(BOX_RANGE, false);\n }\n else {\n chart.axis(yFieldName, yAxis);\n }\n return params;\n}\n/**\n * legend 配置\n * @param params\n */\nexport function legend(params) {\n var chart = params.chart, options = params.options;\n var legend = options.legend, groupField = options.groupField;\n if (groupField) {\n if (legend) {\n chart.legend(groupField, legend);\n }\n else {\n // Grouped Box Chart default has legend, and it's position is `bottom`\n chart.legend(groupField, { position: 'bottom' });\n }\n }\n else {\n chart.legend(false);\n }\n return params;\n}\n/**\n * 箱型图适配器\n * @param params\n */\nexport function adaptor(params) {\n return flow(field, outliersPoint, meta, axis, legend, tooltip, interaction, animation, theme)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { transformData } from './utils';\nimport { DEFAULT_OPTIONS, OUTLIERS_VIEW_ID } from './constant';\nvar Box = /** @class */ (function (_super) {\n __extends(Box, _super);\n function Box() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'box';\n return _this;\n }\n /**\n * 获取 默认配置项\n * 供外部使用\n */\n Box.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n /**\n * @override\n * @param data\n */\n Box.prototype.changeData = function (data) {\n this.updateOption({ data: data });\n var yField = this.options.yField;\n var outliersView = this.chart.views.find(function (v) { return v.id === OUTLIERS_VIEW_ID; });\n if (outliersView) {\n outliersView.data(data);\n }\n this.chart.changeData(transformData(data, yField));\n };\n /**\n * 获取 箱型图 默认配置项\n */\n Box.prototype.getDefaultOptions = function () {\n return Box.getDefaultOptions();\n };\n /**\n * 获取 箱型图 的适配器\n */\n Box.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Box;\n}(Plot));\nexport { Box };\n//# sourceMappingURL=index.js.map","import { __assign } from \"tslib\";\nimport { get, isNil } from '@antv/util';\nimport { deepAssign, flow, renderStatistic } from '../../utils';\nimport { scale, animation, theme, annotation } from '../../adaptor/common';\nimport { geometry } from '../progress/adaptor';\n/**\n * coordinate 配置\n * @param params\n */\nfunction coordinate(params) {\n var chart = params.chart, options = params.options;\n var innerRadius = options.innerRadius, radius = options.radius;\n // coordinate\n chart.coordinate('theta', {\n innerRadius: innerRadius,\n radius: radius,\n });\n return params;\n}\n/**\n * statistic 配置\n * @param params\n */\nexport function statistic(params, updated) {\n var chart = params.chart, options = params.options;\n var innerRadius = options.innerRadius, statistic = options.statistic, percent = options.percent, meta = options.meta;\n // 先清空标注,再重新渲染\n chart.getController('annotation').clear(true);\n /** 中心文本 指标卡 */\n if (innerRadius && statistic) {\n var metaFormatter = get(meta, ['percent', 'formatter']) || (function (v) { return (v * 100).toFixed(2) + \"%\"; });\n var contentOpt = statistic.content;\n if (contentOpt) {\n contentOpt = deepAssign({}, contentOpt, {\n content: !isNil(contentOpt.content) ? contentOpt.content : metaFormatter(percent),\n });\n }\n renderStatistic(chart, { statistic: __assign(__assign({}, statistic), { content: contentOpt }), plotType: 'ring-progress' }, { percent: percent });\n }\n if (updated) {\n chart.render(true);\n }\n return params;\n}\n/**\n * 环形进度图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n return flow(geometry, scale({}), coordinate, statistic, animation, theme, annotation())(params);\n}\n//# sourceMappingURL=adaptor.js.map","export var version = '2.4.8';\n// G2 自定义能力透出\nimport * as G2 from '@antv/g2';\nexport { G2 };\n// 国际化处理\nimport { registerLocale } from './core/locale';\nimport { EN_US_LOCALE } from './locales/en_US';\nimport { ZH_CN_LOCALE } from './locales/zh_CN';\n/** default locale register */\nregisterLocale('en-US', EN_US_LOCALE);\nregisterLocale('zh-CN', ZH_CN_LOCALE);\n/** 透出 国际化 工具函数,便于使用 */\nexport { registerLocale };\n/** 全局变量 */\nexport { setGlobal } from './core/global';\n/** G2Plot 的 Plot 基类 */\nexport { Plot } from './core/plot';\n// 类型定义导出\nexport * from './types';\n// 折线图及类型定义 | author by [hustcc](https://github.com/hustcc)\nexport { Line } from './plots/line';\n// 面积图及类型定义 | author by [hustcc](https://github.com/hustcc)\nexport { Area } from './plots/area';\n// 柱形图及类型定义 | author by [zqlu](https://github.com/zqlu)\nexport { Column } from './plots/column';\n// 条形图及类型定义 | author by [BBSQQ](https://github.com/BBSQQ)\nexport { Bar } from './plots/bar';\n// 饼图及类型定义 | author by [visiky](https://github.com/visiky)\nexport { Pie } from './plots/pie';\n// 玫瑰图及类型定义 | author by [zhangzhonghe](https://github.com/zhangzhonghe)\nexport { Rose } from './plots/rose';\n// 词云图及类型定义 | author by [zhangzhonghe](https://github.com/zhangzhonghe)\nexport { WordCloud } from './plots/word-cloud';\n// 散点图及类型定义 | author by [lxfu1](https://github.com/lxfu1)\nexport { Scatter } from './plots/scatter';\n// 雷达图及类型定义 | author by [visiky](https://github.com/visiky)\nexport { Radar } from './plots/radar';\n// 混合图形 | author by [liuzhenying](https://github.com/liuzhenying)\nexport { DualAxes } from './plots/dual-axes';\n// 迷你折线图及类型定义 | author by [connono](https://github.com/connono)\nexport { TinyLine } from './plots/tiny-line';\n// 迷你柱形图及类型定义 | author by [connono](https://github.com/connono)\nexport { TinyColumn } from './plots/tiny-column';\n// 迷你面积图及类型定义 | author by [connono](https://github.com/connono)\nexport { TinyArea } from './plots/tiny-area';\n// 直方图及类型定义 | author by [arcsin1](https://github.com/arcsin1), [visiky](https://github.com/visiky)\nexport { Histogram } from './plots/histogram';\n// 进度图及类型定义 | author by [connono](https://github.com/connono)\nexport { Progress } from './plots/progress';\n// 环形进度图及类型定义 | author by [connono](https://github.com/connono)\nexport { RingProgress } from './plots/ring-progress';\n// 热力图及类型定义 | author by [jiazhewang](https://github.com/jiazhewang)\nexport { Heatmap } from './plots/heatmap';\n// 箱线图及类型定义 | author by [BBSQQ](https://github.com/BBSQQ), [visiky](https://github.com/visiky)\nexport { Box } from './plots/box';\n// 小提琴图及类型定义 | author by [YiSiWang](https://github.com/YiSiWang), [visiky](https://github.com/visiky)\nexport { Violin } from './plots/violin';\n// 韦恩图及类型定义 | author by [visiky](https://github.com/visiky)\nexport { Venn } from './plots/venn';\n// K线图及类型定义 | author by [jhwong](https://github.com/jinhuiWong), [visiky](https://github.com/visiky)\nexport { Stock } from './plots/stock';\n// 漏斗图及类型定义\nexport { Funnel, FUNNEL_CONVERSATION_FIELD } from './plots/funnel';\n// 水波图及类型定义 | author by [CarisL](https://github.com/CarisL), [hustcc](https://github.com/hustcc), [pearmini](https://github.com/pearmini)\nexport { Liquid } from './plots/liquid';\n// 子弹图及类型定义 | author by [arcsin1](https://github.com/arcsin1)\nexport { Bullet } from './plots/bullet';\n// 旭日图及类型定义 | author by [lxfu1](https://github.com/lxfu1), [visiky](https://github.com/visiky)\nexport { Sunburst } from './plots/sunburst';\n// 仪表盘及类型定义 | author by [hustcc](https://github.com/hustcc)\nexport { Gauge } from './plots/gauge';\n// 瀑布图 | author by [visiky](https://github.com/visiky)\nexport { Waterfall } from './plots/waterfall';\n// 玉珏图 | author by [yujs](https://github.com/yujs) | updated by [visiky](https://github.com/visiky)\nexport { RadialBar } from './plots/radial-bar';\n// 对称条形图及类型定义 | author by [arcsin1](https://github.com/arcsin1)\nexport { BidirectionalBar } from './plots/bidirectional-bar';\n// 矩形树图\nexport { Treemap } from './plots/treemap';\n// 桑基图及类型定义 | author by [hustcc](https://github.com/hustcc)\nexport { Sankey } from './plots/sankey';\n// 弦图及类型定义 | author by [MrSmallLiu](https://github.com/MrSmallLiu), [visiky](https://github.com/visiky)\nexport { Chord } from './plots/chord';\n// circle-packing 及类型定义 | author by [visiky](https://github.com/visiky), [Angeli](https://github.com/Angelii)\nexport { CirclePacking } from './plots/circle-packing';\n// 以下开放自定义图表开发的能力(目前仅仅是孵化中)\n/** 所有开放图表都使用 G2Plot.P 作为入口开发,理论上官方的所有图表都可以走 G2Plot.P 的入口(暂时不处理) */\nexport { P } from './plugin';\n/** 开放 getCanvasPatterng 方法 */\nexport { getCanvasPattern } from './utils/pattern';\n// 已经废弃,更名为 Mix\nexport { Mix as MultiView } from './plots/mix';\n/** 开放多图层图表 (mix) */\nexport { Mix as Mix } from './plots/mix';\n// 分面图及类型定义 | author by [visiky](https://github.com/visiky)\nexport { Facet } from './plots/facet';\n/** 开发 adaptor 可能会用到的方法或一些工具方法,不强制使用 */\nexport { flow, measureTextWidth } from './utils';\n/** 各个 geometry 的 adaptor,可以让开发者更快的构造图形 */\nexport { line, interval, area, point, polygon, schema } from './adaptor/geometries';\n/** 开放一些通用的 adaptor 通道方法,实验阶段:不保证稳定性 */\nimport { scale, legend, tooltip, annotation, interaction, theme, animation } from './adaptor/common';\nexport var adaptors = { scale: scale, legend: legend, tooltip: tooltip, annotation: annotation, interaction: interaction, theme: theme, animation: animation };\n/** 对于没有开发完成的图表,可以暂时先放到 Lab 下面,先做体验,稳定后放到根 export */\nexport { Lab } from './lab';\n//# sourceMappingURL=index.js.map","import { theme, animation, annotation, tooltip, pattern } from '../../adaptor/common';\nimport { flow, deepAssign } from '../../utils';\nimport { interval } from '../../adaptor/geometries';\nimport { X_FIELD, Y_FIELD } from '../tiny-line/constants';\nimport { getTinyData } from '../tiny-line/utils';\nimport { meta } from '../tiny-area/adaptor';\nexport { meta };\n/**\n * 字段\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var data = options.data, color = options.color, columnStyle = options.columnStyle, columnWidthRatio = options.columnWidthRatio;\n var seriesData = getTinyData(data);\n chart.data(seriesData);\n var p = deepAssign({}, params, {\n options: {\n xField: X_FIELD,\n yField: Y_FIELD,\n widthRatio: columnWidthRatio,\n interval: {\n style: columnStyle,\n color: color,\n },\n },\n });\n interval(p);\n chart.axis(false);\n chart.legend(false);\n chart.interaction('element-active');\n return params;\n}\n/**\n * 迷你柱形图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n return flow(theme, pattern('columnStyle'), geometry, meta, tooltip, animation, annotation())(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __assign } from \"tslib\";\nimport { each, get, isNumber, isFunction, isString } from '@antv/util';\nimport { pick, kebabCase } from '.';\n/**\n * @desc 生成 html-statistic 的 style 字符串 (兼容 canvas 的 shapeStyle 到 css样式上)\n *\n * @param width\n * @param style\n */\nexport function adapteStyle(style) {\n var styleObject = {\n overflow: 'hidden',\n 'white-space': 'nowrap',\n 'text-overflow': 'ellipsis',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n };\n var shapeStyleKeys = [\n 'stroke',\n 'lineWidth',\n 'shadowColor',\n 'strokeOpacity',\n 'shadowBlur',\n 'shadowOffsetX',\n 'shadowOffsetY',\n 'fill',\n ];\n // 兼容 shapeStyle 设置 · start\n if (get(style, 'fill')) {\n styleObject['color'] = style['fill'];\n }\n var _a = pick(style, shapeStyleKeys), shadowColor = _a.shadowColor, _b = _a.shadowBlur, shadowBlur = _b === void 0 ? 0 : _b, _c = _a.shadowOffsetX, shadowOffsetX = _c === void 0 ? 0 : _c, _d = _a.shadowOffsetY, shadowOffsetY = _d === void 0 ? 0 : _d;\n styleObject['text-shadow'] = \"\" + [shadowColor, shadowOffsetX + \"px\", shadowOffsetY + \"px\", shadowBlur + \"px\"].join(' ');\n var _e = pick(style, shapeStyleKeys), stroke = _e.stroke, _f = _e.lineWidth, lineWidth = _f === void 0 ? 0 : _f;\n styleObject['-webkit-text-stroke'] = \"\" + [lineWidth + \"px\", stroke].join(' ');\n // 兼容 shapeStyle 设置 · end\n each(style, function (v, k) {\n // 兼容 shapeStyle 的 fontSize 没有单位\n if (['fontSize'].includes(k) && isNumber(v)) {\n styleObject[kebabCase(k)] = v + \"px\";\n }\n else if (k && !shapeStyleKeys.includes(k)) {\n styleObject[kebabCase(k)] = \"\" + v;\n }\n });\n return styleObject;\n}\n/**\n * @desc 设置 html-statistic 容器的默认样式\n *\n * - 默认事件穿透\n */\nexport function setStatisticContainerStyle(container, style) {\n container.style['pointer-events'] = 'none';\n each(style, function (v, k) {\n if (k && v) {\n container.style[k] = v;\n }\n });\n}\n/**\n * 渲染环图 html-annotation(默认 position 居中 [50%, 50%])\n * @param chart\n * @param options\n * @param meta 字段元信息\n * @param {optional} datum 当前的元数据\n */\nexport var renderStatistic = function (chart, options, datum) {\n var statistic = options.statistic, plotType = options.plotType;\n var titleOpt = statistic.title, contentOpt = statistic.content;\n [titleOpt, contentOpt].forEach(function (option, idx) {\n if (!option) {\n return;\n }\n var transform = '';\n if (idx === 0) {\n transform = contentOpt ? 'translate(-50%, -100%)' : 'translate(-50%, -50%)';\n }\n else {\n transform = titleOpt ? 'translate(-50%, 0)' : 'translate(-50%, -50%)';\n }\n var style = isFunction(option.style) ? option.style(datum) : option.style;\n chart.annotation().html(__assign({ position: ['50%', '50%'], html: function (container, view) {\n var coordinate = view.getCoordinate();\n var containerW = 0;\n if (plotType === 'pie' || plotType === 'ring-progress') {\n containerW = coordinate.getRadius() * coordinate.innerRadius * 2;\n }\n else if (plotType === 'liquid') {\n var liquidShape = get(view.geometries, [0, 'elements', 0, 'shape']);\n if (liquidShape) {\n // 获取到水波图边框大小\n var path = liquidShape.find(function (t) { return t.get('name') === 'wrap'; });\n var width = path.getCanvasBBox().width;\n containerW = width;\n }\n }\n else if (!containerW) {\n // 保底方案\n containerW = coordinate.getWidth();\n }\n setStatisticContainerStyle(container, __assign({ width: containerW + \"px\", transform: transform }, adapteStyle(style)));\n var filteredData = view.getData();\n if (option.customHtml) {\n return option.customHtml(container, view, datum, filteredData);\n }\n var text = option.content;\n if (option.formatter) {\n text = option.formatter(datum, filteredData);\n }\n // todo G2 层修复可以返回空字符串 & G2 层修复允许返回非字符串的内容,比如数值 number\n return text ? (isString(text) ? text : \"\" + text) : '
';\n }, \n // @ts-ignore\n key: (idx === 0 ? 'top' : 'bottom') + \"-statistic\" }, pick(option, ['offsetX', 'offsetY', 'rotate', 'style', 'formatter']) /** 透传配置 */));\n });\n};\n/**\n * 渲染 html-annotation for gauge (等不规则 plot), 默认 position 居中居底 [50%, 100%])\n * @param chart\n * @param options\n * @param meta 字段元信息\n * @param {optional} datum 当前的元数据\n */\nexport var renderGaugeStatistic = function (chart, options, datum) {\n var statistic = options.statistic;\n var titleOpt = statistic.title, contentOpt = statistic.content;\n [titleOpt, contentOpt].forEach(function (option) {\n if (!option) {\n return;\n }\n var style = isFunction(option.style) ? option.style(datum) : option.style;\n chart.annotation().html(__assign({ position: ['50%', '100%'], html: function (container, view) {\n var coordinate = view.getCoordinate();\n // 弧形的坐标\n var polarCoord = view.views[0].getCoordinate();\n var polarCenter = polarCoord.getCenter();\n var polarRadius = polarCoord.getRadius();\n var polarMaxY = Math.max(Math.sin(polarCoord.startAngle), Math.sin(polarCoord.endAngle)) * polarRadius;\n var offsetY = polarCenter.y + polarMaxY - coordinate.y.start - parseFloat(get(style, 'fontSize', 0));\n var containerWidth = coordinate.getRadius() * coordinate.innerRadius * 2;\n setStatisticContainerStyle(container, __assign({ width: containerWidth + \"px\", transform: \"translate(-50%, \" + offsetY + \"px)\" }, adapteStyle(style)));\n var filteredData = view.getData();\n if (option.customHtml) {\n return option.customHtml(container, view, datum, filteredData);\n }\n var text = option.content;\n if (option.formatter) {\n text = option.formatter(datum, filteredData);\n }\n // todo G2 层修复可以返回空字符串 & G2 层修复允许返回非字符串的内容,比如数值 number\n return text ? (isString(text) ? text : \"\" + text) : '
';\n } }, pick(option, ['offsetX', 'offsetY', 'rotate', 'style', 'formatter']) /** 透传配置 */));\n });\n};\n//# sourceMappingURL=statistic.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor, meta } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constants';\nimport { getTinyData } from './utils';\nvar TinyLine = /** @class */ (function (_super) {\n __extends(TinyLine, _super);\n function TinyLine() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'tiny-line';\n return _this;\n }\n /**\n * 获取默认配置项\n * 供外部使用\n */\n TinyLine.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n /**\n * @override\n * @param data\n */\n TinyLine.prototype.changeData = function (data) {\n this.updateOption({ data: data });\n var _a = this, chart = _a.chart, options = _a.options;\n meta({ chart: chart, options: options });\n chart.changeData(getTinyData(data));\n };\n TinyLine.prototype.getDefaultOptions = function () {\n return TinyLine.getDefaultOptions();\n };\n /**\n * 获取 迷你折线图 的适配器\n */\n TinyLine.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return TinyLine;\n}(Plot));\nexport { TinyLine };\n//# sourceMappingURL=index.js.map","import { __assign, __extends } from \"tslib\";\nimport { Action, Util } from '@antv/g2';\nimport { get } from '@antv/util';\nimport { deepAssign, normalPadding } from '../../utils';\nvar PADDING_RIGHT = 10;\nvar PADDING_TOP = 5;\n/**\n * Action 中的 Button 按钮配置\n *\n * 可能的使用场景:brush filter\n */\nexport var BUTTON_ACTION_CONFIG = {\n padding: [8, 10],\n text: 'reset',\n textStyle: {\n default: {\n x: 0,\n y: 0,\n fontSize: 12,\n fill: '#333333',\n cursor: 'pointer',\n },\n },\n buttonStyle: {\n default: {\n fill: '#f7f7f7',\n stroke: '#cccccc',\n cursor: 'pointer',\n },\n active: {\n fill: '#e6e6e6',\n },\n },\n};\n/**\n * @override 复写 G2 Button Action, 后续直接使用 GUI\n */\nvar ButtonAction = /** @class */ (function (_super) {\n __extends(ButtonAction, _super);\n function ButtonAction() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.buttonGroup = null;\n _this.buttonCfg = __assign({ name: 'button' }, BUTTON_ACTION_CONFIG);\n return _this;\n }\n /**\n * 获取 mix 默认的配置和用户配置\n */\n ButtonAction.prototype.getButtonCfg = function () {\n var view = this.context.view;\n var buttonCfg = get(view, ['interactions', 'filter-action', 'cfg', 'buttonConfig']);\n return deepAssign(this.buttonCfg, buttonCfg, this.cfg);\n };\n /**\n * 绘制 Button 和 文本\n */\n ButtonAction.prototype.drawButton = function () {\n var config = this.getButtonCfg();\n var group = this.context.view.foregroundGroup.addGroup({\n name: config.name,\n });\n var textShape = this.drawText(group);\n this.drawBackground(group, textShape.getBBox());\n this.buttonGroup = group;\n };\n /**\n * 绘制文本\n */\n ButtonAction.prototype.drawText = function (group) {\n var _a;\n var config = this.getButtonCfg();\n // 添加文本\n return group.addShape({\n type: 'text',\n name: 'button-text',\n attrs: __assign({ text: config.text }, (_a = config.textStyle) === null || _a === void 0 ? void 0 : _a.default),\n });\n };\n ButtonAction.prototype.drawBackground = function (group, bbox) {\n var _a;\n var config = this.getButtonCfg();\n var padding = normalPadding(config.padding);\n // 添加背景按钮\n var buttonShape = group.addShape({\n type: 'rect',\n name: 'button-rect',\n attrs: __assign({ x: bbox.x - padding[3], y: bbox.y - padding[0], width: bbox.width + padding[1] + padding[3], height: bbox.height + padding[0] + padding[2] }, (_a = config.buttonStyle) === null || _a === void 0 ? void 0 : _a.default),\n });\n buttonShape.toBack(); // 在后面\n // active 效果内置\n group.on('mouseenter', function () {\n var _a;\n buttonShape.attr((_a = config.buttonStyle) === null || _a === void 0 ? void 0 : _a.active);\n });\n group.on('mouseleave', function () {\n var _a;\n buttonShape.attr((_a = config.buttonStyle) === null || _a === void 0 ? void 0 : _a.default);\n });\n return buttonShape;\n };\n // 重置位置\n ButtonAction.prototype.resetPosition = function () {\n var view = this.context.view;\n var coord = view.getCoordinate();\n var point = coord.convert({ x: 1, y: 1 }); // 后面直接改成左上角\n var buttonGroup = this.buttonGroup;\n var bbox = buttonGroup.getBBox();\n var matrix = Util.transform(null, [\n ['t', point.x - bbox.width - PADDING_RIGHT, point.y + bbox.height + PADDING_TOP],\n ]);\n buttonGroup.setMatrix(matrix);\n };\n /**\n * 显示\n */\n ButtonAction.prototype.show = function () {\n if (!this.buttonGroup) {\n this.drawButton();\n }\n this.resetPosition();\n this.buttonGroup.show();\n };\n /**\n * 隐藏\n */\n ButtonAction.prototype.hide = function () {\n if (this.buttonGroup) {\n this.buttonGroup.hide();\n }\n };\n /**\n * 销毁\n */\n ButtonAction.prototype.destroy = function () {\n var buttonGroup = this.buttonGroup;\n if (buttonGroup) {\n buttonGroup.remove();\n }\n _super.prototype.destroy.call(this);\n };\n return ButtonAction;\n}(Action));\nexport { ButtonAction };\n//# sourceMappingURL=reset-button.js.map","import { registerAction, registerInteraction } from '@antv/g2';\nimport { ButtonAction } from './actions/reset-button';\nregisterAction('brush-reset-button', ButtonAction, {\n name: 'brush-reset-button',\n});\nregisterInteraction('filter-action', {});\n/**\n * G2 已经内置了 brush、brush-x、brush-y 等交互,其它:\n *\n * 1. element-range-highlight 是否可用重命名为 brush-highlight?(mask 可以移动)\n * 2. brush-visible 与 brush 的区别是?\n */\nfunction isPointInView(context) {\n return context.isInPlot();\n}\n/**\n * 获取 交互 start 阶段的相关配置\n */\nexport function getInteractionCfg(interactionType, brushType, mask) {\n var maskType = brushType || 'rect';\n switch (interactionType) {\n case 'brush':\n return {\n showEnable: [\n { trigger: 'plot:mouseenter', action: 'cursor:crosshair' },\n { trigger: 'plot:mouseleave', action: 'cursor:default' },\n ],\n start: [\n {\n trigger: 'mousedown',\n isEnable: isPointInView,\n action: ['brush:start', maskType + \"-mask:start\", maskType + \"-mask:show\"],\n // 对应第二个action的参数\n arg: [null, { maskStyle: mask === null || mask === void 0 ? void 0 : mask.style }],\n },\n ],\n processing: [\n {\n trigger: 'mousemove',\n isEnable: isPointInView,\n action: [maskType + \"-mask:resize\"],\n },\n ],\n end: [\n {\n trigger: 'mouseup',\n isEnable: isPointInView,\n action: [\n 'brush:filter',\n 'brush:end',\n maskType + \"-mask:end\",\n maskType + \"-mask:hide\",\n 'brush-reset-button:show',\n ],\n },\n ],\n rollback: [\n {\n trigger: 'brush-reset-button:click',\n action: ['brush:reset', 'brush-reset-button:hide', 'cursor:crosshair'],\n },\n ],\n };\n case 'brush-highlight':\n return {\n showEnable: [\n { trigger: 'plot:mouseenter', action: 'cursor:crosshair' },\n { trigger: 'mask:mouseenter', action: 'cursor:move' },\n { trigger: 'plot:mouseleave', action: 'cursor:default' },\n { trigger: 'mask:mouseleave', action: 'cursor:crosshair' },\n ],\n start: [\n {\n trigger: 'plot:mousedown',\n isEnable: function (context) {\n // 不要点击在 mask 上重新开始\n return !context.isInShape('mask');\n },\n action: [maskType + \"-mask:start\", maskType + \"-mask:show\"],\n // 对应第 1 个action的参数\n arg: [{ maskStyle: mask === null || mask === void 0 ? void 0 : mask.style }],\n },\n {\n trigger: 'mask:dragstart',\n action: [maskType + \"-mask:moveStart\"],\n },\n ],\n processing: [\n {\n trigger: 'plot:mousemove',\n action: [maskType + \"-mask:resize\"],\n },\n {\n trigger: 'mask:drag',\n action: [maskType + \"-mask:move\"],\n },\n {\n trigger: 'mask:change',\n action: ['element-range-highlight:highlight'],\n },\n ],\n end: [\n { trigger: 'plot:mouseup', action: [maskType + \"-mask:end\"] },\n { trigger: 'mask:dragend', action: [maskType + \"-mask:moveEnd\"] },\n {\n trigger: 'document:mouseup',\n isEnable: function (context) {\n return !context.isInPlot();\n },\n action: ['element-range-highlight:clear', maskType + \"-mask:end\", maskType + \"-mask:hide\"],\n },\n ],\n rollback: [{ trigger: 'dblclick', action: ['element-range-highlight:clear', maskType + \"-mask:hide\"] }],\n };\n case 'brush-x':\n return {\n showEnable: [\n { trigger: 'plot:mouseenter', action: 'cursor:crosshair' },\n { trigger: 'plot:mouseleave', action: 'cursor:default' },\n ],\n start: [\n {\n trigger: 'mousedown',\n isEnable: isPointInView,\n action: ['brush-x:start', maskType + \"-mask:start\", maskType + \"-mask:show\"],\n // 对应第二个action的参数\n arg: [null, { maskStyle: mask === null || mask === void 0 ? void 0 : mask.style }],\n },\n ],\n processing: [\n {\n trigger: 'mousemove',\n isEnable: isPointInView,\n action: [maskType + \"-mask:resize\"],\n },\n ],\n end: [\n {\n trigger: 'mouseup',\n isEnable: isPointInView,\n action: ['brush-x:filter', 'brush-x:end', maskType + \"-mask:end\", maskType + \"-mask:hide\"],\n },\n ],\n rollback: [{ trigger: 'dblclick', action: ['brush-x:reset'] }],\n };\n case 'brush-x-highlight':\n return {\n showEnable: [\n { trigger: 'plot:mouseenter', action: 'cursor:crosshair' },\n { trigger: 'mask:mouseenter', action: 'cursor:move' },\n { trigger: 'plot:mouseleave', action: 'cursor:default' },\n { trigger: 'mask:mouseleave', action: 'cursor:crosshair' },\n ],\n start: [\n {\n trigger: 'plot:mousedown',\n isEnable: function (context) {\n // 不要点击在 mask 上重新开始\n return !context.isInShape('mask');\n },\n action: [maskType + \"-mask:start\", maskType + \"-mask:show\"],\n // 对应第 1 个action的参数\n arg: [{ maskStyle: mask === null || mask === void 0 ? void 0 : mask.style }],\n },\n {\n trigger: 'mask:dragstart',\n action: [maskType + \"-mask:moveStart\"],\n },\n ],\n processing: [\n {\n trigger: 'plot:mousemove',\n action: [maskType + \"-mask:resize\"],\n },\n {\n trigger: 'mask:drag',\n action: [maskType + \"-mask:move\"],\n },\n {\n trigger: 'mask:change',\n action: ['element-range-highlight:highlight'],\n },\n ],\n end: [\n { trigger: 'plot:mouseup', action: [maskType + \"-mask:end\"] },\n { trigger: 'mask:dragend', action: [maskType + \"-mask:moveEnd\"] },\n {\n trigger: 'document:mouseup',\n isEnable: function (context) {\n return !context.isInPlot();\n },\n action: ['element-range-highlight:clear', maskType + \"-mask:end\", maskType + \"-mask:hide\"],\n },\n ],\n rollback: [{ trigger: 'dblclick', action: ['element-range-highlight:clear', maskType + \"-mask:hide\"] }],\n };\n case 'brush-y':\n return {\n showEnable: [\n { trigger: 'plot:mouseenter', action: 'cursor:crosshair' },\n { trigger: 'plot:mouseleave', action: 'cursor:default' },\n ],\n start: [\n {\n trigger: 'mousedown',\n isEnable: isPointInView,\n action: ['brush-y:start', maskType + \"-mask:start\", maskType + \"-mask:show\"],\n // 对应第二个action的参数\n arg: [null, { maskStyle: mask === null || mask === void 0 ? void 0 : mask.style }],\n },\n ],\n processing: [\n {\n trigger: 'mousemove',\n isEnable: isPointInView,\n action: [maskType + \"-mask:resize\"],\n },\n ],\n end: [\n {\n trigger: 'mouseup',\n isEnable: isPointInView,\n action: ['brush-y:filter', 'brush-y:end', maskType + \"-mask:end\", maskType + \"-mask:hide\"],\n },\n ],\n rollback: [{ trigger: 'dblclick', action: ['brush-y:reset'] }],\n };\n case 'brush-y-highlight':\n return {\n showEnable: [\n { trigger: 'plot:mouseenter', action: 'cursor:crosshair' },\n { trigger: 'mask:mouseenter', action: 'cursor:move' },\n { trigger: 'plot:mouseleave', action: 'cursor:default' },\n { trigger: 'mask:mouseleave', action: 'cursor:crosshair' },\n ],\n start: [\n {\n trigger: 'plot:mousedown',\n isEnable: function (context) {\n // 不要点击在 mask 上重新开始\n return !context.isInShape('mask');\n },\n action: [maskType + \"-mask:start\", maskType + \"-mask:show\"],\n // 对应第 1 个action的参数\n arg: [{ maskStyle: mask === null || mask === void 0 ? void 0 : mask.style }],\n },\n {\n trigger: 'mask:dragstart',\n action: [maskType + \"-mask:moveStart\"],\n },\n ],\n processing: [\n {\n trigger: 'plot:mousemove',\n action: [maskType + \"-mask:resize\"],\n },\n {\n trigger: 'mask:drag',\n action: [maskType + \"-mask:move\"],\n },\n {\n trigger: 'mask:change',\n action: ['element-range-highlight:highlight'],\n },\n ],\n end: [\n { trigger: 'plot:mouseup', action: [maskType + \"-mask:end\"] },\n { trigger: 'mask:dragend', action: [maskType + \"-mask:moveEnd\"] },\n {\n trigger: 'document:mouseup',\n isEnable: function (context) {\n return !context.isInPlot();\n },\n action: ['element-range-highlight:clear', maskType + \"-mask:end\", maskType + \"-mask:hide\"],\n },\n ],\n rollback: [{ trigger: 'dblclick', action: ['element-range-highlight:clear', maskType + \"-mask:hide\"] }],\n };\n default:\n return {};\n }\n}\n// 直接拷贝过来的\nregisterInteraction('brush', getInteractionCfg('brush'));\n// 复写 element-range-highlight interaction\nregisterInteraction('brush-highlight', getInteractionCfg('brush-highlight'));\n// 复写\nregisterInteraction('brush-x', getInteractionCfg('brush-x', 'x-rect'));\n// 复写\nregisterInteraction('brush-y', getInteractionCfg('brush-y', 'y-rect'));\n// 新增, x 框选高亮\nregisterInteraction('brush-x-highlight', getInteractionCfg('brush-x-highlight', 'x-rect'));\n// 新增, y 框选高亮\nregisterInteraction('brush-y-highlight', getInteractionCfg('brush-y-highlight', 'y-rect'));\n//# sourceMappingURL=brush.js.map","import { filter } from '@antv/util';\nimport { getInteractionCfg } from '../interactions/brush';\nimport { deepAssign } from '../utils';\n/** 先引入brush 交互 */\nimport '../interactions/brush';\nvar BRUSH_TYPES = ['brush', 'brush-x', 'brush-y', 'brush-highlight', 'brush-x-highlight', 'brush-y-highlight'];\n/**\n * brush 交互\n */\nexport function brushInteraction(params) {\n var options = params.options;\n var brush = options.brush;\n // 先过滤掉 brush 等交互\n var interactions = filter(options.interactions || [], function (i) { return BRUSH_TYPES.indexOf(i.type) === -1; });\n // 设置 brush 交互\n if (brush === null || brush === void 0 ? void 0 : brush.enabled) {\n BRUSH_TYPES.forEach(function (type) {\n var _a;\n var enable = false;\n switch (brush.type) {\n case 'x-rect':\n enable = type === (brush.action === 'highlight' ? 'brush-x-highlight' : 'brush-x');\n break;\n case 'y-rect':\n enable = type === (brush.action === 'highlight' ? 'brush-y-highlight' : 'brush-y');\n break;\n default:\n enable = type === (brush.action === 'highlight' ? 'brush-highlight' : 'brush');\n break;\n }\n var obj = { type: type, enable: enable };\n if (((_a = brush.mask) === null || _a === void 0 ? void 0 : _a.style) || brush.type) {\n obj.cfg = getInteractionCfg(type, brush.type, brush.mask);\n }\n interactions.push(obj);\n });\n // 塞入 button 配置 (G2Plot 的封装)\n if ((brush === null || brush === void 0 ? void 0 : brush.action) !== 'highlight') {\n interactions.push({\n type: 'filter-action',\n cfg: {\n buttonConfig: brush.button,\n },\n });\n }\n }\n return deepAssign({}, params, { options: { interactions: interactions } });\n}\n//# sourceMappingURL=brush.js.map","import { __extends } from \"tslib\";\nimport { Util, Action } from '@antv/g2';\nimport { isEqual } from '@antv/util';\nimport { transform } from '../../../../utils/matrix';\n/**\n * 饼图 图例激活 action\n */\nvar PieLegendAction = /** @class */ (function (_super) {\n __extends(PieLegendAction, _super);\n function PieLegendAction() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * 获取激活的图形元素\n */\n PieLegendAction.prototype.getActiveElements = function () {\n var delegateObject = Util.getDelegationObject(this.context);\n if (delegateObject) {\n var view = this.context.view;\n var component = delegateObject.component, item_1 = delegateObject.item;\n var field_1 = component.get('field');\n if (field_1) {\n var elements = view.geometries[0].elements;\n return elements.filter(function (ele) { return ele.getModel().data[field_1] === item_1.value; });\n }\n }\n return [];\n };\n /**\n * 获取激活的标签\n */\n PieLegendAction.prototype.getActiveElementLabels = function () {\n var view = this.context.view;\n var elements = this.getActiveElements();\n var labels = view.geometries[0].labelsContainer.getChildren();\n return labels.filter(function (label) { return elements.find(function (ele) { return isEqual(ele.getData(), label.get('data')); }); });\n };\n PieLegendAction.prototype.transfrom = function (offset) {\n if (offset === void 0) { offset = 7.5; }\n var elements = this.getActiveElements();\n var elementLabels = this.getActiveElementLabels();\n elements.forEach(function (element, idx) {\n var labelShape = elementLabels[idx];\n var coordinate = element.geometry.coordinate;\n if (coordinate.isPolar && coordinate.isTransposed) {\n var _a = Util.getAngle(element.getModel(), coordinate), startAngle = _a.startAngle, endAngle = _a.endAngle;\n var middleAngle = (startAngle + endAngle) / 2;\n var r = offset;\n var x = r * Math.cos(middleAngle);\n var y = r * Math.sin(middleAngle);\n element.shape.setMatrix(transform([['t', x, y]]));\n labelShape.setMatrix(transform([['t', x, y]]));\n }\n });\n };\n PieLegendAction.prototype.active = function () {\n this.transfrom();\n };\n /**\n * 激活态还原\n */\n PieLegendAction.prototype.reset = function () {\n this.transfrom(0);\n };\n return PieLegendAction;\n}(Action));\nexport { PieLegendAction };\n//# sourceMappingURL=legend-active.js.map","/**\n * 获取当前事件相关的图表元素\n * @param context 交互的上下文\n * @ignore\n */\nexport function getCurrentElement(context) {\n var event = context.event;\n var element;\n var target = event.target;\n if (target) {\n element = target.get('element');\n }\n return element;\n}\n//# sourceMappingURL=util.js.map","import { __extends } from \"tslib\";\nimport { Action, Util } from '@antv/g2';\nimport { each, get } from '@antv/util';\nimport { renderStatistic } from '../../../../utils/statistic';\nimport { getCurrentElement } from '../util';\n/**\n * Pie 中心文本事件的 Action\n */\nvar StatisticAction = /** @class */ (function (_super) {\n __extends(StatisticAction, _super);\n function StatisticAction() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n StatisticAction.prototype.getAnnotations = function (_view) {\n var view = _view || this.context.view;\n // @ts-ignore\n return view.getController('annotation').option;\n };\n StatisticAction.prototype.getInitialAnnotation = function () {\n return this.initialAnnotation;\n };\n StatisticAction.prototype.init = function () {\n var _this = this;\n var view = this.context.view;\n view.removeInteraction('tooltip');\n view.on('afterchangesize', function () {\n var annotations = _this.getAnnotations(view);\n _this.initialAnnotation = annotations;\n });\n };\n StatisticAction.prototype.change = function (arg) {\n var _a = this.context, view = _a.view, event = _a.event;\n if (!this.initialAnnotation) {\n this.initialAnnotation = this.getAnnotations();\n }\n var data = get(event, ['data', 'data']);\n if (event.type.match('legend-item')) {\n var delegateObject = Util.getDelegationObject(this.context);\n // @ts-ignore\n var colorField_1 = view.getGroupedFields()[0];\n if (delegateObject && colorField_1) {\n var item_1 = delegateObject.item;\n data = view.getData().find(function (d) { return d[colorField_1] === item_1.value; });\n }\n }\n if (data) {\n var annotations = get(arg, 'annotations', []);\n var statistic = get(arg, 'statistic', {});\n // 先清空标注,再重新渲染\n view.getController('annotation').clear(true);\n // 先进行其他 annotations,再去渲染统计文本\n each(annotations, function (annotation) {\n if (typeof annotation === 'object') {\n view.annotation()[annotation.type](annotation);\n }\n });\n renderStatistic(view, { statistic: statistic, plotType: 'pie' }, data);\n view.render(true);\n }\n // 交互的时候,把 shape 提前\n var ele = getCurrentElement(this.context);\n if (ele) {\n ele.shape.toFront();\n }\n };\n StatisticAction.prototype.reset = function () {\n var view = this.context.view;\n var annotationController = view.getController('annotation');\n annotationController.clear(true);\n var initialStatistic = this.getInitialAnnotation();\n each(initialStatistic, function (a) {\n view.annotation()[a.type](a);\n });\n view.render(true);\n };\n return StatisticAction;\n}(Action));\nexport { StatisticAction };\n//# sourceMappingURL=statistic-active.js.map","import { registerAction, registerInteraction } from '@antv/g2';\nimport { PieLegendAction } from './actions/legend-active';\nimport { StatisticAction } from './actions/statistic-active';\nexport var PIE_STATISTIC = 'pie-statistic';\nregisterAction(PIE_STATISTIC, StatisticAction);\nregisterInteraction('pie-statistic-active', {\n start: [{ trigger: 'element:mouseenter', action: 'pie-statistic:change' }],\n end: [{ trigger: 'element:mouseleave', action: 'pie-statistic:reset' }],\n});\nregisterAction('pie-legend', PieLegendAction);\nregisterInteraction('pie-legend-active', {\n start: [{ trigger: 'legend-item:mouseenter', action: 'pie-legend:active' }],\n end: [{ trigger: 'legend-item:mouseleave', action: 'pie-legend:reset' }],\n});\n//# sourceMappingURL=index.js.map","import { __assign, __extends } from \"tslib\";\nimport { Action, Util } from '@antv/g2';\nimport { get, last, isNil, size } from '@antv/util';\nimport { deepAssign } from '../../utils/deep-assign';\n// 面包屑文字和分割符'/'之间的距离\nvar PADDING = 4;\n// 面包屑位置距离树图的距离\nvar PADDING_LEFT = 0;\n// 面包屑位置距离树图的顶部距离\nexport var PADDING_TOP = 5;\n/** Group name of breadCrumb: 面包屑 */\nexport var BREAD_CRUMB_NAME = 'drilldown-bread-crumb';\n// 面包屑默认配置\nexport var DEFAULT_BREAD_CRUMB_CONFIG = {\n /** 位置,默认:左上角 */\n position: 'top-left',\n dividerText: '/',\n textStyle: {\n fontSize: 12,\n fill: 'rgba(0, 0, 0, 0.65)',\n cursor: 'pointer',\n },\n activeTextStyle: {\n fill: '#87B5FF',\n },\n};\n/**\n * hierarchy 数据转换的参数\n */\nexport var HIERARCHY_DATA_TRANSFORM_PARAMS = 'hierarchy-data-transform-params';\n/**\n * @description 下钻交互的 action\n * @author liuzhenying\n *\n * 适用于:hierarchy plot\n */\nvar DrillDownAction = /** @class */ (function (_super) {\n __extends(DrillDownAction, _super);\n function DrillDownAction() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** Action name */\n _this.name = 'drill-down';\n // 存储历史下钻数据\n _this.historyCache = [];\n // 面包屑 group\n _this.breadCrumbGroup = null;\n // 面包屑基础配置\n _this.breadCrumbCfg = DEFAULT_BREAD_CRUMB_CONFIG;\n return _this;\n }\n /**\n * 点击事件, 下钻数据,并绘制面包屑\n */\n DrillDownAction.prototype.click = function () {\n var data = get(this.context, ['event', 'data', 'data']);\n if (!data)\n return false;\n this.drill(data);\n this.drawBreadCrumb();\n };\n /**\n * 重置位置,初始化及触发 chart afterchangesize 回调时使用\n */\n DrillDownAction.prototype.resetPosition = function () {\n // 当在第一层级未绘制面包屑,此时 changedata 触发 resetPosition 函数,需判断 this.breadCrumbGroup 是否存在\n if (!this.breadCrumbGroup)\n return;\n var coordinate = this.context.view.getCoordinate();\n var breadCrumbGroup = this.breadCrumbGroup;\n var bbox = breadCrumbGroup.getBBox();\n var position = this.getButtonCfg().position;\n // @todo 后续抽取一个函数来处理,以及增加 margin 或者 padding 的设置\n // 非 polar 的,需要使用 coordinate,除却图表组件\n var point = { x: coordinate.start.x, y: coordinate.end.y - (bbox.height + PADDING_TOP * 2) };\n if (coordinate.isPolar) {\n // 默认,左上角直接出发\n point = { x: 0, y: 0 };\n }\n if (position === 'bottom-left') {\n // 涉及到坐标反转的问题\n point = { x: coordinate.start.x, y: coordinate.start.y };\n }\n /** PADDING_LEFT, PADDING_TOP 与画布边缘的距离 */\n var matrix = Util.transform(null, [['t', point.x + PADDING_LEFT, point.y + bbox.height + PADDING_TOP]]);\n breadCrumbGroup.setMatrix(matrix);\n };\n /**\n * 返回上一层\n */\n DrillDownAction.prototype.back = function () {\n if (size(this.historyCache)) {\n this.backTo(this.historyCache.slice(0, -1));\n }\n };\n /**\n * 重置\n */\n DrillDownAction.prototype.reset = function () {\n if (this.historyCache[0]) {\n this.backTo(this.historyCache.slice(0, 1));\n }\n // 清空\n this.historyCache = [];\n this.hideCrumbGroup();\n };\n /**\n * 下钻数据并更新 view 显示层\n * @param nodeInfo 下钻数据\n */\n DrillDownAction.prototype.drill = function (nodeInfo) {\n var view = this.context.view;\n var transformData = get(view, ['interactions', 'drill-down', 'cfg', 'transformData'], function (v) { return v; });\n // 重新 update 数据\n var drillData = transformData(__assign({ data: nodeInfo.data }, nodeInfo[HIERARCHY_DATA_TRANSFORM_PARAMS]));\n view.changeData(drillData);\n // 存储历史记录\n var historyCache = [];\n var node = nodeInfo;\n while (node) {\n var nodeData = node.data;\n historyCache.unshift({\n id: nodeData.name + \"_\" + node.height + \"_\" + node.depth,\n name: nodeData.name,\n // children 是实际数据\n children: transformData(__assign({ data: nodeData }, nodeInfo[HIERARCHY_DATA_TRANSFORM_PARAMS])),\n });\n node = node.parent;\n }\n this.historyCache = (this.historyCache || []).slice(0, -1).concat(historyCache);\n };\n /**\n * 回退事件,点击面包屑时触发\n * @param historyCache 当前要回退到的历史\n */\n DrillDownAction.prototype.backTo = function (historyCache) {\n if (!historyCache || historyCache.length <= 0) {\n return;\n }\n var view = this.context.view;\n var data = last(historyCache).children; // 处理后的数组\n view.changeData(data);\n if (historyCache.length > 1) {\n this.historyCache = historyCache;\n this.drawBreadCrumb();\n }\n else {\n // 清空\n this.historyCache = [];\n this.hideCrumbGroup();\n }\n };\n /**\n * 获取 mix 默认的配置和用户配置\n */\n DrillDownAction.prototype.getButtonCfg = function () {\n var view = this.context.view;\n var drillDownConfig = get(view, ['interactions', 'drill-down', 'cfg', 'drillDownConfig']);\n return deepAssign(this.breadCrumbCfg, drillDownConfig === null || drillDownConfig === void 0 ? void 0 : drillDownConfig.breadCrumb, this.cfg);\n };\n /**\n * 显示面包屑\n */\n DrillDownAction.prototype.drawBreadCrumb = function () {\n this.drawBreadCrumbGroup();\n this.resetPosition();\n this.breadCrumbGroup.show();\n };\n /**\n * 绘制 Button 和 文本\n */\n DrillDownAction.prototype.drawBreadCrumbGroup = function () {\n var _this = this;\n var config = this.getButtonCfg();\n var cache = this.historyCache;\n // 初始化面包屑 group\n if (!this.breadCrumbGroup) {\n this.breadCrumbGroup = this.context.view.foregroundGroup.addGroup({\n name: BREAD_CRUMB_NAME,\n });\n }\n else {\n this.breadCrumbGroup.clear();\n }\n // 绘制面包屑\n var left = 0;\n cache.forEach(function (record, index) {\n // 添加文本\n var textShape = _this.breadCrumbGroup.addShape({\n type: 'text',\n id: record.id,\n name: BREAD_CRUMB_NAME + \"_\" + record.name + \"_text\",\n attrs: __assign(__assign({ text: index === 0 && !isNil(config.rootText) ? config.rootText : record.name }, config.textStyle), { x: left, y: 0 }),\n });\n var textShapeBox = textShape.getBBox();\n left += textShapeBox.width + PADDING;\n // 增加文本事件\n textShape.on('click', function (event) {\n var _a;\n var targetId = event.target.get('id');\n if (targetId !== ((_a = last(cache)) === null || _a === void 0 ? void 0 : _a.id)) {\n var newHistoryCache = cache.slice(0, cache.findIndex(function (d) { return d.id === targetId; }) + 1);\n _this.backTo(newHistoryCache);\n }\n });\n // active 效果内置\n textShape.on('mouseenter', function (event) {\n var _a;\n var targetId = event.target.get('id');\n if (targetId !== ((_a = last(cache)) === null || _a === void 0 ? void 0 : _a.id)) {\n textShape.attr(config.activeTextStyle);\n }\n else {\n textShape.attr({ cursor: 'default' });\n }\n });\n textShape.on('mouseleave', function () {\n textShape.attr(config.textStyle);\n });\n if (index < cache.length - 1) {\n // 添加反斜杠\n var dividerShape = _this.breadCrumbGroup.addShape({\n type: 'text',\n name: config.name + \"_\" + record.name + \"_divider\",\n attrs: __assign(__assign({ text: config.dividerText }, config.textStyle), { x: left, y: 0 }),\n });\n var dividerBox = dividerShape.getBBox();\n left += dividerBox.width + PADDING;\n }\n });\n };\n /**\n * 隐藏面包屑\n */\n DrillDownAction.prototype.hideCrumbGroup = function () {\n if (this.breadCrumbGroup) {\n this.breadCrumbGroup.hide();\n }\n };\n /**\n * @override\n * destroy: 销毁资源\n */\n DrillDownAction.prototype.destroy = function () {\n if (this.breadCrumbGroup) {\n this.breadCrumbGroup.remove();\n }\n _super.prototype.destroy.call(this);\n };\n return DrillDownAction;\n}(Action));\nexport { DrillDownAction };\n//# sourceMappingURL=drill-down.js.map","/**\n * 需要从轴配置中提取出来作为 meta 的属性 key 列表\n */\nexport var AXIS_META_CONFIG_KEYS = [\n 'type',\n 'alias',\n 'tickCount',\n 'tickInterval',\n 'min',\n 'max',\n 'nice',\n 'minLimit',\n 'maxLimit',\n // 坐标轴的范围\n 'range',\n 'tickMethod',\n // type: 'log' 的底\n 'base',\n // type: 'exp' 的指数\n 'exponent',\n // time 类型的格式化\n 'mask',\n // 是否同步\n 'sync',\n];\n//# sourceMappingURL=constant.js.map","import { __assign } from \"tslib\";\nimport { getTooltipMapping } from '../../utils/tooltip';\nimport { deepAssign } from '../../utils';\nimport { geometry } from './base';\n/**\n * point 辅助点的配置处理\n * @param params\n */\nexport function point(params) {\n var options = params.options;\n var point = options.point, xField = options.xField, yField = options.yField, seriesField = options.seriesField, sizeField = options.sizeField, shapeField = options.shapeField, tooltip = options.tooltip;\n var _a = getTooltipMapping(tooltip, [xField, yField, seriesField, sizeField, shapeField]), fields = _a.fields, formatter = _a.formatter;\n return point\n ? geometry(deepAssign({}, params, {\n options: {\n type: 'point',\n colorField: seriesField,\n shapeField: shapeField,\n tooltipFields: fields,\n mapping: __assign({ tooltip: formatter }, point),\n },\n }))\n : params;\n}\n//# sourceMappingURL=point.js.map","// from https://github.com/simple-statistics\n/**\n * This is the internal implementation of quantiles: when you know\n * that the order is sorted, you don't need to re-sort it, and the computations\n * are faster.\n *\n * @param {Array} x sample of one or more data points\n * @param {number} p desired quantile: a number between 0 to 1, inclusive\n * @returns {number} quantile value\n * @throws {Error} if p ix outside of the range from 0 to 1\n * @throws {Error} if x is empty\n * @example\n * quantileSorted([3, 6, 7, 8, 8, 9, 10, 13, 15, 16, 20], 0.5); // => 9\n */\nexport function quantileSorted(x, p) {\n var idx = x.length * p;\n if (x.length === 0) {\n throw new Error('quantile requires at least one data point.');\n }\n else if (p < 0 || p > 1) {\n throw new Error('quantiles must be between 0 and 1');\n }\n else if (p === 1) {\n // If p is 1, directly return the last element\n return x[x.length - 1];\n }\n else if (p === 0) {\n // If p is 0, directly return the first element\n return x[0];\n }\n else if (idx % 1 !== 0) {\n // If p is not integer, return the next element in array\n return x[Math.ceil(idx) - 1];\n }\n else if (x.length % 2 === 0) {\n // If the list has even-length, we'll take the average of this number\n // and the next value, if there is one\n return (x[idx - 1] + x[idx]) / 2;\n }\n else {\n // Finally, in the simple case of an integer value\n // with an odd-length list, return the x value at the index.\n return x[idx];\n }\n}\n/**\n * 交换数组位置\n * @param arr T[]\n * @param i number\n * @param j number\n */\nexport function swap(arr, i, j) {\n var tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n/**\n * Rearrange items in `arr` so that all items in `[left, k]` range are the smallest.\n * The `k`-th element will have the `(k - left + 1)`-th smallest value in `[left, right]`.\n *\n * Implements Floyd-Rivest selection algorithm https://en.wikipedia.org/wiki/Floyd-Rivest_algorithm\n *\n * @param {Array} arr input array\n * @param {number} k pivot index\n * @param {number} [left] left index\n * @param {number} [right] right index\n * @returns {void} mutates input array\n * @example\n * var arr = [65, 28, 59, 33, 21, 56, 22, 95, 50, 12, 90, 53, 28, 77, 39];\n * quickselect(arr, 8);\n * // = [39, 28, 28, 33, 21, 12, 22, 50, 53, 56, 59, 65, 90, 77, 95]\n */\nexport function quickselect(arr, k, left, right) {\n left = left || 0;\n right = right || arr.length - 1;\n while (right > left) {\n // 600 and 0.5 are arbitrary constants chosen in the original paper to minimize execution time\n if (right - left > 600) {\n var n = right - left + 1;\n var m = k - left + 1;\n var z = Math.log(n);\n var s = 0.5 * Math.exp((2 * z) / 3);\n var sd = 0.5 * Math.sqrt((z * s * (n - s)) / n);\n if (m - n / 2 < 0)\n sd *= -1;\n var newLeft = Math.max(left, Math.floor(k - (m * s) / n + sd));\n var newRight = Math.min(right, Math.floor(k + ((n - m) * s) / n + sd));\n quickselect(arr, k, newLeft, newRight);\n }\n var t = arr[k];\n var i = left;\n var j = right;\n swap(arr, left, k);\n if (arr[right] > t)\n swap(arr, left, right);\n while (i < j) {\n swap(arr, i, j);\n i++;\n j--;\n while (arr[i] < t)\n i++;\n while (arr[j] > t)\n j--;\n }\n if (arr[left] === t)\n swap(arr, left, j);\n else {\n j++;\n swap(arr, j, right);\n }\n if (j <= k)\n left = j + 1;\n if (k <= j)\n right = j - 1;\n }\n}\nfunction quantile(x, p) {\n var copy = x.slice();\n if (Array.isArray(p)) {\n // rearrange elements so that each element corresponding to a requested\n // quantile is on a place it would be if the array was fully sorted\n multiQuantileSelect(copy, p);\n // Initialize the result array\n var results = [];\n // For each requested quantile\n for (var i = 0; i < p.length; i++) {\n results[i] = quantileSorted(copy, p[i]);\n }\n return results;\n }\n else {\n var idx = quantileIndex(copy.length, p);\n quantileSelect(copy, idx, 0, copy.length - 1);\n return quantileSorted(copy, p);\n }\n}\nfunction quantileSelect(arr, k, left, right) {\n if (k % 1 === 0) {\n quickselect(arr, k, left, right);\n }\n else {\n k = Math.floor(k);\n quickselect(arr, k, left, right);\n quickselect(arr, k + 1, k + 1, right);\n }\n}\nfunction multiQuantileSelect(arr, p) {\n var indices = [0];\n for (var i = 0; i < p.length; i++) {\n indices.push(quantileIndex(arr.length, p[i]));\n }\n indices.push(arr.length - 1);\n indices.sort(compare);\n var stack = [0, indices.length - 1];\n while (stack.length) {\n var r = Math.ceil(stack.pop());\n var l = Math.floor(stack.pop());\n if (r - l <= 1)\n continue;\n var m = Math.floor((l + r) / 2);\n quantileSelect(arr, indices[m], Math.floor(indices[l]), Math.ceil(indices[r]));\n stack.push(l, m, m, r);\n }\n}\nfunction compare(a, b) {\n return a - b;\n}\nfunction quantileIndex(len, p) {\n var idx = len * p;\n if (p === 1) {\n // If p is 1, directly return the last index\n return len - 1;\n }\n else if (p === 0) {\n // If p is 0, directly return the first index\n return 0;\n }\n else if (idx % 1 !== 0) {\n // If index is not integer, return the next index in array\n return Math.ceil(idx) - 1;\n }\n else if (len % 2 === 0) {\n // If the list has even-length, we'll return the middle of two indices\n // around quantile to indicate that we need an average value of the two\n return idx - 0.5;\n }\n else {\n // Finally, in the simple case of an integer index\n // with an odd-length list, return the index\n return idx;\n }\n}\nexport { quantile };\n//# sourceMappingURL=quantile.js.map","import { __assign } from \"tslib\";\nimport { groupBy, min, max } from '@antv/util';\nimport pdf from 'pdfast';\nimport { quantile } from '../../utils/transform/quantile';\nexport var toBoxValue = function (values) {\n return {\n low: min(values),\n high: max(values),\n q1: quantile(values, 0.25),\n q3: quantile(values, 0.75),\n median: quantile(values, [0.5]),\n minMax: [min(values), max(values)],\n quantile: [quantile(values, 0.25), quantile(values, 0.75)],\n };\n};\nexport var toViolinValue = function (values, pdfOptions) {\n var pdfResults = pdf.create(values, pdfOptions);\n return {\n violinSize: pdfResults.map(function (result) { return result.y; }),\n violinY: pdfResults.map(function (result) { return result.x; }),\n };\n};\nexport var transformViolinData = function (options) {\n var xField = options.xField, yField = options.yField, seriesField = options.seriesField, data = options.data, kde = options.kde;\n /** 生成概率密度函数的配置 */\n var pdfOptions = {\n min: kde.min,\n max: kde.max,\n size: kde.sampleSize,\n width: kde.width,\n };\n // 无拆分\n if (!seriesField) {\n var group_1 = groupBy(data, xField);\n return Object.keys(group_1).map(function (x) {\n var records = group_1[x];\n var values = records.map(function (record) { return record[yField]; });\n return __assign(__assign({ x: x }, toViolinValue(values, pdfOptions)), toBoxValue(values));\n });\n }\n // 有拆分\n var resultList = [];\n var seriesGroup = groupBy(data, seriesField);\n Object.keys(seriesGroup).forEach(function (series) {\n var group = groupBy(seriesGroup[series], xField);\n return Object.keys(group).forEach(function (key) {\n var _a;\n var records = group[key];\n var values = records.map(function (record) { return record[yField]; });\n resultList.push(__assign(__assign((_a = { x: key }, _a[seriesField] = series, _a), toViolinValue(values, pdfOptions)), toBoxValue(values)));\n });\n });\n return resultList;\n};\n//# sourceMappingURL=utils.js.map","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\nexport var X_FIELD = 'x';\nexport var VIOLIN_Y_FIELD = 'violinY';\nexport var VIOLIN_SIZE_FIELD = 'violinSize';\nexport var MIN_MAX_FIELD = 'minMax';\nexport var QUANTILE_FIELD = 'quantile';\nexport var MEDIAN_FIELD = 'median';\nexport var VIOLIN_VIEW_ID = 'violin_view';\nexport var MIN_MAX_VIEW_ID = 'min_max_view';\nexport var QUANTILE_VIEW_ID = 'quantile_view';\nexport var MEDIAN_VIEW_ID = 'median_view';\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n // 多 view 组成,一定要设置 view padding 同步\n syncViewPadding: true,\n // 默认核函数\n kde: {\n type: 'triangular',\n sampleSize: 32,\n width: 3,\n },\n // 默认小提琴轮廓样式\n violinStyle: {\n lineWidth: 1,\n fillOpacity: 0.3,\n strokeOpacity: 0.75,\n },\n // 坐标轴\n xAxis: {\n grid: {\n line: null,\n },\n tickLine: {\n alignTick: false,\n },\n },\n yAxis: {\n grid: {\n line: {\n style: {\n lineWidth: 0.5,\n lineDash: [4, 4],\n },\n },\n },\n },\n // 图例\n legend: {\n position: 'top-left',\n },\n // Tooltip\n tooltip: {\n showMarkers: false,\n },\n});\n//# sourceMappingURL=constant.js.map","import { __assign } from \"tslib\";\nimport { get, set, omit, each } from '@antv/util';\nimport { interaction, theme, tooltip, annotation as baseAnnotation } from '../../adaptor/common';\nimport { interval, point, violin } from '../../adaptor/geometries';\nimport { flow, pick, deepAssign, findViewById } from '../../utils';\nimport { AXIS_META_CONFIG_KEYS } from '../../constant';\nimport { transformViolinData } from './utils';\nimport { MEDIAN_FIELD, MEDIAN_VIEW_ID, MIN_MAX_FIELD, MIN_MAX_VIEW_ID, QUANTILE_FIELD, QUANTILE_VIEW_ID, VIOLIN_SIZE_FIELD, VIOLIN_VIEW_ID, VIOLIN_Y_FIELD, X_FIELD, } from './constant';\nvar TOOLTIP_FIELDS = ['low', 'high', 'q1', 'q3', 'median'];\nvar adjustCfg = [\n {\n type: 'dodge',\n marginRatio: 1 / 32,\n },\n];\n/** 处理数据 */\nfunction data(params) {\n var chart = params.chart, options = params.options;\n chart.data(transformViolinData(options));\n return params;\n}\n/** 小提琴轮廓 */\nfunction violinView(params) {\n var chart = params.chart, options = params.options;\n var seriesField = options.seriesField, color = options.color, _a = options.shape, shape = _a === void 0 ? 'violin' : _a, violinStyle = options.violinStyle, tooltip = options.tooltip, state = options.state;\n var view = chart.createView({ id: VIOLIN_VIEW_ID });\n violin({\n chart: view,\n options: {\n xField: X_FIELD,\n yField: VIOLIN_Y_FIELD,\n seriesField: seriesField ? seriesField : X_FIELD,\n sizeField: VIOLIN_SIZE_FIELD,\n tooltip: __assign({ fields: TOOLTIP_FIELDS }, tooltip),\n violin: {\n style: violinStyle,\n color: color,\n shape: shape,\n },\n state: state,\n },\n });\n view.geometries[0].adjust(adjustCfg);\n return params;\n}\n/** 箱线 */\nfunction boxView(params) {\n var chart = params.chart, options = params.options;\n var seriesField = options.seriesField, color = options.color, tooltip = options.tooltip, box = options.box;\n // 如果配置 `box` 为 false ,不渲染内部箱线图\n if (box === false)\n return params;\n // 边缘线\n var minMaxView = chart.createView({ id: MIN_MAX_VIEW_ID });\n interval({\n chart: minMaxView,\n options: {\n xField: X_FIELD,\n yField: MIN_MAX_FIELD,\n seriesField: seriesField ? seriesField : X_FIELD,\n tooltip: __assign({ fields: TOOLTIP_FIELDS }, tooltip),\n state: typeof box === 'object' ? box.state : {},\n interval: {\n color: color,\n size: 1,\n style: {\n lineWidth: 0,\n },\n },\n },\n });\n minMaxView.geometries[0].adjust(adjustCfg);\n // 四分点位\n var quantileView = chart.createView({ id: QUANTILE_VIEW_ID });\n interval({\n chart: quantileView,\n options: {\n xField: X_FIELD,\n yField: QUANTILE_FIELD,\n seriesField: seriesField ? seriesField : X_FIELD,\n tooltip: __assign({ fields: TOOLTIP_FIELDS }, tooltip),\n state: typeof box === 'object' ? box.state : {},\n interval: {\n color: color,\n size: 8,\n style: {\n fillOpacity: 1,\n },\n },\n },\n });\n quantileView.geometries[0].adjust(adjustCfg);\n // 中位值\n var medianView = chart.createView({ id: MEDIAN_VIEW_ID });\n point({\n chart: medianView,\n options: {\n xField: X_FIELD,\n yField: MEDIAN_FIELD,\n seriesField: seriesField ? seriesField : X_FIELD,\n tooltip: __assign({ fields: TOOLTIP_FIELDS }, tooltip),\n state: typeof box === 'object' ? box.state : {},\n point: {\n color: color,\n size: 1,\n style: {\n fill: 'white',\n lineWidth: 0,\n },\n },\n },\n });\n medianView.geometries[0].adjust(adjustCfg);\n // 关闭辅助 view 的轴\n quantileView.axis(false);\n minMaxView.axis(false);\n medianView.axis(false);\n // 关闭辅助 view 的图例\n medianView.legend(false);\n minMaxView.legend(false);\n quantileView.legend(false);\n return params;\n}\n/**\n * meta 配置\n */\nfunction meta(params) {\n var _a;\n var chart = params.chart, options = params.options;\n var meta = options.meta, xAxis = options.xAxis, yAxis = options.yAxis;\n var baseMeta = {};\n var scales = deepAssign(baseMeta, meta, (_a = {},\n _a[X_FIELD] = __assign(__assign({ sync: true }, pick(xAxis, AXIS_META_CONFIG_KEYS)), { \n // fix: dodge is not support linear attribute, please use category attribute!\n // 强制 x 轴类型为分类类型\n type: 'cat' }),\n _a[VIOLIN_Y_FIELD] = __assign({ sync: true }, pick(yAxis, AXIS_META_CONFIG_KEYS)),\n _a[MIN_MAX_FIELD] = __assign({ sync: VIOLIN_Y_FIELD }, pick(yAxis, AXIS_META_CONFIG_KEYS)),\n _a[QUANTILE_FIELD] = __assign({ sync: VIOLIN_Y_FIELD }, pick(yAxis, AXIS_META_CONFIG_KEYS)),\n _a[MEDIAN_FIELD] = __assign({ sync: VIOLIN_Y_FIELD }, pick(yAxis, AXIS_META_CONFIG_KEYS)),\n _a));\n chart.scale(scales);\n return params;\n}\n/**\n * axis 配置\n */\nfunction axis(params) {\n var chart = params.chart, options = params.options;\n var xAxis = options.xAxis, yAxis = options.yAxis;\n var view = findViewById(chart, VIOLIN_VIEW_ID);\n // 为 false 则是不显示轴\n if (xAxis === false) {\n view.axis(X_FIELD, false);\n }\n else {\n view.axis(X_FIELD, xAxis);\n }\n if (yAxis === false) {\n view.axis(VIOLIN_Y_FIELD, false);\n }\n else {\n view.axis(VIOLIN_Y_FIELD, yAxis);\n }\n chart.axis(false);\n return params;\n}\n/**\n *\n * @param params\n * @returns\n */\nfunction legend(params) {\n var chart = params.chart, options = params.options;\n var legend = options.legend, seriesField = options.seriesField, shape = options.shape;\n if (legend === false) {\n chart.legend(false);\n }\n else {\n var legendField_1 = seriesField ? seriesField : X_FIELD;\n // fixme 暂不明为啥有描边\n var legendOptions = omit(legend, ['selected']);\n if (!shape || !shape.startsWith('hollow')) {\n if (!get(legendOptions, ['marker', 'style', 'lineWidth'])) {\n set(legendOptions, ['marker', 'style', 'lineWidth'], 0);\n }\n }\n chart.legend(legendField_1, legendOptions);\n // 特殊的处理 fixme G2 层得解决这个问题\n if (get(legend, 'selected')) {\n each(chart.views, function (view) { return view.legend(legendField_1, legend); });\n }\n }\n return params;\n}\n/**\n * annotation, apply to violin view.\n * @param params\n * @returns\n */\nfunction annotation(params) {\n var chart = params.chart;\n var violinView = findViewById(chart, VIOLIN_VIEW_ID);\n baseAnnotation()(__assign(__assign({}, params), { chart: violinView }));\n return params;\n}\n/**\n * 动画\n * @param params\n */\nexport function animation(params) {\n var chart = params.chart, options = params.options;\n var animation = options.animation;\n // 所有的 Geometry 都使用同一动画(各个图形如有区别,自行覆盖)\n each(chart.views, function (view) {\n // 同时设置整个 view 动画选项\n if (typeof animation === 'boolean') {\n view.animate(animation);\n }\n else {\n view.animate(true);\n }\n each(view.geometries, function (g) {\n g.animate(animation);\n });\n });\n return params;\n}\n/**\n * 小提琴图适配器\n * @param params\n */\nexport function adaptor(params) {\n return flow(theme, data, violinView, boxView, meta, tooltip, axis, legend, interaction, annotation, animation)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\nimport { transformViolinData } from './utils';\nvar Violin = /** @class */ (function (_super) {\n __extends(Violin, _super);\n function Violin() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'violin';\n return _this;\n }\n /**\n * 获取 默认配置项\n * 供外部使用\n */\n Violin.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n /**\n * @override\n */\n Violin.prototype.changeData = function (data) {\n this.updateOption({ data: data });\n this.chart.changeData(transformViolinData(this.options));\n };\n /**\n * 获取 小提琴图 默认配置项\n */\n Violin.prototype.getDefaultOptions = function () {\n return Violin.getDefaultOptions();\n };\n /**\n * 获取 小提琴图 的适配器\n */\n Violin.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Violin;\n}(Plot));\nexport { Violin };\n//# sourceMappingURL=index.js.map","import colorUtil from '@antv/color-util';\n/*\n * interpolates between a set of colors uzing a bezier spline\n * blend mode formulas taken from http://www.venture-ware.com/kevin/coding/lets-learn-math-photoshop-blend-modes/\n */\nvar each = function (f) {\n return function (c0, c1) {\n var out = [];\n out[0] = f(c0[0], c1[0]);\n out[1] = f(c0[1], c1[1]);\n out[2] = f(c0[2], c1[2]);\n return out;\n };\n};\n/**\n * 混合方法集合\n */\nvar blendObject = {\n normal: function (a) { return a; },\n multiply: function (a, b) { return (a * b) / 255; },\n screen: function (a, b) { return 255 * (1 - (1 - a / 255) * (1 - b / 255)); },\n overlay: function (a, b) { return (b < 128 ? (2 * a * b) / 255 : 255 * (1 - 2 * (1 - a / 255) * (1 - b / 255))); },\n darken: function (a, b) { return (a > b ? b : a); },\n lighten: function (a, b) { return (a > b ? a : b); },\n dodge: function (a, b) {\n if (a === 255)\n return 255;\n a = (255 * (b / 255)) / (1 - a / 255);\n return a > 255 ? 255 : a;\n },\n burn: function (a, b) {\n // 参考 w3c 的写法,考虑除数为 0 的情况\n if (b === 255)\n return 255;\n else if (a === 0)\n return 0;\n else\n return 255 * (1 - Math.min(1, (1 - b / 255) / (a / 255)));\n },\n};\n/**\n * 获取混合方法\n */\nexport var innerBlend = function (mode) {\n if (!blendObject[mode]) {\n throw new Error('unknown blend mode ' + mode);\n }\n return blendObject[mode];\n};\n/**\n * 混合颜色,并处理透明度情况\n * 参考:https://www.w3.org/TR/compositing/#blending\n * @param c0\n * @param c1\n * @param mode 混合模式\n * @return rbga\n */\nexport function blend(c0, c1, mode) {\n if (mode === void 0) { mode = 'normal'; }\n // blendRgbArr: 生成不考虑透明度的 blend color: [r, g, b]\n var blendRgbArr = each(innerBlend(mode))(colorToArr(c0), colorToArr(c1));\n var _a = colorToArr(c0), r0 = _a[0], g0 = _a[1], b0 = _a[2], a0 = _a[3];\n var _b = colorToArr(c1), r1 = _b[0], g1 = _b[1], b1 = _b[2], a1 = _b[3];\n var a = Number((a0 + a1 * (1 - a0)).toFixed(2));\n var r = Math.round(((a0 * (1 - a1) * (r0 / 255) + a0 * a1 * (blendRgbArr[0] / 255) + (1 - a0) * a1 * (r1 / 255)) / a) * 255);\n var g = Math.round(((a0 * (1 - a1) * (g0 / 255) + a0 * a1 * (blendRgbArr[1] / 255) + (1 - a0) * a1 * (g1 / 255)) / a) * 255);\n var b = Math.round(((a0 * (1 - a1) * (b0 / 255) + a0 * a1 * (blendRgbArr[2] / 255) + (1 - a0) * a1 * (b1 / 255)) / a) * 255);\n return \"rgba(\" + r + \", \" + g + \", \" + b + \", \" + a + \")\";\n}\n/**\n * 统一颜色输入的格式 [r, g, b, a]\n * 参考:https://www.w3.org/TR/compositing/#blending\n * @param c color\n * @return [r, g, b, a]\n */\nexport function colorToArr(c) {\n var color = c.replace('/s+/g', ''); // 去除所有空格\n var rgbaArr;\n // 'red' -> [r, g, b, 1]\n if (typeof color === 'string' && !color.startsWith('rgba') && !color.startsWith('#')) {\n return (rgbaArr = colorUtil.rgb2arr(colorUtil.toRGB(color)).concat([1]));\n }\n // rgba(255, 200, 125, 0.5) -> [r, g, b, a]\n if (color.startsWith('rgba'))\n rgbaArr = color.replace('rgba(', '').replace(')', '').split(',');\n // '#fff000' -> [r, g, b, 1]\n if (color.startsWith('#'))\n rgbaArr = colorUtil.rgb2arr(color).concat([1]); // 如果是 16 进制(6 位数),默认透明度 1\n // [r, g, b, a] 前三位取整\n return rgbaArr.map(function (item, index) { return (index === 3 ? Number(item) : item | 0); });\n}\n//# sourceMappingURL=blend.js.map","var SMALL = 1e-10;\n/** Returns the intersection area of a bunch of circles (where each circle\n is an object having an x,y and radius property) */\nexport function intersectionArea(circles, stats) {\n // get all the intersection points of the circles\n var intersectionPoints = getIntersectionPoints(circles);\n // filter out points that aren't included in all the circles\n var innerPoints = intersectionPoints.filter(function (p) {\n return containedInCircles(p, circles);\n });\n var arcArea = 0, polygonArea = 0, i;\n var arcs = [];\n // if we have intersection points that are within all the circles,\n // then figure out the area contained by them\n if (innerPoints.length > 1) {\n // sort the points by angle from the center of the polygon, which lets\n // us just iterate over points to get the edges\n var center = getCenter(innerPoints);\n for (i = 0; i < innerPoints.length; ++i) {\n var p = innerPoints[i];\n p.angle = Math.atan2(p.x - center.x, p.y - center.y);\n }\n innerPoints.sort(function (a, b) {\n return b.angle - a.angle;\n });\n // iterate over all points, get arc between the points\n // and update the areas\n var p2 = innerPoints[innerPoints.length - 1];\n for (i = 0; i < innerPoints.length; ++i) {\n var p1 = innerPoints[i];\n // polygon area updates easily ...\n polygonArea += (p2.x + p1.x) * (p1.y - p2.y);\n // updating the arc area is a little more involved\n var midPoint = { x: (p1.x + p2.x) / 2, y: (p1.y + p2.y) / 2 };\n var arc = null;\n for (var j = 0; j < p1.parentIndex.length; ++j) {\n if (p2.parentIndex.indexOf(p1.parentIndex[j]) > -1) {\n // figure out the angle halfway between the two points\n // on the current circle\n var circle = circles[p1.parentIndex[j]], a1 = Math.atan2(p1.x - circle.x, p1.y - circle.y), a2 = Math.atan2(p2.x - circle.x, p2.y - circle.y);\n var angleDiff = a2 - a1;\n if (angleDiff < 0) {\n angleDiff += 2 * Math.PI;\n }\n // and use that angle to figure out the width of the\n // arc\n var a = a2 - angleDiff / 2;\n var width = distance(midPoint, {\n x: circle.x + circle.radius * Math.sin(a),\n y: circle.y + circle.radius * Math.cos(a),\n });\n // clamp the width to the largest is can actually be\n // (sometimes slightly overflows because of FP errors)\n if (width > circle.radius * 2) {\n width = circle.radius * 2;\n }\n // pick the circle whose arc has the smallest width\n if (arc === null || arc.width > width) {\n arc = { circle: circle, width: width, p1: p1, p2: p2 };\n }\n }\n }\n if (arc !== null) {\n arcs.push(arc);\n arcArea += circleArea(arc.circle.radius, arc.width);\n p2 = p1;\n }\n }\n }\n else {\n // no intersection points, is either disjoint - or is completely\n // overlapped. figure out which by examining the smallest circle\n var smallest = circles[0];\n for (i = 1; i < circles.length; ++i) {\n if (circles[i].radius < smallest.radius) {\n smallest = circles[i];\n }\n }\n // make sure the smallest circle is completely contained in all\n // the other circles\n var disjoint = false;\n for (i = 0; i < circles.length; ++i) {\n if (distance(circles[i], smallest) > Math.abs(smallest.radius - circles[i].radius)) {\n disjoint = true;\n break;\n }\n }\n if (disjoint) {\n arcArea = polygonArea = 0;\n }\n else {\n arcArea = smallest.radius * smallest.radius * Math.PI;\n arcs.push({\n circle: smallest,\n p1: { x: smallest.x, y: smallest.y + smallest.radius },\n p2: { x: smallest.x - SMALL, y: smallest.y + smallest.radius },\n width: smallest.radius * 2,\n });\n }\n }\n polygonArea /= 2;\n if (stats) {\n stats.area = arcArea + polygonArea;\n stats.arcArea = arcArea;\n stats.polygonArea = polygonArea;\n stats.arcs = arcs;\n stats.innerPoints = innerPoints;\n stats.intersectionPoints = intersectionPoints;\n }\n return arcArea + polygonArea;\n}\n/** returns whether a point is contained by all of a list of circles */\nexport function containedInCircles(point, circles) {\n for (var i = 0; i < circles.length; ++i) {\n if (distance(point, circles[i]) > circles[i].radius + SMALL) {\n return false;\n }\n }\n return true;\n}\n/** Gets all intersection points between a bunch of circles */\nfunction getIntersectionPoints(circles) {\n var ret = [];\n for (var i = 0; i < circles.length; ++i) {\n for (var j = i + 1; j < circles.length; ++j) {\n var intersect = circleCircleIntersection(circles[i], circles[j]);\n for (var k = 0; k < intersect.length; ++k) {\n var p = intersect[k];\n p.parentIndex = [i, j];\n ret.push(p);\n }\n }\n }\n return ret;\n}\n/** Circular segment area calculation. See http://mathworld.wolfram.com/CircularSegment.html */\nexport function circleArea(r, width) {\n return r * r * Math.acos(1 - width / r) - (r - width) * Math.sqrt(width * (2 * r - width));\n}\n/** euclidean distance between two points */\nexport function distance(p1, p2) {\n return Math.sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y));\n}\n/** Returns the overlap area of two circles of radius r1 and r2 - that\nhave their centers separated by distance d. Simpler faster\ncircle intersection for only two circles */\nexport function circleOverlap(r1, r2, d) {\n // no overlap\n if (d >= r1 + r2) {\n return 0;\n }\n // completely overlapped\n if (d <= Math.abs(r1 - r2)) {\n return Math.PI * Math.min(r1, r2) * Math.min(r1, r2);\n }\n var w1 = r1 - (d * d - r2 * r2 + r1 * r1) / (2 * d), w2 = r2 - (d * d - r1 * r1 + r2 * r2) / (2 * d);\n return circleArea(r1, w1) + circleArea(r2, w2);\n}\n/** Given two circles (containing a x/y/radius attributes),\nreturns the intersecting points if possible.\nnote: doesn't handle cases where there are infinitely many\nintersection points (circles are equivalent):, or only one intersection point*/\nexport function circleCircleIntersection(p1, p2) {\n var d = distance(p1, p2), r1 = p1.radius, r2 = p2.radius;\n // if to far away, or self contained - can't be done\n if (d >= r1 + r2 || d <= Math.abs(r1 - r2)) {\n return [];\n }\n var a = (r1 * r1 - r2 * r2 + d * d) / (2 * d), h = Math.sqrt(r1 * r1 - a * a), x0 = p1.x + (a * (p2.x - p1.x)) / d, y0 = p1.y + (a * (p2.y - p1.y)) / d, rx = -(p2.y - p1.y) * (h / d), ry = -(p2.x - p1.x) * (h / d);\n return [\n { x: x0 + rx, y: y0 - ry },\n { x: x0 - rx, y: y0 + ry },\n ];\n}\n/** Returns the center of a bunch of points */\nexport function getCenter(points) {\n var center = { x: 0, y: 0 };\n for (var i = 0; i < points.length; ++i) {\n center.x += points[i].x;\n center.y += points[i].y;\n }\n center.x /= points.length;\n center.y /= points.length;\n return center;\n}\n//# sourceMappingURL=circleintersection.js.map","import { nelderMead, bisect, conjugateGradient, zeros, zerosM, norm2, scale } from 'fmin';\nimport { intersectionArea, circleOverlap, circleCircleIntersection, distance } from './circleintersection';\n/** given a list of set objects, and their corresponding overlaps.\nupdates the (x, y, radius) attribute on each set such that their positions\nroughly correspond to the desired overlaps */\nexport function venn(areas, parameters) {\n parameters = parameters || {};\n parameters.maxIterations = parameters.maxIterations || 500;\n var initialLayout = parameters.initialLayout || bestInitialLayout;\n var loss = parameters.lossFunction || lossFunction;\n // add in missing pairwise areas as having 0 size\n areas = addMissingAreas(areas);\n // initial layout is done greedily\n var circles = initialLayout(areas, parameters);\n // transform x/y coordinates to a vector to optimize\n var initial = [], setids = [];\n var setid;\n for (setid in circles) {\n // eslint-disable-next-line\n if (circles.hasOwnProperty(setid)) {\n initial.push(circles[setid].x);\n initial.push(circles[setid].y);\n setids.push(setid);\n }\n }\n // optimize initial layout from our loss function\n var solution = nelderMead(function (values) {\n var current = {};\n for (var i = 0; i < setids.length; ++i) {\n var setid_1 = setids[i];\n current[setid_1] = {\n x: values[2 * i],\n y: values[2 * i + 1],\n radius: circles[setid_1].radius,\n };\n }\n return loss(current, areas);\n }, initial, parameters);\n // transform solution vector back to x/y points\n var positions = solution.x;\n for (var i = 0; i < setids.length; ++i) {\n setid = setids[i];\n circles[setid].x = positions[2 * i];\n circles[setid].y = positions[2 * i + 1];\n }\n return circles;\n}\nvar SMALL = 1e-10;\n/** Returns the distance necessary for two circles of radius r1 + r2 to\nhave the overlap area 'overlap' */\nexport function distanceFromIntersectArea(r1, r2, overlap) {\n // handle complete overlapped circles\n if (Math.min(r1, r2) * Math.min(r1, r2) * Math.PI <= overlap + SMALL) {\n return Math.abs(r1 - r2);\n }\n return bisect(function (distance) {\n return circleOverlap(r1, r2, distance) - overlap;\n }, 0, r1 + r2);\n}\n/** Missing pair-wise intersection area data can cause problems:\n treating as an unknown means that sets will be laid out overlapping,\n which isn't what people expect. To reflect that we want disjoint sets\n here, set the overlap to 0 for all missing pairwise set intersections */\nfunction addMissingAreas(areas) {\n areas = areas.slice();\n // two circle intersections that aren't defined\n var ids = [], pairs = {};\n var i, j, a, b;\n for (i = 0; i < areas.length; ++i) {\n var area = areas[i];\n if (area.sets.length == 1) {\n ids.push(area.sets[0]);\n }\n else if (area.sets.length == 2) {\n a = area.sets[0];\n b = area.sets[1];\n // @ts-ignore\n pairs[[a, b]] = true;\n // @ts-ignore\n pairs[[b, a]] = true;\n }\n }\n ids.sort(function (a, b) {\n return a > b ? 1 : -1;\n });\n for (i = 0; i < ids.length; ++i) {\n a = ids[i];\n for (j = i + 1; j < ids.length; ++j) {\n b = ids[j];\n // @ts-ignore\n if (!([a, b] in pairs)) {\n areas.push({ sets: [a, b], size: 0 });\n }\n }\n }\n return areas;\n}\n/// Returns two matrices, one of the euclidean distances between the sets\n/// and the other indicating if there are subset or disjoint set relationships\nexport function getDistanceMatrices(areas, sets, setids) {\n // initialize an empty distance matrix between all the points\n var distances = zerosM(sets.length, sets.length), constraints = zerosM(sets.length, sets.length);\n // compute required distances between all the sets such that\n // the areas match\n areas\n .filter(function (x) {\n return x.sets.length == 2;\n })\n .map(function (current) {\n var left = setids[current.sets[0]], right = setids[current.sets[1]], r1 = Math.sqrt(sets[left].size / Math.PI), r2 = Math.sqrt(sets[right].size / Math.PI), distance = distanceFromIntersectArea(r1, r2, current.size);\n distances[left][right] = distances[right][left] = distance;\n // also update constraints to indicate if its a subset or disjoint\n // relationship\n var c = 0;\n if (current.size + 1e-10 >= Math.min(sets[left].size, sets[right].size)) {\n c = 1;\n }\n else if (current.size <= 1e-10) {\n c = -1;\n }\n constraints[left][right] = constraints[right][left] = c;\n });\n return { distances: distances, constraints: constraints };\n}\n/// computes the gradient and loss simulatenously for our constrained MDS optimizer\nfunction constrainedMDSGradient(x, fxprime, distances, constraints) {\n var loss = 0, i;\n for (i = 0; i < fxprime.length; ++i) {\n fxprime[i] = 0;\n }\n for (i = 0; i < distances.length; ++i) {\n var xi = x[2 * i], yi = x[2 * i + 1];\n for (var j = i + 1; j < distances.length; ++j) {\n var xj = x[2 * j], yj = x[2 * j + 1], dij = distances[i][j], constraint = constraints[i][j];\n var squaredDistance = (xj - xi) * (xj - xi) + (yj - yi) * (yj - yi), distance_1 = Math.sqrt(squaredDistance), delta = squaredDistance - dij * dij;\n if ((constraint > 0 && distance_1 <= dij) || (constraint < 0 && distance_1 >= dij)) {\n continue;\n }\n loss += 2 * delta * delta;\n fxprime[2 * i] += 4 * delta * (xi - xj);\n fxprime[2 * i + 1] += 4 * delta * (yi - yj);\n fxprime[2 * j] += 4 * delta * (xj - xi);\n fxprime[2 * j + 1] += 4 * delta * (yj - yi);\n }\n }\n return loss;\n}\n/// takes the best working variant of either constrained MDS or greedy\nexport function bestInitialLayout(areas, params) {\n var initial = greedyLayout(areas, params);\n var loss = params.lossFunction || lossFunction;\n // greedylayout is sufficient for all 2/3 circle cases. try out\n // constrained MDS for higher order problems, take its output\n // if it outperforms. (greedy is aesthetically better on 2/3 circles\n // since it axis aligns)\n if (areas.length >= 8) {\n var constrained = constrainedMDSLayout(areas, params), constrainedLoss = loss(constrained, areas), greedyLoss = loss(initial, areas);\n if (constrainedLoss + 1e-8 < greedyLoss) {\n initial = constrained;\n }\n }\n return initial;\n}\n/// use the constrained MDS variant to generate an initial layout\nexport function constrainedMDSLayout(areas, params) {\n params = params || {};\n var restarts = params.restarts || 10;\n // bidirectionally map sets to a rowid (so we can create a matrix)\n var sets = [], setids = {};\n var i;\n for (i = 0; i < areas.length; ++i) {\n var area = areas[i];\n if (area.sets.length == 1) {\n setids[area.sets[0]] = sets.length;\n sets.push(area);\n }\n }\n var matrices = getDistanceMatrices(areas, sets, setids);\n var distances = matrices.distances;\n var constraints = matrices.constraints;\n // keep distances bounded, things get messed up otherwise.\n // TODO: proper preconditioner?\n var norm = norm2(distances.map(norm2)) / distances.length;\n distances = distances.map(function (row) {\n return row.map(function (value) {\n return value / norm;\n });\n });\n var obj = function (x, fxprime) {\n return constrainedMDSGradient(x, fxprime, distances, constraints);\n };\n var best, current;\n for (i = 0; i < restarts; ++i) {\n var initial = zeros(distances.length * 2).map(Math.random);\n current = conjugateGradient(obj, initial, params);\n if (!best || current.fx < best.fx) {\n best = current;\n }\n }\n var positions = best.x;\n // translate rows back to (x,y,radius) coordinates\n var circles = {};\n for (i = 0; i < sets.length; ++i) {\n var set = sets[i];\n circles[set.sets[0]] = {\n x: positions[2 * i] * norm,\n y: positions[2 * i + 1] * norm,\n radius: Math.sqrt(set.size / Math.PI),\n };\n }\n if (params.history) {\n for (i = 0; i < params.history.length; ++i) {\n scale(params.history[i].x, norm);\n }\n }\n return circles;\n}\n/** Lays out a Venn diagram greedily, going from most overlapped sets to\nleast overlapped, attempting to position each new set such that the\noverlapping areas to already positioned sets are basically right */\nexport function greedyLayout(areas, params) {\n var loss = params && params.lossFunction ? params.lossFunction : lossFunction;\n // define a circle for each set\n var circles = {}, setOverlaps = {};\n var set;\n for (var i = 0; i < areas.length; ++i) {\n var area = areas[i];\n if (area.sets.length == 1) {\n set = area.sets[0];\n circles[set] = {\n x: 1e10,\n y: 1e10,\n // rowid: circles.length, // fix to ->\n rowid: Object.keys(circles).length,\n size: area.size,\n radius: Math.sqrt(area.size / Math.PI),\n };\n setOverlaps[set] = [];\n }\n }\n areas = areas.filter(function (a) {\n return a.sets.length == 2;\n });\n // map each set to a list of all the other sets that overlap it\n for (var i = 0; i < areas.length; ++i) {\n var current = areas[i];\n // eslint-disable-next-line\n var weight = current.hasOwnProperty('weight') ? current.weight : 1.0;\n var left = current.sets[0], right = current.sets[1];\n // completely overlapped circles shouldn't be positioned early here\n if (current.size + SMALL >= Math.min(circles[left].size, circles[right].size)) {\n weight = 0;\n }\n setOverlaps[left].push({ set: right, size: current.size, weight: weight });\n setOverlaps[right].push({ set: left, size: current.size, weight: weight });\n }\n // get list of most overlapped sets\n var mostOverlapped = [];\n for (set in setOverlaps) {\n // eslint-disable-next-line\n if (setOverlaps.hasOwnProperty(set)) {\n var size = 0;\n for (var i = 0; i < setOverlaps[set].length; ++i) {\n size += setOverlaps[set][i].size * setOverlaps[set][i].weight;\n }\n mostOverlapped.push({ set: set, size: size });\n }\n }\n // sort by size desc\n function sortOrder(a, b) {\n return b.size - a.size;\n }\n mostOverlapped.sort(sortOrder);\n // keep track of what sets have been laid out\n var positioned = {};\n function isPositioned(element) {\n return element.set in positioned;\n }\n // adds a point to the output\n function positionSet(point, index) {\n circles[index].x = point.x;\n circles[index].y = point.y;\n positioned[index] = true;\n }\n // add most overlapped set at (0,0)\n positionSet({ x: 0, y: 0 }, mostOverlapped[0].set);\n // get distances between all points. TODO, necessary?\n // answer: probably not\n // var distances = venn.getDistanceMatrices(circles, areas).distances;\n for (var i = 1; i < mostOverlapped.length; ++i) {\n var setIndex = mostOverlapped[i].set, overlap = setOverlaps[setIndex].filter(isPositioned);\n set = circles[setIndex];\n overlap.sort(sortOrder);\n if (overlap.length === 0) {\n // this shouldn't happen anymore with addMissingAreas\n throw 'ERROR: missing pairwise overlap information';\n }\n var points = [];\n for (var j = 0; j < overlap.length; ++j) {\n // get appropriate distance from most overlapped already added set\n var p1 = circles[overlap[j].set], d1 = distanceFromIntersectArea(set.radius, p1.radius, overlap[j].size);\n // sample positions at 90 degrees for maximum aesthetics\n points.push({ x: p1.x + d1, y: p1.y });\n points.push({ x: p1.x - d1, y: p1.y });\n points.push({ y: p1.y + d1, x: p1.x });\n points.push({ y: p1.y - d1, x: p1.x });\n // if we have at least 2 overlaps, then figure out where the\n // set should be positioned analytically and try those too\n for (var k = j + 1; k < overlap.length; ++k) {\n var p2 = circles[overlap[k].set], d2 = distanceFromIntersectArea(set.radius, p2.radius, overlap[k].size);\n var extraPoints = circleCircleIntersection({ x: p1.x, y: p1.y, radius: d1 }, { x: p2.x, y: p2.y, radius: d2 });\n for (var l = 0; l < extraPoints.length; ++l) {\n points.push(extraPoints[l]);\n }\n }\n }\n // we have some candidate positions for the set, examine loss\n // at each position to figure out where to put it at\n var bestLoss = 1e50, bestPoint = points[0];\n for (var j = 0; j < points.length; ++j) {\n circles[setIndex].x = points[j].x;\n circles[setIndex].y = points[j].y;\n var localLoss = loss(circles, areas);\n if (localLoss < bestLoss) {\n bestLoss = localLoss;\n bestPoint = points[j];\n }\n }\n positionSet(bestPoint, setIndex);\n }\n return circles;\n}\n/** Given a bunch of sets, and the desired overlaps between these sets - computes\nthe distance from the actual overlaps to the desired overlaps. Note that\nthis method ignores overlaps of more than 2 circles */\nexport function lossFunction(sets, overlaps) {\n var output = 0;\n function getCircles(indices) {\n return indices.map(function (i) {\n return sets[i];\n });\n }\n for (var i = 0; i < overlaps.length; ++i) {\n var area = overlaps[i];\n var overlap = void 0;\n if (area.sets.length == 1) {\n continue;\n }\n else if (area.sets.length == 2) {\n var left = sets[area.sets[0]], right = sets[area.sets[1]];\n overlap = circleOverlap(left.radius, right.radius, distance(left, right));\n }\n else {\n overlap = intersectionArea(getCircles(area.sets));\n }\n // eslint-disable-next-line\n var weight = area.hasOwnProperty('weight') ? area.weight : 1.0;\n output += weight * (overlap - area.size) * (overlap - area.size);\n }\n return output;\n}\n// orientates a bunch of circles to point in orientation\nfunction orientateCircles(circles, orientation, orientationOrder) {\n if (orientationOrder === null) {\n circles.sort(function (a, b) {\n return b.radius - a.radius;\n });\n }\n else {\n circles.sort(orientationOrder);\n }\n var i;\n // shift circles so largest circle is at (0, 0)\n if (circles.length > 0) {\n var largestX = circles[0].x, largestY = circles[0].y;\n for (i = 0; i < circles.length; ++i) {\n circles[i].x -= largestX;\n circles[i].y -= largestY;\n }\n }\n if (circles.length == 2) {\n // if the second circle is a subset of the first, arrange so that\n // it is off to one side. hack for https://github.com/benfred/venn.js/issues/120\n var dist = distance(circles[0], circles[1]);\n if (dist < Math.abs(circles[1].radius - circles[0].radius)) {\n circles[1].x = circles[0].x + circles[0].radius - circles[1].radius - 1e-10;\n circles[1].y = circles[0].y;\n }\n }\n // rotate circles so that second largest is at an angle of 'orientation'\n // from largest\n if (circles.length > 1) {\n var rotation = Math.atan2(circles[1].x, circles[1].y) - orientation;\n var x = void 0, y = void 0;\n var c = Math.cos(rotation), s = Math.sin(rotation);\n for (i = 0; i < circles.length; ++i) {\n x = circles[i].x;\n y = circles[i].y;\n circles[i].x = c * x - s * y;\n circles[i].y = s * x + c * y;\n }\n }\n // mirror solution if third solution is above plane specified by\n // first two circles\n if (circles.length > 2) {\n var angle = Math.atan2(circles[2].x, circles[2].y) - orientation;\n while (angle < 0) {\n angle += 2 * Math.PI;\n }\n while (angle > 2 * Math.PI) {\n angle -= 2 * Math.PI;\n }\n if (angle > Math.PI) {\n var slope = circles[1].y / (1e-10 + circles[1].x);\n for (i = 0; i < circles.length; ++i) {\n var d = (circles[i].x + slope * circles[i].y) / (1 + slope * slope);\n circles[i].x = 2 * d - circles[i].x;\n circles[i].y = 2 * d * slope - circles[i].y;\n }\n }\n }\n}\nexport function disjointCluster(circles) {\n // union-find clustering to get disjoint sets\n circles.map(function (circle) {\n circle.parent = circle;\n });\n // path compression step in union find\n function find(circle) {\n if (circle.parent !== circle) {\n circle.parent = find(circle.parent);\n }\n return circle.parent;\n }\n function union(x, y) {\n var xRoot = find(x), yRoot = find(y);\n xRoot.parent = yRoot;\n }\n // get the union of all overlapping sets\n for (var i = 0; i < circles.length; ++i) {\n for (var j = i + 1; j < circles.length; ++j) {\n var maxDistance = circles[i].radius + circles[j].radius;\n if (distance(circles[i], circles[j]) + 1e-10 < maxDistance) {\n union(circles[j], circles[i]);\n }\n }\n }\n // find all the disjoint clusters and group them together\n var disjointClusters = {};\n var setid;\n for (var i = 0; i < circles.length; ++i) {\n setid = find(circles[i]).parent.setid;\n if (!(setid in disjointClusters)) {\n disjointClusters[setid] = [];\n }\n disjointClusters[setid].push(circles[i]);\n }\n // cleanup bookkeeping\n circles.map(function (circle) {\n delete circle.parent;\n });\n // return in more usable form\n var ret = [];\n for (setid in disjointClusters) {\n // eslint-disable-next-line\n if (disjointClusters.hasOwnProperty(setid)) {\n ret.push(disjointClusters[setid]);\n }\n }\n return ret;\n}\nfunction getBoundingBox(circles) {\n var minMax = function (d) {\n var hi = Math.max.apply(null, circles.map(function (c) {\n return c[d] + c.radius;\n })), lo = Math.min.apply(null, circles.map(function (c) {\n return c[d] - c.radius;\n }));\n return { max: hi, min: lo };\n };\n return { xRange: minMax('x'), yRange: minMax('y') };\n}\nexport function normalizeSolution(solution, orientation, orientationOrder) {\n if (orientation === null) {\n orientation = Math.PI / 2;\n }\n // work with a list instead of a dictionary, and take a copy so we\n // don't mutate input\n var circles = [], i, setid;\n for (setid in solution) {\n // eslint-disable-next-line\n if (solution.hasOwnProperty(setid)) {\n var previous = solution[setid];\n circles.push({ x: previous.x, y: previous.y, radius: previous.radius, setid: setid });\n }\n }\n // get all the disjoint clusters\n var clusters = disjointCluster(circles);\n // orientate all disjoint sets, get sizes\n for (i = 0; i < clusters.length; ++i) {\n orientateCircles(clusters[i], orientation, orientationOrder);\n var bounds = getBoundingBox(clusters[i]);\n clusters[i].size = (bounds.xRange.max - bounds.xRange.min) * (bounds.yRange.max - bounds.yRange.min);\n clusters[i].bounds = bounds;\n }\n clusters.sort(function (a, b) {\n return b.size - a.size;\n });\n // orientate the largest at 0,0, and get the bounds\n circles = clusters[0];\n // @ts-ignore fixme 从逻辑上看似乎是不对的,后续看看\n var returnBounds = circles.bounds;\n var spacing = (returnBounds.xRange.max - returnBounds.xRange.min) / 50;\n function addCluster(cluster, right, bottom) {\n if (!cluster)\n return;\n var bounds = cluster.bounds;\n var xOffset, yOffset, centreing;\n if (right) {\n xOffset = returnBounds.xRange.max - bounds.xRange.min + spacing;\n }\n else {\n xOffset = returnBounds.xRange.max - bounds.xRange.max;\n centreing = (bounds.xRange.max - bounds.xRange.min) / 2 - (returnBounds.xRange.max - returnBounds.xRange.min) / 2;\n if (centreing < 0)\n xOffset += centreing;\n }\n if (bottom) {\n yOffset = returnBounds.yRange.max - bounds.yRange.min + spacing;\n }\n else {\n yOffset = returnBounds.yRange.max - bounds.yRange.max;\n centreing = (bounds.yRange.max - bounds.yRange.min) / 2 - (returnBounds.yRange.max - returnBounds.yRange.min) / 2;\n if (centreing < 0)\n yOffset += centreing;\n }\n for (var j = 0; j < cluster.length; ++j) {\n cluster[j].x += xOffset;\n cluster[j].y += yOffset;\n circles.push(cluster[j]);\n }\n }\n var index = 1;\n while (index < clusters.length) {\n addCluster(clusters[index], true, false);\n addCluster(clusters[index + 1], false, true);\n addCluster(clusters[index + 2], true, true);\n index += 3;\n // have one cluster (in top left). lay out next three relative\n // to it in a grid\n returnBounds = getBoundingBox(circles);\n }\n // convert back to solution form\n var ret = {};\n for (i = 0; i < circles.length; ++i) {\n ret[circles[i].setid] = circles[i];\n }\n return ret;\n}\n/** Scales a solution from venn.venn or venn.greedyLayout such that it fits in\na rectangle of width/height - with padding around the borders. also\ncenters the diagram in the available space at the same time */\nexport function scaleSolution(solution, width, height, padding) {\n var circles = [], setids = [];\n for (var setid in solution) {\n // eslint-disable-next-line\n if (solution.hasOwnProperty(setid)) {\n setids.push(setid);\n circles.push(solution[setid]);\n }\n }\n width -= 2 * padding;\n height -= 2 * padding;\n var bounds = getBoundingBox(circles), xRange = bounds.xRange, yRange = bounds.yRange;\n if (xRange.max == xRange.min || yRange.max == yRange.min) {\n console.log('not scaling solution: zero size detected');\n return solution;\n }\n var xScaling = width / (xRange.max - xRange.min), yScaling = height / (yRange.max - yRange.min), scaling = Math.min(yScaling, xScaling), \n // while we're at it, center the diagram too\n xOffset = (width - (xRange.max - xRange.min) * scaling) / 2, yOffset = (height - (yRange.max - yRange.min) * scaling) / 2;\n var scaled = {};\n for (var i = 0; i < circles.length; ++i) {\n var circle = circles[i];\n scaled[setids[i]] = {\n radius: scaling * circle.radius,\n x: padding + xOffset + (circle.x - xRange.min) * scaling,\n y: padding + yOffset + (circle.y - yRange.min) * scaling,\n };\n }\n return scaled;\n}\n//# sourceMappingURL=layout.js.map","import { nelderMead } from 'fmin';\nimport { intersectionArea, distance, getCenter } from './circleintersection';\nfunction circleMargin(current, interior, exterior) {\n var margin = interior[0].radius - distance(interior[0], current), i, m;\n for (i = 1; i < interior.length; ++i) {\n m = interior[i].radius - distance(interior[i], current);\n if (m <= margin) {\n margin = m;\n }\n }\n for (i = 0; i < exterior.length; ++i) {\n m = distance(exterior[i], current) - exterior[i].radius;\n if (m <= margin) {\n margin = m;\n }\n }\n return margin;\n}\n// compute the center of some circles by maximizing the margin of\n// the center point relative to the circles (interior) after subtracting\n// nearby circles (exterior)\nexport function computeTextCentre(interior, exterior) {\n // get an initial estimate by sampling around the interior circles\n // and taking the point with the biggest margin\n var points = [];\n var i;\n for (i = 0; i < interior.length; ++i) {\n var c = interior[i];\n points.push({ x: c.x, y: c.y });\n points.push({ x: c.x + c.radius / 2, y: c.y });\n points.push({ x: c.x - c.radius / 2, y: c.y });\n points.push({ x: c.x, y: c.y + c.radius / 2 });\n points.push({ x: c.x, y: c.y - c.radius / 2 });\n }\n var initial = points[0], margin = circleMargin(points[0], interior, exterior);\n for (i = 1; i < points.length; ++i) {\n var m = circleMargin(points[i], interior, exterior);\n if (m >= margin) {\n initial = points[i];\n margin = m;\n }\n }\n // maximize the margin numerically\n var solution = nelderMead(function (p) {\n return -1 * circleMargin({ x: p[0], y: p[1] }, interior, exterior);\n }, [initial.x, initial.y], { maxIterations: 500, minErrorDelta: 1e-10 }).x;\n var ret = { x: solution[0], y: solution[1] };\n // check solution, fallback as needed (happens if fully overlapped\n // etc)\n var valid = true;\n for (i = 0; i < interior.length; ++i) {\n if (distance(ret, interior[i]) > interior[i].radius) {\n valid = false;\n break;\n }\n }\n for (i = 0; i < exterior.length; ++i) {\n if (distance(ret, exterior[i]) < exterior[i].radius) {\n valid = false;\n break;\n }\n }\n if (!valid) {\n if (interior.length == 1) {\n ret = { x: interior[0].x, y: interior[0].y };\n }\n else {\n var areaStats = {};\n intersectionArea(interior, areaStats);\n if (areaStats.arcs.length === 0) {\n ret = { x: 0, y: -1000, disjoint: true };\n }\n else if (areaStats.arcs.length == 1) {\n ret = { x: areaStats.arcs[0].circle.x, y: areaStats.arcs[0].circle.y };\n }\n else if (exterior.length) {\n // try again without other circles\n ret = computeTextCentre(interior, []);\n }\n else {\n // take average of all the points in the intersection\n // polygon. this should basically never happen\n // and has some issues:\n // https://github.com/benfred/venn.js/issues/48#issuecomment-146069777\n ret = getCenter(areaStats.arcs.map(function (a) {\n return a.p1;\n }));\n }\n }\n }\n return ret;\n}\n// given a dictionary of {setid : circle}, returns\n// a dictionary of setid to list of circles that completely overlap it\nfunction getOverlappingCircles(circles) {\n var ret = {}, circleids = [];\n for (var circleid in circles) {\n circleids.push(circleid);\n ret[circleid] = [];\n }\n for (var i = 0; i < circleids.length; i++) {\n var a = circles[circleids[i]];\n for (var j = i + 1; j < circleids.length; ++j) {\n var b = circles[circleids[j]], d = distance(a, b);\n if (d + b.radius <= a.radius + 1e-10) {\n ret[circleids[j]].push(circleids[i]);\n }\n else if (d + a.radius <= b.radius + 1e-10) {\n ret[circleids[i]].push(circleids[j]);\n }\n }\n }\n return ret;\n}\nexport function computeTextCentres(circles, areas) {\n var ret = {}, overlapped = getOverlappingCircles(circles);\n for (var i = 0; i < areas.length; ++i) {\n var area = areas[i].sets, areaids = {}, exclude = {};\n for (var j = 0; j < area.length; ++j) {\n areaids[area[j]] = true;\n var overlaps = overlapped[area[j]];\n // keep track of any circles that overlap this area,\n // and don't consider for purposes of computing the text\n // centre\n for (var k = 0; k < overlaps.length; ++k) {\n exclude[overlaps[k]] = true;\n }\n }\n var interior = [], exterior = [];\n for (var setid in circles) {\n if (setid in areaids) {\n interior.push(circles[setid]);\n }\n else if (!(setid in exclude)) {\n exterior.push(circles[setid]);\n }\n }\n var centre = computeTextCentre(interior, exterior);\n ret[area] = centre;\n if (centre.disjoint && areas[i].size > 0) {\n console.log('WARNING: area ' + area + ' not represented on screen');\n }\n }\n return ret;\n}\n/**\n * 根据圆心(x, y) 半径 r 返回圆的绘制 path\n * @param x 圆心点 x\n * @param y 圆心点 y\n * @param r 圆的半径\n * @returns 圆的 path\n */\nexport function circlePath(x, y, r) {\n var ret = [];\n // ret.push('\\nM', x, y);\n // ret.push('\\nm', -r, 0);\n // ret.push('\\na', r, r, 0, 1, 0, r * 2, 0);\n // ret.push('\\na', r, r, 0, 1, 0, -r * 2, 0);\n var x0 = x - r;\n var y0 = y;\n ret.push('M', x0, y0);\n ret.push('A', r, r, 0, 1, 0, x0 + 2 * r, y0);\n ret.push('A', r, r, 0, 1, 0, x0, y0);\n return ret.join(' ');\n}\n// inverse of the circlePath function, returns a circle object from an svg path\nexport function circleFromPath(path) {\n var tokens = path.split(' ');\n return { x: parseFloat(tokens[1]), y: parseFloat(tokens[2]), radius: -parseFloat(tokens[4]) };\n}\n/** returns a svg path of the intersection area of a bunch of circles */\nexport function intersectionAreaPath(circles) {\n var stats = {};\n intersectionArea(circles, stats);\n var arcs = stats.arcs;\n if (arcs.length === 0) {\n return 'M 0 0';\n }\n else if (arcs.length == 1) {\n var circle = arcs[0].circle;\n return circlePath(circle.x, circle.y, circle.radius);\n }\n else {\n // draw path around arcs\n var ret = ['\\nM', arcs[0].p2.x, arcs[0].p2.y];\n for (var i = 0; i < arcs.length; ++i) {\n var arc = arcs[i], r = arc.circle.radius, wide = arc.width > r;\n ret.push('\\nA', r, r, 0, wide ? 1 : 0, 1, arc.p1.x, arc.p1.y);\n }\n return ret.join(' ');\n }\n}\n//# sourceMappingURL=diagram.js.map","// 一些字段常量定义,需要在文档初告知用户\nexport var ID_FIELD = 'id';\nexport var PATH_FIELD = 'path';\n/**\n * 韦恩图 默认配置项\n */\nexport var DEFAULT_OPTIONS = {\n appendPadding: [10, 0, 20, 0],\n blendMode: 'multiply',\n tooltip: {\n showTitle: false,\n showMarkers: false,\n fields: ['id', 'size'],\n formatter: function (datum) {\n return { name: datum.id, value: datum.size };\n },\n },\n legend: { position: 'top-left' },\n label: {\n style: {\n textAlign: 'center',\n fill: '#fff',\n },\n },\n // 默认不开启 图例筛选交互\n interactions: [{ type: 'legend-filter', enable: false }],\n state: {\n active: {\n style: {\n stroke: '#000',\n },\n },\n selected: {\n style: {\n stroke: '#000',\n lineWidth: 2,\n },\n },\n inactive: {\n style: {\n fillOpacity: 0.3,\n strokeOpacity: 0.3,\n },\n },\n },\n // 韦恩图的默认内置注册的交互\n defaultInteractions: ['tooltip', 'venn-legend-active'],\n};\n//# sourceMappingURL=constant.js.map","import { __assign } from \"tslib\";\nimport { assign, memoize } from '@antv/util';\nimport { blend } from '../../utils/color/blend';\nimport { log, LEVEL } from '../../utils';\nimport { venn, scaleSolution } from './layout/layout';\nimport { intersectionAreaPath, computeTextCentres } from './layout/diagram';\nimport { ID_FIELD, PATH_FIELD } from './constant';\n/**\n * 获取 颜色映射\n * @usage colorMap.get(id) => color\n *\n * @returns Map\n */\nexport var getColorMap = memoize((function (colorPalette, data, blendMode, setsField) {\n var colorMap = new Map();\n var colorPaletteLen = colorPalette.length;\n data.forEach(function (d, idx) {\n if (d[setsField].length === 1) {\n colorMap.set(d[ID_FIELD], colorPalette[(idx + colorPaletteLen) % colorPaletteLen]);\n }\n else {\n /** 一般都是可以获取到颜色的,如果不正确 就是输入了非法数据 */\n var colorArr = d[setsField].map(function (id) { return colorMap.get(id); });\n colorMap.set(d[ID_FIELD], colorArr.slice(1).reduce(function (a, b) { return blend(a, b, blendMode); }, colorArr[0]));\n }\n });\n return colorMap;\n}), function () {\n var params = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n params[_i] = arguments[_i];\n }\n return JSON.stringify(params);\n});\n/**\n * 给韦恩图数据进行布局\n *\n * @param data\n * @param width\n * @param height\n * @param padding\n * @returns 韦恩图数据\n */\nexport function layoutVennData(options, width, height, padding) {\n if (padding === void 0) { padding = 0; }\n var data = options.data, setsField = options.setsField, sizeField = options.sizeField;\n // 处理空数据的情况\n if (data.length === 0) {\n log(LEVEL.WARN, false, 'warn: %s', '数据不能为空');\n return [];\n }\n var vennData = data.map(function (d) {\n var _a;\n return (__assign(__assign({}, d), (_a = { sets: d[setsField] || [], size: d[sizeField] }, _a[PATH_FIELD] = '', _a[ID_FIELD] = '', _a)));\n });\n // 1. 进行排序,避免图形元素遮挡\n vennData.sort(function (a, b) { return a.sets.length - b.sets.length; });\n // todo 2. 可以在这里处理下非法数据输入,避免直接 crash\n var solution = venn(vennData);\n var circles = scaleSolution(solution, width, height, padding);\n var textCenters = computeTextCentres(circles, vennData);\n vennData.forEach(function (row) {\n var sets = row.sets;\n var id = sets.join(',');\n row[ID_FIELD] = id;\n // 保留 vennText 布局方法\n var setCircles = sets.map(function (set) { return circles[set]; });\n var path = intersectionAreaPath(setCircles);\n if (!/[zZ]$/.test(path)) {\n path += ' Z';\n }\n row[PATH_FIELD] = path;\n var center = textCenters[id] || { x: 0, y: 0 };\n assign(row, center);\n });\n return vennData;\n}\n/**\n * 检查是否存在 非法元素\n * @param legalArr 合法集合:['A', 'B']\n * @param testArr 检查集合:['A', 'B', 'C'] or ['A', 'C'](存在非法 'C')\n * @return boolean\n */\nexport function islegalSets(legalArr, testArr) {\n for (var i = 0; i < testArr.length; i++) {\n if (!legalArr.includes(testArr[i])) {\n return false;\n }\n }\n return true;\n}\n//# sourceMappingURL=utils.js.map","import { __assign } from \"tslib\";\nimport { registerShape, Util } from '@antv/g2';\nimport { parsePathString } from '@antv/path-util';\nimport { deepAssign } from '../../utils';\nimport { PATH_FIELD } from './constant';\n/**\n * 获取填充属性\n * @param cfg 图形绘制数据\n */\nfunction getFillAttrs(cfg) {\n // style.fill 优先级更高\n return deepAssign({}, cfg.defaultStyle, { fill: cfg.color }, cfg.style);\n}\nregisterShape('schema', 'venn', {\n draw: function (cfg, container) {\n var data = cfg.data;\n var segments = parsePathString(data[PATH_FIELD]);\n var fillAttrs = getFillAttrs(cfg);\n var group = container.addGroup({ name: 'venn-shape' });\n group.addShape('path', {\n attrs: __assign(__assign({}, fillAttrs), { path: segments }),\n name: 'venn-path',\n });\n var _a = cfg.customInfo, offsetX = _a.offsetX, offsetY = _a.offsetY;\n var matrix = Util.transform(null, [['t', offsetX, offsetY]]);\n group.setMatrix(matrix);\n return group;\n },\n getMarker: function (markerCfg) {\n var color = markerCfg.color;\n return {\n symbol: 'circle',\n style: {\n lineWidth: 0,\n stroke: color,\n fill: color,\n r: 4,\n },\n };\n },\n});\n//# sourceMappingURL=shape.js.map","import { __extends } from \"tslib\";\nimport { registerGeometryLabel, GeometryLabel } from '@antv/g2';\n// Step 1\n// 自定义 Label 类\n// 需要继承 GeometryLabel 基类\nvar VennLabel = /** @class */ (function (_super) {\n __extends(VennLabel, _super);\n function VennLabel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * 获取每个 label 的位置\n * @param labelCfg\n * @param mappingData\n * @param index\n * @returns label point\n */\n VennLabel.prototype.getLabelPoint = function (labelCfg, mappingData, index) {\n var _a = labelCfg.data, x = _a.x, y = _a.y;\n var _b = labelCfg.customLabelInfo, offsetX = _b.offsetX, offsetY = _b.offsetY;\n return {\n content: labelCfg.content[index],\n x: x + offsetX,\n y: y + offsetY,\n };\n };\n return VennLabel;\n}(GeometryLabel));\n// Step 2: 注册 CustomLabel\nregisterGeometryLabel('venn', VennLabel);\n//# sourceMappingURL=label.js.map","/** tofront: 同步所有元素的位置 */\nexport function placeElementsOrdered(view) {\n if (!view) {\n return;\n }\n var elements = view.geometries[0].elements;\n elements.forEach(function (elem) {\n elem.shape.toFront();\n });\n}\n//# sourceMappingURL=util.js.map","import { __extends } from \"tslib\";\nimport { getActionClass } from '@antv/g2';\nimport { placeElementsOrdered } from '../util';\nvar ElementActiveAction = getActionClass('element-active');\nvar VennElementActive = /** @class */ (function (_super) {\n __extends(VennElementActive, _super);\n function VennElementActive() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * 同步所有元素的位置\n */\n VennElementActive.prototype.syncElementsPos = function () {\n placeElementsOrdered(this.context.view);\n };\n /** 激活图形元素 */\n VennElementActive.prototype.active = function () {\n _super.prototype.active.call(this);\n this.syncElementsPos();\n };\n /** toggle 图形元素激活状态 */\n VennElementActive.prototype.toggle = function () {\n _super.prototype.toggle.call(this);\n this.syncElementsPos();\n };\n /** 重置 */\n VennElementActive.prototype.reset = function () {\n _super.prototype.reset.call(this);\n this.syncElementsPos();\n };\n return VennElementActive;\n}(ElementActiveAction));\nexport { VennElementActive };\n//# sourceMappingURL=active.js.map","import { __extends } from \"tslib\";\nimport { getActionClass } from '@antv/g2';\nimport { placeElementsOrdered } from '../util';\nvar ElementHighlightAction = getActionClass('element-highlight');\nvar VennElementHighlight = /** @class */ (function (_super) {\n __extends(VennElementHighlight, _super);\n function VennElementHighlight() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * 同步所有元素的位置\n */\n VennElementHighlight.prototype.syncElementsPos = function () {\n placeElementsOrdered(this.context.view);\n };\n /** 高亮图形元素 */\n VennElementHighlight.prototype.highlight = function () {\n _super.prototype.highlight.call(this);\n this.syncElementsPos();\n };\n /** toggle 图形元素高亮状态 */\n VennElementHighlight.prototype.toggle = function () {\n _super.prototype.toggle.call(this);\n this.syncElementsPos();\n };\n /** 清楚 */\n VennElementHighlight.prototype.clear = function () {\n _super.prototype.clear.call(this);\n this.syncElementsPos();\n };\n /** 重置 */\n VennElementHighlight.prototype.reset = function () {\n _super.prototype.reset.call(this);\n this.syncElementsPos();\n };\n return VennElementHighlight;\n}(ElementHighlightAction));\nexport { VennElementHighlight };\n//# sourceMappingURL=highlight.js.map","import { __extends } from \"tslib\";\nimport { getActionClass } from '@antv/g2';\nimport { placeElementsOrdered } from '../util';\nvar ElementSelectedAction = getActionClass('element-selected');\nvar ElementSingleSelectedAction = getActionClass('element-single-selected');\n/**\n * 韦恩图元素 多选交互\n */\nvar VennElementSelected = /** @class */ (function (_super) {\n __extends(VennElementSelected, _super);\n function VennElementSelected() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * 同步所有元素的位置\n */\n VennElementSelected.prototype.syncElementsPos = function () {\n placeElementsOrdered(this.context.view);\n };\n /** 激活图形元素 */\n VennElementSelected.prototype.selected = function () {\n _super.prototype.selected.call(this);\n this.syncElementsPos();\n };\n /** toggle 图形元素激活状态 */\n VennElementSelected.prototype.toggle = function () {\n _super.prototype.toggle.call(this);\n this.syncElementsPos();\n };\n /** 重置 */\n VennElementSelected.prototype.reset = function () {\n _super.prototype.reset.call(this);\n this.syncElementsPos();\n };\n return VennElementSelected;\n}(ElementSelectedAction));\nexport { VennElementSelected };\n/**\n * 韦恩图元素 单选交互\n */\nvar VennElementSingleSelected = /** @class */ (function (_super) {\n __extends(VennElementSingleSelected, _super);\n function VennElementSingleSelected() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * 同步所有元素的位置\n */\n VennElementSingleSelected.prototype.syncElementsPos = function () {\n placeElementsOrdered(this.context.view);\n };\n /** 激活图形元素 */\n VennElementSingleSelected.prototype.selected = function () {\n _super.prototype.selected.call(this);\n this.syncElementsPos();\n };\n /** toggle 图形元素激活状态 */\n VennElementSingleSelected.prototype.toggle = function () {\n _super.prototype.toggle.call(this);\n this.syncElementsPos();\n };\n /** 重置 */\n VennElementSingleSelected.prototype.reset = function () {\n _super.prototype.reset.call(this);\n this.syncElementsPos();\n };\n return VennElementSingleSelected;\n}(ElementSingleSelectedAction));\nexport { VennElementSingleSelected };\n//# sourceMappingURL=selected.js.map","import { registerInteraction, registerAction } from '@antv/g2';\nimport { VennElementActive } from './actions/active';\nimport { VennElementHighlight } from './actions/highlight';\nimport { VennElementSelected, VennElementSingleSelected } from './actions/selected';\n/** ================== 注册交互反馈 aciton ================== */\nregisterAction('venn-element-active', VennElementActive);\nregisterAction('venn-element-highlight', VennElementHighlight);\nregisterAction('venn-element-selected', VennElementSelected);\nregisterAction('venn-element-single-selected', VennElementSingleSelected);\n/** ================== 注册交互 ================== */\n// ========= Active 交互 =========\nregisterInteraction('venn-element-active', {\n start: [{ trigger: 'element:mouseenter', action: 'venn-element-active:active' }],\n end: [{ trigger: 'element:mouseleave', action: 'venn-element-active:reset' }],\n});\n// ========= 高亮 交互 =========\nregisterInteraction('venn-element-highlight', {\n start: [{ trigger: 'element:mouseenter', action: 'venn-element-highlight:highlight' }],\n end: [{ trigger: 'element:mouseleave', action: 'venn-element-highlight:reset' }],\n});\n// ========= Selected 交互 =========\n// 点击 venn element (可多选)\nregisterInteraction('venn-element-selected', {\n start: [{ trigger: 'element:click', action: 'venn-element-selected:toggle' }],\n rollback: [{ trigger: 'dblclick', action: ['venn-element-selected:reset'] }],\n});\n// 点击 venn element (单选)\nregisterInteraction('venn-element-single-selected', {\n start: [{ trigger: 'element:click', action: 'venn-element-single-selected:toggle' }],\n rollback: [{ trigger: 'dblclick', action: ['venn-element-single-selected:reset'] }],\n});\n// ========= 韦恩图的图例事件,单独注册 =========\n// legend hover,element active\nregisterInteraction('venn-legend-active', {\n start: [{ trigger: 'legend-item:mouseenter', action: ['list-active:active', 'venn-element-active:active'] }],\n end: [{ trigger: 'legend-item:mouseleave', action: ['list-active:reset', 'venn-element-active:reset'] }],\n});\n// legend hover,element active\nregisterInteraction('venn-legend-highlight', {\n start: [\n {\n trigger: 'legend-item:mouseenter',\n action: ['legend-item-highlight:highlight', 'venn-element-highlight:highlight'],\n },\n ],\n end: [{ trigger: 'legend-item:mouseleave', action: ['legend-item-highlight:reset', 'venn-element-highlight:reset'] }],\n});\n//# sourceMappingURL=index.js.map","import { __assign, __rest } from \"tslib\";\nimport { isArray, get, deepMix, isEqual } from '@antv/util';\nimport { interaction, animation, theme, tooltip, scale } from '../../adaptor/common';\nimport { schema as schemaGeometry } from '../../adaptor/geometries';\nimport { deepAssign, flow, findGeometry, transformLabel, getAdjustAppendPadding, normalPadding, resolveAllPadding, } from '../../utils';\nimport { log, LEVEL } from '../../utils';\nimport { getColorMap, layoutVennData, islegalSets } from './utils';\nimport { ID_FIELD } from './constant';\nimport './shape';\nimport './label';\nimport './interactions';\n/** 图例默认预留空间 */\nexport var LEGEND_SPACE = 40;\n/**\n * 获取 color 映射\n */\nfunction colorMap(params, data, colorPalette) {\n var chart = params.chart, options = params.options;\n var blendMode = options.blendMode, setsField = options.setsField;\n var _a = chart.getTheme(), colors10 = _a.colors10, colors20 = _a.colors20;\n var palette = colorPalette;\n if (!isArray(palette)) {\n palette = data.filter(function (d) { return d[setsField].length === 1; }).length <= 10 ? colors10 : colors20;\n }\n var map = getColorMap(palette, data, blendMode, setsField);\n return function (id) { return map.get(id) || palette[0]; };\n}\n/**\n * color options 转换\n */\nfunction transformColor(params, data) {\n var options = params.options;\n var color = options.color;\n if (typeof color !== 'function') {\n var colorPalette = typeof color === 'string' ? [color] : color;\n var map_1 = colorMap(params, data, colorPalette);\n return function (datum) { return map_1(datum[ID_FIELD]); };\n }\n return color;\n}\n/**\n * 处理 padding\n */\nfunction padding(params) {\n var chart = params.chart, options = params.options;\n var legend = options.legend, appendPadding = options.appendPadding, padding = options.padding;\n // 处理 legend 的位置. 默认预留 40px, 业务上可以通过 appendPadding 增加\n var tempPadding = normalPadding(appendPadding);\n if (legend !== false) {\n tempPadding = getAdjustAppendPadding(appendPadding, get(legend, 'position'), LEGEND_SPACE);\n }\n chart.appendPadding = resolveAllPadding([tempPadding, padding]);\n return params;\n}\n/**\n * 处理非法数据\n * @param params\n */\nfunction data(params) {\n var options = params.options;\n /* 如遇到 交集 中存在 非法元素 的情况,就过滤掉\n * 如:\n * data = [\n * { sets: ['A'], size: 3 }, // 集合\n * { sets: ['B'], size: 4 }, // 集合\n * { sets: ['A', 'B'], size: 2 }, // 交集\n * { sets: ['A', 'B', 'C'], size: 2 }, // 交集 (存在非法 C,过滤该条数据)\n * ...\n * ]\n */\n var data = options['data'];\n if (!data) {\n log(LEVEL.WARN, false, 'warn: %s', '数据不能为空');\n data = [];\n }\n // 合法元素的集合:['A', 'B']\n var currSets = data.filter(function (datum) { return datum.sets.length === 1; }).map(function (datum) { return datum.sets[0]; });\n // 过滤 data\n var filterSets = data.filter(function (datum) {\n var sets = datum.sets;\n // 存在非法元素,就过滤这条数据\n return islegalSets(currSets, sets);\n });\n if (!isEqual(filterSets, data))\n log(LEVEL.WARN, false, 'warn: %s', '交集中不能出现不存在的集合, 请输入合法数据');\n return deepMix({}, params, {\n options: {\n data: filterSets,\n },\n });\n}\n/**\n * geometry 处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var pointStyle = options.pointStyle, setsField = options.setsField, sizeField = options.sizeField;\n // 获取容器大小\n var _a = normalPadding(chart.appendPadding), t = _a[0], r = _a[1], b = _a[2], l = _a[3];\n // 处理 legend 的位置. 默认预留 40px, 业务上可以通过 appendPadding 增加\n var customInfo = { offsetX: l, offsetY: t };\n // coordinateBBox + appendPadding = viewBBox, 不需要再计算 appendPadding 部分,因此直接使用 viewBBox\n var _b = chart.viewBBox, width = _b.width, height = _b.height;\n // 处理padding输入不合理的情况, w 和 h 不能为负数\n var vennData = layoutVennData(options, Math.max(width - (r + l), 0), Math.max(height - (t + b), 0), 0);\n chart.data(vennData);\n var ext = schemaGeometry(deepAssign({}, params, {\n options: {\n xField: 'x',\n yField: 'y',\n sizeField: sizeField,\n seriesField: ID_FIELD,\n rawFields: [setsField, sizeField],\n schema: {\n shape: 'venn',\n style: pointStyle,\n },\n },\n })).ext;\n var geometry = ext.geometry;\n geometry.customInfo(customInfo);\n var colorOptions = transformColor(params, vennData);\n // 韦恩图试点, color 通道只能映射一个字段. 通过外部查找获取 datum\n if (typeof colorOptions === 'function') {\n geometry.color(ID_FIELD, function (id) {\n var datum = vennData.find(function (d) { return d[ID_FIELD] === id; });\n var defaultColor = colorMap(params, vennData)(id);\n return colorOptions(datum, defaultColor);\n });\n }\n return params;\n}\n/**\n * 处理 label\n * @param params\n */\nfunction label(params) {\n var chart = params.chart, options = params.options;\n var label = options.label;\n // 获取容器大小\n var _a = normalPadding(chart.appendPadding), t = _a[0], l = _a[3];\n // 传入 label 布局函数所需的 自定义参数\n var customLabelInfo = { offsetX: l, offsetY: t };\n var geometry = findGeometry(chart, 'schema');\n if (!label) {\n geometry.label(false);\n }\n else {\n var callback = label.callback, cfg = __rest(label, [\"callback\"]);\n geometry.label({\n fields: ['id'],\n callback: callback,\n cfg: deepMix({}, transformLabel(cfg), {\n // 使用 G2 的 自定义label 修改位置\n type: 'venn',\n customLabelInfo: customLabelInfo,\n }),\n });\n }\n return params;\n}\n/**\n * legend 配置\n * @param params\n */\nexport function legend(params) {\n var chart = params.chart, options = params.options;\n var legend = options.legend, sizeField = options.sizeField;\n chart.legend(ID_FIELD, legend);\n // 强制不开启 连续图例\n chart.legend(sizeField, false);\n return params;\n}\n/**\n * 默认关闭坐标轴\n * @param params\n */\nexport function axis(params) {\n var chart = params.chart;\n chart.axis(false);\n return params;\n}\n/**\n * 韦恩图 interaction 交互适配器\n */\nfunction vennInteraction(params) {\n var options = params.options, chart = params.chart;\n var interactions = options.interactions;\n if (interactions) {\n var MAP_1 = {\n 'legend-active': 'venn-legend-active',\n 'legend-highlight': 'venn-legend-highlight',\n };\n interaction(deepAssign({}, params, {\n options: {\n interactions: interactions.map(function (i) { return (__assign(__assign({}, i), { type: MAP_1[i.type] || i.type })); }),\n },\n }));\n }\n chart.removeInteraction('legend-active');\n chart.removeInteraction('legend-highlight');\n return params;\n}\n/**\n * 图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return flow(padding, theme, data, geometry, label, scale({}), legend, axis, tooltip, vennInteraction, animation\n // ... 其他的 adaptor flow\n )(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\n/**\n * 这个是一个图表开发的 模板代码!\n */\nvar Venn = /** @class */ (function (_super) {\n __extends(Venn, _super);\n function Venn() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'venn';\n return _this;\n }\n Venn.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n /**\n * 获取 韦恩图 默认配置\n */\n Venn.prototype.getDefaultOptions = function () {\n return Venn.getDefaultOptions();\n };\n /**\n * 获取适配器\n */\n Venn.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n /**\n * 覆写父类的方法\n */\n Venn.prototype.triggerResize = function () {\n if (!this.chart.destroyed) {\n // 首先自适应容器的宽高\n this.chart.forceFit(); // g2 内部执行 changeSize,changeSize 中执行 render(true)\n this.chart.clear();\n this.execAdaptor(); // 核心:宽高更新之后计算布局\n // 渲染\n this.chart.render(true);\n }\n };\n return Venn;\n}(Plot));\nexport { Venn };\n//# sourceMappingURL=index.js.map","'use strict';\n\nvar DEFAULT_SIZE = 50;\nvar DEFAULT_WIDTH = 2;\n\nvar LN_2 = Math.log(2);\nvar self = module.exports;\n\nvar helper = require('./helper');\n\n// Triangle\nfunction kernel(x) {\n return 1 - Math.abs(x);\n}\n\n/**\n * Get min and max value for the pdf, covering all arr data range while respecting options' data\n * @param arr\n * @param options\n * @returns {*}\n */\nmodule.exports.getUnifiedMinMax = function (arr, options) {\n return self.getUnifiedMinMaxMulti([arr], options);\n};\n\nmodule.exports.getUnifiedMinMaxMulti = function (arrMulti, options) {\n options = options || {};\n\n var relaxMin = false;\n var relaxMax = false;\n\n var width = helper.isNumber(options.width) ? options.width : DEFAULT_WIDTH;\n var size = helper.isNumber(options.size) ? options.size : DEFAULT_SIZE;\n var min = helper.isNumber(options.min) ? options.min : (relaxMin = true, helper.findMinMulti(arrMulti));\n var max = helper.isNumber(options.max) ? options.max : (relaxMax = true, helper.findMaxMulti(arrMulti));\n\n var range = max - min;\n var step = range / (size - 1);\n\n // Relax?\n if (relaxMin) {\n min = min - 2 * width * step;\n }\n if (relaxMax) {\n max = max + 2 * width * step;\n }\n\n return {\n min: min,\n max: max\n };\n};\n\nmodule.exports.create = function (arr, options) {\n options = options || {};\n\n if (!arr || (arr.length === 0)) {\n return [];\n }\n\n var size = helper.isNumber(options.size) ? options.size : DEFAULT_SIZE;\n var width = helper.isNumber(options.width) ? options.width : DEFAULT_WIDTH;\n var normalizedMinMax = self.getUnifiedMinMax(arr, {\n size: size,\n width: width,\n min: options.min,\n max: options.max\n });\n\n var min = normalizedMinMax.min;\n var max = normalizedMinMax.max;\n\n var range = max - min;\n var step = range / (size - 1);\n if (range === 0) {\n // Special case...\n return [{x: min, y: 1}];\n }\n\n // Good to go\n\n var buckets = [];\n for (var i = 0; i < size; i++) {\n buckets.push({\n x: min + i * step,\n y: 0\n });\n }\n\n var xToBucket = function (x) {\n return Math.floor((x - min) / step);\n };\n\n var partialArea = generatePartialAreas(kernel, width);\n var fullArea = partialArea[width];\n var c = partialArea[width-1] - partialArea[width-2];\n\n var initalValue = 0;\n arr.forEach(function (x) {\n var bucket = xToBucket(x);\n\n // Totally outside?\n if ((bucket + width < 0) || (bucket - width >= buckets.length)) {\n return;\n }\n\n var start = Math.max(bucket - width, 0);\n var mid = bucket;\n var end = Math.min(bucket + width, buckets.length - 1);\n\n var leftBlockCount = start - (bucket - width);\n var rightBlockCount = (bucket + width) - end;\n var spilledAreaLeft = partialArea[-width-1 + leftBlockCount] || 0;\n var spilledAreaRight = partialArea[-width-1 + rightBlockCount] || 0;\n var weight = fullArea / (fullArea - spilledAreaLeft - spilledAreaRight);\n\n if (leftBlockCount > 0) {\n initalValue += weight * (leftBlockCount - 1) * c;\n }\n\n // Add grads\n var startGradPos = Math.max(0, bucket-width+1);\n if (helper.inside(0, buckets.length-1, startGradPos)) {\n buckets[startGradPos].y += weight * 1 * c;\n }\n if (helper.inside(0, buckets.length-1, mid + 1)) {\n buckets[mid + 1].y -= weight * 2 * c;\n }\n if (helper.inside(0, buckets.length-1, end + 1)) {\n buckets[end + 1].y += weight * 1 * c;\n }\n });\n\n var accumulator = initalValue;\n var gradAccumulator = 0;\n var area = 0;\n buckets.forEach(function (bucket) {\n gradAccumulator += bucket.y;\n accumulator += gradAccumulator;\n\n bucket.y = accumulator;\n area += accumulator;\n });\n\n // Normalize\n if (area > 0) {\n buckets.forEach(function (bucket) {\n bucket.y /= area;\n });\n }\n\n return buckets;\n};\n\nfunction generatePartialAreas(kernel, width) {\n var partialAreas = {};\n\n var accumulator = 0;\n for (var i = -width; i <= width; i++) {\n accumulator += kernel(i/width);\n partialAreas[i] = accumulator;\n }\n\n return partialAreas;\n}\n\nmodule.exports.getExpectedValueFromPdf = function (pdf) {\n if (!pdf || (pdf.length === 0)) {\n return undefined;\n }\n\n var expected = 0;\n\n pdf.forEach(function (obj) {\n expected += obj.x * obj.y;\n });\n\n return expected;\n};\n\nmodule.exports.getXWithLeftTailArea = function (pdf, area) {\n if (!pdf || (pdf.length === 0)) {\n return undefined;\n }\n\n var accumulator = 0;\n var last = 0;\n for (var i = 0; i < pdf.length; i++) {\n last = i;\n accumulator += pdf[i].y;\n\n if (accumulator >= area) {\n break;\n }\n }\n\n return pdf[last].x;\n};\n\nmodule.exports.getPerplexity = function (pdf) {\n if (!pdf || (pdf.length === 0)) {\n return undefined;\n }\n\n var entropy = 0;\n pdf.forEach(function (obj) {\n var ln = Math.log(obj.y);\n\n if (isFinite(ln)) {\n entropy += obj.y * ln;\n }\n });\n entropy = -entropy / LN_2;\n\n return Math.pow(2, entropy);\n};\n","import * as d3Hierarchy from 'd3-hierarchy';\nimport { assign, isArray } from '@antv/util';\nimport { getField, getAllNodes } from './util';\nvar DEFAULT_OPTIONS = {\n field: 'value',\n as: ['x', 'y', 'r'],\n // 默认降序\n sort: function (a, b) { return b.value - a.value; },\n};\nexport function pack(data, options) {\n options = assign({}, DEFAULT_OPTIONS, options);\n var as = options.as;\n if (!isArray(as) || as.length !== 3) {\n throw new TypeError('Invalid as: it must be an array with 3 strings (e.g. [ \"x\", \"y\", \"r\" ])!');\n }\n var field;\n try {\n field = getField(options);\n }\n catch (e) {\n console.warn(e);\n }\n var packLayout = function (data) {\n return d3Hierarchy.pack().size(options.size).padding(options.padding)(d3Hierarchy\n .hierarchy(data)\n .sum(function (d) { return d[field]; })\n .sort(options.sort));\n };\n var root = packLayout(data);\n var x = as[0];\n var y = as[1];\n var r = as[2];\n root.each(function (node) {\n node[x] = node.x;\n node[y] = node.y;\n node[r] = node.r;\n });\n return getAllNodes(root);\n}\n//# sourceMappingURL=pack.js.map","import { __assign } from \"tslib\";\nimport { pack } from '../../utils/hierarchy/pack';\nimport { deepAssign, pick } from '../../utils';\nimport { HIERARCHY_DATA_TRANSFORM_PARAMS } from '../../interactions/actions/drill-down';\nimport { resolveAllPadding } from '../../utils/padding';\n/**\n * circle-packing 数据转换\n * @param options\n */\nexport function transformData(options) {\n var data = options.data, hierarchyConfig = options.hierarchyConfig, _a = options.rawFields, rawFields = _a === void 0 ? [] : _a, enableDrillDown = options.enableDrillDown;\n var nodes = pack(data, __assign(__assign({}, hierarchyConfig), { field: 'value', as: ['x', 'y', 'r'] }));\n var result = [];\n nodes.forEach(function (node) {\n var _a;\n var path = node.data.name;\n var ancestorNode = __assign({}, node);\n while (ancestorNode.depth > 1) {\n path = ((_a = ancestorNode.parent.data) === null || _a === void 0 ? void 0 : _a.name) + \" / \" + path;\n ancestorNode = ancestorNode.parent;\n }\n // 开启下钻,仅加载 depth <= 2 的数据 (加载两层)\n if (enableDrillDown && node.depth > 2) {\n return null;\n }\n var nodeInfo = deepAssign({}, node.data, __assign(__assign(__assign({}, pick(node.data, rawFields)), { path: path }), node));\n nodeInfo.ext = hierarchyConfig;\n nodeInfo[HIERARCHY_DATA_TRANSFORM_PARAMS] = { hierarchyConfig: hierarchyConfig, rawFields: rawFields, enableDrillDown: enableDrillDown };\n result.push(nodeInfo);\n });\n return result;\n}\n/**\n * 根据传入的 padding 和 现有的 画布大小, 输出针对圆形视图布局需要的 finalPadding 以及 finalSize\n * @param params\n */\nexport function resolvePaddingForCircle(padding, appendPadding, containerSize) {\n var tempPadding = resolveAllPadding([padding, appendPadding]);\n var top = tempPadding[0], right = tempPadding[1], bottom = tempPadding[2], left = tempPadding[3]; // 没设定,默认是 [0, 0, 0, 0]\n var width = containerSize.width, height = containerSize.height;\n // 有了 tempPadding 介入以后,计算出coordinate范围宽高的最小值 minSize = circle-packing的直径\n var wSize = width - (left + right);\n var hSize = height - (top + bottom);\n var minSize = Math.min(wSize, hSize); // circle-packing的直径\n // 得到居中后各方向剩余的 padding\n var restWidthPadding = (wSize - minSize) / 2;\n var restHeightPadding = (hSize - minSize) / 2;\n var finalTop = top + restHeightPadding;\n var finalRight = right + restWidthPadding;\n var finalBottom = bottom + restHeightPadding;\n var finalLeft = left + restWidthPadding;\n var finalPadding = [finalTop, finalRight, finalBottom, finalLeft];\n var finalSize = minSize < 0 ? 0 : minSize; // 防止为负数\n return { finalPadding: finalPadding, finalSize: finalSize };\n}\n//# sourceMappingURL=utils.js.map","/** 默认的源字段 */\nexport var RAW_FIELDS = ['x', 'y', 'r', 'name', 'value', 'path', 'depth'];\nexport var DEFAULT_OPTIONS = {\n // 默认按照 name 字段对颜色进行分类\n colorField: 'name',\n autoFit: true,\n pointStyle: {\n lineWidth: 0,\n stroke: '#fff',\n },\n // 默认不开启图例\n legend: false,\n hierarchyConfig: {\n size: [1, 1],\n padding: 0,\n },\n label: {\n fields: ['name'],\n layout: {\n type: 'limit-in-shape',\n },\n },\n tooltip: {\n showMarkers: false,\n showTitle: false,\n },\n // 默认不可以下钻\n drilldown: { enabled: false },\n};\n//# sourceMappingURL=constant.js.map","import { __assign, __spreadArrays } from \"tslib\";\nimport { get } from '@antv/util';\nimport { point } from '../../adaptor/geometries/point';\nimport { interaction as baseInteraction, animation, theme, legend, annotation, scale, pattern, } from '../../adaptor/common';\nimport { flow, deepAssign } from '../../utils';\nimport { getAdjustAppendPadding, resolveAllPadding } from '../../utils/padding';\nimport { transformData, resolvePaddingForCircle } from './utils';\nimport { RAW_FIELDS } from './constant';\n/**\n * 获取默认 option\n * @param params\n */\nfunction defaultOptions(params) {\n var chart = params.chart;\n var diameter = Math.min(chart.viewBBox.width, chart.viewBBox.height);\n return deepAssign({\n options: {\n size: function (_a) {\n var r = _a.r;\n return r * diameter;\n },\n },\n }, params);\n}\n/**\n * padding 配置\n * @param params\n */\nfunction padding(params) {\n var options = params.options, chart = params.chart;\n // 通过改变 padding,修改 coordinate 的绘制区域\n var containerSize = chart.viewBBox;\n var padding = options.padding, appendPadding = options.appendPadding, drilldown = options.drilldown;\n var tempAppendPadding = appendPadding;\n if (drilldown === null || drilldown === void 0 ? void 0 : drilldown.enabled) {\n var appendPaddingByDrilldown = getAdjustAppendPadding(chart.appendPadding, get(drilldown, ['breadCrumb', 'position']));\n tempAppendPadding = resolveAllPadding([appendPaddingByDrilldown, appendPadding]);\n }\n var finalPadding = resolvePaddingForCircle(padding, tempAppendPadding, containerSize).finalPadding;\n chart.padding = finalPadding;\n chart.appendPadding = 0;\n return params;\n}\n/**\n * 字段\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var padding = chart.padding, appendPadding = chart.appendPadding;\n var color = options.color, colorField = options.colorField, pointStyle = options.pointStyle, hierarchyConfig = options.hierarchyConfig, sizeField = options.sizeField, _a = options.rawFields, rawFields = _a === void 0 ? [] : _a, drilldown = options.drilldown;\n var data = transformData({\n data: options.data,\n hierarchyConfig: hierarchyConfig,\n enableDrillDown: drilldown === null || drilldown === void 0 ? void 0 : drilldown.enabled,\n rawFields: rawFields,\n });\n chart.data(data);\n var containerSize = chart.viewBBox;\n var finalSize = resolvePaddingForCircle(padding, appendPadding, containerSize).finalSize;\n // 有sizeField的时候,例如 value ,可以选择映射 size 函数,自己计算出映射的半径\n var circleSize = function (_a) {\n var r = _a.r;\n return r * finalSize;\n }; // 默认配置\n if (sizeField) {\n circleSize = function (d) { return d[sizeField] * finalSize; }; // 目前只有 r 通道映射效果会正常\n }\n // geometry\n point(deepAssign({}, params, {\n options: {\n xField: 'x',\n yField: 'y',\n seriesField: colorField,\n sizeField: sizeField,\n rawFields: __spreadArrays(RAW_FIELDS, rawFields),\n point: {\n color: color,\n style: pointStyle,\n shape: 'circle',\n size: circleSize,\n },\n },\n }));\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\nexport function meta(params) {\n return flow(scale({}, {\n // 必须强制为 nice\n x: { min: 0, max: 1, minLimit: 0, maxLimit: 1, nice: true },\n y: { min: 0, max: 1, minLimit: 0, maxLimit: 1, nice: true },\n }))(params);\n}\n/**\n * tooltip 配置\n * @param params\n */\nfunction tooltip(params) {\n var chart = params.chart, options = params.options;\n var tooltip = options.tooltip;\n if (tooltip === false) {\n chart.tooltip(false);\n }\n else {\n var tooltipOptions = tooltip;\n // 设置了 fields,就不进行 customItems 了; 设置 formatter 时,需要搭配 fields\n if (!get(tooltip, 'fields')) {\n tooltipOptions = deepAssign({}, {\n customItems: function (items) {\n return items.map(function (item) {\n var scales = get(chart.getOptions(), 'scales');\n var nameFormatter = get(scales, ['name', 'formatter'], function (v) { return v; });\n var valueFormatter = get(scales, ['value', 'formatter'], function (v) { return v; });\n return __assign(__assign({}, item), { name: nameFormatter(item.data.name), value: valueFormatter(item.data.value) });\n });\n },\n }, tooltipOptions);\n }\n chart.tooltip(tooltipOptions);\n }\n return params;\n}\n/**\n * 坐标轴, 默认关闭\n * @param params\n */\nfunction axis(params) {\n var chart = params.chart;\n chart.axis(false);\n return params;\n}\nfunction adaptorInteraction(options) {\n var drilldown = options.drilldown, _a = options.interactions, interactions = _a === void 0 ? [] : _a;\n if (drilldown === null || drilldown === void 0 ? void 0 : drilldown.enabled) {\n return deepAssign({}, options, {\n interactions: __spreadArrays(interactions, [\n {\n type: 'drill-down',\n cfg: { drillDownConfig: drilldown, transformData: transformData, enableDrillDown: true },\n },\n ]),\n });\n }\n return options;\n}\n/**\n * 交互配置\n * @param params\n * @returns\n */\nfunction interaction(params) {\n var chart = params.chart, options = params.options;\n baseInteraction({\n chart: chart,\n options: adaptorInteraction(options),\n });\n return params;\n}\n/**\n * 矩形树图\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n return flow(pattern('pointStyle'), defaultOptions, padding, theme, meta, geometry, axis, legend, tooltip, interaction, animation, annotation())(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\nimport './interactions';\n/**\n * CirclePacking\n * @usage hierarchy, proportions\n */\nvar CirclePacking = /** @class */ (function (_super) {\n __extends(CirclePacking, _super);\n function CirclePacking() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'circle-packing';\n return _this;\n }\n /**\n * 获取 面积图 默认配置项\n * 供外部使用\n */\n CirclePacking.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n CirclePacking.prototype.getDefaultOptions = function () {\n return CirclePacking.getDefaultOptions();\n };\n /**\n * 获取适配器\n */\n CirclePacking.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n /**\n * 覆写父类的方法\n */\n CirclePacking.prototype.triggerResize = function () {\n if (!this.chart.destroyed) {\n // 首先自适应容器的宽高\n this.chart.forceFit(); // g2 内部执行 changeSize,changeSize 中执行 render(true)\n this.chart.clear();\n this.execAdaptor(); // 核心:宽高更新之后计算padding\n // 渲染\n this.chart.render(true);\n }\n };\n return CirclePacking;\n}(Plot));\nexport { CirclePacking };\n//# sourceMappingURL=index.js.map","import { __spreadArrays } from \"tslib\";\nimport { Util } from '@antv/g2';\nvar ORIGIN_MATRIX = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n/**\n * 矩阵变换\n * @param actions\n * @param matrix\n */\nexport function transform(actions, matrix) {\n var ulMatrix = matrix ? __spreadArrays(matrix) : __spreadArrays(ORIGIN_MATRIX);\n return Util.transform(ulMatrix, actions);\n}\n//# sourceMappingURL=matrix.js.map","import roundNode from \"./treemap/round.js\";\nimport treemapDice from \"./treemap/dice.js\";\n\nexport default function() {\n var dx = 1,\n dy = 1,\n padding = 0,\n round = false;\n\n function partition(root) {\n var n = root.height + 1;\n root.x0 =\n root.y0 = padding;\n root.x1 = dx;\n root.y1 = dy / n;\n root.eachBefore(positionNode(dy, n));\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(dy, n) {\n return function(node) {\n if (node.children) {\n treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n }\n var x0 = node.x0,\n y0 = node.y0,\n x1 = node.x1 - padding,\n y1 = node.y1 - padding;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n };\n }\n\n partition.round = function(x) {\n return arguments.length ? (round = !!x, partition) : round;\n };\n\n partition.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n };\n\n partition.padding = function(x) {\n return arguments.length ? (padding = +x, partition) : padding;\n };\n\n return partition;\n}\n","import { minBy } from '@antv/util';\nfunction targetDepth(d) {\n return d.target.depth;\n}\nexport function left(node) {\n return node.depth;\n}\nexport function right(node, n) {\n return n - 1 - node.height;\n}\nexport function justify(node, n) {\n return node.sourceLinks.length ? node.depth : n - 1;\n}\nexport function center(node) {\n return node.targetLinks.length ? node.depth : node.sourceLinks.length ? minBy(node.sourceLinks, targetDepth) - 1 : 0;\n}\n//# sourceMappingURL=align.js.map","export function constant(x) {\n return function () {\n return x;\n };\n}\nexport function sumBy(arr, func) {\n var r = 0;\n for (var i = 0; i < arr.length; i++) {\n r += func(arr[i]);\n }\n return r;\n}\n/**\n * 计算最大值\n * @param arr\n * @param func\n */\nexport function maxValueBy(arr, func) {\n var r = -Infinity;\n for (var i = 0; i < arr.length; i++) {\n r = Math.max(func(arr[i]), r);\n }\n return r;\n}\n/**\n * 计算最小值\n * @param arr\n * @param func\n */\nexport function minValueBy(arr, func) {\n var r = Infinity;\n for (var i = 0; i < arr.length; i++) {\n r = Math.min(func(arr[i]), r);\n }\n return r;\n}\n//# sourceMappingURL=helper.js.map","import { justify } from './align';\nimport { constant, sumBy, maxValueBy, minValueBy } from './helper';\nfunction ascendingSourceBreadth(a, b) {\n return ascendingBreadth(a.source, b.source) || a.index - b.index;\n}\nfunction ascendingTargetBreadth(a, b) {\n return ascendingBreadth(a.target, b.target) || a.index - b.index;\n}\nfunction ascendingBreadth(a, b) {\n return a.y0 - b.y0;\n}\nfunction value(d) {\n return d.value;\n}\nfunction defaultId(d) {\n return d.index;\n}\nfunction defaultNodes(graph) {\n return graph.nodes;\n}\nfunction defaultLinks(graph) {\n return graph.links;\n}\nfunction find(nodeById, id) {\n var node = nodeById.get(id);\n if (!node)\n throw new Error('missing: ' + id);\n return node;\n}\nfunction computeLinkBreadths(_a) {\n var nodes = _a.nodes;\n for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {\n var node = nodes_1[_i];\n var y0 = node.y0;\n var y1 = y0;\n for (var _b = 0, _c = node.sourceLinks; _b < _c.length; _b++) {\n var link = _c[_b];\n link.y0 = y0 + link.width / 2;\n y0 += link.width;\n }\n for (var _d = 0, _e = node.targetLinks; _d < _e.length; _d++) {\n var link = _e[_d];\n link.y1 = y1 + link.width / 2;\n y1 += link.width;\n }\n }\n}\nexport function Sankey() {\n var x0 = 0, y0 = 0, x1 = 1, y1 = 1; // extent\n var dx = 24; // nodeWidth\n var dy = 8, py; // nodePadding\n var id = defaultId;\n var align = justify;\n var depth;\n var sort;\n var linkSort;\n var nodes = defaultNodes;\n var links = defaultLinks;\n var iterations = 6;\n function sankey(arg) {\n var graph = {\n nodes: nodes(arg),\n links: links(arg),\n };\n computeNodeLinks(graph);\n computeNodeValues(graph);\n computeNodeDepths(graph);\n computeNodeHeights(graph);\n computeNodeBreadths(graph);\n computeLinkBreadths(graph);\n return graph;\n }\n sankey.update = function (graph) {\n computeLinkBreadths(graph);\n return graph;\n };\n sankey.nodeId = function (_) {\n return arguments.length ? ((id = typeof _ === 'function' ? _ : constant(_)), sankey) : id;\n };\n sankey.nodeAlign = function (_) {\n return arguments.length ? ((align = typeof _ === 'function' ? _ : constant(_)), sankey) : align;\n };\n sankey.nodeDepth = function (_) {\n return arguments.length ? ((depth = typeof _ === 'function' ? _ : _), sankey) : depth;\n };\n sankey.nodeSort = function (_) {\n return arguments.length ? ((sort = _), sankey) : sort;\n };\n sankey.nodeWidth = function (_) {\n return arguments.length ? ((dx = +_), sankey) : dx;\n };\n sankey.nodePadding = function (_) {\n return arguments.length ? ((dy = py = +_), sankey) : dy;\n };\n sankey.nodes = function (_) {\n return arguments.length ? ((nodes = typeof _ === 'function' ? _ : constant(_)), sankey) : nodes;\n };\n sankey.links = function (_) {\n return arguments.length ? ((links = typeof _ === 'function' ? _ : constant(_)), sankey) : links;\n };\n sankey.linkSort = function (_) {\n return arguments.length ? ((linkSort = _), sankey) : linkSort;\n };\n sankey.size = function (_) {\n return arguments.length ? ((x0 = y0 = 0), (x1 = +_[0]), (y1 = +_[1]), sankey) : [x1 - x0, y1 - y0];\n };\n sankey.extent = function (_) {\n return arguments.length\n ? ((x0 = +_[0][0]), (x1 = +_[1][0]), (y0 = +_[0][1]), (y1 = +_[1][1]), sankey)\n : [\n [x0, y0],\n [x1, y1],\n ];\n };\n sankey.iterations = function (_) {\n return arguments.length ? ((iterations = +_), sankey) : iterations;\n };\n function computeNodeLinks(_a) {\n var nodes = _a.nodes, links = _a.links;\n nodes.forEach(function (node, idx) {\n node.index = idx;\n node.sourceLinks = [];\n node.targetLinks = [];\n });\n var nodeById = new Map(nodes.map(function (d) { return [id(d), d]; }));\n links.forEach(function (link, idx) {\n link.index = idx;\n var source = link.source, target = link.target;\n if (typeof source !== 'object')\n source = link.source = find(nodeById, source);\n if (typeof target !== 'object')\n target = link.target = find(nodeById, target);\n source.sourceLinks.push(link);\n target.targetLinks.push(link);\n });\n if (linkSort != null) {\n for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) {\n var _b = nodes_2[_i], sourceLinks = _b.sourceLinks, targetLinks = _b.targetLinks;\n sourceLinks.sort(linkSort);\n targetLinks.sort(linkSort);\n }\n }\n }\n function computeNodeValues(_a) {\n var nodes = _a.nodes;\n for (var _i = 0, nodes_3 = nodes; _i < nodes_3.length; _i++) {\n var node = nodes_3[_i];\n node.value =\n node.fixedValue === undefined\n ? Math.max(sumBy(node.sourceLinks, value), sumBy(node.targetLinks, value))\n : node.fixedValue;\n }\n }\n function computeNodeDepths(_a) {\n var nodes = _a.nodes;\n var n = nodes.length;\n var current = new Set(nodes);\n var next = new Set();\n var x = 0;\n while (current.size) {\n current.forEach(function (node) {\n node.depth = x;\n for (var _i = 0, _a = node.sourceLinks; _i < _a.length; _i++) {\n var target = _a[_i].target;\n next.add(target);\n }\n });\n if (++x > n)\n throw new Error('circular link');\n current = next;\n next = new Set();\n }\n // 如果配置了 depth,则设置自定义 depth\n if (depth) {\n var maxDepth = Math.max(maxValueBy(nodes, function (d) { return d.depth; }) + 1, 0);\n var node = void 0;\n for (var i = 0; i < nodes.length; i++) {\n node = nodes[i];\n node.depth = depth.call(null, node, maxDepth);\n }\n }\n }\n function computeNodeHeights(_a) {\n var nodes = _a.nodes;\n var n = nodes.length;\n var current = new Set(nodes);\n var next = new Set();\n var x = 0;\n while (current.size) {\n current.forEach(function (node) {\n node.height = x;\n for (var _i = 0, _a = node.targetLinks; _i < _a.length; _i++) {\n var source = _a[_i].source;\n next.add(source);\n }\n });\n if (++x > n)\n throw new Error('circular link');\n current = next;\n next = new Set();\n }\n }\n function computeNodeLayers(_a) {\n var nodes = _a.nodes;\n var x = Math.max(maxValueBy(nodes, function (d) { return d.depth; }) + 1, 0);\n var kx = (x1 - x0 - dx) / (x - 1);\n var columns = new Array(x).fill(0).map(function () { return []; });\n for (var _i = 0, nodes_4 = nodes; _i < nodes_4.length; _i++) {\n var node = nodes_4[_i];\n var i = Math.max(0, Math.min(x - 1, Math.floor(align.call(null, node, x))));\n node.layer = i;\n node.x0 = x0 + i * kx;\n node.x1 = node.x0 + dx;\n if (columns[i])\n columns[i].push(node);\n else\n columns[i] = [node];\n }\n if (sort)\n for (var _b = 0, columns_1 = columns; _b < columns_1.length; _b++) {\n var column = columns_1[_b];\n column.sort(sort);\n }\n return columns;\n }\n function initializeNodeBreadths(columns) {\n var ky = minValueBy(columns, function (c) { return (y1 - y0 - (c.length - 1) * py) / sumBy(c, value); });\n for (var _i = 0, columns_2 = columns; _i < columns_2.length; _i++) {\n var nodes_6 = columns_2[_i];\n var y = y0;\n for (var _a = 0, nodes_5 = nodes_6; _a < nodes_5.length; _a++) {\n var node = nodes_5[_a];\n node.y0 = y;\n node.y1 = y + node.value * ky;\n y = node.y1 + py;\n for (var _b = 0, _c = node.sourceLinks; _b < _c.length; _b++) {\n var link = _c[_b];\n link.width = link.value * ky;\n }\n }\n y = (y1 - y + py) / (nodes_6.length + 1);\n for (var i = 0; i < nodes_6.length; ++i) {\n var node = nodes_6[i];\n node.y0 += y * (i + 1);\n node.y1 += y * (i + 1);\n }\n reorderLinks(nodes_6);\n }\n }\n function computeNodeBreadths(graph) {\n var columns = computeNodeLayers(graph);\n py = Math.min(dy, (y1 - y0) / (maxValueBy(columns, function (c) { return c.length; }) - 1));\n initializeNodeBreadths(columns);\n for (var i = 0; i < iterations; ++i) {\n var alpha = Math.pow(0.99, i);\n var beta = Math.max(1 - alpha, (i + 1) / iterations);\n relaxRightToLeft(columns, alpha, beta);\n relaxLeftToRight(columns, alpha, beta);\n }\n }\n // Reposition each node based on its incoming (target) links.\n function relaxLeftToRight(columns, alpha, beta) {\n for (var i = 1, n = columns.length; i < n; ++i) {\n var column = columns[i];\n for (var _i = 0, column_1 = column; _i < column_1.length; _i++) {\n var target = column_1[_i];\n var y = 0;\n var w = 0;\n for (var _a = 0, _b = target.targetLinks; _a < _b.length; _a++) {\n var _c = _b[_a], source = _c.source, value_1 = _c.value;\n var v = value_1 * (target.layer - source.layer);\n y += targetTop(source, target) * v;\n w += v;\n }\n if (!(w > 0))\n continue;\n var dy_1 = (y / w - target.y0) * alpha;\n target.y0 += dy_1;\n target.y1 += dy_1;\n reorderNodeLinks(target);\n }\n if (sort === undefined)\n column.sort(ascendingBreadth);\n if (column.length)\n resolveCollisions(column, beta);\n }\n }\n // Reposition each node based on its outgoing (source) links.\n function relaxRightToLeft(columns, alpha, beta) {\n for (var n = columns.length, i = n - 2; i >= 0; --i) {\n var column = columns[i];\n for (var _i = 0, column_2 = column; _i < column_2.length; _i++) {\n var source = column_2[_i];\n var y = 0;\n var w = 0;\n for (var _a = 0, _b = source.sourceLinks; _a < _b.length; _a++) {\n var _c = _b[_a], target = _c.target, value_2 = _c.value;\n var v = value_2 * (target.layer - source.layer);\n y += sourceTop(source, target) * v;\n w += v;\n }\n if (!(w > 0))\n continue;\n var dy_2 = (y / w - source.y0) * alpha;\n source.y0 += dy_2;\n source.y1 += dy_2;\n reorderNodeLinks(source);\n }\n if (sort === undefined)\n column.sort(ascendingBreadth);\n if (column.length)\n resolveCollisions(column, beta);\n }\n }\n function resolveCollisions(nodes, alpha) {\n var i = nodes.length >> 1;\n var subject = nodes[i];\n resolveCollisionsBottomToTop(nodes, subject.y0 - py, i - 1, alpha);\n resolveCollisionsTopToBottom(nodes, subject.y1 + py, i + 1, alpha);\n resolveCollisionsBottomToTop(nodes, y1, nodes.length - 1, alpha);\n resolveCollisionsTopToBottom(nodes, y0, 0, alpha);\n }\n // Push any overlapping nodes down.\n function resolveCollisionsTopToBottom(nodes, y, i, alpha) {\n for (; i < nodes.length; ++i) {\n var node = nodes[i];\n var dy_3 = (y - node.y0) * alpha;\n if (dy_3 > 1e-6)\n (node.y0 += dy_3), (node.y1 += dy_3);\n y = node.y1 + py;\n }\n }\n // Push any overlapping nodes up.\n function resolveCollisionsBottomToTop(nodes, y, i, alpha) {\n for (; i >= 0; --i) {\n var node = nodes[i];\n var dy_4 = (node.y1 - y) * alpha;\n if (dy_4 > 1e-6)\n (node.y0 -= dy_4), (node.y1 -= dy_4);\n y = node.y0 - py;\n }\n }\n function reorderNodeLinks(_a) {\n var sourceLinks = _a.sourceLinks, targetLinks = _a.targetLinks;\n if (linkSort === undefined) {\n for (var _i = 0, targetLinks_1 = targetLinks; _i < targetLinks_1.length; _i++) {\n var sourceLinks_2 = targetLinks_1[_i].source.sourceLinks;\n sourceLinks_2.sort(ascendingTargetBreadth);\n }\n for (var _b = 0, sourceLinks_1 = sourceLinks; _b < sourceLinks_1.length; _b++) {\n var targetLinks_2 = sourceLinks_1[_b].target.targetLinks;\n targetLinks_2.sort(ascendingSourceBreadth);\n }\n }\n }\n function reorderLinks(nodes) {\n if (linkSort === undefined) {\n for (var _i = 0, nodes_7 = nodes; _i < nodes_7.length; _i++) {\n var _a = nodes_7[_i], sourceLinks = _a.sourceLinks, targetLinks = _a.targetLinks;\n sourceLinks.sort(ascendingTargetBreadth);\n targetLinks.sort(ascendingSourceBreadth);\n }\n }\n }\n // Returns the target.y0 that would produce an ideal link from source to target.\n function targetTop(source, target) {\n var y = source.y0 - ((source.sourceLinks.length - 1) * py) / 2;\n for (var _i = 0, _a = source.sourceLinks; _i < _a.length; _i++) {\n var _b = _a[_i], node = _b.target, width = _b.width;\n if (node === target)\n break;\n y += width + py;\n }\n for (var _c = 0, _d = target.targetLinks; _c < _d.length; _c++) {\n var _e = _d[_c], node = _e.source, width = _e.width;\n if (node === source)\n break;\n y -= width;\n }\n return y;\n }\n // Returns the source.y0 that would produce an ideal link from source to target.\n function sourceTop(source, target) {\n var y = target.y0 - ((target.targetLinks.length - 1) * py) / 2;\n for (var _i = 0, _a = target.targetLinks; _i < _a.length; _i++) {\n var _b = _a[_i], node = _b.source, width = _b.width;\n if (node === source)\n break;\n y += width + py;\n }\n for (var _c = 0, _d = source.sourceLinks; _c < _d.length; _c++) {\n var _e = _d[_c], node = _e.target, width = _e.width;\n if (node === target)\n break;\n y -= width;\n }\n return y;\n }\n return sankey;\n}\n//# sourceMappingURL=sankey.js.map","import { assign, isString, isFunction } from '@antv/util';\nimport { sankey, left, right, center, justify } from './sankey';\nvar ALIGN_METHOD = {\n left: left,\n right: right,\n center: center,\n justify: justify,\n};\n/**\n * 默认值\n */\nvar DEFAULT_OPTIONS = {\n nodeId: function (node) { return node.index; },\n nodeAlign: 'justify',\n nodeWidth: 0.008,\n nodePadding: 0.03,\n nodeSort: undefined,\n};\n/**\n * 获得 align function\n * @param nodeAlign\n * @param nodeDepth\n */\nexport function getNodeAlignFunction(nodeAlign) {\n var func = isString(nodeAlign) ? ALIGN_METHOD[nodeAlign] : isFunction(nodeAlign) ? nodeAlign : null;\n return func || justify;\n}\nexport function getDefaultOptions(sankeyLayoutOptions) {\n return assign({}, DEFAULT_OPTIONS, sankeyLayoutOptions);\n}\n/**\n * 桑基图利用数据进行布局的函数,最终返回节点、边的位置(0 - 1 的信息)\n * 将会修改 data 数据\n * @param sankeyLayoutOptions\n * @param data\n */\nexport function sankeyLayout(sankeyLayoutOptions, data) {\n var options = getDefaultOptions(sankeyLayoutOptions);\n var nodeId = options.nodeId, nodeSort = options.nodeSort, nodeAlign = options.nodeAlign, nodeWidth = options.nodeWidth, nodePadding = options.nodePadding, nodeDepth = options.nodeDepth;\n var sankeyProcessor = sankey()\n // .links((d: any) => d.links)\n // .nodes((d: any) => d.nodes)\n .nodeSort(nodeSort)\n .nodeWidth(nodeWidth)\n .nodePadding(nodePadding)\n .nodeDepth(nodeDepth)\n .nodeAlign(getNodeAlignFunction(nodeAlign))\n .extent([\n [0, 0],\n [1, 1],\n ])\n .nodeId(nodeId);\n // 进行桑基图布局处理\n var layoutData = sankeyProcessor(data);\n // post process (x, y), etc.\n layoutData.nodes.forEach(function (node) {\n var x0 = node.x0, x1 = node.x1, y0 = node.y0, y1 = node.y1;\n /* points\n * 3---2\n * | |\n * 0---1\n */\n node.x = [x0, x1, x1, x0];\n node.y = [y0, y0, y1, y1];\n });\n layoutData.links.forEach(function (edge) {\n var source = edge.source, target = edge.target;\n var sx = source.x1;\n var tx = target.x0;\n edge.x = [sx, sx, tx, tx];\n var offset = edge.width / 2;\n edge.y = [edge.y0 + offset, edge.y0 - offset, edge.y1 + offset, edge.y1 - offset];\n });\n return layoutData;\n}\n//# sourceMappingURL=layout.js.map","import { isArray } from '@antv/util';\n/**\n * 根据 edges 获取对应的 node 结构\n */\nexport function getNodes(edges, sourceField, targetField) {\n var nodes = [];\n edges.forEach(function (e) {\n var source = e[sourceField];\n var target = e[targetField];\n if (!nodes.includes(source)) {\n nodes.push(source);\n }\n if (!nodes.includes(target)) {\n nodes.push(target);\n }\n });\n return nodes;\n}\n/**\n * 根据 edges 获取对应的 dfs 邻接矩阵\n */\nexport function getMatrix(edges, nodes, sourceField, targetField) {\n var graphMatrix = {};\n nodes.forEach(function (pre) {\n graphMatrix[pre] = {};\n nodes.forEach(function (next) {\n graphMatrix[pre][next] = 0;\n });\n });\n edges.forEach(function (edge) {\n graphMatrix[edge[sourceField]][edge[targetField]] = 1;\n });\n return graphMatrix;\n}\n/**\n * 使用 DFS 思路切断桑基图数据中的环(会丢失数据),保证顺序\n * @param data\n * @param sourceField\n * @param targetField\n */\nexport function cutoffCircle(edges, sourceField, targetField) {\n if (!isArray(edges))\n return [];\n // 待删除的环状结构\n var removedData = [];\n // 获取所有的节点\n var nodes = getNodes(edges, sourceField, targetField);\n // 获取节点与边的邻接矩阵\n var graphMatrix = getMatrix(edges, nodes, sourceField, targetField);\n // visited:标记节点访问状态, 0:未访问,1:访问中, -1:已访问\n var visited = {};\n // 初始化visited\n nodes.forEach(function (node) {\n visited[node] = 0;\n });\n // 图的深度遍历函数\n function DFS(dfsNode) {\n // 节点状态置为正在访问\n visited[dfsNode] = 1;\n nodes.forEach(function (node) {\n if (graphMatrix[dfsNode][node] != 0) {\n // 当前节点在访问中,再次被访问,证明有环,移动到 removeData\n if (visited[node] == 1) {\n // 拼接为字符串,方便最后过滤\n removedData.push(dfsNode + \"_\" + node);\n }\n else if (visited[node] == -1) {\n // 当前结点及后边的结点都被访问过,直接跳至下一个结点\n return;\n }\n else {\n DFS(node); // 否则递归访问\n }\n }\n });\n //遍历过所有相连的结点后,把本节点标记为-1\n visited[dfsNode] = -1;\n }\n // 对每个节点执行 dfs 操作\n nodes.forEach(function (node) {\n //该结点后边的结点都被访问过了,跳过它\n if (visited[node] == -1) {\n return;\n }\n DFS(node);\n });\n if (removedData.length !== 0) {\n console.warn(\"sankey data contains circle, \" + removedData.length + \" records removed.\", removedData);\n }\n // 过滤 remove 路径\n return edges.filter(function (edge) { return removedData.findIndex(function (i) { return i === edge[sourceField] + \"_\" + edge[targetField]; }) < 0; });\n}\n//# sourceMappingURL=circle.js.map","import { __assign, __spreadArrays } from \"tslib\";\nimport { isRealNumber, pick } from '../../utils';\nimport { transformDataToNodeLinkData } from '../../utils/data';\nimport { sankeyLayout } from './layout';\nimport { cutoffCircle } from './circle';\n/**\n * 是否是 node-link 类型的数据结构\n * @param dataTyp\n * @returns\n */\nfunction isNodeLink(dataType) {\n return dataType === 'node-link';\n}\nexport function getNodeWidthRatio(nodeWidth, nodeWidthRatio, width) {\n return isRealNumber(nodeWidth) ? nodeWidth / width : nodeWidthRatio;\n}\nexport function getNodePaddingRatio(nodePadding, nodePaddingRatio, height) {\n return isRealNumber(nodePadding) ? nodePadding / height : nodePaddingRatio;\n}\n/**\n * 将桑基图配置经过 layout,生成最终的 view 数据\n * @param options\n * @param width\n * @param height\n */\nexport function transformToViewsData(options, width, height) {\n var dataType = options.dataType, data = options.data, sourceField = options.sourceField, targetField = options.targetField, weightField = options.weightField, nodeAlign = options.nodeAlign, nodeSort = options.nodeSort, nodePadding = options.nodePadding, nodePaddingRatio = options.nodePaddingRatio, nodeWidth = options.nodeWidth, nodeWidthRatio = options.nodeWidthRatio, nodeDepth = options.nodeDepth, _a = options.rawFields, rawFields = _a === void 0 ? [] : _a;\n var sankeyLayoutInputData;\n if (!isNodeLink(dataType)) {\n sankeyLayoutInputData = transformDataToNodeLinkData(cutoffCircle(data, sourceField, targetField), sourceField, targetField, weightField, rawFields);\n }\n else {\n sankeyLayoutInputData = data;\n }\n // 3. layout 之后的数据\n var _b = sankeyLayout({\n nodeAlign: nodeAlign,\n nodePadding: getNodePaddingRatio(nodePadding, nodePaddingRatio, height),\n nodeWidth: getNodeWidthRatio(nodeWidth, nodeWidthRatio, width),\n nodeSort: nodeSort,\n nodeDepth: nodeDepth,\n }, sankeyLayoutInputData), nodes = _b.nodes, links = _b.links;\n // 4. 生成绘图数据\n return {\n nodes: nodes.map(function (node) {\n return __assign(__assign({}, pick(node, __spreadArrays(['x', 'y', 'name'], rawFields))), { isNode: true });\n }),\n edges: links.map(function (link) {\n return __assign(__assign({ source: link.source.name, target: link.target.name, name: link.source.name || link.target.name }, pick(link, __spreadArrays(['x', 'y', 'value'], rawFields))), { isNode: false });\n }),\n };\n}\n//# sourceMappingURL=helper.js.map","export var X_FIELD = 'x';\nexport var Y_FIELD = 'y';\nexport var COLOR_FIELD = 'name';\nexport var NODES_VIEW_ID = 'nodes';\nexport var EDGES_VIEW_ID = 'edges';\n//# sourceMappingURL=constant.js.map","import { __spreadArrays } from \"tslib\";\nimport { uniq } from '@antv/util';\nimport { theme } from '../../adaptor/common';\nimport { deepAssign, findViewById, flow } from '../../utils';\nimport { polygon, edge } from '../../adaptor/geometries';\nimport { transformToViewsData } from './helper';\nimport { X_FIELD, Y_FIELD, COLOR_FIELD, EDGES_VIEW_ID, NODES_VIEW_ID } from './constant';\n/**\n * 默认配置项 处理\n * @param params\n */\nfunction defaultOptions(params) {\n var options = params.options;\n var _a = options.rawFields, rawFields = _a === void 0 ? [] : _a;\n return deepAssign({}, {\n options: {\n tooltip: {\n fields: uniq(__spreadArrays(['name', 'source', 'target', 'value', 'isNode'], rawFields)),\n },\n label: {\n fields: uniq(__spreadArrays(['x', 'name'], rawFields)),\n },\n },\n }, params);\n}\n/**\n * geometry 处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var color = options.color, nodeStyle = options.nodeStyle, edgeStyle = options.edgeStyle, label = options.label, tooltip = options.tooltip, nodeState = options.nodeState, edgeState = options.edgeState;\n // 1. 组件,优先设置,因为子 view 会继承配置\n chart.legend(false);\n chart.tooltip(tooltip);\n chart.axis(false);\n // y 镜像一下,防止图形顺序和数据顺序反了\n chart.coordinate().reflect('y');\n // 2. node edge views\n // @ts-ignore\n var _a = transformToViewsData(options, chart.width, chart.height), nodes = _a.nodes, edges = _a.edges;\n // edge view\n var edgeView = chart.createView({ id: EDGES_VIEW_ID });\n edgeView.data(edges);\n edge({\n chart: edgeView,\n // @ts-ignore\n options: {\n xField: X_FIELD,\n yField: Y_FIELD,\n seriesField: COLOR_FIELD,\n edge: {\n color: color,\n style: edgeStyle,\n shape: 'arc',\n },\n tooltip: tooltip,\n state: edgeState,\n },\n });\n var nodeView = chart.createView({ id: NODES_VIEW_ID });\n nodeView.data(nodes);\n polygon({\n chart: nodeView,\n options: {\n xField: X_FIELD,\n yField: Y_FIELD,\n seriesField: COLOR_FIELD,\n polygon: {\n color: color,\n style: nodeStyle,\n },\n label: label,\n tooltip: tooltip,\n state: nodeState,\n },\n });\n chart.interaction('element-active');\n // scale\n chart.scale({\n x: { sync: true, nice: true, min: 0, max: 1, minLimit: 0, maxLimit: 1 },\n y: { sync: true, nice: true, min: 0, max: 1, minLimit: 0, maxLimit: 1 },\n name: { sync: 'color', type: 'cat' },\n });\n return params;\n}\n/**\n * 动画\n * @param params\n */\nexport function animation(params) {\n var chart = params.chart, options = params.options;\n var animation = options.animation;\n // 同时设置整个 view 动画选项\n if (typeof animation === 'boolean') {\n chart.animate(animation);\n }\n else {\n chart.animate(true);\n }\n var geometries = __spreadArrays(chart.views[0].geometries, chart.views[1].geometries);\n // 所有的 Geometry 都使用同一动画(各个图形如有区别,自行覆盖)\n geometries.forEach(function (g) {\n g.animate(animation);\n });\n return params;\n}\n/**\n * 节点拖动\n * @param params\n */\nexport function nodeDraggable(params) {\n var chart = params.chart, options = params.options;\n var nodeDraggable = options.nodeDraggable;\n var DRAG_INTERACTION = 'sankey-node-draggable';\n if (nodeDraggable) {\n chart.interaction(DRAG_INTERACTION);\n }\n else {\n chart.removeInteraction(DRAG_INTERACTION);\n }\n return params;\n}\n/**\n * Interaction 配置\n * @param params\n */\nfunction interaction(params) {\n var chart = params.chart, options = params.options;\n var _a = options.interactions, interactions = _a === void 0 ? [] : _a;\n var nodeInteractions = [].concat(interactions, options.nodeInteractions || []);\n var edgeInteractions = [].concat(interactions, options.edgeInteractions || []);\n var nodeView = findViewById(chart, NODES_VIEW_ID);\n var edgeView = findViewById(chart, EDGES_VIEW_ID);\n nodeInteractions.forEach(function (i) {\n if ((i === null || i === void 0 ? void 0 : i.enable) === false) {\n nodeView.removeInteraction(i.type);\n }\n else {\n nodeView.interaction(i.type, i.cfg || {});\n }\n });\n edgeInteractions.forEach(function (i) {\n if ((i === null || i === void 0 ? void 0 : i.enable) === false) {\n edgeView.removeInteraction(i.type);\n }\n else {\n edgeView.interaction(i.type, i.cfg || {});\n }\n });\n return params;\n}\n/**\n * 图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return flow(defaultOptions, geometry, interaction, nodeDraggable, animation, theme\n // ... 其他的 adaptor flow\n )(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __assign, __extends, __spreadArrays } from \"tslib\";\nimport { Action } from '@antv/g2';\nimport { get } from '@antv/util';\nimport { findViewById } from '../../../../utils';\nimport { EDGES_VIEW_ID, NODES_VIEW_ID } from '../../constant';\nvar SankeyNodeDragAction = /** @class */ (function (_super) {\n __extends(SankeyNodeDragAction, _super);\n function SankeyNodeDragAction() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * 是否在拖拽中的标记\n */\n _this.isDragging = false;\n return _this;\n }\n /**\n * 当前操作的是否是 element\n */\n SankeyNodeDragAction.prototype.isNodeElement = function () {\n var shape = get(this.context, 'event.target');\n if (shape) {\n var element = shape.get('element');\n return element && element.getModel().data.isNode;\n }\n return false;\n };\n SankeyNodeDragAction.prototype.getNodeView = function () {\n return findViewById(this.context.view, NODES_VIEW_ID);\n };\n SankeyNodeDragAction.prototype.getEdgeView = function () {\n return findViewById(this.context.view, EDGES_VIEW_ID);\n };\n /**\n * 获取当前操作的 index\n * @param element\n */\n SankeyNodeDragAction.prototype.getCurrentDatumIdx = function (element) {\n return this.getNodeView().geometries[0].elements.indexOf(element);\n };\n /**\n * 点击下去,开始\n */\n SankeyNodeDragAction.prototype.start = function () {\n // 记录开始了的状态\n if (this.isNodeElement()) {\n this.prevPoint = {\n x: get(this.context, 'event.x'),\n y: get(this.context, 'event.y'),\n };\n var element = this.context.event.target.get('element');\n var idx = this.getCurrentDatumIdx(element);\n if (idx === -1) {\n return;\n }\n this.currentElementIdx = idx;\n this.context.isDragging = true;\n this.isDragging = true;\n // 关闭动画并暂存配置\n this.prevNodeAnimateCfg = this.getNodeView().getOptions().animate;\n this.prevEdgeAnimateCfg = this.getEdgeView().getOptions().animate;\n this.getNodeView().animate(false);\n this.getEdgeView().animate(false);\n }\n };\n /**\n * 移动过程中,平移\n */\n SankeyNodeDragAction.prototype.translate = function () {\n if (this.isDragging) {\n var chart = this.context.view;\n var currentPoint = {\n x: get(this.context, 'event.x'),\n y: get(this.context, 'event.y'),\n };\n var x = currentPoint.x - this.prevPoint.x;\n var y = currentPoint.y - this.prevPoint.y;\n var nodeView = this.getNodeView();\n var element = nodeView.geometries[0].elements[this.currentElementIdx];\n // 修改数据\n if (element && element.getModel()) {\n var prevDatum = element.getModel().data;\n var data = nodeView.getOptions().data;\n var coordinate = nodeView.getCoordinate();\n var datumGap_1 = {\n x: x / coordinate.getWidth(),\n y: y / coordinate.getHeight(),\n };\n var nextDatum = __assign(__assign({}, prevDatum), { x: prevDatum.x.map(function (x) { return (x += datumGap_1.x); }), y: prevDatum.y.map(function (y) { return (y += datumGap_1.y); }) });\n // 处理一下在 [0, 1] 范围\n // 1. 更新 node 数据\n var newData = __spreadArrays(data);\n newData[this.currentElementIdx] = nextDatum;\n nodeView.data(newData);\n // 2. 更新 edge 数据\n var name_1 = prevDatum.name;\n var edgeView = this.getEdgeView();\n var edgeData = edgeView.getOptions().data;\n edgeData.forEach(function (datum) {\n // 2.1 以该 node 为 source 的边,修改 [x0, x1, x2, x3] 中的 x0, x1\n if (datum.source === name_1) {\n datum.x[0] += datumGap_1.x;\n datum.x[1] += datumGap_1.x;\n datum.y[0] += datumGap_1.y;\n datum.y[1] += datumGap_1.y;\n }\n // 2.2 以该 node 为 target 的边,修改 [x0, x1, x2, x3] 中的 x2, x3\n if (datum.target === name_1) {\n datum.x[2] += datumGap_1.x;\n datum.x[3] += datumGap_1.x;\n datum.y[2] += datumGap_1.y;\n datum.y[3] += datumGap_1.y;\n }\n });\n edgeView.data(edgeData);\n // 3. 更新最新位置\n this.prevPoint = currentPoint;\n // node edge 都改变了,所以要从底层 render\n chart.render(true);\n }\n }\n };\n /**\n * 结论,清除状态\n */\n SankeyNodeDragAction.prototype.end = function () {\n this.isDragging = false;\n this.context.isDragging = false;\n this.prevPoint = null;\n this.currentElementIdx = null;\n // 还原动画\n this.getNodeView().animate(this.prevNodeAnimateCfg);\n this.getEdgeView().animate(this.prevEdgeAnimateCfg);\n };\n return SankeyNodeDragAction;\n}(Action));\nexport { SankeyNodeDragAction };\n//# sourceMappingURL=node-drag.js.map","import { registerInteraction, registerAction } from '@antv/g2';\nimport { SankeyNodeDragAction } from './actions/node-drag';\nregisterAction('sankey-node-drag', SankeyNodeDragAction);\nregisterInteraction('sankey-node-draggable', {\n showEnable: [\n { trigger: 'polygon:mouseenter', action: 'cursor:pointer' },\n { trigger: 'polygon:mouseleave', action: 'cursor:default' },\n ],\n start: [{ trigger: 'polygon:mousedown', action: 'sankey-node-drag:start' }],\n processing: [\n { trigger: 'plot:mousemove', action: 'sankey-node-drag:translate' },\n { isEnable: function (context) { return context.isDragging; }, trigger: 'plot:mousemove', action: 'cursor:move' },\n ],\n end: [{ trigger: 'plot:mouseup', action: 'sankey-node-drag:end' }],\n});\n//# sourceMappingURL=node-draggable.js.map","import { __extends } from \"tslib\";\nimport { get } from '@antv/util';\nimport { Plot } from '../../core/plot';\nimport { findViewById } from '../../utils';\nimport { adaptor } from './adaptor';\nimport { transformToViewsData } from './helper';\nimport { EDGES_VIEW_ID, NODES_VIEW_ID } from './constant';\n// 桑基图内置交互\nimport './interactions';\n/**\n * 桑基图 Sankey\n */\nvar Sankey = /** @class */ (function (_super) {\n __extends(Sankey, _super);\n function Sankey() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'sankey';\n return _this;\n }\n Sankey.getDefaultOptions = function () {\n return {\n appendPadding: 8,\n syncViewPadding: true,\n nodeStyle: {\n opacity: 1,\n fillOpacity: 1,\n lineWidth: 1,\n },\n edgeStyle: {\n opacity: 0.3,\n lineWidth: 0,\n },\n edgeState: {\n active: {\n style: {\n opacity: 0.8,\n lineWidth: 0,\n },\n },\n },\n label: {\n formatter: function (_a) {\n var name = _a.name;\n return name;\n },\n callback: function (x) {\n var isLast = x[1] === 1; // 最后一列靠边的节点\n return {\n style: {\n fill: '#545454',\n textAlign: isLast ? 'end' : 'start',\n },\n offsetX: isLast ? -8 : 8,\n };\n },\n layout: [\n {\n type: 'hide-overlap',\n },\n ],\n },\n tooltip: {\n showTitle: false,\n showMarkers: false,\n shared: false,\n // 内置:node 不显示 tooltip,edge 显示 tooltip\n showContent: function (items) {\n return !get(items, [0, 'data', 'isNode']);\n },\n formatter: function (datum) {\n var source = datum.source, target = datum.target, value = datum.value;\n return {\n name: source + ' -> ' + target,\n value: value,\n };\n },\n },\n nodeWidthRatio: 0.008,\n nodePaddingRatio: 0.01,\n animation: {\n appear: {\n animation: 'wave-in',\n },\n enter: {\n animation: 'wave-in',\n },\n },\n };\n };\n /**\n * @override\n * @param data\n */\n Sankey.prototype.changeData = function (data) {\n this.updateOption({ data: data });\n var _a = transformToViewsData(this.options, this.chart.width, this.chart.height), nodes = _a.nodes, edges = _a.edges;\n var nodesView = findViewById(this.chart, NODES_VIEW_ID);\n var edgesView = findViewById(this.chart, EDGES_VIEW_ID);\n nodesView.changeData(nodes);\n edgesView.changeData(edges);\n };\n /**\n * 获取适配器\n */\n Sankey.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n /**\n * 获取 条形图 默认配置\n */\n Sankey.prototype.getDefaultOptions = function () {\n return Sankey.getDefaultOptions();\n };\n return Sankey;\n}(Plot));\nexport { Sankey };\n//# sourceMappingURL=index.js.map","import { get } from '@antv/util';\nimport { template } from '../utils';\nimport { GLOBAL } from './global';\nvar LocaleMap = {};\n/**\n * register a locale\n * @param locale\n * @param localeObj\n */\nexport function registerLocale(locale, localeObj) {\n LocaleMap[locale] = localeObj;\n}\n/**\n * get locale of specific language\n * @param lang\n * @returns\n */\nexport function getLocale(locale) {\n return {\n get: function (key, obj) {\n return template(get(LocaleMap[locale], key) || get(LocaleMap[GLOBAL.locale], key) || get(LocaleMap['en-US'], key) || key, obj);\n },\n };\n}\n//# sourceMappingURL=locale.js.map","import { __assign } from \"tslib\";\nimport { map, reduce } from '@antv/util';\nimport { isRealNumber } from '../number';\n/**\n * 对数据进行百分比化\n * @param data\n * @param measure\n * @param groupField\n * @param as\n */\nexport function percent(data, measure, groupField, as) {\n // 1. 先计算每一个分组的 max 值\n var sumMap = reduce(data, function (map, datum) {\n var groupValue = datum[groupField];\n var sum = map.has(groupValue) ? map.get(groupValue) : 0;\n var v = datum[measure];\n sum = isRealNumber(v) ? sum + v : sum;\n map.set(groupValue, sum);\n return map;\n }, new Map());\n // 2. 循环数组,计算占比\n return map(data, function (datum) {\n var _a;\n var v = datum[measure];\n var groupValue = datum[groupField];\n var percentage = isRealNumber(v) && sumMap.get(groupValue) !== 0 ? v / sumMap.get(groupValue) : 0;\n return __assign(__assign({}, datum), (_a = {}, _a[as] = percentage, _a));\n });\n}\n/**\n * 对数据进行深层百分比化\n * @param data\n * @param measure // 数值\n * @param fields // 需要分组的 field值\n * @param as // 存储percent 百分比的值\n */\nexport function getDeepPercent(data, measure, fields, percent) {\n var sumMap = reduce(data, function (map, datum) {\n // 获取分组得到的枚举key值\n var groupValue = reduce(fields, function (value, field) { return \"\" + value + datum[field]; }, '');\n var sum = map.has(groupValue) ? map.get(groupValue) : 0;\n var v = datum[measure];\n sum = isRealNumber(v) ? sum + v : sum;\n map.set(groupValue, sum);\n return map;\n }, new Map());\n // 2. 循环数组,计算占比\n return map(data, function (datum) {\n var _a;\n var v = datum[measure];\n // 获取分组得到的枚举key值\n var groupValue = reduce(fields, function (value, field) { return \"\" + value + datum[field]; }, '');\n var percentage = isRealNumber(v) && sumMap.get(groupValue) !== 0 ? v / sumMap.get(groupValue) : 0;\n return __assign(__assign({}, datum), (_a = {}, _a[percent] = percentage, _a));\n });\n}\n/**\n * 获取数据,如果是百分比,进行数据转换 (适用于面积图、柱状图、条形图)\n * @param isPercent 是否百分比\n */\nexport function getDataWhetherPecentage(data, yField, groupField, asField, isPercent) {\n return !isPercent ? data : percent(data, yField, groupField, asField);\n}\n//# sourceMappingURL=percent.js.map","import { flow, deepAssign } from '../../utils';\nimport { theme, animation, annotation, tooltip } from '../../adaptor/common';\nimport { line, point } from '../../adaptor/geometries';\nimport { meta } from '../tiny-area/adaptor';\nimport { getTinyData } from './utils';\nimport { X_FIELD, Y_FIELD } from './constants';\nexport { meta };\n/**\n * 字段\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var data = options.data, color = options.color, lineStyle = options.lineStyle, pointMapping = options.point;\n var pointState = pointMapping === null || pointMapping === void 0 ? void 0 : pointMapping.state;\n var seriesData = getTinyData(data);\n chart.data(seriesData);\n // line geometry 处理\n var primary = deepAssign({}, params, {\n options: {\n xField: X_FIELD,\n yField: Y_FIELD,\n line: {\n color: color,\n style: lineStyle,\n },\n point: pointMapping,\n },\n });\n var pointParams = deepAssign({}, primary, { options: { tooltip: false, state: pointState } });\n line(primary);\n point(pointParams);\n chart.axis(false);\n chart.legend(false);\n return params;\n}\n/**\n * 迷你折线图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n return flow(geometry, meta, theme, tooltip, animation, annotation())(params);\n}\n//# sourceMappingURL=adaptor.js.map","export function constantZero() {\n return 0;\n}\n\nexport default function(x) {\n return function() {\n return x;\n };\n}\n","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\n/** 直方图 xField */\nexport var HISTOGRAM_X_FIELD = 'range';\n/** 直方图 yField */\nexport var HISTOGRAM_Y_FIELD = 'count';\n/**\n * 默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n columnStyle: {\n stroke: '#FFFFFF',\n },\n tooltip: {\n shared: true,\n showMarkers: false,\n },\n interactions: [{ type: 'active-region' }],\n});\n//# sourceMappingURL=constant.js.map","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\n/**\n * 散点图 默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n size: 4,\n tooltip: {\n showTitle: false,\n showMarkers: false,\n showCrosshairs: true,\n crosshairs: {\n type: 'xy',\n },\n },\n});\n//# sourceMappingURL=constant.js.map","import { __assign, __extends } from \"tslib\";\nimport { BRUSH_FILTER_EVENTS, VIEW_LIFE_CIRCLE } from '@antv/g2';\nimport { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\nimport { adaptor, transformOptions, meta } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\nimport './interactions';\nvar Scatter = /** @class */ (function (_super) {\n __extends(Scatter, _super);\n function Scatter(container, options) {\n var _this = _super.call(this, container, options) || this;\n /** 图表类型 */\n _this.type = 'scatter';\n // 监听 brush 事件,处理 meta\n _this.on(VIEW_LIFE_CIRCLE.BEFORE_RENDER, function (evt) {\n var _a, _b;\n // 运行时,读取 option\n var _c = _this, options = _c.options, chart = _c.chart;\n if (((_a = evt.data) === null || _a === void 0 ? void 0 : _a.source) === BRUSH_FILTER_EVENTS.FILTER) {\n var filteredData = _this.chart.filterData(_this.chart.getData());\n meta({ chart: chart, options: __assign(__assign({}, options), { data: filteredData }) });\n }\n if (((_b = evt.data) === null || _b === void 0 ? void 0 : _b.source) === BRUSH_FILTER_EVENTS.RESET) {\n meta({ chart: chart, options: options });\n }\n });\n return _this;\n }\n /**\n * 获取 散点图 默认配置项\n * 供外部使用\n */\n Scatter.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n /**\n * @override\n * @param data\n */\n Scatter.prototype.changeData = function (data) {\n this.updateOption(transformOptions(deepAssign({}, this.options, { data: data })));\n var _a = this, options = _a.options, chart = _a.chart;\n meta({ chart: chart, options: options });\n this.chart.changeData(data);\n };\n /**\n * 获取 散点图 的适配器\n */\n Scatter.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n Scatter.prototype.getDefaultOptions = function () {\n return Scatter.getDefaultOptions();\n };\n return Scatter;\n}(Plot));\nexport { Scatter };\n//# sourceMappingURL=index.js.map","import { __assign } from \"tslib\";\nimport { getTooltipMapping } from '../../utils/tooltip';\nimport { deepAssign } from '../../utils';\nimport { geometry } from './base';\n/**\n * area geometry 的配置处理\n * @param params\n */\nexport function area(params) {\n var options = params.options;\n var area = options.area, xField = options.xField, yField = options.yField, seriesField = options.seriesField, smooth = options.smooth, tooltip = options.tooltip;\n var _a = getTooltipMapping(tooltip, [xField, yField, seriesField]), fields = _a.fields, formatter = _a.formatter;\n // 如果存在才处理\n return area\n ? geometry(deepAssign({}, params, {\n options: {\n type: 'area',\n colorField: seriesField,\n tooltipFields: fields,\n mapping: __assign({ shape: smooth ? 'smooth' : 'area', tooltip: formatter }, area),\n },\n }))\n : params;\n}\n//# sourceMappingURL=area.js.map","import { deepMix } from '@antv/util';\nimport { getTooltipMapping } from '../../utils/tooltip';\nimport { deepAssign } from '../../utils';\nimport { geometry } from './base';\n/**\n * line 辅助点的配置处理\n * @param params\n */\nexport function line(params) {\n var options = params.options;\n var line = options.line, stepType = options.stepType, xField = options.xField, yField = options.yField, seriesField = options.seriesField, smooth = options.smooth, connectNulls = options.connectNulls, tooltip = options.tooltip;\n var _a = getTooltipMapping(tooltip, [xField, yField, seriesField]), fields = _a.fields, formatter = _a.formatter;\n // 如果存在才处理\n return line\n ? geometry(deepAssign({}, params, {\n options: {\n type: 'line',\n colorField: seriesField,\n tooltipFields: fields,\n mapping: deepMix({\n shape: stepType || (smooth ? 'smooth' : 'line'),\n tooltip: formatter,\n }, line),\n args: { connectNulls: connectNulls },\n },\n }))\n : params;\n}\n//# sourceMappingURL=line.js.map","import { __assign } from \"tslib\";\nimport { getTheme } from '@antv/g2';\nimport { isNil, isObject } from '@antv/util';\nimport { deepAssign } from '../../utils';\nimport { getTooltipMapping } from '../../utils/tooltip';\nimport { geometry } from './base';\n/**\n * 柱形图其他的 adaptor\n * @param params\n */\nfunction otherAdaptor(params) {\n var chart = params.chart, options = params.options, ext = params.ext;\n var seriesField = options.seriesField, isGroup = options.isGroup, isStack = options.isStack, marginRatio = options.marginRatio, widthRatio = options.widthRatio, groupField = options.groupField, theme = options.theme;\n /**\n * adjust\n */\n var adjust = [];\n if (seriesField) {\n // group\n if (isGroup) {\n adjust.push({\n type: 'dodge',\n dodgeBy: groupField || seriesField,\n marginRatio: marginRatio,\n });\n }\n // stack\n if (isStack) {\n adjust.push({\n type: 'stack',\n marginRatio: marginRatio,\n });\n }\n }\n if (adjust.length && (ext === null || ext === void 0 ? void 0 : ext.geometry)) {\n var g = ext === null || ext === void 0 ? void 0 : ext.geometry;\n g.adjust(adjust);\n }\n // widthRatio\n if (!isNil(widthRatio)) {\n chart.theme(deepAssign({}, isObject(theme) ? theme : getTheme(theme), {\n // columWidthRatio 配置覆盖 theme 中的配置\n columnWidthRatio: widthRatio,\n }));\n }\n return params;\n}\nexport function interval(params) {\n var options = params.options;\n var xField = options.xField, yField = options.yField, interval = options.interval, seriesField = options.seriesField, tooltip = options.tooltip, minColumnWidth = options.minColumnWidth, maxColumnWidth = options.maxColumnWidth, columnBackground = options.columnBackground, dodgePadding = options.dodgePadding, intervalPadding = options.intervalPadding;\n var _a = getTooltipMapping(tooltip, [xField, yField, seriesField]), fields = _a.fields, formatter = _a.formatter;\n // 保障一定要存在 interval 映射\n var ext = (interval\n ? geometry(deepAssign({}, params, {\n options: {\n type: 'interval',\n colorField: seriesField,\n tooltipFields: fields,\n mapping: __assign({ tooltip: formatter }, interval),\n args: { dodgePadding: dodgePadding, intervalPadding: intervalPadding, minColumnWidth: minColumnWidth, maxColumnWidth: maxColumnWidth, background: columnBackground },\n },\n }))\n : params).ext;\n return otherAdaptor(__assign(__assign({}, params), { ext: ext }));\n}\n//# sourceMappingURL=interval.js.map","import { __assign } from \"tslib\";\nimport { getTooltipMapping } from '../../utils/tooltip';\nimport { deepAssign } from '../../utils';\nimport { geometry } from './base';\n/**\n * edge 的配置处理\n * @param params\n */\nexport function edge(params) {\n var options = params.options;\n var edge = options.edge, xField = options.xField, yField = options.yField, seriesField = options.seriesField, tooltip = options.tooltip;\n var _a = getTooltipMapping(tooltip, [xField, yField, seriesField]), fields = _a.fields, formatter = _a.formatter;\n return edge\n ? geometry(deepAssign({}, params, {\n options: {\n type: 'edge',\n colorField: seriesField,\n tooltipFields: fields,\n mapping: __assign({ tooltip: formatter }, edge),\n },\n }))\n : params;\n}\n//# sourceMappingURL=edge.js.map","import { __assign } from \"tslib\";\nimport { getTooltipMapping } from '../../utils/tooltip';\nimport { deepAssign } from '../../utils';\nimport { geometry } from './base';\n/**\n * schema 的配置处理\n * @param params\n */\nexport function schema(params) {\n var options = params.options;\n var schema = options.schema, xField = options.xField, yField = options.yField, seriesField = options.seriesField, tooltip = options.tooltip;\n var _a = getTooltipMapping(tooltip, [xField, yField, seriesField]), fields = _a.fields, formatter = _a.formatter;\n return schema\n ? geometry(deepAssign({}, params, {\n options: {\n type: 'schema',\n colorField: seriesField,\n tooltipFields: fields,\n mapping: __assign({ tooltip: formatter }, schema),\n },\n }))\n : params;\n}\n//# sourceMappingURL=schema.js.map","import { __assign } from \"tslib\";\nimport { getTooltipMapping } from '../../utils/tooltip';\nimport { deepAssign } from '../../utils';\nimport { geometry } from './base';\n/**\n * violin 辅助点的配置处理\n * @param params\n */\nexport function violin(params) {\n var options = params.options;\n var violin = options.violin, xField = options.xField, yField = options.yField, seriesField = options.seriesField, sizeField = options.sizeField, tooltip = options.tooltip;\n var _a = getTooltipMapping(tooltip, [xField, yField, seriesField, sizeField]), fields = _a.fields, formatter = _a.formatter;\n return violin\n ? geometry(deepAssign({}, params, {\n options: {\n type: 'violin',\n colorField: seriesField,\n tooltipFields: fields,\n mapping: __assign({ tooltip: formatter }, violin),\n },\n }))\n : params;\n}\n//# sourceMappingURL=violin.js.map","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\n/**\n * 面积图默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n tooltip: {\n shared: true,\n showMarkers: true,\n showCrosshairs: true,\n crosshairs: {\n type: 'x',\n },\n },\n isStack: true,\n // 默认开启\n line: {},\n legend: {\n position: 'top-left',\n radio: {},\n },\n});\n//# sourceMappingURL=constants.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { getDataWhetherPecentage } from '../../utils/transform/percent';\nimport { adaptor, meta } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constants';\nvar Area = /** @class */ (function (_super) {\n __extends(Area, _super);\n function Area() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'area';\n return _this;\n }\n /**\n * 获取 面积图 默认配置项\n * 供外部使用\n */\n Area.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n /**\n * 获取 面积图 默认配置\n */\n Area.prototype.getDefaultOptions = function () {\n return Area.getDefaultOptions();\n };\n /**\n * @override\n * @param data\n */\n Area.prototype.changeData = function (data) {\n this.updateOption({ data: data });\n var _a = this.options, isPercent = _a.isPercent, xField = _a.xField, yField = _a.yField;\n var _b = this, chart = _b.chart, options = _b.options;\n meta({ chart: chart, options: options });\n this.chart.changeData(getDataWhetherPecentage(data, yField, xField, yField, isPercent));\n };\n /**\n * 获取 面积图 的适配器\n */\n Area.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Area;\n}(Plot));\nexport { Area };\n//# sourceMappingURL=index.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ver = exports.clear = exports.bind = void 0;\n\nvar _sensorPool = require(\"./sensorPool\");\n\n/**\n * Created by hustcc on 18/6/9.[高考时间]\n * Contract: i@hust.cc\n */\n\n/**\n * bind an element with resize callback function\n * @param {*} element\n * @param {*} cb\n */\nvar bind = function bind(element, cb) {\n var sensor = (0, _sensorPool.getSensor)(element); // listen with callback\n\n sensor.bind(cb); // return unbind function\n\n return function () {\n sensor.unbind(cb);\n };\n};\n/**\n * clear all the listener and sensor of an element\n * @param element\n */\n\n\nexports.bind = bind;\n\nvar clear = function clear(element) {\n var sensor = (0, _sensorPool.getSensor)(element);\n (0, _sensorPool.removeSensor)(sensor);\n};\n\nexports.clear = clear;\nvar ver = \"1.0.1\";\nexports.ver = ver;","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\n/**\n * 柱形图默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n columnWidthRatio: 0.6,\n marginRatio: 1 / 32,\n tooltip: {\n shared: true,\n showMarkers: false,\n offset: 20,\n },\n legend: {\n radio: {},\n },\n interactions: [{ type: 'active-region' }],\n});\n//# sourceMappingURL=constants.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { getDataWhetherPecentage } from '../../utils/transform/percent';\nimport { adaptor, meta } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constants';\n/**\n * 柱形图\n */\nvar Column = /** @class */ (function (_super) {\n __extends(Column, _super);\n function Column() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'column';\n return _this;\n }\n /**\n * 获取 柱形图 默认配置项\n * 供外部使用\n */\n Column.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n /**\n * @override\n */\n Column.prototype.changeData = function (data) {\n this.updateOption({ data: data });\n var _a = this.options, yField = _a.yField, xField = _a.xField, isPercent = _a.isPercent;\n var _b = this, chart = _b.chart, options = _b.options;\n meta({ chart: chart, options: options });\n this.chart.changeData(getDataWhetherPecentage(data, yField, xField, yField, isPercent));\n };\n /**\n * 获取 柱形图 默认配置\n */\n Column.prototype.getDefaultOptions = function () {\n return Column.getDefaultOptions();\n };\n /**\n * 获取 柱形图 的适配器\n */\n Column.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Column;\n}(Plot));\nexport { Column };\n//# sourceMappingURL=index.js.map","import { isString } from '@antv/util';\nimport { flow, deepAssign } from '../../utils';\nimport { scale, animation, theme, annotation } from '../../adaptor/common';\nimport { interval } from '../../adaptor/geometries';\nimport { DEFAULT_COLOR } from './constants';\nimport { getProgressData } from './utils';\n/**\n * 字段\n * @param params\n */\nexport function geometry(params) {\n var chart = params.chart, options = params.options;\n var percent = options.percent, progressStyle = options.progressStyle, color = options.color, barWidthRatio = options.barWidthRatio;\n chart.data(getProgressData(percent));\n var p = deepAssign({}, params, {\n options: {\n xField: '1',\n yField: 'percent',\n seriesField: 'type',\n isStack: true,\n widthRatio: barWidthRatio,\n interval: {\n style: progressStyle,\n color: isString(color) ? [color, DEFAULT_COLOR[1]] : color,\n },\n args: {\n zIndexReversed: true,\n sortZIndex: true,\n },\n },\n });\n interval(p);\n // 关闭组件\n chart.tooltip(false);\n chart.axis(false);\n chart.legend(false);\n return params;\n}\n/**\n * other 配置\n * @param params\n */\nfunction coordinate(params) {\n var chart = params.chart;\n chart.coordinate('rect').transpose();\n return params;\n}\n/**\n * 进度图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n // @ts-ignore\n return flow(geometry, scale({}), coordinate, animation, theme, annotation())(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __spreadArrays } from \"tslib\";\nimport { each, isNil, isObject } from '@antv/util';\nimport { AXIS_META_CONFIG_KEYS } from '../constant';\nimport { pick, deepAssign } from '../utils';\n/**\n * 通用 legend 配置, 适用于带 colorField 或 seriesField 的图表\n * @param params\n */\nexport function legend(params) {\n var chart = params.chart, options = params.options;\n var legend = options.legend, colorField = options.colorField, seriesField = options.seriesField;\n if (legend === false) {\n chart.legend(false);\n }\n else if (colorField || seriesField) {\n chart.legend(colorField || seriesField, legend);\n }\n return params;\n}\n/**\n * 通用 tooltip 配置\n * @param params\n */\nexport function tooltip(params) {\n var chart = params.chart, options = params.options;\n var tooltip = options.tooltip;\n if (tooltip !== undefined) {\n chart.tooltip(tooltip);\n }\n return params;\n}\n/**\n * Interaction 配置\n * @param params\n */\nexport function interaction(params) {\n var chart = params.chart, options = params.options;\n var interactions = options.interactions;\n each(interactions, function (i) {\n if (i.enable === false) {\n chart.removeInteraction(i.type);\n }\n else {\n chart.interaction(i.type, i.cfg || {});\n }\n });\n return params;\n}\n/**\n * 动画\n * @param params\n */\nexport function animation(params) {\n var chart = params.chart, options = params.options;\n var animation = options.animation;\n // 同时设置整个 view 动画选项\n if (typeof animation === 'boolean') {\n chart.animate(animation);\n }\n else {\n chart.animate(true);\n }\n // 所有的 Geometry 都使用同一动画(各个图形如有区别,自行覆盖)\n each(chart.geometries, function (g) {\n g.animate(animation);\n });\n return params;\n}\n/**\n * 设置全局主题配置\n * @param params\n */\nexport function theme(params) {\n var chart = params.chart, options = params.options;\n var theme = options.theme;\n // 存在主题才设置主题\n if (theme) {\n chart.theme(theme);\n }\n return params;\n}\n/**\n * 状态 state 配置\n * @param params\n */\nexport function state(params) {\n var chart = params.chart, options = params.options;\n var state = options.state;\n if (state) {\n each(chart.geometries, function (geometry) {\n geometry.state(state);\n });\n }\n return params;\n}\n/**\n * 处理缩略轴的 adaptor\n * @param params\n */\nexport function slider(params) {\n var chart = params.chart, options = params.options;\n var slider = options.slider;\n chart.option('slider', slider);\n return params;\n}\n/**\n * 处理缩略轴的 adaptor\n * @param params\n */\nexport function scrollbar(params) {\n var chart = params.chart, options = params.options;\n var scrollbar = options.scrollbar;\n chart.option('scrollbar', scrollbar);\n return params;\n}\n/**\n * scale 的 adaptor\n * @param axes\n */\nexport function scale(axes, meta) {\n return function (params) {\n var chart = params.chart, options = params.options;\n // 1. 轴配置中的 scale 信息\n var scales = {};\n each(axes, function (axis, field) {\n scales[field] = pick(axis, AXIS_META_CONFIG_KEYS);\n });\n // 2. meta 直接是 scale 的信息\n scales = deepAssign({}, meta, options.meta, scales);\n chart.scale(scales);\n return params;\n };\n}\n/**\n * annotation 配置\n * @param params\n */\nexport function annotation(annotationOptions) {\n return function (params) {\n var chart = params.chart, options = params.options;\n var annotationController = chart.getController('annotation');\n /** 自定义 annotation */\n each(__spreadArrays((options.annotations || []), (annotationOptions || [])), function (annotationOption) {\n // @ts-ignore\n annotationController.annotation(annotationOption);\n });\n return params;\n };\n}\n/**\n * 自动设置 limitInPlot\n * @param params\n */\nexport function limitInPlot(params) {\n var chart = params.chart, options = params.options;\n var yAxis = options.yAxis, limitInPlot = options.limitInPlot;\n var value = limitInPlot;\n // 用户没有设置 limitInPlot,则自动根据 yAxis 是否有 min/max 来设置 limitInPlot\n if (isObject(yAxis) && isNil(limitInPlot)) {\n if (Object.values(pick(yAxis, ['min', 'max', 'minLimit', 'maxLimit'])).some(function (value) { return !isNil(value); })) {\n value = true;\n }\n else {\n value = false;\n }\n }\n chart.limitInPlot = value;\n return params;\n}\nexport { pattern } from './pattern';\n//# sourceMappingURL=common.js.map","var _a;\nexport var RANGE_VALUE = 'range';\nexport var RANGE_TYPE = 'type';\nexport var PERCENT = 'percent';\nexport var DEFAULT_COLOR = '#f0f0f0';\n/** 仪表盘由 指针和表盘 组成 */\nexport var INDICATEOR_VIEW_ID = 'indicator-view';\nexport var RANGE_VIEW_ID = 'range-view';\n/**\n * 仪表盘默认配置项\n */\nexport var DEFAULT_OPTIONS = {\n percent: 0,\n range: {\n ticks: [],\n },\n innerRadius: 0.9,\n radius: 0.95,\n startAngle: (-7 / 6) * Math.PI,\n endAngle: (1 / 6) * Math.PI,\n syncViewPadding: true,\n axis: {\n line: null,\n label: {\n offset: -24,\n style: {\n textAlign: 'center',\n textBaseline: 'middle',\n },\n },\n subTickLine: {\n length: -8,\n },\n tickLine: {\n length: -12,\n },\n grid: null,\n },\n indicator: {\n pointer: {\n style: {\n lineWidth: 5,\n lineCap: 'round',\n },\n },\n pin: {\n style: {\n r: 9.75,\n lineWidth: 4.5,\n fill: '#fff',\n },\n },\n },\n statistic: {\n title: false,\n },\n meta: (_a = {},\n // 两个 view 的 scale 同步到 v 上\n _a[RANGE_VALUE] = {\n sync: 'v',\n },\n _a[PERCENT] = {\n sync: 'v',\n tickCount: 5,\n tickInterval: 0.2,\n },\n _a),\n animation: false,\n};\n//# sourceMappingURL=constants.js.map","import { __assign } from \"tslib\";\nimport { each } from '@antv/util';\nimport { geometry as geometryAdaptor } from '../../adaptor/geometries/base';\nimport { AXIS_META_CONFIG_KEYS } from '../../constant';\nimport { pick, deepAssign } from '../../utils';\n/**\n *\n * @param params 分面图 参数\n * @returns facet eachView 的回调设置每个 view 的展示\n */\nexport function execViewAdaptor(viewOfG2, options) {\n var data = options.data, coordinate = options.coordinate, interactions = options.interactions, annotations = options.annotations, animation = options.animation, tooltip = options.tooltip, axes = options.axes, meta = options.meta, geometries = options.geometries;\n // 1. data, optional\n if (data) {\n viewOfG2.data(data);\n }\n // 2. meta 配置\n var scales = {};\n if (axes) {\n each(axes, function (axis, field) {\n scales[field] = pick(axis, AXIS_META_CONFIG_KEYS);\n });\n }\n scales = deepAssign({}, meta, scales);\n viewOfG2.scale(scales);\n // 3. coordinate 配置 (默认由顶层决定)\n if (coordinate) {\n viewOfG2.coordinate(coordinate);\n }\n // 4. axis 轴配置 (默认由顶层决定,但可以通过 false 强制关闭)\n if (axes === false) {\n viewOfG2.axis(false);\n }\n else {\n each(axes, function (axis, field) {\n viewOfG2.axis(field, axis);\n });\n }\n each(geometries, function (geometry) {\n // Geometry\n var ext = geometryAdaptor({\n chart: viewOfG2,\n options: geometry,\n }).ext;\n // Geometry adjust\n var adjust = geometry.adjust;\n if (adjust) {\n ext.geometry.adjust(adjust);\n }\n });\n // 5. interactions\n each(interactions, function (interaction) {\n if (interaction.enable === false) {\n viewOfG2.removeInteraction(interaction.type);\n }\n else {\n viewOfG2.interaction(interaction.type, interaction.cfg);\n }\n });\n // 6. annotations\n each(annotations, function (annotation) {\n viewOfG2.annotation()[annotation.type](__assign({}, annotation));\n });\n // 7. animation (先做动画)\n if (typeof animation === 'boolean') {\n viewOfG2.animate(false);\n }\n else {\n viewOfG2.animate(true);\n // 所有的 Geometry 都使用同一动画(各个图形如有区别,todo 自行覆盖)\n each(viewOfG2.geometries, function (g) {\n g.animate(animation);\n });\n }\n if (tooltip) {\n // 8. tooltip\n viewOfG2.interaction('tooltip');\n viewOfG2.tooltip(tooltip);\n }\n else if (tooltip === false) {\n viewOfG2.removeInteraction('tooltip');\n }\n}\n//# sourceMappingURL=utils.js.map","import { __assign } from \"tslib\";\nimport { each, omit } from '@antv/util';\nimport { theme } from '../../adaptor/common';\nimport { AXIS_META_CONFIG_KEYS } from '../../constant';\nimport { pick, flow, deepAssign } from '../../utils';\nimport { execPlotAdaptor } from '../mix/utils';\nimport { execViewAdaptor } from './utils';\nfunction facetAdaptor(params) {\n var chart = params.chart, options = params.options;\n var facetType = options.type, data = options.data, fields = options.fields, eachView = options.eachView;\n var restFacetCfg = omit(options, [\n 'type',\n 'data',\n 'fields',\n 'eachView',\n 'axes',\n 'meta',\n 'tooltip',\n 'coordinate',\n 'theme',\n 'legend',\n 'interactions',\n 'annotations',\n ]);\n // 1. data\n chart.data(data);\n // 2. facet\n chart.facet(facetType, __assign(__assign({}, restFacetCfg), { fields: fields, eachView: function (viewOfG2, facet) {\n var viewOptions = eachView(viewOfG2, facet);\n if (viewOptions.geometries) {\n execViewAdaptor(viewOfG2, viewOptions);\n }\n else {\n var plot = viewOptions;\n var plotOptions = plot.options;\n // @ts-ignore 仪表盘没 tooltip\n if (plotOptions.tooltip) {\n // 配置 tooltip 交互\n viewOfG2.interaction('tooltip');\n }\n execPlotAdaptor(plot.type, viewOfG2, plotOptions);\n }\n } }));\n return params;\n}\nfunction component(params) {\n var chart = params.chart, options = params.options;\n var axes = options.axes, meta = options.meta, tooltip = options.tooltip, coordinate = options.coordinate, theme = options.theme, legend = options.legend, interactions = options.interactions, annotations = options.annotations;\n // 3. meta 配置\n var scales = {};\n if (axes) {\n each(axes, function (axis, field) {\n scales[field] = pick(axis, AXIS_META_CONFIG_KEYS);\n });\n }\n scales = deepAssign({}, meta, scales);\n chart.scale(scales);\n // 4. coordinate 配置\n chart.coordinate(coordinate);\n // 5. axis 轴配置 (默认不展示)\n if (!axes) {\n chart.axis(false);\n }\n else {\n each(axes, function (axis, field) {\n chart.axis(field, axis);\n });\n }\n // 6. tooltip 配置\n if (tooltip) {\n chart.interaction('tooltip');\n chart.tooltip(tooltip);\n }\n else if (tooltip === false) {\n chart.removeInteraction('tooltip');\n }\n // 7. legend 配置(默认展示)\n chart.legend(legend);\n // theme 配置\n if (theme) {\n chart.theme(theme);\n }\n // 8. interactions\n each(interactions, function (interaction) {\n if (interaction.enable === false) {\n chart.removeInteraction(interaction.type);\n }\n else {\n chart.interaction(interaction.type, interaction.cfg);\n }\n });\n // 9. annotations\n each(annotations, function (annotation) {\n chart.annotation()[annotation.type](__assign({}, annotation));\n });\n return params;\n}\n/**\n * 分面图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return flow(theme, facetAdaptor, component)(params);\n}\n//# sourceMappingURL=adaptor.js.map","/**\n * 分面图 默认配置项\n */\nexport var DEFAULT_OPTIONS = {\n title: {\n style: {\n fontSize: 12,\n fill: 'rgba(0,0,0,0.65)',\n },\n },\n rowTitle: {\n style: {\n fontSize: 12,\n fill: 'rgba(0,0,0,0.65)',\n },\n },\n columnTitle: {\n style: {\n fontSize: 12,\n fill: 'rgba(0,0,0,0.65)',\n },\n },\n};\n//# sourceMappingURL=constant.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\nvar Facet = /** @class */ (function (_super) {\n __extends(Facet, _super);\n function Facet() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'area';\n return _this;\n }\n /**\n * 获取 分面图 默认配置项\n * 供外部使用\n */\n Facet.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n /**\n * 获取 分面图 默认配置\n */\n Facet.prototype.getDefaultOptions = function () {\n return Facet.getDefaultOptions();\n };\n /**\n * 获取 分面图 的适配器\n */\n Facet.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Facet;\n}(Plot));\nexport { Facet };\n//# sourceMappingURL=index.js.map","export default function(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n}\n","import { registerInteraction } from '@antv/g2';\nregisterInteraction('drag-move', {\n start: [{ trigger: 'plot:mousedown', action: 'scale-translate:start' }],\n processing: [\n {\n trigger: 'plot:mousemove',\n action: 'scale-translate:translate',\n throttle: { wait: 100, leading: true, trailing: false },\n },\n ],\n end: [{ trigger: 'plot:mouseup', action: 'scale-translate:end' }],\n});\n//# sourceMappingURL=drag-move.js.map","'use strict';\n\nvar self = module.exports;\n\nmodule.exports.isNumber = function (x) {\n return (typeof x === 'number');\n};\n\nmodule.exports.findMin = function (arr) {\n if (arr.length === 0) {\n return Infinity;\n }\n\n var curr = arr[0];\n for (var i = 1; i < arr.length; i++) {\n curr = Math.min(curr, arr[i]);\n }\n return curr;\n};\n\nmodule.exports.findMax = function (arr) {\n if (arr.length === 0) {\n return -Infinity;\n }\n\n var curr = arr[0];\n for (var i = 1; i < arr.length; i++) {\n curr = Math.max(curr, arr[i]);\n }\n return curr;\n};\n\nmodule.exports.findMinMulti = function (arr) {\n var curr = self.findMin(arr[0]);\n for (var i = 1; i < arr.length; i++) {\n curr = Math.min(curr, self.findMin(arr[i]));\n }\n return curr;\n};\n\nmodule.exports.findMaxMulti = function (arr) {\n var curr = self.findMax(arr[0]);\n for (var i = 1; i < arr.length; i++) {\n curr = Math.max(curr, self.findMax(arr[i]));\n }\n return curr;\n};\n\nmodule.exports.inside = function (min, max, x) {\n return (min <= x) && (x <= max);\n};\n","export var AxisType;\n(function (AxisType) {\n AxisType[\"Left\"] = \"Left\";\n AxisType[\"Right\"] = \"Right\";\n})(AxisType || (AxisType = {}));\nexport var DualAxesGeometry;\n(function (DualAxesGeometry) {\n DualAxesGeometry[\"Line\"] = \"line\";\n DualAxesGeometry[\"Column\"] = \"column\";\n})(DualAxesGeometry || (DualAxesGeometry = {}));\n//# sourceMappingURL=types.js.map","import { __assign } from \"tslib\";\nexport var LEFT_AXES_VIEW = 'left-axes-view';\nexport var RIGHT_AXES_VIEW = 'right-axes-view';\nexport var DEFAULT_YAXIS_CONFIG = {\n nice: true,\n label: {\n autoHide: true,\n autoRotate: false,\n },\n};\nexport var DEFAULT_LEFT_YAXIS_CONFIG = __assign(__assign({}, DEFAULT_YAXIS_CONFIG), { position: 'left' });\nexport var DEFAULT_RIGHT_YAXIS_CONFIG = __assign(__assign({}, DEFAULT_YAXIS_CONFIG), { position: 'right', grid: null });\n//# sourceMappingURL=constant.js.map","import { __assign } from \"tslib\";\nimport { get, isArray } from '@antv/util';\nimport { deepAssign } from '../../../utils';\nimport { DualAxesGeometry, AxisType, } from '../types';\nimport { DEFAULT_LEFT_YAXIS_CONFIG, DEFAULT_RIGHT_YAXIS_CONFIG } from '../constant';\n/**\n * 根据 GeometryOption 判断 geometry 是否为 line\n */\nexport function isLine(geometryOption) {\n return get(geometryOption, 'geometry') === DualAxesGeometry.Line;\n}\n/**\n * 根据 GeometryOption 判断 geometry 是否为 Column\n */\nexport function isColumn(geometryOption) {\n return get(geometryOption, 'geometry') === DualAxesGeometry.Column;\n}\n/**\n * 获取 GeometryOption\n * @param geometryOption\n * @param axis\n */\nexport function getGeometryOption(xField, yField, geometryOption) {\n // 空默认为线\n return isColumn(geometryOption)\n ? deepAssign({}, {\n geometry: DualAxesGeometry.Column,\n label: geometryOption.label && geometryOption.isRange\n ? {\n content: function (item) {\n var _a;\n return (_a = item[yField]) === null || _a === void 0 ? void 0 : _a.join('-');\n },\n }\n : undefined,\n }, geometryOption)\n : __assign({ geometry: DualAxesGeometry.Line }, geometryOption);\n}\n/**\n * 兼容一些属性 为 arr 和 obj 的两种情况, 如 yAxis,annotations\n * 为了防止左右 yField 相同,导致变成 object 之后被覆盖,所以都转变成数组的形式\n * @param yField\n * @param transformAttribute\n */\nexport function transformObjectToArray(yField, transformAttribute) {\n var y1 = yField[0], y2 = yField[1];\n if (isArray(transformAttribute)) {\n // 将数组补齐为两个\n var a1_1 = transformAttribute[0], a2_1 = transformAttribute[1];\n return [a1_1, a2_1];\n }\n var a1 = get(transformAttribute, y1);\n var a2 = get(transformAttribute, y2);\n return [a1, a2];\n}\n/**\n * 获取默认值\n * @param yAxis\n * @param axisType\n */\nexport function getYAxisWithDefault(yAxis, axisType) {\n if (axisType === AxisType.Left) {\n return yAxis === false ? false : deepAssign({}, DEFAULT_LEFT_YAXIS_CONFIG, yAxis);\n }\n else if (axisType === AxisType.Right) {\n return yAxis === false ? false : deepAssign({}, DEFAULT_RIGHT_YAXIS_CONFIG, yAxis);\n }\n return yAxis;\n}\n//# sourceMappingURL=option.js.map","import { reduce, get, isEmpty, isFunction } from '@antv/util';\nimport { Util } from '@antv/g2';\nimport { deepAssign, findGeometry } from '../../../utils';\nimport { isLine } from './option';\n/**\n * 获取 view 的 legendItem,供存在不含有 seriesField 的图形使用\n * @param params\n */\nexport function getViewLegendItems(params) {\n var view = params.view, geometryOption = params.geometryOption, yField = params.yField, legend = params.legend;\n var userMarker = get(legend, 'marker');\n var geometry = findGeometry(view, isLine(geometryOption) ? 'line' : 'interval');\n if (!geometryOption.seriesField) {\n var legendItemName = get(view, \"options.scales.\" + yField + \".alias\") || yField;\n // 返回 g2 设置的图例\n var colorAttribute = geometry.getAttribute('color');\n var color = view.getTheme().defaultColor;\n if (colorAttribute) {\n color = Util.getMappingValue(colorAttribute, legendItemName, get(colorAttribute, ['values', 0], color));\n }\n var marker = (isFunction(userMarker)\n ? userMarker\n : !isEmpty(userMarker) &&\n deepAssign({}, {\n style: {\n stroke: color,\n fill: color,\n },\n }, userMarker)) ||\n (isLine(geometryOption)\n ? {\n symbol: function (x, y, r) {\n return [\n ['M', x - r, y],\n ['L', x + r, y],\n ];\n },\n style: {\n lineWidth: 2,\n r: 6,\n stroke: color,\n },\n }\n : {\n symbol: 'square',\n style: {\n fill: color,\n },\n });\n return [\n {\n value: yField,\n name: legendItemName,\n marker: marker,\n isGeometry: true,\n viewId: view.id,\n },\n ];\n }\n var attributes = geometry.getGroupAttributes();\n return reduce(attributes, function (items, attr) {\n var attrItems = Util.getLegendItems(view, geometry, attr, view.getTheme(), userMarker);\n return items.concat(attrItems);\n }, []);\n}\n//# sourceMappingURL=legend.js.map","import { __assign } from \"tslib\";\nimport { each } from '@antv/util';\nimport { point, line } from '../../../adaptor/geometries';\nimport { pick, deepAssign } from '../../../utils';\nimport { adaptor as columnAdaptor } from '../../column/adaptor';\nimport { isLine, isColumn } from './option';\n/**\n * 绘制单个图形\n * @param params\n */\nexport function drawSingleGeometry(params) {\n var options = params.options, chart = params.chart;\n var geometryOption = options.geometryOption;\n var isStack = geometryOption.isStack, color = geometryOption.color, seriesField = geometryOption.seriesField, groupField = geometryOption.groupField, isGroup = geometryOption.isGroup;\n var FIELD_KEY = ['xField', 'yField'];\n if (isLine(geometryOption)) {\n // 绘制线\n line(deepAssign({}, params, {\n options: __assign(__assign(__assign({}, pick(options, FIELD_KEY)), geometryOption), { line: {\n color: geometryOption.color,\n style: geometryOption.lineStyle,\n } }),\n }));\n // 绘制点\n point(deepAssign({}, params, {\n options: __assign(__assign(__assign({}, pick(options, FIELD_KEY)), geometryOption), { point: geometryOption.point && __assign({ color: color, shape: 'circle' }, geometryOption.point) }),\n }));\n // adjust\n var adjust_1 = [];\n if (isGroup) {\n adjust_1.push({\n type: 'dodge',\n dodgeBy: groupField || seriesField,\n customOffset: 0,\n });\n }\n if (isStack) {\n adjust_1.push({\n type: 'stack',\n });\n }\n if (adjust_1.length) {\n each(chart.geometries, function (g) {\n g.adjust(adjust_1);\n });\n }\n }\n if (isColumn(geometryOption)) {\n columnAdaptor(deepAssign({}, params, {\n options: __assign(__assign(__assign({}, pick(options, FIELD_KEY)), geometryOption), { widthRatio: geometryOption.columnWidthRatio, interval: __assign(__assign({}, pick(geometryOption, ['color'])), { style: geometryOption.columnStyle }) }),\n }));\n }\n return params;\n}\n//# sourceMappingURL=geometry.js.map","import { size, valuesOfKey } from '@antv/util';\nimport { isBetween } from '../../../utils';\n/**\n * 右侧 View 进行 slider 过滤\n * 由于双轴图是多 View , 需要监听左侧 Slider 的 change 事件来同步右侧 View\n * @param { View } view 右侧视图\n * @param { number[] } sliderValue 滑块当前值\n * @returns void\n */\nexport var doSliderFilter = function (view, sliderValue) {\n var min = sliderValue[0], max = sliderValue[1];\n var data = view.getOptions().data;\n var xScale = view.getXScale();\n var dataSize = size(data);\n if (!xScale || !dataSize) {\n return;\n }\n var isHorizontal = true;\n var values = valuesOfKey(data, xScale.field);\n var xValues = isHorizontal ? values : values.reverse();\n var xTickCount = size(xValues);\n var minIndex = Math.floor(min * (xTickCount - 1));\n var maxIndex = Math.floor(max * (xTickCount - 1));\n // 增加 x 轴的过滤器\n view.filter(xScale.field, function (value) {\n var idx = xValues.indexOf(value);\n return idx > -1 ? isBetween(idx, minIndex, maxIndex) : true;\n });\n view.getRootView().render(true);\n};\n//# sourceMappingURL=render-sider.js.map","import { __assign } from \"tslib\";\nimport { each, findIndex, get, find, isObject, every, isEqual, isBoolean } from '@antv/util';\nimport { theme as commonTheme, animation as commonAnimation, scale, interaction as commonInteraction, annotation as commonAnnotation, limitInPlot as commonLimitInPlot, } from '../../adaptor/common';\nimport { percent } from '../../utils/transform/percent';\nimport { flow, deepAssign } from '../../utils';\nimport { findViewById } from '../../utils/view';\nimport { isColumn, getYAxisWithDefault, getGeometryOption, transformObjectToArray } from './util/option';\nimport { getViewLegendItems } from './util/legend';\nimport { drawSingleGeometry } from './util/geometry';\nimport { doSliderFilter } from './util/render-sider';\nimport { AxisType, DualAxesGeometry } from './types';\nimport { LEFT_AXES_VIEW, RIGHT_AXES_VIEW } from './constant';\n/**\n * transformOptions,双轴图整体的取参逻辑如下\n * 1. get index getOptions: 对应的是默认的图表参数,如 appendPadding,syncView 等\n * 2. get adpator transformOption: 对应的是双轴图的默认参数,deepAssign 优先级从低到高如下\n * 2.1 defaultoption,如 tooltip,legend\n * 2.2 用户填写 options\n * 2.3 根据用户填写的 options 补充的数组型 options,如 yaxis,GeometryOption,因为 deepAssign 无法 assign 数组\n *\n * @param params\n */\nexport function transformOptions(params) {\n var _a;\n var options = params.options;\n var _b = options.geometryOptions, geometryOptions = _b === void 0 ? [] : _b, xField = options.xField, yField = options.yField;\n var allLine = every(geometryOptions, function (_a) {\n var geometry = _a.geometry;\n return geometry === DualAxesGeometry.Line || geometry === undefined;\n });\n return deepAssign({}, {\n options: {\n geometryOptions: [],\n meta: (_a = {},\n _a[xField] = {\n // 默认为 cat 类型\n type: 'cat',\n // x 轴一定是同步 scale 的\n sync: true,\n // 如果有没有柱子,则\n range: allLine ? [0, 1] : undefined,\n },\n _a),\n tooltip: {\n showMarkers: allLine,\n // 存在柱状图,不显示 crosshairs\n showCrosshairs: allLine,\n shared: true,\n crosshairs: {\n type: 'x',\n },\n },\n interactions: !allLine\n ? [{ type: 'legend-visible-filter' }, { type: 'active-region' }]\n : [{ type: 'legend-visible-filter' }],\n legend: {\n position: 'top-left',\n },\n },\n }, params, {\n options: {\n // yAxis\n yAxis: transformObjectToArray(yField, options.yAxis),\n // geometryOptions\n geometryOptions: [\n getGeometryOption(xField, yField[0], geometryOptions[0]),\n getGeometryOption(xField, yField[1], geometryOptions[1]),\n ],\n // annotations\n annotations: transformObjectToArray(yField, options.annotations),\n },\n });\n}\n/**\n * 创建 双轴图 中绘制图形的 view,提前创建是因为 theme 适配器的需要\n * @param params\n */\nfunction createViews(params) {\n var _a, _b;\n var chart = params.chart, options = params.options;\n var geometryOptions = options.geometryOptions;\n var SORT_MAP = { line: 0, column: 1 };\n // 包含配置,id,数据的结构\n var geometries = [\n { type: (_a = geometryOptions[0]) === null || _a === void 0 ? void 0 : _a.geometry, id: LEFT_AXES_VIEW },\n { type: (_b = geometryOptions[1]) === null || _b === void 0 ? void 0 : _b.geometry, id: RIGHT_AXES_VIEW },\n ];\n // 将线的 view 放置在更上一层,防止线柱遮挡。先柱后先\n geometries.sort(function (a, b) { return -SORT_MAP[a.type] + SORT_MAP[b.type]; }).forEach(function (g) { return chart.createView({ id: g.id }); });\n return params;\n}\n/**\n * 绘制图形\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var xField = options.xField, yField = options.yField, geometryOptions = options.geometryOptions, data = options.data, tooltip = options.tooltip;\n // 包含配置,id,数据的结构\n var geometries = [\n __assign(__assign({}, geometryOptions[0]), { id: LEFT_AXES_VIEW, data: data[0], yField: yField[0] }),\n __assign(__assign({}, geometryOptions[1]), { id: RIGHT_AXES_VIEW, data: data[1], yField: yField[1] }),\n ];\n geometries.forEach(function (geometry) {\n var id = geometry.id, data = geometry.data, yField = geometry.yField;\n // 百分比柱状图需要额外处理一次数据\n var isPercent = isColumn(geometry) && geometry.isPercent;\n var formatData = isPercent ? percent(data, yField, xField, yField) : data;\n var view = findViewById(chart, id).data(formatData);\n var tooltipOptions = isPercent\n ? __assign({ formatter: function (datum) { return ({\n name: datum[geometry.seriesField] || yField,\n value: (Number(datum[yField]) * 100).toFixed(2) + '%',\n }); } }, tooltip) : tooltip;\n // 绘制图形\n drawSingleGeometry({\n chart: view,\n options: {\n xField: xField,\n yField: yField,\n tooltip: tooltipOptions,\n geometryOption: geometry,\n },\n });\n });\n return params;\n}\nexport function color(params) {\n var _a;\n var chart = params.chart, options = params.options;\n var geometryOptions = options.geometryOptions;\n var themeColor = ((_a = chart.getTheme()) === null || _a === void 0 ? void 0 : _a.colors10) || [];\n var start = 0;\n /* 为 geometry 添加默认 color。\n * 1. 若 geometryOptions 存在 color,则在 drawGeometry 时已处理\n * 2. 若 不存在 color,获取 Geometry group scales个数,在 theme color 10 中提取\n * 3. 为防止 group 过多导致右色板无值或值很少,右 view 面板在依次提取剩下的 N 个 后再 concat 一次 themeColor\n * 4. 为简便获取 Geometry group scales个数,在绘制完后再执行 color\n * 5. 考虑之后将不同 view 使用同一个色板的需求沉淀到 g2\n */\n chart.once('beforepaint', function () {\n each(geometryOptions, function (geometryOption, index) {\n var view = findViewById(chart, index === 0 ? LEFT_AXES_VIEW : RIGHT_AXES_VIEW);\n if (geometryOption.color)\n return;\n var groupScale = view.getGroupScales();\n var count = get(groupScale, [0, 'values', 'length'], 1);\n var color = themeColor.slice(start, start + count).concat(index === 0 ? [] : themeColor);\n view.geometries.forEach(function (geometry) {\n if (geometryOption.seriesField) {\n geometry.color(geometryOption.seriesField, color);\n }\n else {\n geometry.color(color[0]);\n }\n });\n start += count;\n });\n chart.render(true);\n });\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\nexport function meta(params) {\n var _a, _b;\n var chart = params.chart, options = params.options;\n var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n scale((_a = {},\n _a[xField] = xAxis,\n _a[yField[0]] = yAxis[0],\n _a))(deepAssign({}, params, { chart: findViewById(chart, LEFT_AXES_VIEW) }));\n scale((_b = {},\n _b[xField] = xAxis,\n _b[yField[1]] = yAxis[1],\n _b))(deepAssign({}, params, { chart: findViewById(chart, RIGHT_AXES_VIEW) }));\n return params;\n}\n/**\n * axis 配置\n * @param params\n */\nexport function axis(params) {\n var chart = params.chart, options = params.options;\n var leftView = findViewById(chart, LEFT_AXES_VIEW);\n var rightView = findViewById(chart, RIGHT_AXES_VIEW);\n var xField = options.xField, yField = options.yField, xAxis = options.xAxis, yAxis = options.yAxis;\n chart.axis(xField, false);\n chart.axis(yField[0], false);\n chart.axis(yField[1], false);\n // 左 View\n leftView.axis(xField, xAxis);\n leftView.axis(yField[0], getYAxisWithDefault(yAxis[0], AxisType.Left));\n // 右 Y 轴\n rightView.axis(xField, false);\n rightView.axis(yField[1], getYAxisWithDefault(yAxis[1], AxisType.Right));\n return params;\n}\n/**\n * tooltip 配置\n * @param params\n */\nexport function tooltip(params) {\n var chart = params.chart, options = params.options;\n var tooltip = options.tooltip;\n var leftView = findViewById(chart, LEFT_AXES_VIEW);\n var rightView = findViewById(chart, RIGHT_AXES_VIEW);\n // tooltip 经过 getDefaultOption 处理后,一定不为 undefined\n chart.tooltip(tooltip);\n // 在 view 上添加 tooltip,使得 shared 和 interaction active-region 起作用\n // view 应该继承 chart 里的 shared,但是从表现看来,继承有点问题\n leftView.tooltip({\n shared: true,\n });\n rightView.tooltip({\n shared: true,\n });\n return params;\n}\n/**\n * interaction 配置\n * @param params\n */\nexport function interaction(params) {\n var chart = params.chart;\n commonInteraction(deepAssign({}, params, { chart: findViewById(chart, LEFT_AXES_VIEW) }));\n commonInteraction(deepAssign({}, params, { chart: findViewById(chart, RIGHT_AXES_VIEW) }));\n return params;\n}\n/**\n * annotation 配置\n * @param params\n */\nexport function annotation(params) {\n var chart = params.chart, options = params.options;\n var annotations = options.annotations;\n var a1 = get(annotations, [0]);\n var a2 = get(annotations, [1]);\n commonAnnotation(a1)(deepAssign({}, params, {\n chart: findViewById(chart, LEFT_AXES_VIEW),\n options: {\n annotations: a1,\n },\n }));\n commonAnnotation(a2)(deepAssign({}, params, {\n chart: findViewById(chart, RIGHT_AXES_VIEW),\n options: {\n annotations: a2,\n },\n }));\n return params;\n}\nexport function theme(params) {\n var chart = params.chart;\n /*\n * 双轴图中,部分组件是绘制在子 view 层(例如 axis,line),部分组件是绘制在 chart (例如 legend)\n * 为 chart 和 子 view 均注册 theme,使其自行遵循 G2 theme geometry > view > chart 进行渲染。\n */\n commonTheme(deepAssign({}, params, { chart: findViewById(chart, LEFT_AXES_VIEW) }));\n commonTheme(deepAssign({}, params, { chart: findViewById(chart, RIGHT_AXES_VIEW) }));\n commonTheme(params);\n return params;\n}\nexport function animation(params) {\n var chart = params.chart;\n commonAnimation(deepAssign({}, params, { chart: findViewById(chart, LEFT_AXES_VIEW) }));\n commonAnimation(deepAssign({}, params, { chart: findViewById(chart, RIGHT_AXES_VIEW) }));\n return params;\n}\n/**\n * 双轴图 limitInPlot\n * @param params\n */\nexport function limitInPlot(params) {\n var chart = params.chart, options = params.options;\n var yAxis = options.yAxis;\n commonLimitInPlot(deepAssign({}, params, {\n chart: findViewById(chart, LEFT_AXES_VIEW),\n options: {\n yAxis: yAxis[0],\n },\n }));\n commonLimitInPlot(deepAssign({}, params, {\n chart: findViewById(chart, RIGHT_AXES_VIEW),\n options: {\n yAxis: yAxis[1],\n },\n }));\n return params;\n}\n/**\n * legend 配置\n * 使用 custom,便于和类似于分组柱状图-单折线图的逻辑统一\n * @param params\n */\nexport function legend(params) {\n var chart = params.chart, options = params.options;\n var legend = options.legend, geometryOptions = options.geometryOptions, yField = options.yField, data = options.data;\n var leftView = findViewById(chart, LEFT_AXES_VIEW);\n var rightView = findViewById(chart, RIGHT_AXES_VIEW);\n if (legend === false) {\n chart.legend(false);\n }\n else if (isObject(legend) && legend.custom === true) {\n chart.legend(legend);\n }\n else {\n var leftLegend_1 = get(geometryOptions, [0, 'legend'], legend);\n var rightLegend_1 = get(geometryOptions, [1, 'legend'], legend);\n // 均使用自定义图例\n chart.once('beforepaint', function () {\n var leftItems = data[0].length\n ? getViewLegendItems({\n view: leftView,\n geometryOption: geometryOptions[0],\n yField: yField[0],\n legend: leftLegend_1,\n })\n : [];\n var rightItems = data[1].length\n ? getViewLegendItems({\n view: rightView,\n geometryOption: geometryOptions[1],\n yField: yField[1],\n legend: rightLegend_1,\n })\n : [];\n chart.legend(deepAssign({}, legend, {\n custom: true,\n // todo 修改类型定义\n // @ts-ignore\n items: leftItems.concat(rightItems),\n }));\n });\n if (geometryOptions[0].seriesField) {\n leftView.legend(geometryOptions[0].seriesField, leftLegend_1);\n }\n if (geometryOptions[1].seriesField) {\n rightView.legend(geometryOptions[1].seriesField, rightLegend_1);\n }\n // 自定义图例交互\n chart.on('legend-item:click', function (evt) {\n var delegateObject = get(evt, 'gEvent.delegateObject', {});\n if (delegateObject && delegateObject.item) {\n var _a = delegateObject.item, field_1 = _a.value, isGeometry = _a.isGeometry, viewId = _a.viewId;\n // geometry 的时候,直接使用 view.changeVisible\n if (isGeometry) {\n var idx = findIndex(yField, function (yF) { return yF === field_1; });\n if (idx > -1) {\n var geometries = get(findViewById(chart, viewId), 'geometries');\n each(geometries, function (g) {\n g.changeVisible(!delegateObject.item.unchecked);\n });\n }\n }\n else {\n var legendItem_1 = get(chart.getController('legend'), 'option.items', []);\n // 分组柱线图\n each(chart.views, function (view) {\n // 单折柱图\n var groupScale = view.getGroupScales();\n each(groupScale, function (scale) {\n if (scale.values && scale.values.indexOf(field_1) > -1) {\n view.filter(scale.field, function (value) {\n var curLegendItem = find(legendItem_1, function (item) { return item.value === value; });\n // 使用 legend 中的 unchecked 来判断,使得支持关闭多个图例\n return !curLegendItem.unchecked;\n });\n }\n });\n chart.render(true);\n });\n }\n }\n });\n }\n return params;\n}\n/**\n * 双轴图 slider 适配器\n * @param params\n */\nexport function slider(params) {\n var chart = params.chart, options = params.options;\n var slider = options.slider;\n var leftView = findViewById(chart, LEFT_AXES_VIEW);\n var rightView = findViewById(chart, RIGHT_AXES_VIEW);\n if (slider) {\n // 左 View\n leftView.option('slider', slider);\n // 监听左侧 slider 改变事件, 同步右侧 View 视图\n leftView.on('slider:valuechanged', function (evt) {\n var _a = evt.event, value = _a.value, originValue = _a.originValue;\n if (isEqual(value, originValue)) {\n return;\n }\n doSliderFilter(rightView, value);\n });\n chart.once('afterpaint', function () {\n // 初始化数据,配置默认值时需要同步\n if (!isBoolean(slider)) {\n var start = slider.start, end = slider.end;\n if (start || end) {\n doSliderFilter(rightView, [start, end]);\n }\n }\n });\n }\n return params;\n}\n/**\n * 双折线图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n // transformOptions 一定在最前面处理;color legend 使用了 beforepaint,为便于理解放在最后面\n return flow(transformOptions, createViews, \n // 主题靠前设置,作为最低优先级\n theme, geometry, meta, axis, limitInPlot, tooltip, interaction, annotation, animation, color, legend, slider)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\nimport { adaptor } from './adaptor';\nvar DualAxes = /** @class */ (function (_super) {\n __extends(DualAxes, _super);\n function DualAxes() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型: 双轴图 */\n _this.type = 'dual-axes';\n return _this;\n }\n /**\n * 获取 双轴图 默认配置\n */\n DualAxes.prototype.getDefaultOptions = function () {\n return deepAssign({}, _super.prototype.getDefaultOptions.call(this), {\n yAxis: [],\n syncViewPadding: true,\n });\n };\n /**\n * 获取双轴图的适配器\n */\n DualAxes.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return DualAxes;\n}(Plot));\nexport { DualAxes };\n//# sourceMappingURL=index.js.map","import { __assign, __rest } from \"tslib\";\nimport { tooltip, interaction, animation, theme, scale, annotation, legend } from '../../adaptor/common';\nimport { area, point, line } from '../../adaptor/geometries';\nimport { findGeometry, flow, transformLabel, deepAssign } from '../../utils';\n/**\n * geometry 配置处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var data = options.data, lineStyle = options.lineStyle, color = options.color, pointOptions = options.point, areaOptions = options.area;\n chart.data(data);\n // 雷达图 主 geometry\n var primary = deepAssign({}, params, {\n options: {\n line: {\n style: lineStyle,\n color: color,\n },\n point: pointOptions\n ? __assign({ color: color }, pointOptions) : pointOptions,\n area: areaOptions\n ? __assign({ color: color }, areaOptions) : areaOptions,\n // label 不传递给各个 geometry adaptor,由 label adaptor 处理\n label: undefined,\n },\n });\n // 副 Geometry\n var second = deepAssign({}, primary, {\n options: {\n tooltip: false,\n },\n });\n // 优先使用 point.state, 其次取主元素的 state 状态样式配置\n var pointState = (pointOptions === null || pointOptions === void 0 ? void 0 : pointOptions.state) || options.state;\n var pointParams = deepAssign({}, primary, { options: { tooltip: false, state: pointState } });\n line(primary);\n point(pointParams);\n area(second);\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\nfunction meta(params) {\n var _a;\n var options = params.options;\n var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n return flow(scale((_a = {},\n _a[xField] = xAxis,\n _a[yField] = yAxis,\n _a)))(params);\n}\n/**\n * coord 配置\n * @param params\n */\nfunction coord(params) {\n var chart = params.chart, options = params.options;\n var radius = options.radius, startAngle = options.startAngle, endAngle = options.endAngle;\n chart.coordinate('polar', {\n radius: radius,\n startAngle: startAngle,\n endAngle: endAngle,\n });\n return params;\n}\n/**\n * axis 配置\n * @param params\n */\nfunction axis(params) {\n var chart = params.chart, options = params.options;\n var xField = options.xField, xAxis = options.xAxis, yField = options.yField, yAxis = options.yAxis;\n chart.axis(xField, xAxis);\n chart.axis(yField, yAxis);\n return params;\n}\n/**\n * label 配置\n * @param params\n */\nfunction label(params) {\n var chart = params.chart, options = params.options;\n var label = options.label, yField = options.yField;\n var geometry = findGeometry(chart, 'line');\n if (!label) {\n geometry.label(false);\n }\n else {\n var callback = label.callback, cfg = __rest(label, [\"callback\"]);\n geometry.label({\n fields: [yField],\n callback: callback,\n cfg: transformLabel(cfg),\n });\n }\n return params;\n}\n/**\n * 雷达图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return flow(geometry, meta, theme, coord, axis, legend, tooltip, label, interaction, animation, annotation())(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __assign, __extends } from \"tslib\";\nimport { registerComponentController, Util, TooltipController, Action } from '@antv/g2';\nimport { isNil } from '@antv/util';\nvar RadarTooltipController = /** @class */ (function (_super) {\n __extends(RadarTooltipController, _super);\n function RadarTooltipController() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(RadarTooltipController.prototype, \"name\", {\n get: function () {\n return 'radar-tooltip';\n },\n enumerable: false,\n configurable: true\n });\n RadarTooltipController.prototype.getTooltipItems = function (point) {\n var _a = this.getTooltipCfg(), shared = _a.shared, cfgTitle = _a.title;\n var hintItems = _super.prototype.getTooltipItems.call(this, point);\n if (hintItems.length > 0) {\n var geometry_1 = this.view.geometries[0];\n var dataArray = geometry_1.dataArray;\n var title_1 = hintItems[0].name;\n var result_1 = [];\n dataArray.forEach(function (mappingData) {\n mappingData.forEach(function (d) {\n var items = Util.getTooltipItems(d, geometry_1);\n var item = items[0];\n if (!shared && item && item.name === title_1) {\n var displayTitle = isNil(cfgTitle) ? title_1 : cfgTitle;\n result_1.push(__assign(__assign({}, item), { name: item.title, title: displayTitle }));\n }\n else if (shared && item) {\n var displayTitle = isNil(cfgTitle) ? item.name || title_1 : cfgTitle;\n result_1.push(__assign(__assign({}, item), { name: item.title, title: displayTitle }));\n }\n });\n });\n return result_1;\n }\n return [];\n };\n return RadarTooltipController;\n}(TooltipController));\nexport { RadarTooltipController };\nregisterComponentController('radar-tooltip', RadarTooltipController);\n/**\n * 雷达图 tooltip 激活 action\n */\nvar RadarTooltipAction = /** @class */ (function (_super) {\n __extends(RadarTooltipAction, _super);\n function RadarTooltipAction() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n RadarTooltipAction.prototype.init = function () {\n var view = this.context.view;\n view.removeInteraction('tooltip');\n };\n RadarTooltipAction.prototype.show = function () {\n var event = this.context.event;\n var controller = this.getTooltipController();\n controller.showTooltip({ x: event.x, y: event.y });\n };\n RadarTooltipAction.prototype.hide = function () {\n var controller = this.getTooltipController();\n controller.hideTooltip();\n };\n RadarTooltipAction.prototype.getTooltipController = function () {\n var view = this.context.view;\n return view.getController('radar-tooltip');\n };\n return RadarTooltipAction;\n}(Action));\nexport { RadarTooltipAction };\n//# sourceMappingURL=radar-tooltip-action.js.map","import { registerAction, registerInteraction } from '@antv/g2';\nimport { RadarTooltipAction } from './radar-tooltip-action';\nregisterAction('radar-tooltip', RadarTooltipAction);\nregisterInteraction('radar-tooltip', {\n start: [{ trigger: 'plot:mousemove', action: 'radar-tooltip:show' }],\n end: [{ trigger: 'plot:mouseleave', action: 'radar-tooltip:hide' }],\n});\n//# sourceMappingURL=index.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\nimport { adaptor } from './adaptor';\nimport './interactions';\nvar Radar = /** @class */ (function (_super) {\n __extends(Radar, _super);\n function Radar() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'radar';\n return _this;\n }\n /**\n * @override\n * @param data\n */\n Radar.prototype.changeData = function (data) {\n this.updateOption({ data: data });\n this.chart.changeData(data);\n };\n /**\n * 获取 雷达图 默认配置\n */\n Radar.prototype.getDefaultOptions = function () {\n return deepAssign({}, _super.prototype.getDefaultOptions.call(this), {\n xAxis: {\n label: {\n offset: 15,\n },\n grid: {\n line: {\n type: 'line',\n },\n },\n },\n yAxis: {\n grid: {\n line: {\n type: 'circle',\n },\n },\n },\n legend: {\n position: 'top',\n },\n tooltip: {\n shared: true,\n showCrosshairs: true,\n showMarkers: true,\n crosshairs: {\n type: 'xy',\n line: {\n style: {\n stroke: '#565656',\n lineDash: [4],\n },\n },\n follow: true,\n },\n },\n });\n };\n /**\n * 获取 雷达图 的适配器\n */\n Radar.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Radar;\n}(Plot));\nexport { Radar };\n//# sourceMappingURL=index.js.map","import { __assign, __extends, __spreadArrays } from \"tslib\";\nimport { Chart } from '@antv/g2';\nimport { each } from '@antv/util';\nimport EE from '@antv/event-emitter';\nimport { bind } from 'size-sensor';\nimport { getContainerSize, getAllElementsRecursively, deepAssign, pick } from '../utils';\nvar SOURCE_ATTRIBUTE_NAME = 'data-chart-source-type';\n/** plot 图表容器的配置 */\nexport var PLOT_CONTAINER_OPTIONS = [\n 'padding',\n 'appendPadding',\n 'renderer',\n 'pixelRatio',\n 'syncViewPadding',\n 'supportCSSTransform',\n 'limitInPlot',\n];\n/**\n * 所有 plot 的基类\n */\nvar Plot = /** @class */ (function (_super) {\n __extends(Plot, _super);\n function Plot(container, options) {\n var _this = _super.call(this) || this;\n _this.container = typeof container === 'string' ? document.getElementById(container) : container;\n _this.options = deepAssign({}, _this.getDefaultOptions(), options);\n _this.createG2();\n _this.bindEvents();\n return _this;\n }\n /**\n * 获取默认的 options 配置项\n * 每个组件都可以复写\n */\n Plot.getDefaultOptions = function () {\n return {\n renderer: 'canvas',\n xAxis: {\n nice: true,\n label: {\n autoRotate: false,\n autoHide: { type: 'equidistance', cfg: { minGap: 6 } },\n },\n },\n yAxis: {\n nice: true,\n label: {\n autoHide: true,\n autoRotate: false,\n },\n },\n animation: true,\n };\n };\n /**\n * 创建 G2 实例\n */\n Plot.prototype.createG2 = function () {\n var _a = this.options, width = _a.width, height = _a.height, defaultInteractions = _a.defaultInteractions;\n this.chart = new Chart(__assign(__assign(__assign(__assign({ container: this.container, autoFit: false }, this.getChartSize(width, height)), { localRefresh: false }), pick(this.options, PLOT_CONTAINER_OPTIONS)), { defaultInteractions: defaultInteractions }));\n // 给容器增加标识,知道图表的来源区别于 G2\n this.container.setAttribute(SOURCE_ATTRIBUTE_NAME, 'G2Plot');\n };\n /**\n * 计算默认的 chart 大小。逻辑简化:如果存在 width 或 height,则直接使用,否则使用容器大小\n * @param width\n * @param height\n */\n Plot.prototype.getChartSize = function (width, height) {\n var chartSize = getContainerSize(this.container);\n return { width: width || chartSize.width || 400, height: height || chartSize.height || 400 };\n };\n /**\n * 绑定代理所有 G2 的事件\n */\n Plot.prototype.bindEvents = function () {\n var _this = this;\n if (this.chart) {\n this.chart.on('*', function (e) {\n if (e === null || e === void 0 ? void 0 : e.type) {\n _this.emit(e.type, e);\n }\n });\n }\n };\n /**\n * 获取默认的 options 配置项\n * 每个组件都可以复写\n */\n Plot.prototype.getDefaultOptions = function () {\n return Plot.getDefaultOptions();\n };\n /**\n * 绘制\n */\n Plot.prototype.render = function () {\n // 暴力处理,先清空再渲染,需要 G2 层自行做好更新渲染\n this.chart.clear();\n // 因为子 view 会继承父 view 的 options 配置(包括 legend,所以会导致 legend 重复创建)\n // 所以这里给 chart 实例的 options 配置清空\n // 最好的解法是在 G2 view.clear 方法的时候,重置 options 配置。或者提供方法去 resetOptions\n // #1684 理论上在多 view 图形上,只要存在 custom legend,都存在类似问题(子弹图、双轴图)\n // @ts-ignore\n this.chart.options = {\n data: [],\n animate: true,\n };\n this.chart.views = []; // 删除已有的 views\n // 执行 adaptor\n this.execAdaptor();\n // 渲染\n this.chart.render();\n // 绑定\n this.bindSizeSensor();\n };\n /**\n * 更新: 更新配置且重新渲染\n * @param options\n */\n Plot.prototype.update = function (options) {\n this.updateOption(options);\n this.render();\n };\n /**\n * 更新配置\n * @param options\n */\n Plot.prototype.updateOption = function (options) {\n this.options = deepAssign({}, this.options, options);\n };\n /**\n * 设置状态\n * @param type 状态类型,支持 'active' | 'inactive' | 'selected' 三种\n * @param conditions 条件,支持数组\n * @param status 是否激活,默认 true\n */\n Plot.prototype.setState = function (type, condition, status) {\n if (status === void 0) { status = true; }\n var elements = getAllElementsRecursively(this.chart);\n each(elements, function (ele) {\n if (condition(ele.getData())) {\n ele.setState(type, status);\n }\n });\n };\n /**\n * 获取状态\n */\n Plot.prototype.getStates = function () {\n var elements = getAllElementsRecursively(this.chart);\n var stateObjects = [];\n each(elements, function (element) {\n var data = element.getData();\n var states = element.getStates();\n each(states, function (state) {\n stateObjects.push({ data: data, state: state, geometry: element.geometry, element: element });\n });\n });\n return stateObjects;\n };\n /**\n * 更新数据\n * @override\n * @param options\n */\n Plot.prototype.changeData = function (data) {\n // @ts-ignore\n this.update({ data: data });\n // TODO: 临时方案,最好使用下面的方式去更新数据\n // this.chart.changeData(data);\n };\n /**\n * 修改画布大小\n * @param width\n * @param height\n */\n Plot.prototype.changeSize = function (width, height) {\n this.chart.changeSize(width, height);\n };\n /**\n * 增加图表标注。通过 id 标识,如果匹配到,就做更新\n */\n Plot.prototype.addAnnotations = function (annotations) {\n var incoming = __spreadArrays(annotations);\n var controller = this.chart.getController('annotation');\n var current = controller.getComponents().map(function (co) { return co.extra; });\n controller.clear(true);\n var _loop_1 = function (i) {\n var annotation = current[i];\n var findIndex = incoming.findIndex(function (item) { return item.id && item.id === annotation.id; });\n if (findIndex !== -1) {\n annotation = deepAssign({}, annotation, incoming[findIndex]);\n incoming.splice(findIndex, 1);\n }\n controller.annotation(annotation);\n };\n for (var i = 0; i < current.length; i++) {\n _loop_1(i);\n }\n incoming.forEach(function (annotation) { return controller.annotation(annotation); });\n this.chart.render(true);\n };\n /**\n * 删除图表标注。通过 id 标识,如果匹配到,就做删除\n */\n Plot.prototype.removeAnnotations = function (annotations) {\n var controller = this.chart.getController('annotation');\n var current = controller.getComponents().map(function (co) { return co.extra; });\n controller.clear(true);\n var _loop_2 = function (i) {\n var annotation = current[i];\n if (!annotations.find(function (item) { return item.id && item.id === annotation.id; })) {\n controller.annotation(annotation);\n }\n };\n for (var i = 0; i < current.length; i++) {\n _loop_2(i);\n }\n this.chart.render(true);\n };\n /**\n * 销毁\n */\n Plot.prototype.destroy = function () {\n // 取消 size-sensor 的绑定\n this.unbindSizeSensor();\n // G2 的销毁\n this.chart.destroy();\n // 清空已经绑定的事件\n this.off();\n this.container.removeAttribute(SOURCE_ATTRIBUTE_NAME);\n };\n /**\n * 执行 adaptor 操作\n */\n Plot.prototype.execAdaptor = function () {\n var adaptor = this.getSchemaAdaptor();\n var _a = this.options, padding = _a.padding, appendPadding = _a.appendPadding;\n // 更新 padding\n this.chart.padding = padding;\n // 更新 appendPadding\n this.chart.appendPadding = appendPadding;\n // 转化成 G2 API\n adaptor({\n chart: this.chart,\n options: this.options,\n });\n };\n /**\n * 当图表容器大小变化的时候,执行的函数\n */\n Plot.prototype.triggerResize = function () {\n this.chart.forceFit();\n };\n /**\n * 绑定 dom 容器大小变化的事件\n */\n Plot.prototype.bindSizeSensor = function () {\n var _this = this;\n if (this.unbind) {\n return;\n }\n var _a = this.options.autoFit, autoFit = _a === void 0 ? true : _a;\n if (autoFit) {\n this.unbind = bind(this.container, function () {\n // 获取最新的宽高信息\n var _a = getContainerSize(_this.container), width = _a.width, height = _a.height;\n // 主要是防止绑定的时候触发 resize 回调\n if (width !== _this.chart.width || height !== _this.chart.height) {\n _this.triggerResize();\n }\n });\n }\n };\n /**\n * 取消绑定\n */\n Plot.prototype.unbindSizeSensor = function () {\n if (this.unbind) {\n this.unbind();\n this.unbind = undefined;\n }\n };\n return Plot;\n}(EE));\nexport { Plot };\n//# sourceMappingURL=plot.js.map","import { __rest } from \"tslib\";\nimport { filter, isObject, isArray } from '@antv/util';\nimport { flow, findGeometry, log, LEVEL, transformLabel, deepAssign } from '../../utils';\nimport { tooltip, interaction, animation, theme, scale, annotation, state, pattern } from '../../adaptor/common';\nimport { interval } from '../../adaptor/geometries';\n/**\n * geometry 配置处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var data = options.data, sectorStyle = options.sectorStyle, color = options.color;\n // 装载数据\n chart.data(data);\n flow(interval)(deepAssign({}, params, {\n options: {\n marginRatio: 1,\n interval: {\n style: sectorStyle,\n color: color,\n },\n },\n }));\n return params;\n}\n/**\n * label 配置\n * @param params\n */\nfunction label(params) {\n var chart = params.chart, options = params.options;\n var label = options.label, xField = options.xField;\n var geometry = findGeometry(chart, 'interval');\n // label 为 false 不显示 label\n if (label === false) {\n geometry.label(false);\n }\n else if (isObject(label)) {\n var callback = label.callback, fields = label.fields, cfg = __rest(label, [\"callback\", \"fields\"]);\n var offset = cfg.offset;\n var layout = cfg.layout;\n // 当 label 在 shape 外部显示时,设置 'limit-in-shape' 会\n // 造成 label 不显示。\n if (offset === undefined || offset >= 0) {\n layout = layout ? (isArray(layout) ? layout : [layout]) : [];\n cfg.layout = filter(layout, function (v) { return v.type !== 'limit-in-shape'; });\n cfg.layout.length || delete cfg.layout;\n }\n geometry.label({\n fields: fields || [xField],\n callback: callback,\n cfg: transformLabel(cfg),\n });\n }\n else {\n log(LEVEL.WARN, label === null, 'the label option must be an Object.');\n geometry.label({ fields: [xField] });\n }\n return params;\n}\n/**\n * legend 配置\n * @param params\n */\nexport function legend(params) {\n var chart = params.chart, options = params.options;\n var legend = options.legend, seriesField = options.seriesField;\n if (legend === false) {\n chart.legend(false);\n }\n else if (seriesField) {\n chart.legend(seriesField, legend);\n }\n return params;\n}\n/**\n * coord 配置\n * @param params\n */\nfunction coordinate(params) {\n var chart = params.chart, options = params.options;\n var radius = options.radius, innerRadius = options.innerRadius, startAngle = options.startAngle, endAngle = options.endAngle;\n chart.coordinate({\n type: 'polar',\n cfg: {\n radius: radius,\n innerRadius: innerRadius,\n startAngle: startAngle,\n endAngle: endAngle,\n },\n });\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\nfunction meta(params) {\n var _a;\n var options = params.options;\n var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n return flow(scale((_a = {},\n _a[xField] = xAxis,\n _a[yField] = yAxis,\n _a)))(params);\n}\n/**\n * axis 配置\n * @param params\n */\nfunction axis(params) {\n var chart = params.chart, options = params.options;\n var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n // 为 falsy 则是不显示轴\n if (!xAxis) {\n chart.axis(xField, false);\n }\n else {\n chart.axis(xField, xAxis);\n }\n if (!yAxis) {\n chart.axis(yField, false);\n }\n else {\n chart.axis(yField, yAxis);\n }\n return params;\n}\n/**\n * 玫瑰图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n flow(pattern('sectorStyle'), geometry, meta, label, coordinate, axis, legend, tooltip, interaction, animation, theme, annotation(), state)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\n/**\n * 玫瑰图 默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n xAxis: false,\n yAxis: false,\n legend: {\n position: 'right',\n radio: {},\n },\n sectorStyle: {\n stroke: '#fff',\n lineWidth: 1,\n },\n label: {\n layout: {\n type: 'limit-in-shape',\n },\n },\n tooltip: {\n shared: true,\n showMarkers: false,\n },\n interactions: [{ type: 'active-region' }],\n});\n//# sourceMappingURL=constant.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\nvar Rose = /** @class */ (function (_super) {\n __extends(Rose, _super);\n function Rose() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 玫瑰图 */\n _this.type = 'rose';\n return _this;\n }\n /**\n * 获取 玫瑰图 默认配置项\n * 供外部使用\n */\n Rose.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n /**\n * @override\n * @param data\n */\n Rose.prototype.changeData = function (data) {\n this.updateOption({ data: data });\n this.chart.changeData(data);\n };\n /**\n * 获取默认的 options 配置项\n */\n Rose.prototype.getDefaultOptions = function () {\n return Rose.getDefaultOptions();\n };\n /**\n * 获取 玫瑰图 的适配器\n */\n Rose.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Rose;\n}(Plot));\nexport { Rose };\n//# sourceMappingURL=index.js.map","import { __assign } from \"tslib\";\nimport { get } from '@antv/util';\nexport var DEFAULT_TOOLTIP_OPTIONS = {\n showTitle: false,\n shared: true,\n showMarkers: false,\n customContent: function (x, data) { return \"\" + get(data, [0, 'data', 'y'], 0); },\n containerTpl: '
',\n itemTpl: '{value}',\n domStyles: {\n 'g2-tooltip': {\n padding: '2px 4px',\n fontSize: '10px',\n },\n },\n};\n/**\n * 默认配置项\n */\nexport var DEFAULT_OPTIONS = {\n appendPadding: 2,\n tooltip: __assign({}, DEFAULT_TOOLTIP_OPTIONS),\n animation: {},\n};\n//# sourceMappingURL=constants.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { getTinyData } from '../tiny-line/utils';\nimport { adaptor, meta } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constants';\nvar TinyColumn = /** @class */ (function (_super) {\n __extends(TinyColumn, _super);\n function TinyColumn() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'tiny-column';\n return _this;\n }\n /**\n * 获取默认配置项\n * 供外部使用\n */\n TinyColumn.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n /**\n * @override\n * @param data\n */\n TinyColumn.prototype.changeData = function (data) {\n this.updateOption({ data: data });\n var _a = this, chart = _a.chart, options = _a.options;\n meta({ chart: chart, options: options });\n chart.changeData(getTinyData(data));\n };\n TinyColumn.prototype.getDefaultOptions = function () {\n return TinyColumn.getDefaultOptions();\n };\n /**\n * 获取 迷你柱形图 的适配器\n */\n TinyColumn.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return TinyColumn;\n}(Plot));\nexport { TinyColumn };\n//# sourceMappingURL=index.js.map","import { __assign } from \"tslib\";\nimport { DEFAULT_TOOLTIP_OPTIONS } from '../tiny-line/constants';\n/**\n * 默认配置项\n */\nexport var DEFAULT_OPTIONS = {\n appendPadding: 2,\n tooltip: __assign({}, DEFAULT_TOOLTIP_OPTIONS),\n // 默认样式\n color: 'l(90) 0:#E5EDFE 1:#ffffff',\n areaStyle: {\n fillOpacity: 0.6,\n },\n line: {\n size: 1,\n color: '#5B8FF9',\n },\n animation: {},\n};\n//# sourceMappingURL=constants.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { getTinyData } from '../tiny-line/utils';\nimport { adaptor, meta } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constants';\nvar TinyArea = /** @class */ (function (_super) {\n __extends(TinyArea, _super);\n function TinyArea() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'tiny-area';\n return _this;\n }\n /**\n * 获取默认配置项\n * 供外部使用\n */\n TinyArea.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n /**\n * @override\n * @param data\n */\n TinyArea.prototype.changeData = function (data) {\n this.updateOption({ data: data });\n var _a = this, chart = _a.chart, options = _a.options;\n meta({ chart: chart, options: options });\n chart.changeData(getTinyData(data));\n };\n TinyArea.prototype.getDefaultOptions = function () {\n return TinyArea.getDefaultOptions();\n };\n /**\n * 获取 迷你面积图 的适配器\n */\n TinyArea.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return TinyArea;\n}(Plot));\nexport { TinyArea };\n//# sourceMappingURL=index.js.map","/**\n * 获取设备像素比\n */\nexport function getPixelRatio() {\n return typeof window === 'object' ? window === null || window === void 0 ? void 0 : window.devicePixelRatio : 2;\n}\n/**\n * 初始化 cavnas,设置宽高等\n */\nexport function initCanvas(width, height) {\n if (height === void 0) { height = width; }\n var canvas = document.createElement('canvas');\n var pixelRatio = getPixelRatio();\n // 画布尺寸\n canvas.width = width * pixelRatio;\n canvas.height = height * pixelRatio;\n // 显示尺寸\n canvas.style.width = width + \"px\";\n canvas.style.height = height + \"px\";\n var ctx = canvas.getContext('2d');\n ctx.scale(pixelRatio, pixelRatio);\n return canvas;\n}\n/**\n * 绘制背景\n *\n * @param context\n * @param cfg\n * @param width\n * @param height\n */\nexport function drawBackground(context, cfg, width, height) {\n if (height === void 0) { height = width; }\n var backgroundColor = cfg.backgroundColor, opacity = cfg.opacity;\n context.globalAlpha = opacity;\n context.fillStyle = backgroundColor;\n context.beginPath();\n context.fillRect(0, 0, width, height);\n context.closePath();\n}\n/**\n * 计算贴图单元大小\n *\n * @param size 元素大小\n * @param padding 圆点间隔\n * @param isStagger 是否交错\n * @reutrn 返回贴图单元大小\n */\nexport function getUnitPatternSize(size, padding, isStagger) {\n // 如果交错, unitSize 放大两倍\n var unitSize = size + padding;\n return isStagger ? unitSize * 2 : unitSize;\n}\n/**\n * 计算有交错情况的元素坐标\n *\n * @param unitSize 贴图单元大小\n * @param isStagger 是否交错\n * @reutrn 元素中心坐标 x,y 数组集合\n */\nexport function getSymbolsPosition(unitSize, isStagger) {\n // 如果交错, 交错绘制 dot\n var symbolsPos = isStagger\n ? [\n [unitSize * (1 / 4), unitSize * (1 / 4)],\n [unitSize * (3 / 4), unitSize * (3 / 4)],\n ]\n : [[unitSize * (1 / 2), unitSize * (1 / 2)]];\n return symbolsPos;\n}\n/**\n * 给整个 pattern贴图 做变换, 目前支持旋转\n *\n * @param pattern 整个贴图\n * @param dpr 设备像素比\n * @param rotation 旋转角度\n */\nexport function transformMatrix(dpr, rotation) {\n var radian = (rotation * Math.PI) / 180;\n var matrix = {\n a: Math.cos(radian) * (1 / dpr),\n b: Math.sin(radian) * (1 / dpr),\n c: -Math.sin(radian) * (1 / dpr),\n d: Math.cos(radian) * (1 / dpr),\n e: 0,\n f: 0,\n };\n return matrix;\n}\n//# sourceMappingURL=util.js.map","import { deepAssign } from '../../utils';\nimport { getUnitPatternSize, initCanvas, drawBackground, getSymbolsPosition, transformMatrix, getPixelRatio, } from './util';\n/**\n * dotPattern的默认配置\n */\nexport var defaultDotPatternCfg = {\n size: 6,\n padding: 2,\n backgroundColor: 'transparent',\n opacity: 1,\n rotation: 0,\n fill: '#fff',\n fillOpacity: 0.5,\n stroke: 'transparent',\n lineWidth: 0,\n isStagger: true,\n};\n/**\n * 绘制圆点\n *\n * @param context\n * @param cfg\n * @param x 圆点中心坐标x\n * @param y 圆点中心坐标y\n */\nexport function drawDot(context, cfg, x, y) {\n var size = cfg.size, fill = cfg.fill, lineWidth = cfg.lineWidth, stroke = cfg.stroke, fillOpacity = cfg.fillOpacity;\n context.beginPath();\n context.globalAlpha = fillOpacity;\n context.fillStyle = fill;\n context.strokeStyle = stroke;\n context.lineWidth = lineWidth;\n context.arc(x, y, size / 2, 0, 2 * Math.PI, false);\n context.fill();\n if (lineWidth) {\n context.stroke();\n }\n context.closePath();\n}\n/**\n * 创建 dot pattern,返回 HTMLCanvasElement\n *\n * @param cfg\n * @returns HTMLCanvasElement\n */\nexport function createDotPattern(cfg) {\n var dotCfg = deepAssign({}, defaultDotPatternCfg, cfg);\n var size = dotCfg.size, padding = dotCfg.padding, isStagger = dotCfg.isStagger, rotation = dotCfg.rotation;\n // 计算 画布大小,dots的位置\n var unitSize = getUnitPatternSize(size, padding, isStagger);\n var dots = getSymbolsPosition(unitSize, isStagger);\n // 初始化 patternCanvas\n var canvas = initCanvas(unitSize, unitSize);\n var ctx = canvas.getContext('2d');\n // 绘制 background,dots\n drawBackground(ctx, dotCfg, unitSize);\n for (var _i = 0, dots_1 = dots; _i < dots_1.length; _i++) {\n var _a = dots_1[_i], x = _a[0], y = _a[1];\n drawDot(ctx, dotCfg, x, y);\n }\n var pattern = ctx.createPattern(canvas, 'repeat');\n if (pattern) {\n var dpr = getPixelRatio();\n var matrix = transformMatrix(dpr, rotation);\n pattern.setTransform(matrix);\n }\n return pattern;\n}\n//# sourceMappingURL=dot.js.map","import { deepAssign } from '../../utils';\nimport { initCanvas, drawBackground, transformMatrix, getPixelRatio } from './util';\n/**\n * linePattern 的 默认配置\n */\nexport var defaultLinePatternCfg = {\n rotation: 45,\n spacing: 5,\n opacity: 1,\n backgroundColor: 'transparent',\n strokeOpacity: 0.5,\n stroke: '#fff',\n lineWidth: 2,\n};\n/**\n * 绘制line\n *\n * @param context canvasContext\n * @param cfg linePattern 的配置\n * @param d 绘制 path 所需的 d\n */\nexport function drawLine(context, cfg, d) {\n var stroke = cfg.stroke, lineWidth = cfg.lineWidth, strokeOpacity = cfg.strokeOpacity;\n var path = new Path2D(d);\n context.globalAlpha = strokeOpacity;\n context.lineCap = 'square';\n context.strokeStyle = lineWidth ? stroke : 'transparent';\n context.lineWidth = lineWidth;\n context.stroke(path);\n}\n/**\n * 创建 linePattern\n */\nexport function createLinePattern(cfg) {\n var lineCfg = deepAssign({}, defaultLinePatternCfg, cfg);\n var spacing = lineCfg.spacing, rotation = lineCfg.rotation, lineWidth = lineCfg.lineWidth;\n // 计算 pattern 画布的大小, path 所需的 d\n var width = spacing + lineWidth || 1;\n var height = spacing + lineWidth || 1;\n var d = \"\\n M 0 0 L \" + width + \" 0\\n M 0 \" + height + \" L \" + width + \" \" + height + \"\\n \";\n // 初始化 patternCanvas\n var canvas = initCanvas(width, height);\n var ctx = canvas.getContext('2d');\n // 绘制 background,line\n drawBackground(ctx, lineCfg, width, height);\n drawLine(ctx, lineCfg, d);\n var pattern = ctx.createPattern(canvas, 'repeat');\n if (pattern) {\n var dpr = getPixelRatio();\n var matrix = transformMatrix(dpr, rotation);\n pattern.setTransform(matrix);\n }\n // 返回 Pattern 对象\n return pattern;\n}\n//# sourceMappingURL=line.js.map","import { deepAssign } from '../../utils';\nimport { getUnitPatternSize, initCanvas, drawBackground, getSymbolsPosition, transformMatrix, getPixelRatio, } from './util';\n/**\n * squarePattern 的 默认配置\n */\nexport var defaultSquarePatternCfg = {\n size: 6,\n padding: 1,\n isStagger: true,\n backgroundColor: 'transparent',\n opacity: 1,\n rotation: 0,\n fill: '#fff',\n fillOpacity: 0.5,\n stroke: 'transparent',\n lineWidth: 0,\n};\n/**\n * 绘制square\n *\n * @param context canvasContext\n * @param cfg squarePattern 的配置\n * @param x和y square的中心位置\n */\nexport function drawSquare(context, cfg, x, y) {\n var stroke = cfg.stroke, size = cfg.size, fill = cfg.fill, lineWidth = cfg.lineWidth, fillOpacity = cfg.fillOpacity;\n context.globalAlpha = fillOpacity;\n context.strokeStyle = stroke;\n context.lineWidth = lineWidth;\n context.fillStyle = fill;\n // 因为正方形绘制从左上角开始,所以x,y做个偏移\n context.strokeRect(x - size / 2, y - size / 2, size, size);\n context.fillRect(x - size / 2, y - size / 2, size, size);\n}\n/**\n * 创建 squarePattern\n */\nexport function createSquarePattern(cfg) {\n var squareCfg = deepAssign({}, defaultSquarePatternCfg, cfg);\n var size = squareCfg.size, padding = squareCfg.padding, isStagger = squareCfg.isStagger, rotation = squareCfg.rotation;\n // 计算 画布大小,squares的位置\n var unitSize = getUnitPatternSize(size, padding, isStagger);\n var squares = getSymbolsPosition(unitSize, isStagger); // 计算方法与 dots 一样\n // 初始化 patternCanvas\n var canvas = initCanvas(unitSize, unitSize);\n var ctx = canvas.getContext('2d');\n // 绘制 background,squares\n drawBackground(ctx, squareCfg, unitSize);\n for (var _i = 0, squares_1 = squares; _i < squares_1.length; _i++) {\n var _a = squares_1[_i], x = _a[0], y = _a[1];\n drawSquare(ctx, squareCfg, x, y);\n }\n var pattern = ctx.createPattern(canvas, 'repeat');\n if (pattern) {\n var dpr = getPixelRatio();\n var matrix = transformMatrix(dpr, rotation);\n pattern.setTransform(matrix);\n }\n return pattern;\n}\n//# sourceMappingURL=square.js.map","import { createDotPattern } from './dot';\nimport { createLinePattern } from './line';\nimport { createSquarePattern } from './square';\n/**\n * 获取内置的 CanvasPattern 方法\n * @param options\n * @returns\n */\nexport function getCanvasPattern(options) {\n var type = options.type, cfg = options.cfg;\n var pattern;\n switch (type) {\n case 'dot':\n pattern = createDotPattern(cfg);\n break;\n case 'line':\n pattern = createLinePattern(cfg);\n break;\n case 'square':\n pattern = createSquarePattern(cfg);\n break;\n default:\n break;\n }\n return pattern;\n}\n//# sourceMappingURL=index.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.SensorTabIndex = exports.SensorClassName = exports.SizeSensorId = void 0;\n\n/**\n * Created by hustcc on 18/6/9.\n * Contract: i@hust.cc\n */\nvar SizeSensorId = 'size-sensor-id';\nexports.SizeSensorId = SizeSensorId;\nvar SensorClassName = 'size-sensor-object';\nexports.SensorClassName = SensorClassName;\nvar SensorTabIndex = '-1';\nexports.SensorTabIndex = SensorTabIndex;","import { __assign } from \"tslib\";\nimport { each } from '@antv/util';\nimport { geometry as geometryAdaptor } from '../../adaptor/geometries/base';\nimport { interaction, animation, theme, tooltip } from '../../adaptor/common';\nimport { PLOT_CONTAINER_OPTIONS } from '../../core/plot';\nimport { AXIS_META_CONFIG_KEYS } from '../../constant';\nimport { deepAssign, flow, pick } from '../../utils';\nimport { execPlotAdaptor } from './utils';\n/**\n * geometry 处理\n * @param params\n */\nfunction multiView(params) {\n var chart = params.chart, options = params.options;\n var views = options.views, legend = options.legend;\n each(views, function (v) {\n var region = v.region, data = v.data, meta = v.meta, axes = v.axes, coordinate = v.coordinate, interactions = v.interactions, annotations = v.annotations, tooltip = v.tooltip, geometries = v.geometries;\n // 1. 创建 view\n var viewOfG2 = chart.createView({\n region: region,\n });\n // 2. data\n viewOfG2.data(data);\n // 3. meta\n var scales = {};\n if (axes) {\n each(axes, function (axis, field) {\n scales[field] = pick(axis, AXIS_META_CONFIG_KEYS);\n });\n }\n scales = deepAssign({}, meta, scales);\n viewOfG2.scale(scales);\n // 4. x y axis\n if (!axes) {\n viewOfG2.axis(false);\n }\n else {\n each(axes, function (axis, field) {\n viewOfG2.axis(field, axis);\n });\n }\n // 5. coordinate\n viewOfG2.coordinate(coordinate);\n // 6. geometry\n each(geometries, function (geometry) {\n var ext = geometryAdaptor({\n chart: viewOfG2,\n options: geometry,\n }).ext;\n // adjust\n var adjust = geometry.adjust;\n if (adjust) {\n ext.geometry.adjust(adjust);\n }\n });\n // 7. interactions\n each(interactions, function (interaction) {\n if (interaction.enable === false) {\n viewOfG2.removeInteraction(interaction.type);\n }\n else {\n viewOfG2.interaction(interaction.type, interaction.cfg);\n }\n });\n // 8. annotations\n each(annotations, function (annotation) {\n viewOfG2.annotation()[annotation.type](__assign({}, annotation));\n });\n // 9. animation (先做动画)\n if (typeof v.animation === 'boolean') {\n viewOfG2.animate(false);\n }\n else {\n viewOfG2.animate(true);\n // 9.1 所有的 Geometry 都使用同一动画(各个图形如有区别,todo 自行覆盖)\n each(viewOfG2.geometries, function (g) {\n g.animate(v.animation);\n });\n }\n if (tooltip) {\n // 10. tooltip\n viewOfG2.interaction('tooltip');\n viewOfG2.tooltip(tooltip);\n }\n });\n // legend\n if (!legend) {\n chart.legend(false);\n }\n else {\n each(legend, function (l, field) {\n chart.legend(field, l);\n });\n }\n // tooltip\n chart.tooltip(options.tooltip);\n return params;\n}\n/**\n * 支持嵌套使用 g2plot 内置图表\n * @param params\n */\nfunction multiPlot(params) {\n var chart = params.chart, options = params.options;\n var plots = options.plots;\n each(plots, function (plot) {\n var type = plot.type, region = plot.region, _a = plot.options, options = _a === void 0 ? {} : _a;\n var tooltip = options.tooltip;\n var viewOfG2 = chart.createView(__assign({ region: region }, pick(options, PLOT_CONTAINER_OPTIONS)));\n if (tooltip) {\n // 配置 tooltip 交互\n viewOfG2.interaction('tooltip');\n }\n execPlotAdaptor(type, viewOfG2, options);\n });\n return params;\n}\n/**\n * 图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n return flow(animation, // 多 view 的图,动画配置放到最前面\n multiView, multiPlot, interaction, animation, theme, tooltip\n // ... 其他的 adaptor flow\n )(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { each, isArray } from '@antv/util';\nimport { getAllElements } from '../../../utils';\n/**\n * 获取图表元素对应字段的值\n * @param element 图表元素\n * @param field 字段名\n * @ignore\n */\nexport function getElementValue(element, field) {\n var model = element.getModel();\n var record = model.data;\n var value;\n if (isArray(record)) {\n value = record[0][field];\n }\n else {\n value = record[field];\n }\n return value;\n}\n/**\n * @ignore\n * 清理 highlight 效果\n * @param view View 或者 Chart\n */\nexport function clearHighlight(view) {\n var elements = getAllElements(view);\n each(elements, function (el) {\n if (el.hasState('active')) {\n el.setState('active', false);\n }\n if (el.hasState('selected')) {\n el.setState('selected', false);\n }\n if (el.hasState('inactive')) {\n el.setState('inactive', false);\n }\n });\n}\n//# sourceMappingURL=utils.js.map","import { __extends } from \"tslib\";\nimport { each, get, map, isArray } from '@antv/util';\nimport { registerAction, registerInteraction, Action } from '@antv/g2';\nimport { getAllElements, getViews, getSiblingViews } from '../../../utils';\nimport { clearHighlight, getElementValue } from './utils';\n/**\n * 存在多个 view 时,view 之间的联动交互\n *\n * 提供四个反馈 action,均接受参数:linkField 关联字段,dim 维度\n * 1. showTooltip\n * 2. active\n * 3. highlight\n * 4. selected\n *\n * 附加,两个结束反馈 action:\n * 1. hidetooltip\n * 2. reset 清除激活和高亮状态\n */\nvar Association = /** @class */ (function (_super) {\n __extends(Association, _super);\n function Association() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * 获取关联的 elements\n *\n * - 如果 dim 参数存在,根据 dim 获取相应的 field。与 linkField 不匹配则 return\n * - 否则 dim 参数不存在,且 linkField 存在,则作为关联字段\n * - 否则若 linkField 不存在,则获取第一个分类字段\n * @returns EventItem[]\n */\n Association.prototype.getAssociationItems = function (views, params) {\n var _a;\n var event = this.context.event;\n var _b = params || {}, linkField = _b.linkField, dim = _b.dim;\n var items = [];\n if ((_a = event.data) === null || _a === void 0 ? void 0 : _a.data) {\n var data_1 = event.data.data;\n each(views, function (v) {\n var _a, _b;\n var field = linkField;\n if (dim === 'x') {\n field = v.getXScale().field;\n }\n else if (dim === 'y') {\n field = (_a = v.getYScales().find(function (s) { return s.field === field; })) === null || _a === void 0 ? void 0 : _a.field;\n }\n else if (!field) {\n field = (_b = v.getGroupScales()[0]) === null || _b === void 0 ? void 0 : _b.field;\n }\n if (!field) {\n return;\n }\n var elements = map(getAllElements(v), function (ele) {\n var active = false;\n var inactive = false;\n var dataValue = isArray(data_1) ? get(data_1[0], field) : get(data_1, field);\n if (getElementValue(ele, field) === dataValue) {\n active = true;\n }\n else {\n inactive = true;\n }\n return { element: ele, view: v, active: active, inactive: inactive };\n });\n items.push.apply(items, elements);\n });\n }\n return items;\n };\n /**\n * 所有同一层级的 tooltip 显示\n */\n Association.prototype.showTooltip = function (params) {\n var siblings = getSiblingViews(this.context.view);\n var elements = this.getAssociationItems(siblings, params);\n each(elements, function (ele) {\n if (ele.active) {\n var box = ele.element.shape.getCanvasBBox();\n ele.view.showTooltip({ x: box.minX + box.width / 2, y: box.minY + box.height / 2 });\n }\n });\n };\n /**\n * 隐藏同一层级的 tooltip\n */\n Association.prototype.hideTooltip = function () {\n var siblings = getSiblingViews(this.context.view);\n each(siblings, function (sibling) {\n sibling.hideTooltip();\n });\n };\n /**\n * 设置 active 状态\n */\n Association.prototype.active = function (params) {\n var views = getViews(this.context.view);\n var items = this.getAssociationItems(views, params);\n each(items, function (item) {\n var active = item.active, element = item.element;\n if (active) {\n element.setState('active', true);\n }\n });\n };\n /**\n * 设置 selected 状态\n */\n Association.prototype.selected = function (params) {\n var views = getViews(this.context.view);\n var items = this.getAssociationItems(views, params);\n each(items, function (item) {\n var active = item.active, element = item.element;\n if (active) {\n element.setState('selected', true);\n }\n });\n };\n /**\n * 进行高亮 => 设置 inactive 状态\n */\n Association.prototype.highlight = function (params) {\n var views = getViews(this.context.view);\n var items = this.getAssociationItems(views, params);\n each(items, function (item) {\n var inactive = item.inactive, element = item.element;\n if (inactive) {\n element.setState('inactive', true);\n }\n });\n };\n Association.prototype.reset = function () {\n var views = getViews(this.context.view);\n each(views, function (v) {\n clearHighlight(v);\n });\n };\n return Association;\n}(Action));\nregisterAction('association', Association);\n/**\n * 相邻 view 的 active 联动(相同维值的 tooltip 联动)\n */\nregisterInteraction('association-active', {\n start: [{ trigger: 'element:mouseenter', action: 'association:active' }],\n end: [{ trigger: 'element:mouseleave', action: 'association:reset' }],\n});\n/**\n * 相邻 view 的 active 联动(相同维值的 tooltip 联动)\n */\nregisterInteraction('association-selected', {\n start: [{ trigger: 'element:mouseenter', action: 'association:selected' }],\n end: [{ trigger: 'element:mouseleave', action: 'association:reset' }],\n});\n/**\n * 相邻 view 的 highlight 联动, 突出当前 element\n */\nregisterInteraction('association-highlight', {\n start: [{ trigger: 'element:mouseenter', action: 'association:highlight' }],\n end: [{ trigger: 'element:mouseleave', action: 'association:reset' }],\n});\n/**\n * 相邻 view 的 tooltip 联动,根据 groupField 进行关联(相同维值的 tooltip 联动)\n */\nregisterInteraction('association-tooltip', {\n start: [{ trigger: 'element:mousemove', action: 'association:showTooltip' }],\n end: [{ trigger: 'element:mouseleave', action: 'association:hideTooltip' }],\n});\n//# sourceMappingURL=association.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport './interactions';\n/**\n * 多图层图形,释放 G2 80% 的功能,可以用来做:\n * 1. 图层叠加的图:\n * - 折线 + 置信度区间迭代\n * - 嵌套饼图\n * - ...\n * 2. 图层划分的图\n * - 多维图\n * - 柱饼组合图\n * - ...\n */\nvar Mix = /** @class */ (function (_super) {\n __extends(Mix, _super);\n function Mix() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'mix';\n return _this;\n }\n /**\n * 获取适配器\n */\n Mix.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n return Mix;\n}(Plot));\nexport { Mix };\n//# sourceMappingURL=index.js.map","function defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n return x + c.x;\n}\n\nfunction maxY(children) {\n return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n var children;\n while (children = node.children) node = children[0];\n return node;\n}\n\nfunction leafRight(node) {\n var children;\n while (children = node.children) node = children[children.length - 1];\n return node;\n}\n\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = false;\n\n function cluster(root) {\n var previousNode,\n x = 0;\n\n // First walk, computing the initial x & y values.\n root.eachAfter(function(node) {\n var children = node.children;\n if (children) {\n node.x = meanX(children);\n node.y = maxY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n\n var left = leafLeft(root),\n right = leafRight(root),\n x0 = left.x - separation(left, right) / 2,\n x1 = right.x + separation(right, left) / 2;\n\n // Second walk, normalizing x & y to the desired size.\n return root.eachAfter(nodeSize ? function(node) {\n node.x = (node.x - root.x) * dx;\n node.y = (root.y - node.y) * dy;\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * dx;\n node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n });\n }\n\n cluster.separation = function(x) {\n return arguments.length ? (separation = x, cluster) : separation;\n };\n\n cluster.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n };\n\n cluster.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n };\n\n return cluster;\n}\n","import {required} from \"./accessors.js\";\nimport {Node, computeHeight} from \"./hierarchy/index.js\";\n\nvar preroot = {depth: -1},\n ambiguous = {};\n\nfunction defaultId(d) {\n return d.id;\n}\n\nfunction defaultParentId(d) {\n return d.parentId;\n}\n\nexport default function() {\n var id = defaultId,\n parentId = defaultParentId;\n\n function stratify(data) {\n var nodes = Array.from(data),\n n = nodes.length,\n d,\n i,\n root,\n parent,\n node,\n nodeId,\n nodeKey,\n nodeByKey = new Map;\n\n for (i = 0; i < n; ++i) {\n d = nodes[i], node = nodes[i] = new Node(d);\n if ((nodeId = id(d, i, data)) != null && (nodeId += \"\")) {\n nodeKey = node.id = nodeId;\n nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node);\n }\n if ((nodeId = parentId(d, i, data)) != null && (nodeId += \"\")) {\n node.parent = nodeId;\n }\n }\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (nodeId = node.parent) {\n parent = nodeByKey.get(nodeId);\n if (!parent) throw new Error(\"missing: \" + nodeId);\n if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n if (parent.children) parent.children.push(node);\n else parent.children = [node];\n node.parent = parent;\n } else {\n if (root) throw new Error(\"multiple roots\");\n root = node;\n }\n }\n\n if (!root) throw new Error(\"no root\");\n root.parent = preroot;\n root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n root.parent = null;\n if (n > 0) throw new Error(\"cycle\");\n\n return root;\n }\n\n stratify.id = function(x) {\n return arguments.length ? (id = required(x), stratify) : id;\n };\n\n stratify.parentId = function(x) {\n return arguments.length ? (parentId = required(x), stratify) : parentId;\n };\n\n return stratify;\n}\n","import {Node} from \"./hierarchy/index.js\";\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.’s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n\n return root;\n }\n\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n i, n = nodes.length,\n sum, sums = new Array(n + 1);\n\n for (sums[0] = sum = i = 0; i < n; ++i) {\n sums[i + 1] = sum += nodes[i].value;\n }\n\n partition(0, n, parent.value, x0, y0, x1, y1);\n\n function partition(i, j, value, x0, y0, x1, y1) {\n if (i >= j - 1) {\n var node = nodes[i];\n node.x0 = x0, node.y0 = y0;\n node.x1 = x1, node.y1 = y1;\n return;\n }\n\n var valueOffset = sums[i],\n valueTarget = (value / 2) + valueOffset,\n k = i + 1,\n hi = j - 1;\n\n while (k < hi) {\n var mid = k + hi >>> 1;\n if (sums[mid] < valueTarget) k = mid + 1;\n else hi = mid;\n }\n\n if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n var valueLeft = sums[k] - valueOffset,\n valueRight = value - valueLeft;\n\n if ((x1 - x0) > (y1 - y0)) {\n var xk = value ? (x0 * valueRight + x1 * valueLeft) / value : x1;\n partition(i, k, valueLeft, x0, y0, xk, y1);\n partition(k, j, valueRight, xk, y0, x1, y1);\n } else {\n var yk = value ? (y0 * valueRight + y1 * valueLeft) / value : y1;\n partition(i, k, valueLeft, x0, y0, x1, yk);\n partition(k, j, valueRight, x0, yk, x1, y1);\n }\n }\n}\n","import dice from \"./dice.js\";\nimport slice from \"./slice.js\";\n\nexport default function(parent, x0, y0, x1, y1) {\n (parent.depth & 1 ? slice : dice)(parent, x0, y0, x1, y1);\n}\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\nimport {phi, squarifyRatio} from \"./squarify.js\";\n\nexport default (function custom(ratio) {\n\n function resquarify(parent, x0, y0, x1, y1) {\n if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n var rows,\n row,\n nodes,\n i,\n j = -1,\n n,\n m = rows.length,\n value = parent.value;\n\n while (++j < m) {\n row = rows[j], nodes = row.children;\n for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += (y1 - y0) * row.value / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += (x1 - x0) * row.value / value : x1, y1);\n value -= row.value;\n }\n } else {\n parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n rows.ratio = ratio;\n }\n }\n\n resquarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return resquarify;\n})(phi);\n","/**\n * 在 Chart 中查找特定 id 的子 View\n * @param chart\n * @param id\n */\nexport function findViewById(chart, id) {\n return chart.views.find(function (view) { return view.id === id; });\n}\n/**\n * 获取同 view 同一级的所有 views\n * @param view 当前 view\n * @returns 同一级的 views\n * @ignore\n */\nexport function getViews(view) {\n var parent = view.parent;\n return parent ? parent.views : [];\n}\n/**\n * 获取同 view 同一级的 views,不包括自身\n * @param view 当前 view\n * @returns 同一级的 views\n * @ignore\n */\nexport function getSiblingViews(view) {\n return getViews(view).filter(function (sub) { return sub !== view; });\n}\n//# sourceMappingURL=view.js.map","import { Mix } from './plots/mix';\n/** 实验室图表所处的阶段 */\nexport var Stage;\n(function (Stage) {\n Stage[\"DEV\"] = \"DEV\";\n Stage[\"BETA\"] = \"BETA\";\n Stage[\"STABLE\"] = \"STABLE\";\n})(Stage || (Stage = {}));\n/**\n * 不同阶段打印一些消息给开发者\n * @param stage\n */\nexport function notice(stage, plotType) {\n console.warn(stage === Stage.DEV\n ? \"Plot '\" + plotType + \"' is in DEV stage, just give us issues.\"\n : stage === Stage.BETA\n ? \"Plot '\" + plotType + \"' is in BETA stage, DO NOT use it in production env.\"\n : stage === Stage.STABLE\n ? \"Plot '\" + plotType + \"' is in STABLE stage, import it by \\\"import { \" + plotType + \" } from '@antv/g2plot'\\\".\"\n : 'invalid Stage type.');\n}\n/**\n * 实验室图表,实验室中的图表分成不同的阶段。\n */\nvar Lab = /** @class */ (function () {\n function Lab() {\n }\n Object.defineProperty(Lab, \"MultiView\", {\n get: function () {\n notice(Stage.STABLE, 'MultiView');\n return Mix;\n },\n enumerable: false,\n configurable: true\n });\n return Lab;\n}());\nexport { Lab };\n//# sourceMappingURL=lab.js.map","import { get } from '@antv/util';\n/**\n * 获得 tooltip 的映射信息\n * @param tooltip\n * @param defaultFields\n */\nexport function getTooltipMapping(tooltip, defaultFields) {\n if (tooltip === false) {\n return {\n fields: false,\n };\n }\n var fields = get(tooltip, 'fields');\n var formatter = get(tooltip, 'formatter');\n if (formatter && !fields) {\n fields = defaultFields;\n }\n return {\n fields: fields,\n formatter: formatter,\n };\n}\n//# sourceMappingURL=tooltip.js.map","import { isNumber } from '@antv/util';\n/**\n * 转化率的计算方式\n * @param prev\n * @param next\n */\nexport function conversionTagFormatter(prev, next) {\n if (!isNumber(prev) || !isNumber(next)) {\n return '-';\n }\n if (prev === next) {\n return '100%';\n }\n if (prev === 0) {\n return '∞';\n }\n if (next === 0) {\n return '-∞';\n }\n return ((100 * next) / prev).toFixed(2) + \"%\";\n}\n//# sourceMappingURL=conversion.js.map","export var FIRST_AXES_VIEW = 'first-axes-view';\nexport var SECOND_AXES_VIEW = 'second-axes-view';\n/** 对称条形图的分组 key 值 */\nexport var SERIES_FIELD_KEY = 'series-field-key';\n//# sourceMappingURL=constant.js.map","import { groupBy } from '@antv/util';\n/**\n * bidirectional-bar 处理数据, 通过 SERIES_FIELD_KEY 字段分成左右数据\n * @param xField\n * @param yField\n * @param data\n */\nexport function transformData(xField, yField, seriesField, data, reverse) {\n var hopeData = [];\n yField.forEach(function (d) {\n data.forEach(function (k) {\n var _a;\n var obj = (_a = {},\n _a[xField] = k[xField],\n _a[seriesField] = d,\n _a[d] = k[d],\n _a);\n hopeData.push(obj);\n });\n });\n var groupData = Object.values(groupBy(hopeData, seriesField));\n var _a = groupData[0], data1 = _a === void 0 ? [] : _a, _b = groupData[1], data2 = _b === void 0 ? [] : _b;\n return reverse ? [data1.reverse(), data2.reverse()] : [data1, data2];\n}\n/**\n * 是否横向,默认空为横向\n * @param layout\n */\nexport function isHorizontal(layout) {\n return layout !== 'vertical';\n}\n/**\n * 多 view 进行同步 padding 的自定义逻辑\n * @param chart\n * @param views\n * @param p\n */\nexport function syncViewPadding(chart, views, p) {\n var v1 = views[0], v2 = views[1];\n var p1 = v1.autoPadding;\n var p2 = v2.autoPadding;\n var _a = chart.__axisPosition, layout = _a.layout, position = _a.position;\n // 目前只能根据布局的比例来判断 layout\n if (isHorizontal(layout) && position === 'top') {\n /**\n * 保证 v1 的 left 和 v2 right 的间隔相等,因为 v1 有轴\n * position top 即为 v1 左边,中间间距设置就为 0\n */\n v1.autoPadding = p.instance(p1.top, 0, p1.bottom, p1.left);\n v2.autoPadding = p.instance(p2.top, p1.left, p2.bottom, 0);\n }\n if (isHorizontal(layout) && position === 'bottom') {\n /**\n * 保证 v1 的 left 和 v2 right 的间隔相等,因为 v1 有轴\n * position bottom 即为 v1 的右边,v1 right = right / 2 v2 left = right / 2\n * + 5 是为了 让那个轴不要太贴近了,更好看\n */\n v1.autoPadding = p.instance(p1.top, p1.right / 2 + 5, p1.bottom, p1.left);\n v2.autoPadding = p.instance(p2.top, p2.right, p2.bottom, p1.right / 2 + 5);\n }\n if (!isHorizontal(layout) && position === 'bottom') {\n /**\n * 保证 v1 的 left 和 v2 left 的间隔相等 left 取最大值\n * position bottom 即为 v1 下边,v1 bottom = bottom / 2 v2 top = bottom / 2\n * + 5 是为了 让那个轴不要太贴近了,更好看\n */\n var left = p1.left >= p2.left ? p1.left : p2.left;\n v1.autoPadding = p.instance(p1.top, p1.right, p1.bottom / 2 + 5, left);\n v2.autoPadding = p.instance(p1.bottom / 2 + 5, p2.right, p2.bottom, left);\n }\n // 垂直状态,不建议设置position 为 top, 还是做个兼容处理\n if (!isHorizontal(layout) && position === 'top') {\n var left = p1.left >= p2.left ? p1.left : p2.left;\n v1.autoPadding = p.instance(p1.top, p1.right, 0, left);\n v2.autoPadding = p.instance(0, p2.right, p1.top, left);\n }\n}\n//# sourceMappingURL=utils.js.map","import { __assign, __rest } from \"tslib\";\nimport { get, keys } from '@antv/util';\nimport { tooltip, interaction as commonInteraction, animation as commonAnimation, theme as commonTheme, limitInPlot as commonLimitInPlot, scale, } from '../../adaptor/common';\nimport { interval } from '../../adaptor/geometries';\nimport { flow, findViewById, findGeometry, transformLabel, deepAssign } from '../../utils';\nimport { FIRST_AXES_VIEW, SECOND_AXES_VIEW, SERIES_FIELD_KEY } from './constant';\nimport { isHorizontal, transformData } from './utils';\n/**\n * geometry 处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var data = options.data, xField = options.xField, yField = options.yField, color = options.color, barStyle = options.barStyle, widthRatio = options.widthRatio, legend = options.legend, layout = options.layout;\n // 处理数据\n var groupData = transformData(xField, yField, SERIES_FIELD_KEY, data, isHorizontal(layout));\n // 在创建子 view 执行后不行,需要在前面处理 legend\n if (legend) {\n chart.legend(SERIES_FIELD_KEY, legend);\n }\n else if (legend === false) {\n chart.legend(false);\n }\n // 创建 view\n var firstView;\n var secondView;\n var firstViewData = groupData[0], secondViewData = groupData[1];\n // 横向\n if (isHorizontal(layout)) {\n firstView = chart.createView({\n region: {\n start: { x: 0, y: 0 },\n end: { x: 0.5, y: 1 },\n },\n id: FIRST_AXES_VIEW,\n });\n firstView.coordinate().transpose().reflect('x');\n secondView = chart.createView({\n region: {\n start: { x: 0.5, y: 0 },\n end: { x: 1, y: 1 },\n },\n id: SECOND_AXES_VIEW,\n });\n secondView.coordinate().transpose();\n // @说明: 测试发现,横向因为轴的反转,需要数据也反转,不然会图形渲染是反的(翻转操作进入到 transform 中处理)\n firstView.data(firstViewData);\n secondView.data(secondViewData);\n }\n else {\n // 纵向\n firstView = chart.createView({\n region: {\n start: { x: 0, y: 0 },\n end: { x: 1, y: 0.5 },\n },\n id: FIRST_AXES_VIEW,\n });\n secondView = chart.createView({\n region: {\n start: { x: 0, y: 0.5 },\n end: { x: 1, y: 1 },\n },\n id: SECOND_AXES_VIEW,\n });\n secondView.coordinate().reflect('y');\n firstView.data(firstViewData);\n secondView.data(secondViewData);\n }\n var left = deepAssign({}, params, {\n chart: firstView,\n options: {\n widthRatio: widthRatio,\n xField: xField,\n yField: yField[0],\n seriesField: SERIES_FIELD_KEY,\n interval: {\n color: color,\n style: barStyle,\n },\n },\n });\n interval(left);\n var right = deepAssign({}, params, {\n chart: secondView,\n options: {\n xField: xField,\n yField: yField[1],\n seriesField: SERIES_FIELD_KEY,\n widthRatio: widthRatio,\n interval: {\n color: color,\n style: barStyle,\n },\n },\n });\n interval(right);\n return params;\n}\n/**\n * meta 配置\n * - 对称条形图对数据进行了处理,通过 SERIES_FIELD_KEY 来对两条 yField 数据进行分类\n * @param params\n */\nfunction meta(params) {\n var _a, _b, _c;\n var options = params.options, chart = params.chart;\n var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n var firstView = findViewById(chart, FIRST_AXES_VIEW);\n var secondView = findViewById(chart, SECOND_AXES_VIEW);\n var aliasMap = {};\n keys((options === null || options === void 0 ? void 0 : options.meta) || {}).map(function (metaKey) {\n if (get(options === null || options === void 0 ? void 0 : options.meta, [metaKey, 'alias'])) {\n aliasMap[metaKey] = options.meta[metaKey].alias;\n }\n });\n chart.scale((_a = {},\n _a[SERIES_FIELD_KEY] = {\n sync: true,\n formatter: function (v) {\n return get(aliasMap, v, v);\n },\n },\n _a));\n scale((_b = {},\n _b[xField] = xAxis,\n _b[yField[0]] = yAxis[yField[0]],\n _b))(deepAssign({}, params, { chart: firstView }));\n scale((_c = {},\n _c[xField] = xAxis,\n _c[yField[1]] = yAxis[yField[1]],\n _c))(deepAssign({}, params, { chart: secondView }));\n return params;\n}\n/**\n * axis 配置\n * @param params\n */\nfunction axis(params) {\n var chart = params.chart, options = params.options;\n var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField, layout = options.layout;\n var firstView = findViewById(chart, FIRST_AXES_VIEW);\n var secondView = findViewById(chart, SECOND_AXES_VIEW);\n // 第二个 view axis 始终隐藏; 注意 bottom 的时候,只隐藏 label,其他共用配置\n // @ts-ignore\n if ((xAxis === null || xAxis === void 0 ? void 0 : xAxis.position) === 'bottom') {\n // fixme 直接设置 label: null 会导致 tickLine 无法显示\n secondView.axis(xField, __assign(__assign({}, xAxis), { label: { formatter: function () { return ''; } } }));\n }\n else {\n secondView.axis(xField, false);\n }\n // 为 false 则是不显示 firstView 轴\n if (xAxis === false) {\n firstView.axis(xField, false);\n }\n else {\n firstView.axis(xField, __assign({ \n // 不同布局 firstView 的坐标轴显示位置\n position: isHorizontal(layout) ? 'top' : 'bottom' }, xAxis));\n }\n if (yAxis === false) {\n firstView.axis(yField[0], false);\n secondView.axis(yField[1], false);\n }\n else {\n firstView.axis(yField[0], yAxis[yField[0]]);\n secondView.axis(yField[1], yAxis[yField[1]]);\n }\n /**\n * 这个注入,主要是在syncViewPadding时候拿到相对应的配置:布局和轴的位置\n * TODO 之后希望 g2 View 对象可以开放 setter 可以设置一些需要的东西\n */\n //@ts-ignore\n chart.__axisPosition = {\n position: firstView.getOptions().axes[xField].position,\n layout: layout,\n };\n return params;\n}\n/**\n * interaction 配置\n * @param params\n */\nexport function interaction(params) {\n var chart = params.chart;\n commonInteraction(deepAssign({}, params, { chart: findViewById(chart, FIRST_AXES_VIEW) }));\n commonInteraction(deepAssign({}, params, { chart: findViewById(chart, SECOND_AXES_VIEW) }));\n return params;\n}\n/**\n * limitInPlot\n * @param params\n */\nexport function limitInPlot(params) {\n var chart = params.chart, options = params.options;\n var yField = options.yField, yAxis = options.yAxis;\n commonLimitInPlot(deepAssign({}, params, {\n chart: findViewById(chart, FIRST_AXES_VIEW),\n options: {\n yAxis: yAxis[yField[0]],\n },\n }));\n commonLimitInPlot(deepAssign({}, params, {\n chart: findViewById(chart, SECOND_AXES_VIEW),\n options: {\n yAxis: yAxis[yField[1]],\n },\n }));\n return params;\n}\n/**\n * theme\n * @param params\n */\nexport function theme(params) {\n var chart = params.chart;\n commonTheme(deepAssign({}, params, { chart: findViewById(chart, FIRST_AXES_VIEW) }));\n commonTheme(deepAssign({}, params, { chart: findViewById(chart, SECOND_AXES_VIEW) }));\n return params;\n}\n/**\n * animation\n * @param params\n */\nexport function animation(params) {\n var chart = params.chart;\n commonAnimation(deepAssign({}, params, { chart: findViewById(chart, FIRST_AXES_VIEW) }));\n commonAnimation(deepAssign({}, params, { chart: findViewById(chart, SECOND_AXES_VIEW) }));\n return params;\n}\n/**\n * label 配置 (1. 设置 offset 偏移量默认值 2. leftView 偏移量需要 *= -1)\n * @param params\n */\nfunction label(params) {\n var _this = this;\n var _a, _b;\n var chart = params.chart, options = params.options;\n var label = options.label, yField = options.yField, layout = options.layout;\n var firstView = findViewById(chart, FIRST_AXES_VIEW);\n var secondView = findViewById(chart, SECOND_AXES_VIEW);\n var leftGeometry = findGeometry(firstView, 'interval');\n var rightGeometry = findGeometry(secondView, 'interval');\n if (!label) {\n leftGeometry.label(false);\n rightGeometry.label(false);\n }\n else {\n var callback = label.callback, cfg_1 = __rest(label, [\"callback\"]);\n /** ---- 设置默认配置 ---- */\n // 默认居中\n if (!cfg_1.position) {\n cfg_1.position = 'middle';\n }\n if (cfg_1.offset === undefined) {\n cfg_1.offset = 2;\n }\n /** ---- leftView label 设置 ---- */\n var leftLabelCfg = __assign({}, cfg_1);\n if (isHorizontal(layout)) {\n // 设置 textAlign 默认值\n var textAlign = ((_a = leftLabelCfg.style) === null || _a === void 0 ? void 0 : _a.textAlign) || (cfg_1.position === 'middle' ? 'center' : 'left');\n cfg_1.style = deepAssign({}, cfg_1.style, { textAlign: textAlign });\n var textAlignMap = { left: 'right', right: 'left', center: 'center' };\n leftLabelCfg.style = deepAssign({}, leftLabelCfg.style, { textAlign: textAlignMap[textAlign] });\n }\n else {\n var positionMap_1 = { top: 'bottom', bottom: 'top', middle: 'middle' };\n if (typeof cfg_1.position === 'string') {\n cfg_1.position = positionMap_1[cfg_1.position];\n }\n else if (typeof cfg_1.position === 'function') {\n cfg_1.position = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return positionMap_1[cfg_1.position.apply(_this, args)];\n };\n }\n // 设置 textBaseline 默认值\n var textBaseline = ((_b = leftLabelCfg.style) === null || _b === void 0 ? void 0 : _b.textBaseline) || 'bottom';\n leftLabelCfg.style = deepAssign({}, leftLabelCfg.style, { textBaseline: textBaseline });\n var textBaselineMap = { top: 'bottom', bottom: 'top', middle: 'middle' };\n cfg_1.style = deepAssign({}, cfg_1.style, { textBaseline: textBaselineMap[textBaseline] });\n }\n leftGeometry.label({\n fields: [yField[0]],\n callback: callback,\n cfg: transformLabel(leftLabelCfg),\n });\n rightGeometry.label({\n fields: [yField[1]],\n callback: callback,\n cfg: transformLabel(cfg_1),\n });\n }\n return params;\n}\n/**\n * 对称条形图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return flow(geometry, meta, axis, limitInPlot, theme, label, tooltip, interaction, animation)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __extends } from \"tslib\";\nimport { VIEW_LIFE_CIRCLE, Event } from '@antv/g2';\nimport { Plot } from '../../core/plot';\nimport { deepAssign, findViewById } from '../../utils';\nimport { adaptor } from './adaptor';\nimport { syncViewPadding, transformData, isHorizontal } from './utils';\nimport { SERIES_FIELD_KEY, FIRST_AXES_VIEW, SECOND_AXES_VIEW } from './constant';\nvar BidirectionalBar = /** @class */ (function (_super) {\n __extends(BidirectionalBar, _super);\n function BidirectionalBar() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'bidirectional-bar';\n return _this;\n }\n /**\n * 获取 默认配置项\n * 供外部使用\n */\n BidirectionalBar.getDefaultOptions = function () {\n return deepAssign({}, _super.getDefaultOptions.call(this), {\n syncViewPadding: syncViewPadding,\n });\n };\n /**\n * @override\n */\n BidirectionalBar.prototype.changeData = function (data) {\n if (data === void 0) { data = []; }\n this.chart.emit(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, Event.fromData(this.chart, VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, null));\n // 更新options\n this.updateOption({ data: data });\n var _a = this.options, xField = _a.xField, yField = _a.yField, layout = _a.layout;\n // 处理数据\n var groupData = transformData(xField, yField, SERIES_FIELD_KEY, data, isHorizontal(layout));\n var firstViewData = groupData[0], secondViewData = groupData[1];\n var firstView = findViewById(this.chart, FIRST_AXES_VIEW);\n var secondView = findViewById(this.chart, SECOND_AXES_VIEW);\n // 更新对应view的data\n firstView.data(firstViewData);\n secondView.data(secondViewData);\n // 重新渲染\n this.chart.render(true);\n this.chart.emit(VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, Event.fromData(this.chart, VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, null));\n };\n BidirectionalBar.prototype.getDefaultOptions = function () {\n return BidirectionalBar.getDefaultOptions();\n };\n /**\n * 获取对称条形图的适配器\n */\n BidirectionalBar.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n /** 对称条形图分类字段 */\n BidirectionalBar.SERIES_FIELD_KEY = SERIES_FIELD_KEY;\n return BidirectionalBar;\n}(Plot));\nexport { BidirectionalBar };\n//# sourceMappingURL=index.js.map","import { __assign } from \"tslib\";\nimport { get } from '@antv/util';\nexport var X_FIELD = 'x';\nexport var Y_FIELD = 'y';\nexport var DEFAULT_TOOLTIP_OPTIONS = {\n showTitle: false,\n shared: true,\n showMarkers: false,\n customContent: function (x, data) { return \"\" + get(data, [0, 'data', 'y'], 0); },\n containerTpl: '
',\n itemTpl: '{value}',\n domStyles: {\n 'g2-tooltip': {\n padding: '2px 4px',\n fontSize: '10px',\n },\n },\n showCrosshairs: true,\n crosshairs: {\n type: 'x',\n },\n};\n/**\n * 默认配置项\n */\nexport var DEFAULT_OPTIONS = {\n appendPadding: 2,\n tooltip: __assign({}, DEFAULT_TOOLTIP_OPTIONS),\n animation: {},\n};\n//# sourceMappingURL=constants.js.map","import { __extends } from \"tslib\";\nimport { deepAssign } from '../utils';\nimport { Plot } from '../core/plot';\n/**\n * 给 G2Plot 提供非常简单的开放开发的机制。目的是能够让社区和业务上自己基于 G2Plot 开发自己的定制图表库。主要分成几类图表:\n * 1. 领域专业的图表,内部同学因为没有场景,不一定能做的完善。\n * 2. 定制业务的图表,不具备通用性\n * 3. 趣味性的可视化组件\n * 然后官方可以根据社区的情况,可以进行一些官方推荐和采纳。\n *\n * 如果使用?\n *\n * ```ts\n * import { P } from '@antv/g2plot';\n * import { GeoWorldMap, GeoWorldMapOptions } from 'g2plot-geo-world-map';\n *\n * const plot = new P('container', {\n * geoJson: '',\n * longitude: '',\n * latitude: '',\n * }, GeoWorldMap, defaultOptions);\n *\n * plot.render();\n * ```\n */\nvar P = /** @class */ (function (_super) {\n __extends(P, _super);\n /**\n * 相比普通图表增加 adaptor 参数。\n * @param container\n * @param options\n * @param adaptor\n * @param defaultOptions\n */\n function P(container, options, adaptor, defaultOptions) {\n var _this = _super.call(this, container, deepAssign({}, defaultOptions, options)) || this;\n /** 统一为 any plot */\n _this.type = 'g2-plot';\n _this.defaultOptions = defaultOptions;\n _this.adaptor = adaptor;\n return _this;\n }\n /**\n * 实现父类方法,直接使用传入的\n */\n P.prototype.getDefaultOptions = function () {\n return this.defaultOptions;\n };\n /**\n * 实现父类方法,直接使用传入的\n */\n P.prototype.getSchemaAdaptor = function () {\n return this.adaptor;\n };\n return P;\n}(Plot));\nexport { P };\n//# sourceMappingURL=index.js.map","export var ZH_CN_LOCALE = {\n locale: 'zh-CN',\n // 通用\n general: {\n increase: '增加',\n decrease: '减少',\n root: '初始',\n },\n // 按照图表组件\n /** 中心文本 */\n statistic: {\n total: '总计',\n },\n /** 转化率组件 */\n conversionTag: {\n label: '转化率',\n },\n legend: {},\n tooltip: {},\n slider: {},\n scrollbar: {},\n // 按照图表类型\n waterfall: {\n total: '总计',\n },\n};\n//# sourceMappingURL=zh_CN.js.map","/**\n * Simplified from https://github.com/zertosh/invariant.\n */\nimport { __spreadArrays } from \"tslib\";\nexport var LEVEL;\n(function (LEVEL) {\n LEVEL[\"ERROR\"] = \"error\";\n LEVEL[\"WARN\"] = \"warn\";\n LEVEL[\"INFO\"] = \"log\";\n})(LEVEL || (LEVEL = {}));\nvar BRAND = 'AntV/G2Plot';\n/**\n * 获取错误消息\n * @param format\n * @param args\n */\nfunction getMessage(format) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n var argIndex = 0;\n return BRAND + \": \" + format.replace(/%s/g, function () { return \"\" + args[argIndex++]; });\n}\n/**\n * invariant error\n * @param condition\n * @param format\n * @param args\n */\nexport function invariant(condition, format) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n if (!condition) {\n var error = new Error(getMessage.apply(void 0, __spreadArrays([format], args)));\n error.name = BRAND;\n // error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n/**\n * 打印语句\n * @param level\n * @param condition\n * @param format\n * @param args\n */\nexport function log(level, condition, format) {\n var args = [];\n for (var _i = 3; _i < arguments.length; _i++) {\n args[_i - 3] = arguments[_i];\n }\n if (!condition) {\n console[level](getMessage.apply(void 0, __spreadArrays([format], args)));\n }\n}\n//# sourceMappingURL=invariant.js.map","import { clamp, get, size } from '@antv/util';\nimport { RANGE_VALUE, RANGE_TYPE, PERCENT } from './constants';\n/**\n * 将 range 生成为 data 数据\n * @param range\n * @param key\n * @returns {GaugeRangeData}\n */\nexport function processRangeData(range, percent) {\n return (range\n // 映射为 stack 的数据\n .map(function (r, idx) {\n var _a;\n return _a = {}, _a[RANGE_VALUE] = r - (range[idx - 1] || 0), _a[RANGE_TYPE] = \"\" + idx, _a[PERCENT] = percent, _a;\n })\n // 去掉 0 的数据\n .filter(function (d) { return !!d[RANGE_VALUE]; }));\n}\n/**\n * 获取 仪表盘 指针数据\n * @param percent\n */\nexport function getIndicatorData(percent) {\n var _a;\n return [(_a = {}, _a[PERCENT] = clamp(percent, 0, 1), _a)];\n}\n/**\n * 获取仪表盘 表盘弧形数据\n * @param percent\n * @param range\n */\nexport function getRangeData(percent, range) {\n var ticks = get(range, ['ticks'], []);\n var clampTicks = size(ticks) ? ticks : [0, clamp(percent, 0, 1), 1];\n return processRangeData(clampTicks, percent);\n}\n//# sourceMappingURL=utils.js.map","import { isNumber, isArray } from '@antv/util';\n/**\n * 把 padding 转换成统一的数组写法\n * @param padding\n */\nexport function normalPadding(padding) {\n if (isNumber(padding)) {\n return [padding, padding, padding, padding];\n }\n if (isArray(padding)) {\n var length_1 = padding.length;\n if (length_1 === 1) {\n return [padding[0], padding[0], padding[0], padding[0]];\n }\n if (length_1 === 2) {\n return [padding[0], padding[1], padding[0], padding[1]];\n }\n if (length_1 === 3) {\n return [padding[0], padding[1], padding[2], padding[1]];\n }\n if (length_1 === 4) {\n return padding;\n }\n }\n return [0, 0, 0, 0];\n}\n/**\n * 获取调整的 appendPadding\n */\nexport function getAdjustAppendPadding(padding, position, append) {\n if (position === void 0) { position = 'bottom'; }\n if (append === void 0) { append = 25; }\n var currentAppendPadding = normalPadding(padding);\n var PADDING = [\n position.startsWith('top') ? append : 0,\n position.startsWith('right') ? append : 0,\n position.startsWith('bottom') ? append : 0,\n position.startsWith('left') ? append : 0,\n ];\n return [\n currentAppendPadding[0] + PADDING[0],\n currentAppendPadding[1] + PADDING[1],\n currentAppendPadding[2] + PADDING[2],\n currentAppendPadding[3] + PADDING[3],\n ];\n}\n/**\n * 根据图表的 padding 和 appendPadding 计算出图表的最终 padding\n * @param array\n */\nexport function resolveAllPadding(paddings) {\n // 先把数组里的 padding 全部转换成 normal\n var normalPaddings = paddings.map(function (item) { return normalPadding(item); });\n var finalPadding = [0, 0, 0, 0];\n if (normalPaddings.length > 0) {\n finalPadding = finalPadding.map(function (item, index) {\n // 有几个 padding 数组就遍历几次,累加\n normalPaddings.forEach(function (d, i) {\n item += normalPaddings[i][index];\n });\n return item;\n });\n }\n return finalPadding;\n}\n//# sourceMappingURL=padding.js.map","import { each } from '@antv/util';\n/**\n * @file 全局的一些变量定义:含国际化、主题...\n */\nexport var GLOBAL = {\n /** 全局语言 */\n locale: 'en-US',\n};\n/**\n * 全局变量设置\n * @param key\n * @param value\n */\nexport function setGlobal(datum) {\n each(datum, function (v, k) { return (GLOBAL[k] = v); });\n}\n//# sourceMappingURL=global.js.map","import { __rest } from \"tslib\";\nimport { get } from '@antv/util';\nimport { deepAssign, findGeometry } from '../../utils';\nimport { flow, transformLabel } from '../../utils';\nimport { tooltip, interaction, animation, theme, scale, annotation, state, pattern } from '../../adaptor/common';\nimport { geometry as geometryAdaptor } from '../../adaptor/geometries/base';\nimport { getTooltipMapping } from '../../utils/tooltip';\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var data = options.data, type = options.type, xField = options.xField, yField = options.yField, colorField = options.colorField, sizeField = options.sizeField, sizeRatio = options.sizeRatio, shape = options.shape, color = options.color, tooltip = options.tooltip, heatmapStyle = options.heatmapStyle;\n chart.data(data);\n var geometryType = 'polygon';\n if (type === 'density') {\n geometryType = 'heatmap';\n }\n var _a = getTooltipMapping(tooltip, [xField, yField, colorField]), fields = _a.fields, formatter = _a.formatter;\n /**\n * The ratio between the actual size and the max available size, must be in range `[0,1]`.\n *\n * If the `sizeRatio` attribute is undefined or it exceeds the range,\n * `checkedSizeRatio` would be set to 1 as default.\n */\n var checkedSizeRatio = 1;\n if (sizeRatio || sizeRatio === 0) {\n if (!shape && !sizeField) {\n console.warn('sizeRatio is not in effect: Must define shape or sizeField first');\n }\n else if (sizeRatio < 0 || sizeRatio > 1) {\n console.warn('sizeRatio is not in effect: It must be a number in [0,1]');\n }\n else {\n checkedSizeRatio = sizeRatio;\n }\n }\n geometryAdaptor(deepAssign({}, params, {\n options: {\n type: geometryType,\n colorField: colorField,\n tooltipFields: fields,\n shapeField: sizeField || '',\n label: undefined,\n mapping: {\n tooltip: formatter,\n shape: shape &&\n (sizeField\n ? function (dautm) {\n var field = data.map(function (row) { return row[sizeField]; });\n var min = Math.min.apply(Math, field);\n var max = Math.max.apply(Math, field);\n return [shape, (get(dautm, sizeField) - min) / (max - min), checkedSizeRatio];\n }\n : function () { return [shape, 1, checkedSizeRatio]; }),\n color: color || (colorField && chart.getTheme().sequenceColors.join('-')),\n style: heatmapStyle,\n },\n },\n }));\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\nfunction meta(params) {\n var _a;\n var options = params.options;\n var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n return flow(scale((_a = {},\n _a[xField] = xAxis,\n _a[yField] = yAxis,\n _a)))(params);\n}\n/**\n * axis 配置\n * @param params\n */\nfunction axis(params) {\n var chart = params.chart, options = params.options;\n var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;\n // 为 false 则是不显示轴\n if (xAxis === false) {\n chart.axis(xField, false);\n }\n else {\n chart.axis(xField, xAxis);\n }\n if (yAxis === false) {\n chart.axis(yField, false);\n }\n else {\n chart.axis(yField, yAxis);\n }\n return params;\n}\n/**\n * legend 配置\n * @param params\n */\nfunction legend(params) {\n var chart = params.chart, options = params.options;\n var legend = options.legend, colorField = options.colorField, sizeField = options.sizeField, sizeLegend = options.sizeLegend;\n /** legend 不为 false, 则展示图例, 优先展示 color 分类图例 */\n var showLegend = legend !== false;\n if (colorField) {\n chart.legend(colorField, showLegend ? legend : false);\n }\n // 旧版本: 有 sizeField 就有 sizeLegend. 这里默认继承下 legend 配置\n if (sizeField) {\n chart.legend(sizeField, sizeLegend === undefined ? legend : sizeLegend);\n }\n /** 默认没有 sizeField,则隐藏连续图例 */\n if (!showLegend && !sizeLegend) {\n chart.legend(false);\n }\n return params;\n}\n/**\n * fixme 后续确认下,数据标签的逻辑为啥和通用的不一致\n * 数据标签\n * @param params\n */\nfunction label(params) {\n var chart = params.chart, options = params.options;\n var label = options.label, colorField = options.colorField, type = options.type;\n var geometry = findGeometry(chart, type === 'density' ? 'heatmap' : 'polygon');\n if (!label) {\n geometry.label(false);\n }\n else if (colorField) {\n var callback = label.callback, cfg = __rest(label, [\"callback\"]);\n geometry.label({\n fields: [colorField],\n callback: callback,\n cfg: transformLabel(cfg),\n });\n }\n return params;\n}\n/**\n * 极坐标\n * @param params\n */\nfunction coordinate(params) {\n var chart = params.chart, options = params.options;\n var coordinate = options.coordinate, reflect = options.reflect;\n if (coordinate) {\n chart.coordinate({\n type: coordinate.type || 'rect',\n cfg: coordinate.cfg,\n });\n }\n if (reflect) {\n chart.coordinate().reflect(reflect);\n }\n return params;\n}\n/**\n * 热力图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n return flow(theme, pattern('heatmapStyle'), meta, coordinate, geometry, axis, legend, tooltip, label, annotation(), interaction, animation, state)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\n/**\n * 色块图默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n type: 'polygon',\n legend: false,\n coordinate: {\n type: 'rect',\n },\n xAxis: {\n tickLine: null,\n line: null,\n grid: {\n alignTick: false,\n line: {\n style: {\n lineWidth: 1,\n lineDash: null,\n stroke: '#f0f0f0',\n },\n },\n },\n },\n yAxis: {\n grid: {\n alignTick: false,\n line: {\n style: {\n lineWidth: 1,\n lineDash: null,\n stroke: '#f0f0f0',\n },\n },\n },\n },\n});\n//# sourceMappingURL=constant.js.map","import { __assign } from \"tslib\";\nimport { registerShape } from '@antv/g2';\nregisterShape('polygon', 'circle', {\n draw: function (cfg, group) {\n var _a, _b;\n var cx = cfg.x;\n var cy = cfg.y;\n var points = this.parsePoints(cfg.points);\n var width = Math.abs(points[2].x - points[1].x);\n var height = Math.abs(points[1].y - points[0].y);\n var maxRadius = Math.min(width, height) / 2;\n var value = Number(cfg.shape[1]);\n var sizeRatio = Number(cfg.shape[2]);\n var radiusRatio = Math.sqrt(sizeRatio);\n var radius = maxRadius * radiusRatio * Math.sqrt(value);\n var fill = ((_a = cfg.style) === null || _a === void 0 ? void 0 : _a.fill) || cfg.color || ((_b = cfg.defaultStyle) === null || _b === void 0 ? void 0 : _b.fill);\n var polygon = group.addShape('circle', {\n attrs: __assign(__assign(__assign({ x: cx, y: cy, r: radius }, cfg.defaultStyle), cfg.style), { fill: fill }),\n });\n return polygon;\n },\n});\n//# sourceMappingURL=circle.js.map","import { __assign } from \"tslib\";\nimport { registerShape } from '@antv/g2';\nregisterShape('polygon', 'square', {\n draw: function (cfg, group) {\n var _a, _b;\n var cx = cfg.x;\n var cy = cfg.y;\n var points = this.parsePoints(cfg.points);\n var width = Math.abs(points[2].x - points[1].x);\n var height = Math.abs(points[1].y - points[0].y);\n var maxSideLength = Math.min(width, height);\n var value = Number(cfg.shape[1]);\n var sizeRatio = Number(cfg.shape[2]);\n var lenRatio = Math.sqrt(sizeRatio);\n var sideLength = maxSideLength * lenRatio * Math.sqrt(value);\n var fill = ((_a = cfg.style) === null || _a === void 0 ? void 0 : _a.fill) || cfg.color || ((_b = cfg.defaultStyle) === null || _b === void 0 ? void 0 : _b.fill);\n var polygon = group.addShape('rect', {\n attrs: __assign(__assign(__assign({ x: cx - sideLength / 2, y: cy - sideLength / 2, width: sideLength, height: sideLength }, cfg.defaultStyle), cfg.style), { fill: fill }),\n });\n return polygon;\n },\n});\n//# sourceMappingURL=square.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\n// registered shapes\nimport './shapes/circle';\nimport './shapes/square';\nvar Heatmap = /** @class */ (function (_super) {\n __extends(Heatmap, _super);\n function Heatmap() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'heatmap';\n return _this;\n }\n /**\n * 获取 柱形图 默认配置项\n * 供外部使用\n */\n Heatmap.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n /**\n * 获取直方图的适配器\n */\n Heatmap.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n /**\n * 获取 色块图 默认配置\n */\n Heatmap.prototype.getDefaultOptions = function () {\n return Heatmap.getDefaultOptions();\n };\n return Heatmap;\n}(Plot));\nexport { Heatmap };\n//# sourceMappingURL=index.js.map","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n}\n","import { Plot } from '../../core/plot';\nimport { deepAssign } from '../../utils';\nexport var Y_FIELD = '$$stock-range$$';\nexport var TREND_FIELD = 'trend';\nexport var TREND_UP = 'up';\nexport var TREND_DOWN = 'down';\n/** tooltip 配置 */\nexport var DEFAULT_TOOLTIP_OPTIONS = {\n showMarkers: false,\n showCrosshairs: true,\n shared: true,\n crosshairs: {\n type: 'xy',\n follow: true,\n text: function (type, defaultContent, items) {\n var textContent;\n if (type === 'x') {\n var item = items[0];\n textContent = item ? item.title : defaultContent;\n }\n else {\n textContent = defaultContent;\n }\n return {\n position: type === 'y' ? 'start' : 'end',\n content: textContent,\n style: {\n fill: '#dfdfdf',\n },\n };\n },\n // 自定义 crosshairs textBackground 样式\n textBackground: {\n padding: [2, 4],\n style: {\n fill: '#666',\n },\n },\n },\n};\n/**\n * 散点图 默认配置项\n */\nexport var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), {\n // 设置默认图表 tooltips\n tooltip: DEFAULT_TOOLTIP_OPTIONS,\n interactions: [{ type: 'tooltip' }],\n legend: {\n position: 'top-left',\n },\n risingFill: '#ef5350',\n fallingFill: '#26a69a',\n});\n//# sourceMappingURL=constant.js.map","import { isArray, map } from '@antv/util';\nimport { TREND_FIELD, TREND_DOWN, TREND_UP, Y_FIELD } from './constant';\n/**\n * @desc 股票图数据处理\n * @param data\n * @param yField\n */\nexport function getStockData(data, yField) {\n return map(data, function (obj) {\n if (isArray(yField)) {\n var open_1 = yField[0], close_1 = yField[1], high = yField[2], low = yField[3];\n obj[TREND_FIELD] = obj[open_1] <= obj[close_1] ? TREND_UP : TREND_DOWN;\n obj[Y_FIELD] = [obj[open_1], obj[close_1], obj[high], obj[low]];\n }\n return obj;\n });\n}\n//# sourceMappingURL=utils.js.map","import { interaction, animation, theme, annotation, slider } from '../../adaptor/common';\nimport { schema } from '../../adaptor/geometries';\nimport { flow, pick, deepAssign } from '../../utils';\nimport { AXIS_META_CONFIG_KEYS } from '../../constant';\nimport { Y_FIELD, TREND_FIELD, TREND_UP, TREND_DOWN } from './constant';\nimport { getStockData } from './utils';\n/**\n * 图表配置处理\n * @param params\n */\nfunction geometry(params) {\n var chart = params.chart, options = params.options;\n var yField = options.yField;\n var data = options.data, risingFill = options.risingFill, fallingFill = options.fallingFill, tooltip = options.tooltip, stockStyle = options.stockStyle;\n chart.data(getStockData(data, yField));\n var tooltipOptions = tooltip;\n if (tooltipOptions !== false) {\n tooltipOptions = deepAssign({}, { fields: yField }, tooltipOptions);\n }\n schema(deepAssign({}, params, {\n options: {\n schema: {\n shape: 'candle',\n color: [risingFill, fallingFill],\n style: stockStyle,\n },\n yField: Y_FIELD,\n seriesField: TREND_FIELD,\n rawFields: yField,\n tooltip: tooltipOptions,\n },\n }));\n return params;\n}\n/**\n * meta 配置\n * @param params\n */\nexport function meta(params) {\n var _a, _b;\n var chart = params.chart, options = params.options;\n var meta = options.meta, xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField;\n var baseMeta = (_a = {},\n _a[xField] = {\n type: 'timeCat',\n tickCount: 6,\n },\n _a[TREND_FIELD] = {\n values: [TREND_UP, TREND_DOWN],\n },\n _a);\n var scales = deepAssign(baseMeta, meta, (_b = {},\n _b[xField] = pick(xAxis, AXIS_META_CONFIG_KEYS),\n _b[Y_FIELD] = pick(yAxis, AXIS_META_CONFIG_KEYS),\n _b));\n chart.scale(scales);\n return params;\n}\n/**\n * axis 配置\n * @param params\n */\nexport function axis(params) {\n var chart = params.chart, options = params.options;\n var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField;\n // 为 false 则是不显示轴\n if (xAxis === false) {\n chart.axis(xField, false);\n }\n else {\n chart.axis(xField, xAxis);\n }\n if (yAxis === false) {\n chart.axis(Y_FIELD, false);\n }\n else {\n chart.axis(Y_FIELD, yAxis);\n }\n return params;\n}\n/**\n * tooltip 配置\n * @param params\n */\nexport function tooltip(params) {\n var chart = params.chart, options = params.options;\n var tooltip = options.tooltip;\n if (tooltip !== false) {\n chart.tooltip(tooltip);\n }\n else {\n chart.tooltip(false);\n }\n return params;\n}\n/**\n * legend 配置\n * @param params\n */\nexport function legend(params) {\n var chart = params.chart, options = params.options;\n var legend = options.legend;\n if (legend) {\n chart.legend(TREND_FIELD, legend);\n }\n else if (legend === false) {\n chart.legend(false);\n }\n return params;\n}\n/**\n * K线图适配器\n * @param chart\n * @param options\n */\nexport function adaptor(params) {\n // flow 的方式处理所有的配置到 G2 API\n flow(theme, geometry, meta, axis, tooltip, legend, interaction, animation, annotation(), slider)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { getStockData } from './utils';\nimport { DEFAULT_OPTIONS } from './constant';\nvar Stock = /** @class */ (function (_super) {\n __extends(Stock, _super);\n function Stock() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** 图表类型 */\n _this.type = 'stock';\n return _this;\n }\n /**\n * 获取 散点图 默认配置项\n * 供外部使用\n */\n Stock.getDefaultOptions = function () {\n return DEFAULT_OPTIONS;\n };\n /**\n * 默认配置\n * g2/g2plot默 认 配 置 --> 图 表 默 认 配 置 --> 开 发 者 自 定 义 配 置 --> 最 终 绘 图 配 置\n */\n Stock.prototype.getDefaultOptions = function () {\n return Stock.getDefaultOptions();\n };\n /**\n * 获取 蜡烛图 的适配器\n */\n Stock.prototype.getSchemaAdaptor = function () {\n return adaptor;\n };\n /**\n * @override\n * @param data\n */\n Stock.prototype.changeData = function (data) {\n this.updateOption({ data: data });\n var yField = this.options.yField;\n this.chart.changeData(getStockData(data, yField));\n };\n return Stock;\n}(Plot));\nexport { Stock };\n//# sourceMappingURL=index.js.map"],"sourceRoot":""}