{"version":3,"sources":["webpack:///./node_modules/size-sensor/lib/sensors/index.js","webpack:///./node_modules/fmin/build/fmin.js","webpack:///./node_modules/lodash-es/_root.js","webpack:///./node_modules/lodash-es/stubFalse.js","webpack:///./node_modules/size-sensor/lib/debounce.js","webpack:///./node_modules/size-sensor/lib/sensorPool.js","webpack:///./node_modules/size-sensor/lib/sensors/object.js","webpack:///./node_modules/d3-regression/dist/d3-regression.js","webpack:///./node_modules/core-js/internals/whitespaces.js","webpack:///./node_modules/core-js/internals/string-trim.js","webpack:///./node_modules/lodash-es/isBuffer.js","webpack:///./node_modules/lodash-es/_freeGlobal.js","webpack:///./node_modules/size-sensor/lib/id.js","webpack:///./node_modules/size-sensor/lib/sensors/resizeObserver.js","webpack:///./node_modules/pdfast/src/index.js","webpack:///./node_modules/core-js/modules/es.number.constructor.js","webpack:///./node_modules/size-sensor/lib/index.js","webpack:///./node_modules/lodash-es/_nodeUtil.js","webpack:///./node_modules/pdfast/src/helper.js","webpack:///./src/views/manage/activity/edit/statistics/statisticschart.vue?3c57","webpack:///./node_modules/@antv/g2plot/node_modules/tslib/tslib.es6.js","webpack:///./node_modules/@antv/g2plot/esm/utils/invariant.js","webpack:///./node_modules/@antv/g2plot/esm/constant.js","webpack:///./node_modules/@antv/g2plot/esm/utils/pick.js","webpack:///./node_modules/@antv/g2plot/esm/utils/data.js","webpack:///./node_modules/@antv/g2plot/esm/utils/deep-assign.js","webpack:///./node_modules/@antv/g2plot/esm/utils/context.js","webpack:///./node_modules/@antv/g2plot/esm/utils/dom.js","webpack:///./node_modules/@antv/g2plot/esm/utils/flow.js","webpack:///./node_modules/@antv/g2plot/esm/utils/geometry.js","webpack:///./node_modules/@antv/g2plot/esm/utils/kebab-case.js","webpack:///./node_modules/@antv/g2plot/esm/utils/label.js","webpack:///./node_modules/@antv/g2plot/esm/utils/measure-text.js","webpack:///./node_modules/@antv/g2plot/esm/utils/number.js","webpack:///./node_modules/@antv/g2plot/esm/utils/padding.js","webpack:///./node_modules/@antv/g2plot/esm/utils/path.js","webpack:///./node_modules/@antv/g2plot/esm/utils/statistic.js","webpack:///./node_modules/@antv/g2plot/esm/utils/template.js","webpack:///./node_modules/@antv/g2plot/esm/utils/view.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/@antv/g2plot/esm/adaptor/pattern.js","webpack:///./node_modules/@antv/g2plot/esm/adaptor/common.js","webpack:///./node_modules/@antv/g2plot/esm/core/global.js","webpack:///./node_modules/@antv/g2plot/esm/core/locale.js","webpack:///./node_modules/@antv/g2plot/esm/locales/en_US.js","webpack:///./node_modules/@antv/g2plot/esm/locales/zh_CN.js","webpack:///./node_modules/@antv/g2plot/esm/utils/tooltip.js","webpack:///./node_modules/@antv/g2plot/esm/adaptor/geometries/base.js","webpack:///./node_modules/@antv/g2plot/esm/adaptor/geometries/area.js","webpack:///./node_modules/@antv/g2plot/esm/adaptor/geometries/edge.js","webpack:///./node_modules/@antv/g2plot/esm/adaptor/geometries/interval.js","webpack:///./node_modules/@antv/g2plot/esm/adaptor/geometries/line.js","webpack:///./node_modules/@antv/g2plot/esm/adaptor/geometries/point.js","webpack:///./node_modules/@antv/g2plot/esm/adaptor/geometries/polygon.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/core/plot.js","webpack:///./node_modules/@antv/g2plot/esm/utils/transform/percent.js","webpack:///./node_modules/@antv/g2plot/esm/plots/line/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/area/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/area/constants.js","webpack:///./node_modules/@antv/g2plot/esm/plots/area/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/adaptor/connected-area.js","webpack:///./node_modules/@antv/g2plot/esm/utils/conversion.js","webpack:///./node_modules/@antv/g2plot/esm/adaptor/conversion-tag.js","webpack:///./node_modules/@antv/g2plot/esm/plots/column/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/bar/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/bar/constants.js","webpack:///./node_modules/@antv/g2plot/esm/plots/funnel/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/bar/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/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/dynamic-height.js","webpack:///./node_modules/@antv/g2plot/esm/plots/funnel/geometries/facet.js","webpack:///./node_modules/@antv/g2plot/esm/plots/funnel/interactions/funnel-conversion-tag.js","webpack:///./node_modules/@antv/g2plot/esm/plots/funnel/interactions/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/funnel/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/funnel/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/gauge/constants.js","webpack:///./node_modules/@antv/g2plot/esm/plots/gauge/utils.js","webpack:///./node_modules/@antv/g2plot/esm/plots/gauge/adaptor.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/utils/transform/histogram.js","webpack:///./node_modules/@antv/g2plot/esm/plots/histogram/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/histogram/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/histogram/index.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/pie/contants.js","webpack:///./node_modules/@antv/g2plot/esm/utils/matrix.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/plots/pie/utils.js","webpack:///./node_modules/@antv/g2plot/esm/plots/pie/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/pie/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/progress/constants.js","webpack:///./node_modules/@antv/g2plot/esm/plots/progress/utils.js","webpack:///./node_modules/@antv/g2plot/esm/plots/progress/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/progress/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/ring-progress/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/plots/scatter/util.js","webpack:///./node_modules/@antv/g2plot/esm/plots/scatter/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/scatter/constant.js","webpack:///./node_modules/@antv/g2plot/esm/interactions/drag-move.js","webpack:///./node_modules/@antv/g2plot/esm/plots/scatter/index.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","webpack:///./node_modules/@antv/g2plot/esm/plots/tiny-line/utils.js","webpack:///./node_modules/@antv/g2plot/esm/plots/tiny-line/constants.js","webpack:///./node_modules/@antv/g2plot/esm/plots/tiny-area/adaptor.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/plots/tiny-column/adaptor.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-line/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/tiny-line/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/mix/utils.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/esm/lab.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/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/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/utils/transform/chord.js","webpack:///./node_modules/@antv/g2plot/esm/plots/bullet/index.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/circle-packing/constant.js","webpack:///./node_modules/@antv/g2plot/esm/interactions/actions/drill-down.js","webpack:///./node_modules/d3-hierarchy/src/array.js","webpack:///./node_modules/d3-hierarchy/src/pack/enclose.js","webpack:///./node_modules/d3-hierarchy/src/pack/siblings.js","webpack:///./node_modules/d3-hierarchy/src/accessors.js","webpack:///./node_modules/d3-hierarchy/src/constant.js","webpack:///./node_modules/d3-hierarchy/src/pack/index.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/count.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/each.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/find.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/sum.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/sort.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/path.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/ancestors.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/descendants.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/leaves.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/links.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/iterator.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/index.js","webpack:///./node_modules/@antv/g2plot/esm/utils/hierarchy/util.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/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/interactions/drill-down.js","webpack:///./node_modules/@antv/g2plot/esm/plots/circle-packing/index.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/geometry.js","webpack:///./node_modules/@antv/g2plot/esm/plots/dual-axes/util/legend.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/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/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/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/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/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/rose/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/rose/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/sankey/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/rose/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/sankey/circle.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/helper.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/plots/sunburst/constant.js","webpack:///./node_modules/d3-hierarchy/src/treemap/round.js","webpack:///./node_modules/d3-hierarchy/src/treemap/dice.js","webpack:///./node_modules/d3-hierarchy/src/partition.js","webpack:///./node_modules/@antv/g2plot/esm/utils/hierarchy/partition.js","webpack:///./node_modules/d3-hierarchy/src/cluster.js","webpack:///./node_modules/d3-hierarchy/src/stratify.js","webpack:///./node_modules/d3-hierarchy/src/tree.js","webpack:///./node_modules/d3-hierarchy/src/treemap/slice.js","webpack:///./node_modules/d3-hierarchy/src/treemap/squarify.js","webpack:///./node_modules/d3-hierarchy/src/treemap/index.js","webpack:///./node_modules/d3-hierarchy/src/treemap/binary.js","webpack:///./node_modules/d3-hierarchy/src/treemap/sliceDice.js","webpack:///./node_modules/d3-hierarchy/src/treemap/resquarify.js","webpack:///./node_modules/@antv/g2plot/esm/utils/hierarchy/treemap.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/@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/venn/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/treemap/index.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/label.js","webpack:///./node_modules/lodash-es/isArray.js","webpack:///./node_modules/lodash-es/_Symbol.js","webpack:///./node_modules/lodash-es/_getRawTag.js","webpack:///./node_modules/lodash-es/_objectToString.js","webpack:///./node_modules/lodash-es/_baseGetTag.js","webpack:///./node_modules/lodash-es/isObjectLike.js","webpack:///./node_modules/lodash-es/_createBaseFor.js","webpack:///./node_modules/lodash-es/_baseFor.js","webpack:///./node_modules/lodash-es/_baseTimes.js","webpack:///./node_modules/lodash-es/_baseIsArguments.js","webpack:///./node_modules/lodash-es/isArguments.js","webpack:///./node_modules/lodash-es/_isIndex.js","webpack:///./node_modules/lodash-es/isLength.js","webpack:///./node_modules/lodash-es/_baseIsTypedArray.js","webpack:///./node_modules/lodash-es/_baseUnary.js","webpack:///./node_modules/lodash-es/isTypedArray.js","webpack:///./node_modules/lodash-es/_arrayLikeKeys.js","webpack:///./node_modules/lodash-es/_isPrototype.js","webpack:///./node_modules/lodash-es/_overArg.js","webpack:///./node_modules/lodash-es/_nativeKeys.js","webpack:///./node_modules/lodash-es/_baseKeys.js","webpack:///./node_modules/lodash-es/isObject.js","webpack:///./node_modules/lodash-es/isFunction.js","webpack:///./node_modules/lodash-es/isArrayLike.js","webpack:///./node_modules/lodash-es/keys.js","webpack:///./node_modules/lodash-es/_baseForOwn.js","webpack:///./node_modules/lodash-es/_createBaseEach.js","webpack:///./node_modules/lodash-es/_baseEach.js","webpack:///./node_modules/lodash-es/_listCacheClear.js","webpack:///./node_modules/lodash-es/eq.js","webpack:///./node_modules/lodash-es/_assocIndexOf.js","webpack:///./node_modules/lodash-es/_listCacheDelete.js","webpack:///./node_modules/lodash-es/_listCacheGet.js","webpack:///./node_modules/lodash-es/_listCacheHas.js","webpack:///./node_modules/lodash-es/_listCacheSet.js","webpack:///./node_modules/lodash-es/_ListCache.js","webpack:///./node_modules/lodash-es/_stackClear.js","webpack:///./node_modules/lodash-es/_stackDelete.js","webpack:///./node_modules/lodash-es/_stackGet.js","webpack:///./node_modules/lodash-es/_stackHas.js","webpack:///./node_modules/lodash-es/_coreJsData.js","webpack:///./node_modules/lodash-es/_isMasked.js","webpack:///./node_modules/lodash-es/_toSource.js","webpack:///./node_modules/lodash-es/_baseIsNative.js","webpack:///./node_modules/lodash-es/_getValue.js","webpack:///./node_modules/lodash-es/_getNative.js","webpack:///./node_modules/lodash-es/_Map.js","webpack:///./node_modules/lodash-es/_nativeCreate.js","webpack:///./node_modules/lodash-es/_hashClear.js","webpack:///./node_modules/lodash-es/_hashDelete.js","webpack:///./node_modules/lodash-es/_hashGet.js","webpack:///./node_modules/lodash-es/_hashHas.js","webpack:///./node_modules/lodash-es/_hashSet.js","webpack:///./node_modules/lodash-es/_Hash.js","webpack:///./node_modules/lodash-es/_mapCacheClear.js","webpack:///./node_modules/lodash-es/_isKeyable.js","webpack:///./node_modules/lodash-es/_getMapData.js","webpack:///./node_modules/lodash-es/_mapCacheDelete.js","webpack:///./node_modules/lodash-es/_mapCacheGet.js","webpack:///./node_modules/lodash-es/_mapCacheHas.js","webpack:///./node_modules/lodash-es/_mapCacheSet.js","webpack:///./node_modules/lodash-es/_MapCache.js","webpack:///./node_modules/lodash-es/_stackSet.js","webpack:///./node_modules/lodash-es/_Stack.js","webpack:///./node_modules/lodash-es/_setCacheAdd.js","webpack:///./node_modules/lodash-es/_setCacheHas.js","webpack:///./node_modules/lodash-es/_SetCache.js","webpack:///./node_modules/lodash-es/_Uint8Array.js","webpack:///./node_modules/lodash-es/_setToArray.js","webpack:///./node_modules/lodash-es/_equalByTag.js","webpack:///./node_modules/lodash-es/stubArray.js","webpack:///./node_modules/lodash-es/_getSymbols.js","webpack:///./node_modules/lodash-es/_getAllKeys.js","webpack:///./node_modules/lodash-es/_equalObjects.js","webpack:///./node_modules/lodash-es/_DataView.js","webpack:///./node_modules/lodash-es/_Promise.js","webpack:///./node_modules/lodash-es/_Set.js","webpack:///./node_modules/lodash-es/_WeakMap.js","webpack:///./node_modules/lodash-es/_getTag.js","webpack:///./node_modules/lodash-es/_baseIsEqualDeep.js","webpack:///./node_modules/@antv/g2plot/node_modules/@antv/path-util/esm/parse-path-string.js","webpack:///./node_modules/@antv/g2plot/node_modules/@antv/path-util/esm/process/arc-2-cubic.js","webpack:///./node_modules/@antv/g2plot/esm/plots/venn/shape.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/diagram.js","webpack:///./node_modules/@antv/g2plot/esm/plots/venn/layout/layout.js","webpack:///./node_modules/@antv/g2plot/esm/plots/venn/utils.js","webpack:///./node_modules/@antv/g2plot/esm/plots/venn/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/venn/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/violin/constant.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/adaptor.js","webpack:///./node_modules/@antv/g2plot/esm/plots/violin/index.js","webpack:///./node_modules/@antv/g2plot/esm/plots/waterfall/constant.js","webpack:///./node_modules/@antv/g2plot/esm/plots/waterfall/shape.js","webpack:///./node_modules/@antv/g2plot/esm/plots/waterfall/utils.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/plots/word-cloud/constant.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/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/plugin/index.js","webpack:///./node_modules/@antv/g2plot/esm/index.js","webpack:///src/views/manage/activity/edit/statistics/statisticschart.vue","webpack:///./src/views/manage/activity/edit/statistics/statisticschart.vue?96d0","webpack:///./src/views/manage/activity/edit/statistics/statisticschart.vue","webpack:///./node_modules/size-sensor/lib/constant.js","webpack:///(webpack)/buildin/harmony-module.js"],"names":["Object","defineProperty","exports","value","createSensor","_object","_resizeObserver","ResizeObserver","global","factory","this","bisect","f","a","b","parameters","maxIterations","tolerance","fA","fB","delta","i","mid","fMid","Math","abs","zeros","x","r","Array","zerosM","y","map","dot","ret","length","norm2","sqrt","scale","c","weightedSum","w1","v1","w2","v2","j","nelderMead","x0","maxDiff","nonZeroDelta","zeroDelta","minErrorDelta","minTolerance","rho","undefined","chi","psi","sigma","N","simplex","fx","id","point","slice","updateSimplex","sortOrder","centroid","reflected","contracted","expanded","iteration","sort","history","sortedSimplex","state","push","max","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","params","temp","yk","alpha","delta_k","beta_k","gradientDescent","learnRate","gradientDescentLineSearch","functionCalls","inner","freeSelf","self","root","Function","stubFalse","_default","fn","delay","arguments","timer","_this","_len","args","_key","clearTimeout","setTimeout","apply","removeSensor","getSensor","Sensors","_id","_interopRequireDefault","_sensors","_constant","obj","__esModule","clean","sensorId","element","getAttribute","SizeSensorId","newId","setAttribute","sensor","destroy","_debounce","whenDestroy","listeners","newSensor","getComputedStyle","position","style","document","createElement","onload","contentDocument","defaultView","addEventListener","resizeListener","display","top","left","height","width","overflow","pointerEvents","zIndex","opacity","SensorClassName","SensorTabIndex","type","appendChild","data","forEach","listener","bind","cb","indexOf","parentNode","removeEventListener","removeChild","removeAttribute","unbind","idx","splice","_slicedToArray","arr","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","isArray","_arr","_n","_d","_e","_s","_i","Symbol","iterator","done","err","TypeError","points","filter","d","u","v","isFinite","xv","yv","n","X","Float64Array","Y","ux","uy","visitPoints","iterations","dx","dy","determination","uY","predict","SSE","SST","sse","sst","angle","line","atan2","PI","midpoint","interpose","xmin","xmax","l","log","LOG10E","precision","pow","maxIter","px","iter","find","found","p0","p1","m","mp","a1","ols","uX","uXY","uX2","slope","intercept","exponential","domain","YL","XY","XYL","X2Y","Infinity","ly","xy","_ols","_ols2","exp","out","rSquared","linear","X2","median","floor","maxiters","epsilon","loess","bandwidth","_points","_points2","bw","yhat","residuals","robustWeights","fill","interval","i0","i1","edge","W","denom","k","xk","w","tricube","xkw","updateInterval","medianResidual","arg","_w","output","val","right","cnt","prev","logarithmic","base","E","lb","lx","quad","quadratic","x2","X3","X4","n0","X2X2","polynomial","order","o","coefficients","_o","lhs","rhs","coef","gaussianElimination","uncenter","z","matrix","t","power","YS","regressionExp","regressionLinear","regressionLoess","regressionLog","regressionPoly","regressionPow","regressionQuad","module","requireObjectCoercible","whitespaces","whitespace","ltrim","RegExp","rtrim","createMethod","TYPE","$this","string","String","replace","start","end","trim","freeExports","nodeType","freeModule","moduleExports","Buffer","nativeIsBuffer","isBuffer","freeGlobal","concat","s","observe","disconnect","DEFAULT_SIZE","DEFAULT_WIDTH","LN_2","helper","kernel","generatePartialAreas","partialAreas","accumulator","getUnifiedMinMax","options","getUnifiedMinMaxMulti","arrMulti","relaxMin","relaxMax","isNumber","size","min","findMinMulti","findMaxMulti","range","step","create","normalizedMinMax","buckets","xToBucket","partialArea","fullArea","initalValue","bucket","leftBlockCount","rightBlockCount","spilledAreaLeft","spilledAreaRight","weight","startGradPos","inside","gradAccumulator","area","getExpectedValueFromPdf","pdf","expected","getXWithLeftTailArea","last","getPerplexity","entropy","ln","DESCRIPTORS","isForced","redefine","has","classof","inheritIfRequired","toPrimitive","fails","getOwnPropertyNames","getOwnPropertyDescriptor","NUMBER","NativeNumber","NumberPrototype","prototype","BROKEN_CLASSOF","toNumber","argument","first","third","radix","maxCode","digits","index","code","it","charCodeAt","NaN","parseInt","key","NumberWrapper","dummy","valueOf","call","keys","split","constructor","ver","clear","_sensorPool","freeProcess","process","nodeUtil","types","require","binding","e","findMin","curr","findMax","render","_vm","_h","$createElement","_c","_self","directives","name","rawName","expression","staticClass","attrs","slot","_v","on","changeActivity","model","callback","$$v","selectKey","_l","item","getTime","timeType","pickerOptions","daterangeChange","daterange","ref","staticRenderFns","extendStatics","setPrototypeOf","__proto__","p","hasOwnProperty","__extends","__","__assign","assign","__rest","getOwnPropertySymbols","propertyIsEnumerable","__spreadArray","to","from","pack","ar","SuppressedError","LEVEL","AXIS_META_CONFIG_KEYS","BRAND","getMessage","format","argIndex","level","condition","console","pick","adjustYMetaByZero","field","numberData","datum","isNaN","gtZero","every","ltZero","transformDataToNodeLinkData","sourceField","targetField","weightField","rawFields","nodes","links","nodesMap","nodesIndex","source","target","rawData","values","processIllegalData","processData","WARN","MAX_MIX_LEVEL","toString","isObjectLike","isPlainObject","proto","getPrototypeOf","deep","dist","src","maxLevel","deepAssign","rst","getContainerSize","ele","clientWidth","paddingLeft","paddingRight","clientHeight","paddingTop","paddingBottom","flow","flows","param","reduce","result","findGeometry","view","geometries","g","getAllElements","geometry","elements","getAllElementsRecursively","views","subView","getAllGeometriesRecursively","kebabCase","word","match","toLowerCase","join","transformLabel","labelOptions","label","formatter","content","getCanvasContext","getContext","text","font","fontSize","_a","fontFamily","fontWeight","fontStyle","fontVariant","ctx","metrics","measureText","isRealNumber","isBetween","normalPadding","padding","length_1","getAdjustAppendPadding","append","currentAppendPadding","PADDING","startsWith","resolveAllPadding","paddings","normalPaddings","finalPadding","points2Path","isInCircle","path","smoothBezier","smooth","isLoop","constraint","prevPoint","nextPoint","cps","hasConstraint","len","sub","d0","distance","d1","sum","cp0","add","cp1","shift","catmullRom2bezier","crp","pointList","cp2","controlPointList","getSplinePath","constaint","prePoint","splinePath","unshift","adapteStyle","styleObject","justifyContent","alignItems","shapeStyleKeys","shadowColor","_b","shadowBlur","shadowOffsetX","shadowOffsetY","stroke","_f","lineWidth","includes","setStatisticContainerStyle","container","renderStatistic","chart","statistic","plotType","titleOpt","title","contentOpt","option","transform","annotation","html","coordinate","getCoordinate","containerW","getRadius","innerRadius","liquidShape","get","getCanvasBBox","getWidth","filteredData","getData","customHtml","renderGaugeStatistic","polarCoord","polarCenter","getCenter","polarRadius","polarMaxY","sin","startAngle","endAngle","offsetY","parseFloat","containerWidth","template","findViewById","getViews","parent","getSiblingViews","addViewAnimation","animation","animate","animationCfg","shapeType","getPixelRatio","window","devicePixelRatio","initCanvas","canvas","pixelRatio","drawBackground","context","cfg","backgroundColor","globalAlpha","fillStyle","beginPath","fillRect","closePath","getUnitPatternSize","isStagger","unitSize","getSymbolsPosition","symbolsPos","transformMatrix","dpr","rotation","radian","cos","defaultDotPatternCfg","fillOpacity","drawDot","strokeStyle","arc","createDotPattern","dotCfg","dots","dots_1","pattern","createPattern","setTransform","defaultLinePatternCfg","spacing","strokeOpacity","drawLine","Path2D","lineCap","createLinePattern","lineCfg","defaultSquarePatternCfg","drawSquare","strokeRect","createSquarePattern","squareCfg","squares","squares_1","getCanvasPattern","patternOption","defaultColor","getTheme","color","colorAttribute","colorField","getFields","seriesValue","getMappingValue","CanvasPattern","styleOption","legend","seriesField","tooltip","interaction","interactions","enable","removeInteraction","theme","slider","scrollbar","axes","meta","scales","axis","annotationOptions","annotationController","getController","annotations","annotationOption","yAxis","limitInPlot","some","transformations","coordinateType","actions","GLOBAL","locale","LocaleMap","registerLocale","localeObj","getLocale","EN_US_LOCALE","general","increase","decrease","total","conversionTag","waterfall","ZH_CN_LOCALE","getTooltipMapping","defaultFields","fields","getMappingField","xField","yField","shapeField","sizeField","styleField","mappingFields","tileMappingField","getMappingFunction","func","mapping","tooltipFields","customInfo","shape","ext","useDeferredLabel","otherAdaptor","isGroup","isStack","marginRatio","widthRatio","groupField","adjust","dodgeBy","columnWidthRatio","minColumnWidth","maxColumnWidth","columnBackground","dodgePadding","intervalPadding","background","stepType","connectNulls","polygon","schema","violin","SOURCE_ATTRIBUTE_NAME","PLOT_CONTAINER_OPTIONS","_super","Plot","getElementById","getDefaultOptions","createG2","bindEvents","renderer","xAxis","nice","autoRotate","autoHide","minGap","defaultInteractions","autoFit","getChartSize","localRefresh","chartSize","emit","execAdaptor","bindSizeSensor","update","updateOption","setState","status","getStates","stateObjects","states","changeData","changeSize","addAnnotations","incoming","controller","getComponents","co","extra","_loop_1","findIndex","removeAnnotations","_loop_2","unbindSizeSensor","off","adaptor","getSchemaAdaptor","appendPadding","triggerResize","forceFit","measure","as","sumMap","groupValue","set","Map","percentage","getDeepPercent","percent","getDataWhetherPercentage","asField","isPercent","lineStyle","lineShape","pointMapping","areaMapping","pointState","areaState","primary","second","areaParams","reflect","lineGeometry","layout","action","areaStyle","areaShape","lineMapping","startOnZero","chartData","tooltipOptions","Number","toFixed","lineParams","pointParams","areaGeometry","DEFAULT_OPTIONS","shared","showMarkers","showCrosshairs","crosshairs","radio","Area","PADDING_RIGHT","PADDING_TOP","BUTTON_ACTION_CONFIG","textStyle","default","cursor","buttonStyle","active","ButtonAction","buttonGroup","buttonCfg","getButtonCfg","drawButton","config","group","foregroundGroup","addGroup","textShape","drawText","getBBox","addShape","bbox","buttonShape","toBack","attr","resetPosition","coord","convert","setMatrix","show","hide","remove","isPointInView","isInPlot","getInteractionCfg","interactionType","brushType","mask","isStartEnable","maskType","showEnable","trigger","isEnable","maskStyle","processing","rollback","isInShape","BRUSH_TYPES","brushInteraction","brush","enabled","buttonConfig","button","INTERACTION_MAP","hover","click","getStartStages","connectedArea","disable","conversionTagFormatter","getConversionTagOptionsWithDefaults","horizontal","offset","arrow","headSize","textAlign","textBaseline","parsePoints","getModel","convertPoint","renderArrowTag","elemPrev","elemNext","pointPrev","pointNext","totalHeight","totalWidth","getElementId","mappingData","origin","nextElement","renderTextTag","textWidth","cWidth","cEnd","ceil","textAdjusted","renderTag","disabled","geom","elem","columnStyle","percentData","stackedItem","percentYMeta","minLimit","maxLimit","isRange","columnTooltip","customItems_1","customItems","tooltipFormatter_1","originalItems","items","datas","_origin","isBar","bottom","verticalAxis","horizontalAxis","coordinateOptions","barStyle","barWidthRatio","minBarWidth","maxBarWidth","barBackground","Bar","switchedFieldOptions","Column","FUNNEL_PERCENT","FUNNEL_MAPPING_VALUE","FUNNEL_CONVERSATION","FUNNEL_TOTAL_PERCENT","PLOYGON_X","PLOYGON_Y","minSize","maxSize","showTitle","offsetX","CONVERSION_TAG_NAME","originData","formatData","maxYFieldValue","row","conversionTagComponent","getLineCoordinate","getOptions","formatter_1","lineOption","funnelStyle","geo","transpose","isTransposed","dataArray","datumIndex","initLineOption","basicFunnel","sync","compareField","showFacetTitle","facet","eachView","rowIndex","columnIndex","formatterData","defaultFacetLabel","compareConversionTag","viewIndex","ratio","once","compareFunnel","preItemX","preItemY","dynamicHeightFunnel","facetFunnel","ConversionTagAction","rendering","change","conversionTag_1","filterData","FUNNEL_CONVERSION_TAG","FUNNEL_LEGEND_FILTER","interactionStart","i18n","defaultOption","dynamicHeight","Funnel","CONVERSATION_FIELD","PERCENT_FIELD","TOTAL_PERCENT_FIELD","RANGE_VALUE","RANGE_TYPE","PERCENT","DEFAULT_COLOR","INDICATEOR_VIEW_ID","RANGE_VIEW_ID","ticks","radius","syncViewPadding","subTickLine","tickLine","grid","indicator","pointer","pin","tickCount","tickInterval","processRangeData","getIndicatorData","getRangeData","clampTicks","gaugeStyle","meter","rangeWidth","indicatorData","createView","rangeData","rangeColor","zIndexReversed","sortZIndex","updated","contentOption","transformContent","lineHeight","containerTpl","domStyles","customContent","draw","center","parsePoint","x1","y1","y2","steps","STEP","stepRatio","STEP_RATIO","COORD_START_ANGLE","COORD_END_ANGLE","GAP","TOTAL","INTERVAL","getAngle","START_ANGLE","END_ANGLE","getSectorPath","Gauge","BEFORE_CHANGE_DATA","fromData","indicatorView","rangeView","AFTER_CHANGE_DATA","getBinKey","binWidth","binNumber","sturges","LN2","binHistogram","binField","stackField","originData_copy","_binWidth","_defaultBinNumber","bins","groups","bin","binKey","count","groupKey","groupKeyBinKey","plotData","HISTOGRAM_X_FIELD","HISTOGRAM_Y_FIELD","Histogram","MarkerActiveAction","getView","evt","event","items_1","reset","Line","pieStyle","components","ORIGIN_MATRIX","ulMatrix","PieLegendAction","getActiveElements","delegateObject","getDelegationObject","component","item_1","field_1","getActiveElementLabels","labels","labelsContainer","getChildren","transfrom","elementLabels","labelShape","isPolar","middleAngle","getCurrentElement","StatisticAction","getAnnotations","_view","getInitialAnnotation","initialAnnotation","init","colorField_1","getGroupedFields","toFront","initialStatistic","PIE_STATISTIC","getTotalValue","adaptOffset","defaultOffset","endsWith","isAllZero","angleField","percentageField_1","labelCfg","content_1","dataum","angleScale","getScaleByField","LABEL_LAYOUT_TYPE_MAP","outer","spider","labelLayoutType","labelLayoutCfg","transformStatisticOptions","titleOpt_1","contentOpt_1","metaFormatter","dataValue","pieAnnotation","startStages_1","stage","Pie","prevOptions","prevData","curData","getProgressData","clampPercent","progressStyle","Progress","RingProgress","REGRESSION_MAP","poly","getQuadrantDefaultConfig","xBaseline","yBaseline","textOffset","defaultConfig","regionStyle","labelStyle","xScaleView","yScaleView","pathData","getPath","regressionLine","algorithm","customEquation","equation","reg","getRegressionEquation","getMeta","xFieldValue","yFieldValue","xIsPositiveNumber","yIsPositiveNumber","getMetaMinMax","fieldMeta","getCustomValue","res","roundByPrecision","round","safeFormat","transformOptions","isOneX","isOneY","meta_1","pointStyle","newOptions","shapeLegend","sizeLegend","showLegend","scatterGeometry","scatterAnnotation","quadrant","labels_1","regionStyle_1","defaultConfig_1","quadrants","_","style_1","equationStyle","equationStyle_1","top_1","showEquation","showEquation_1","defaultStyle_1","defaulEquationStyle_1","throttle","wait","leading","trailing","Scatter","BEFORE_RENDER","FILTER","RESET","Y_FIELD","TREND_FIELD","TREND_UP","TREND_DOWN","DEFAULT_TOOLTIP_OPTIONS","follow","defaultContent","textContent","textBackground","risingFill","fallingFill","getStockData","open_1","close_1","high","low","stockStyle","baseMeta","Stock","getTinyData","X_FIELD","itemTpl","pointOptions","lineOptions","seriesData","TinyArea","TinyColumn","TinyLine","PLOT_ADAPTORS","pie","column","bar","gauge","progress","scatter","histogram","funnel","stock","PLOT_CONSTRUCTOR","DEFAULT_OPTIONS_MAP","execPlotAdaptor","plot","cls","error","multiView","region","viewOfG2","multiPlot","plots","getElementValue","record","clearHighlight","el","hasState","Association","getAssociationItems","linkField","dim","data_1","getXScale","getYScales","getGroupScales","inactive","showTooltip","siblings","box","minX","minY","hideTooltip","sibling","selected","highlight","Stage","Mix","notice","warn","DEV","BETA","STABLE","Lab","enumerable","configurable","FIRST_AXES_VIEW","SECOND_AXES_VIEW","SERIES_FIELD_KEY","reverse","hopeData","groupData","data1","data2","autoPadding","p2","__axisPosition","instance","firstView","secondView","firstViewData","secondViewData","aliasMap","metaKey","alias","leftGeometry","rightGeometry","cfg_1","leftLabelCfg","textAlignMap","positionMap_1","middle","textBaselineMap","BidirectionalBar","BOX_RANGE","BOX_RANGE_ALIAS","BOX_SYNC_NAME","OUTLIERS_VIEW_ID","boxStyle","newData","low_1","q1_1","median_1","q3_1","high_1","yFieldName","outliersPoint","outliersField","outliersStyle","outliersView","outliersViewData","outliersData","syncName","Box","getSeriesFieldKey","measureField","rangeField","ds","rangeValues","flat","rKey","measureValues","mKey","targetValues","tKey","bulletStyle","extData","rangeGeometry","measureGeometry","targetGeometry","Bullet","nodeWidthRatio","nodePaddingRatio","node","sourceWeight","targetWeight","sortBy","processGraph","nodeById","edges","inEdges","outEdges","frequency","sortNodes","sortMethods","localeCompare","method","layoutNodes","nodePaddingRatio_1","margin_1","nodeWidthRatio_1","totalValue_1","deltaX","maxX","maxY","deltaX_1","locatingEdges","valueById_1","sId","tId","sNode","tNode","sValue","currentSValue","sStart","sEnd","tValue","currentTValue","tStart","tEnd","chordLayout","chordLayoutOptions","chordLayoutInputData","outputNodes","outputLinks","NODE_COLOR_FIELD","EDGE_COLOR_FIELD","nodeStyle","edgeStyle","centerX","labelEmit","showContent","nodesData","isNode","edgesData","link","chordData","nodeGeometry","nodeView","edgeGeometry","edgeView","edgeOptions","Chord","RAW_FIELDS","hierarchyConfig","drilldown","PADDING_LEFT","BREAD_CRUMB_NAME","DEFAULT_BREAD_CRUMB_CONFIG","dividerText","activeTextStyle","HIERARCHY_DATA_TRANSFORM_PARAMS","DrillDownAction","historyCache","breadCrumbGroup","breadCrumbCfg","drill","drawBreadCrumb","back","backTo","hideCrumbGroup","nodeInfo","transformData","drillData","nodeData","depth","children","drillDownConfig","breadCrumb","drawBreadCrumbGroup","cache","rootText","textShapeBox","targetId","newHistoryCache","dividerShape","dividerBox","shuffle","array","random","circles","B","enclosesWeak","encloseBasis","extendBasis","enclosesWeakAll","enclosesNot","encloseBasis2","encloseBasis3","Error","dr","encloseBasis1","r1","r2","x21","y21","r21","x3","y3","r3","a2","a3","b2","b3","c3","d2","d3","ab","xa","xb","ya","yb","A","C","place","intersects","score","Node","circle","previous","packEnclose","aa","ca","sj","sk","enclose","optional","required","constantZero","defaultRadius","eachBefore","radiusLeaf","eachAfter","packChildren","translateChild","constant","that","pop","compare","ancestor","leastCommonAncestor","aNodes","ancestors","bNodes","leaves","each","hierarchy","mapChildren","objectChildren","child","childs","computeHeight","node_copy","copyData","descendants","copy","NODE_INDEX_FIELD","CHILD_NODE_COUNT","NODE_ANCESTORS_FIELD","INVALID_FIELD_ERR_MSG","getField","defaultField","getAllNodes","parent_1","index_1","eachNode","packLayout","enableDrillDown","ancestorNode","resolvePaddingForCircle","containerSize","tempPadding","wSize","hSize","restWidthPadding","restHeightPadding","finalTop","finalRight","finalBottom","finalLeft","finalSize","diameter","viewBBox","tempAppendPadding","appendPaddingByDrilldown","circleSize","nameFormatter","valueFormatter","adaptorInteraction","isParentNode","inCenter","centerY","CirclePacking","destroyed","AxisType","DualAxesGeometry","LEFT_AXES_VIEW","RIGHT_AXES_VIEW","DEFAULT_YAXIS_CONFIG","DEFAULT_LEFT_YAXIS_CONFIG","DEFAULT_RIGHT_YAXIS_CONFIG","isLine","geometryOption","isColumn","getGeometryOption","transformObjectToArray","transformAttribute","a1_1","a2_1","getYAxisWithDefault","axisType","Left","Right","drawSingleGeometry","FIELD_KEY","adjust_1","customOffset","getViewLegendItems","userMarker","legendItemName","marker","symbol","isGeometry","viewId","attributes","getGroupAttributes","attrItems","getLegendItems","doSliderFilter","sliderValue","xScale","dataSize","isHorizontal","xValues","xTickCount","minIndex","maxIndex","getRootView","geometryOptions","allLine","createViews","SORT_MAP","themeColor","colors10","groupScale","leftView","rightView","custom","leftLegend_1","rightLegend_1","leftItems","rightItems","yF","changeVisible","unchecked","legendItem_1","curLegendItem","originValue","DualAxes","execViewAdaptor","facetAdaptor","facetType","restFacetCfg","viewOptions","plotOptions","rowTitle","columnTitle","Facet","sizeRatio","heatmapStyle","geometryType","checkedSizeRatio","dautm","sequenceColors","coordinateOption","alignTick","lineDash","cx","cy","maxRadius","radiusRatio","defaultStyle","maxSideLength","lenRatio","sideLength","Heatmap","CAT_VALUE","getLiquidData","liquidStyle","outline","wave","shapeStyle","border","DURATION","lerp","factor","getFillAttrs","getLineAttrs","defaultAttrs","getWaterWavePositions","waveLength","amplitude","getWaterWavePath","waterLevel","phase","curves","_phase","waveRight","pos","addWaterWave","waveCount","waveAttrs","clip","stopAnimate","duration","repeat","h","theta","asin","y0","cpX","cpY","rx","ry","diamond","triangle","rect","GOLDEN_SECTION_RATIO","builtInShapeByName","minXPoint","halfWidth","outlineAttrs","buildPath","shapePath","waves","clipPath","setClip","Liquid","areaOptions","RadarTooltipController","getTooltipItems","getTooltipCfg","cfgTitle","hintItems","geometry_1","title_1","result_1","displayTitle","RadarTooltipAction","getTooltipController","Radar","getScaleMax","maxAngle","yData","maxValue","formatRadian","getStackedData","stackedData","valueItem","actualData","intervalGeometry","RadialBar","sectorStyle","Rose","COLOR_FIELD","NODES_VIEW_ID","EDGES_VIEW_ID","getNodes","getMatrix","graphMatrix","pre","cutoffCircle","removedData","visited","DFS","dfsNode","targetDepth","justify","sourceLinks","targetLinks","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","beta","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","sx","tx","isNodeLink","dataType","getNodeWidthRatio","getNodePaddingRatio","transformToViewsData","sankeyLayoutInputData","nodeState","edgeState","nodeDraggable","DRAG_INTERACTION","nodeInteractions","edgeInteractions","SankeyNodeDragAction","isDragging","isNodeElement","getNodeView","getEdgeView","getCurrentDatumIdx","currentElementIdx","prevNodeAnimateCfg","prevEdgeAnimateCfg","translate","currentPoint","prevDatum","datumGap_1","getHeight","nextDatum","name_1","edgeData","Sankey","isLast","appear","enter","nodesView","edgesView","SUNBURST_ANCESTOR_FIELD","SUNBURST_Y_FIELD","SUNBURST_PATH_FIELD","sunburstStyle","partition","positionNode","ignoreParentValue","prop","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","squarifyRatio","nodeValue","sumValue","minValue","newRatio","minRatio","rows","dice","squarify","tile","paddingStack","paddingInner","treemap","paddingOuter","sums","valueOffset","valueTarget","hi","valueLeft","valueRight","resquarify","_squarify","getTileMethod","tileMethod","activeDepth","pathFormatter","Sunburst","findInteraction","enableInteraction","enableDrillInteraction","resetDrillDown","drillDownInteraction","drillDownAction","curPath","rectStyle","viewZoomInteraction","getCanvas","ev","preventDefault","ID_FIELD","Treemap","transData","PATH_FIELD","blendMode","placeElementsOrdered","ElementActiveAction","VennElementActive","syncElementsPos","toggle","ElementHighlightAction","VennElementHighlight","ElementSelectedAction","ElementSingleSelectedAction","VennElementSelected","VennElementSingleSelected","VennLabel","getLabelPoint","customLabelInfo","objectProto","nativeObjectToString","symToStringTag","toStringTag","getRawTag","isOwn","tag","unmasked","objectToString","nullTag","undefinedTag","baseGetTag","createBaseFor","fromRight","object","iteratee","keysFunc","iterable","props","baseFor","baseTimes","argsTag","baseIsArguments","isArguments","MAX_SAFE_INTEGER","reIsUint","isIndex","test","isLength","arrayTag","boolTag","dateTag","errorTag","funcTag","mapTag","numberTag","objectTag","regexpTag","setTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","typedArrayTags","baseIsTypedArray","baseUnary","nodeIsTypedArray","isTypedArray","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","isPrototype","Ctor","overArg","nativeKeys","baseKeys","isObject","asyncTag","genTag","proxyTag","isFunction","isArrayLike","baseForOwn","createBaseEach","eachFunc","collection","listCacheClear","__data__","eq","other","assocIndexOf","arrayProto","listCacheDelete","lastIndex","listCacheGet","listCacheHas","listCacheSet","ListCache","entries","entry","stackClear","stackDelete","stackGet","stackHas","coreJsData","maskSrcKey","uid","exec","IE_PROTO","isMasked","funcProto","funcToString","toSource","reRegExpChar","reIsHostCtor","reIsNative","baseIsNative","getValue","getNative","nativeCreate","hashClear","hashDelete","HASH_UNDEFINED","hashGet","hashHas","hashSet","Hash","mapCacheClear","isKeyable","getMapData","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","LARGE_ARRAY_SIZE","stackSet","pairs","Stack","setCacheAdd","setCacheHas","SetCache","Uint8Array","symbolProto","DataView","WeakMap","promiseTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag","ArrayBuffer","resolve","ctorString","SPACES","PATH_COMMAND","PATH_VALUES","parsePathString","pathString","paramCounts","q","segments","fillAttrs","getMarker","markerCfg","c0","blendObject","normal","multiply","screen","overlay","darken","lighten","dodge","burn","innerBlend","mode","blend","blendRgbArr","colorToArr","r0","g0","b0","g1","b1","rgbaArr","rgb2arr","toRGB","SMALL","intersectionArea","stats","intersectionPoints","getIntersectionPoints","innerPoints","containedInCircles","arcArea","polygonArea","arcs","midPoint","parentIndex","angleDiff","circleArea","smallest","disjoint","intersect","circleCircleIntersection","acos","circleOverlap","circleMargin","interior","exterior","margin","computeTextCentre","solution","valid","areaStats","getOverlappingCircles","circleids","circleid","computeTextCentres","areas","overlapped","sets","areaids","exclude","overlaps","setid","centre","circlePath","intersectionAreaPath","wide","venn","initialLayout","bestInitialLayout","loss","lossFunction","addMissingAreas","setids","setid_1","positions","distanceFromIntersectArea","overlap","ids","getDistanceMatrices","distances","constraints","constrainedMDSGradient","xi","yi","xj","yj","dij","squaredDistance","distance_1","greedyLayout","constrained","constrainedMDSLayout","constrainedLoss","greedyLoss","restarts","matrices","norm","best","setOverlaps","rowid","mostOverlapped","positioned","isPositioned","positionSet","setIndex","extraPoints","bestLoss","bestPoint","localLoss","getCircles","indices","getBoundingBox","minMax","lo","xRange","yRange","scaleSolution","bounds","xScaling","yScaling","scaling","xOffset","yOffset","scaled","getColorMap","colorPalette","setsField","colorMap","colorPaletteLen","colorArr","JSON","stringify","layoutVennData","vennData","textCenters","setCircles","islegalSets","legalArr","testArr","LEGEND_SPACE","colors20","palette","transformColor","map_1","currSets","filterSets","colorOptions","vennInteraction","MAP_1","Venn","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","kde","sampleSize","violinStyle","quantileSorted","swap","tmp","quickselect","sd","newLeft","newRight","quantile","multiQuantileSelect","results","quantileIndex","quantileSelect","stack","toBoxValue","q1","q3","toViolinValue","pdfOptions","pdfResults","violinSize","violinY","transformViolinData","group_1","records","resultList","seriesGroup","series","TOOLTIP_FIELDS","adjustCfg","boxView","minMaxView","quantileView","medianView","legendField_1","legendOptions","violinView","Violin","DIFF_FIELD","ABSOLUTE_FIELD","IS_TOTAL","leaderLine","waterfallStyle","getRectPath","newYField","processed","dIdx","localeTotalLabel","colorMapping","Y_FIELD_META","labelMode","nextPoints","rectPath","parsePath","leaderLineCfg","linkPath","Waterfall","WORD_CLOUD_COLOR_FIELD","timeInterval","wordStyle","rotationSteps","rotateRatio","spiral","wordCloud","words","tagCloud","imageMask","createMask","tags","_tags","cloudRadians","cw","ch","cloudText","cloudFont","cloudFontNormal","cloudFontSize","cloudRotate","cloudPadding","cloudSprite","contextAndRatio","di","sprite","clearRect","maxh","save","rotate","sr","cr","wcr","wsr","hcr","hsr","fillText","strokeText","restore","xoff","yoff","hasText","pixels","getImageData","w32","seen","seenRow","cloudCollide","board","sw","msx","cloudBounds","collideRects","archimedeanSpiral","rectangularSpiral","sign","zeroArray","cloudCanvas","functor","spirals","archimedean","rectangular","cloud","willReadFrequently","dxdy","startX","startY","maxDelta","dt","Date","now","hasImage","_bounds","img","can","cxt","drawImage","imageData","flag","rawOptions","chartPadding","wordField","placementStrategy","getSingleKeyValues","getFontSizeMapping","getSize","getRotate","resolvePadding","processImageMask","Promise","rej","HTMLImageElement","image_1","Image","crossOrigin","onerror","ERROR","fMin_1","fMax_1","min_1","max_1","resolveRotate","perSize","numbers","getTextAttrs","WordCloud","handler","then","catch","P","defaultOptions","originalModule","webpackPolyfill"],"mappings":"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","file":"fbStatic/js/chunk-9a981d40.f6c75a7c.js","sourcesContent":["\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.createSensor = void 0;\nvar _object = require(\"./object\");\nvar _resizeObserver = require(\"./resizeObserver\");\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;","(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 freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\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 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n clearTimeout(timer);\n timer = setTimeout(function () {\n fn.apply(_this, args);\n }, delay);\n };\n};\nexports[\"default\"] = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.removeSensor = exports.getSensor = exports.Sensors = void 0;\nvar _id = _interopRequireDefault(require(\"./id\"));\nvar _sensors = require(\"./sensors\");\nvar _constant = require(\"./constant\");\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\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/**\n * When destroy the sensor, remove it from the pool\n */\nexports.Sensors = Sensors;\nfunction clean(sensorId) {\n // exist, then remove from pool\n if (sensorId && Sensors[sensorId]) {\n delete Sensors[sensorId];\n }\n}\n\n/**\n * get one sensor\n * @param element\n * @returns {*}\n */\nvar getSensor = function getSensor(element) {\n var sensorId = element.getAttribute(_constant.SizeSensorId);\n\n // 1. if the sensor exists, then use it\n if (sensorId && Sensors[sensorId]) {\n return Sensors[sensorId];\n }\n\n // 2. not exist, then create one\n var newId = (0, _id[\"default\"])();\n element.setAttribute(_constant.SizeSensorId, newId);\n var sensor = (0, _sensors.createSensor)(element, function () {\n return clean(newId);\n });\n // add sensor into pool\n Sensors[newId] = sensor;\n return sensor;\n};\n\n/**\n * 移除 sensor\n * @param sensor\n */\nexports.getSensor = getSensor;\nvar removeSensor = function removeSensor(sensor) {\n var sensorId = sensor.element.getAttribute(_constant.SizeSensorId);\n // remove event, dom of the sensor used\n sensor.destroy();\n clean(sensorId);\n};\nexports.removeSensor = removeSensor;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.createSensor = void 0;\nvar _debounce = _interopRequireDefault(require(\"../debounce\"));\nvar _constant = require(\"../constant\");\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n/**\n * Created by hustcc on 18/6/9.\n * Contract: i@hust.cc\n */\n\nvar createSensor = function createSensor(element, whenDestroy) {\n var sensor = undefined;\n // callback\n var listeners = [];\n\n /**\n * create object DOM of sensor\n * @returns {HTMLObjectElement}\n */\n var newSensor = function newSensor() {\n // adjust style\n if (getComputedStyle(element).position === 'static') {\n element.style.position = 'relative';\n }\n var obj = document.createElement('object');\n obj.onload = function () {\n obj.contentDocument.defaultView.addEventListener('resize', resizeListener);\n // 直接触发一次 resize\n resizeListener();\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';\n\n // append into dom\n element.appendChild(obj);\n // for ie, should set data attribute delay, or will be white screen\n obj.data = 'about:blank';\n return obj;\n };\n\n /**\n * trigger listeners\n */\n var resizeListener = (0, _debounce[\"default\"])(function () {\n // trigger all listener\n listeners.forEach(function (listener) {\n listener(element);\n });\n });\n\n /**\n * listen with one callback function\n * @param cb\n */\n var bind = function bind(cb) {\n // if not exist sensor, then create one\n if (!sensor) {\n sensor = newSensor();\n }\n if (listeners.indexOf(cb) === -1) {\n listeners.push(cb);\n }\n };\n\n /**\n * destroy all\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 }\n // remove dom\n sensor.parentNode.removeChild(sensor);\n // initial variable\n element.removeAttribute(_constant.SizeSensorId);\n sensor = undefined;\n listeners = [];\n whenDestroy && whenDestroy();\n }\n };\n\n /**\n * cancel listener bind\n * @param cb\n */\n var unbind = function unbind(cb) {\n var idx = listeners.indexOf(cb);\n if (idx !== -1) {\n listeners.splice(idx, 1);\n }\n\n // no listener, and sensor is exist\n // then destroy the sensor\n if (listeners.length === 0 && sensor) {\n destroy();\n }\n };\n return {\n element: element,\n bind: bind,\n destroy: destroy,\n unbind: unbind\n };\n};\nexports.createSensor = createSensor;","// 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","// a string of all valid unicode whitespaces\n// eslint-disable-next-line max-len\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var requireObjectCoercible = require('../internals/require-object-coercible');\nvar whitespaces = require('../internals/whitespaces');\n\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = String(requireObjectCoercible($this));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.github.io/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.github.io/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n/**\n * Created by hustcc on 18/6/9.\n * Contract: i@hust.cc\n */\n\nvar id = 1;\n\n/**\n * generate unique id in application\n * @return {string}\n */\nvar _default = function _default() {\n return \"\".concat(id++);\n};\nexports[\"default\"] = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.createSensor = void 0;\nvar _constant = require(\"../constant\");\nvar _debounce = _interopRequireDefault(require(\"../debounce\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n/**\n * Created by hustcc on 18/7/5.\n * Contract: i@hust.cc\n */\n\nvar createSensor = function createSensor(element, whenDestroy) {\n var sensor = undefined;\n // callback\n var listeners = [];\n\n /**\n * trigger listeners\n */\n var resizeListener = (0, _debounce[\"default\"])(function () {\n // trigger all\n listeners.forEach(function (listener) {\n listener(element);\n });\n });\n\n /**\n * create ResizeObserver sensor\n * @returns\n */\n var newSensor = function newSensor() {\n var s = new ResizeObserver(resizeListener);\n // listen element\n s.observe(element);\n\n // trigger once\n resizeListener();\n return s;\n };\n\n /**\n * listen with callback\n * @param cb\n */\n var bind = function bind(cb) {\n if (!sensor) {\n sensor = newSensor();\n }\n if (listeners.indexOf(cb) === -1) {\n listeners.push(cb);\n }\n };\n\n /**\n * destroy\n */\n var destroy = function destroy() {\n sensor.disconnect();\n listeners = [];\n sensor = undefined;\n element.removeAttribute(_constant.SizeSensorId);\n whenDestroy && whenDestroy();\n };\n\n /**\n * cancel bind\n * @param cb\n */\n var unbind = function unbind(cb) {\n var idx = listeners.indexOf(cb);\n if (idx !== -1) {\n listeners.splice(idx, 1);\n }\n\n // no listener, and sensor is exist\n // then destroy the sensor\n if (listeners.length === 0 && sensor) {\n destroy();\n }\n };\n return {\n element: element,\n bind: bind,\n destroy: destroy,\n unbind: unbind\n };\n};\nexports.createSensor = createSensor;","'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","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar has = require('../internals/has');\nvar classof = require('../internals/classof-raw');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar toPrimitive = require('../internals/to-primitive');\nvar fails = require('../internals/fails');\nvar create = require('../internals/object-create');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar defineProperty = require('../internals/object-define-property').f;\nvar trim = require('../internals/string-trim').trim;\n\nvar NUMBER = 'Number';\nvar NativeNumber = global[NUMBER];\nvar NumberPrototype = NativeNumber.prototype;\n\n// Opera ~12 has broken Object#toString\nvar BROKEN_CLASSOF = classof(create(NumberPrototype)) == NUMBER;\n\n// `ToNumber` abstract operation\n// https://tc39.github.io/ecma262/#sec-tonumber\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n var first, third, radix, maxCode, digits, length, index, code;\n if (typeof it == 'string' && it.length > 2) {\n it = trim(it);\n first = it.charCodeAt(0);\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i\n default: return +it;\n }\n digits = it.slice(2);\n length = digits.length;\n for (index = 0; index < length; index++) {\n code = digits.charCodeAt(index);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\n// `Number` constructor\n// https://tc39.github.io/ecma262/#sec-number-constructor\nif (isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {\n var NumberWrapper = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var dummy = this;\n return dummy instanceof NumberWrapper\n // check on 1..constructor(foo) case\n && (BROKEN_CLASSOF ? fails(function () { NumberPrototype.valueOf.call(dummy); }) : classof(dummy) != NUMBER)\n ? inheritIfRequired(new NativeNumber(toNumber(it)), dummy, NumberWrapper) : toNumber(it);\n };\n for (var keys = DESCRIPTORS ? getOwnPropertyNames(NativeNumber) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES2015 (in case, if modules with ES2015 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(NativeNumber, key = keys[j]) && !has(NumberWrapper, key)) {\n defineProperty(NumberWrapper, key, getOwnPropertyDescriptor(NativeNumber, key));\n }\n }\n NumberWrapper.prototype = NumberPrototype;\n NumberPrototype.constructor = NumberWrapper;\n redefine(global, NUMBER, NumberWrapper);\n}\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ver = exports.clear = exports.bind = void 0;\nvar _sensorPool = require(\"./sensorPool\");\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);\n\n // listen with callback\n sensor.bind(cb);\n\n // return unbind function\n return function () {\n sensor.unbind(cb);\n };\n};\n\n/**\n * clear all the listener and sensor of an element\n * @param element\n */\nexports.bind = bind;\nvar clear = function clear(element) {\n var sensor = (0, _sensorPool.getSensor)(element);\n (0, _sensorPool.removeSensor)(sensor);\n};\nexports.clear = clear;\nvar ver = \"1.0.2\";\nexports.ver = ver;","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","'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","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('el-card',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.dataLoading),expression:\"dataLoading\"}],staticClass:\"box-card MT20\"},[_c('div',{staticClass:\"clearfix\",attrs:{\"slot\":\"header\"},slot:\"header\"},[_c('span',[_c('span',{staticClass:\"el-icon-data-line\"}),_vm._v(\" 分时销售数据 \"),_c('span',{staticClass:\"color-danger\"},[_vm._v(\"(注意:分时统计展示的是历史销售数据,即当时售出的门票数(包括后来可能取消的门票),而非当前实际销售票数)\")])])]),(_vm.ticketNameData)?_c('div',{staticClass:\"page-filter-box\"},[_c('el-row',[_c('el-col',{attrs:{\"span\":4}},[_c('el-select',{attrs:{\"placeholder\":\"请选择\",\"size\":\"medium\",\"clearable\":\"\"},on:{\"change\":_vm.changeActivity},model:{value:(_vm.selectKey),callback:function ($$v) {_vm.selectKey=$$v},expression:\"selectKey\"}},_vm._l((_vm.ticketNameData),function(item,index){return _c('el-option',{key:index,attrs:{\"label\":item.value,\"value\":item.key}})}),1)],1),_c('el-col',{attrs:{\"span\":3}},[_c('el-radio-group',{staticClass:\"MR20\",attrs:{\"size\":\"medium\"},on:{\"change\":_vm.getTime},model:{value:(_vm.timeType),callback:function ($$v) {_vm.timeType=$$v},expression:\"timeType\"}},[_c('el-radio-button',{attrs:{\"label\":0}},[_vm._v(\"小时\")]),_c('el-radio-button',{attrs:{\"label\":1}},[_vm._v(\"天\")])],1)],1),_c('el-col',{attrs:{\"span\":8}},[_c('el-date-picker',{attrs:{\"type\":\"daterange\",\"range-separator\":\"-\",\"start-placeholder\":\"开始日期\",\"end-placeholder\":\"结束日期\",\"value-format\":\"yyyy-MM-dd HH:mm:ss\",\"clearable\":false,\"unlink-panels\":\"\",\"picker-options\":_vm.pickerOptions},on:{\"change\":_vm.daterangeChange},model:{value:(_vm.daterange),callback:function ($$v) {_vm.daterange=$$v},expression:\"daterange\"}})],1),_c('el-col',{attrs:{\"span\":5}},[_c('div',{staticClass:\"color-danger ML20\"},[_vm._v(\"按小时统计只能看最多7天的数据\"),_c('br'),_vm._v(\"按天统计只能看最多一年的数据\")])])],1)],1):_vm._e(),_c('div',{staticClass:\"content\"},[_c('div',{ref:\"chartContainer\",attrs:{\"id\":\"chartContainer\"}})])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/**\n * Simplified from https://github.com/zertosh/invariant.\n */\nimport { __spreadArray } 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 \"\".concat(BRAND, \": \").concat(format.replace(/%s/g, function () { return \"\".concat(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, __spreadArray([format], args, false)));\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, __spreadArray([format], args, false)));\n }\n}\n//# sourceMappingURL=invariant.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","/**\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","import { __assign } from \"tslib\";\nimport { filter, get, isNumber } 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 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","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","/**\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","/**\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 { get, reduce } 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","/**\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","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 { __spreadArray } 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, \"\".concat(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 __spreadArray([text], values(font), true).join('');\n});\n//# sourceMappingURL=measure-text.js.map","/**\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 { isArray, isNumber } 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 { 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","import { __assign } from \"tslib\";\nimport { each, get, isFunction, isNumber, isString } from '@antv/util';\nimport { kebabCase } from './kebab-case';\nimport { pick } from './pick';\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'] = \"\".concat([shadowColor, \"\".concat(shadowOffsetX, \"px\"), \"\".concat(shadowOffsetY, \"px\"), \"\".concat(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'] = \"\".concat([\"\".concat(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)] = \"\".concat(v, \"px\");\n }\n else if (k && !shapeStyleKeys.includes(k)) {\n styleObject[kebabCase(k)] = \"\".concat(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: \"\".concat(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 : \"\".concat(text)) : '
';\n }, \n // @ts-ignore\n key: \"\".concat(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: \"\".concat(containerWidth, \"px\"), transform: \"translate(-50%, \".concat(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 : \"\".concat(text)) : '
';\n } }, pick(option, ['offsetX', 'offsetY', 'rotate', 'style', 'formatter']) /** 透传配置 */));\n });\n};\n//# sourceMappingURL=statistic.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*\".concat(k, \"\\\\s*}\"), 'g'), v); }, source);\n}\n//# sourceMappingURL=template.js.map","import { each, isFunction } from '@antv/util';\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/**\n * 所有的 Geometries 都使用同一动画(各个图形如有区别,自行覆盖)并添加处理动画回调\n * @param view View\n * @param animation 动画配置\n */\nexport function addViewAnimation(view, animation, geometries) {\n if (geometries === void 0) { geometries = view.geometries; }\n // 同时设置整个 view 动画选项\n if (typeof animation === 'boolean') {\n view.animate(animation);\n }\n else {\n view.animate(true);\n }\n // 所有的 Geometry 都使用同一动画(各个图形如有区别,自行覆盖)\n each(geometries, function (g) {\n var animationCfg;\n if (isFunction(animation)) {\n animationCfg = animation(g.type || g.shapeType, g) || true;\n }\n else {\n animationCfg = animation;\n }\n g.animate(animationCfg);\n });\n}\n//# sourceMappingURL=view.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 = \"\".concat(width, \"px\");\n canvas.style.height = \"\".concat(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 { drawBackground, getPixelRatio, getSymbolsPosition, getUnitPatternSize, initCanvas, transformMatrix, } 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 { drawBackground, getPixelRatio, initCanvas, transformMatrix } 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 \".concat(width, \" 0\\n M 0 \").concat(height, \" L \").concat(width, \" \").concat(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 { drawBackground, getPixelRatio, getSymbolsPosition, getUnitPatternSize, initCanvas, transformMatrix, } 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","import { __assign, __spreadArray } from \"tslib\";\nimport { Util } from '@antv/g2';\nimport { get } from '@antv/util';\nimport { deepAssign } from '../utils';\nimport { getCanvasPattern } from '../utils/pattern';\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, __spreadArray([_this, datum], args, false)) : styleOption || {})), { fill: pattern || color });\n };\n return deepAssign({}, params, { options: (_a = {}, _a[key] = style, _a) });\n };\n}\n//# sourceMappingURL=pattern.js.map","import { __spreadArray } from \"tslib\";\nimport { each, isNil, isObject } from '@antv/util';\nimport { AXIS_META_CONFIG_KEYS } from '../constant';\nimport { addViewAnimation, deepAssign, pick } 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 // 所有的 Geometry 都使用同一动画(各个图形如有区别,自行覆盖)\n addViewAnimation(chart, animation);\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(__spreadArray(__spreadArray([], (options.annotations || []), true), (annotationOptions || []), true), 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}\n/**\n * 坐标系转换\n */\nexport function transformations(coordinateType) {\n if (coordinateType === void 0) { coordinateType = 'rect'; }\n return function (params) {\n var chart = params.chart, options = params.options;\n var coordinate = options.coordinate;\n var actions = Array.from(coordinate || [])\n .map(function (cfg) {\n if (cfg.type === 'reflectX')\n return ['reflect', 'x'];\n if (cfg.type === 'reflectY')\n return ['reflect', 'y'];\n if (cfg.type === 'transpose')\n return ['transpose'];\n return null;\n })\n .filter(function (d) { return !!d; });\n if (actions.length !== 0) {\n chart.coordinate({ type: coordinateType, actions: actions });\n }\n return params;\n };\n}\nexport { pattern } from './pattern';\n//# sourceMappingURL=common.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 { 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","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","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","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, // 关闭 tooltip\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 { __assign, __rest, __spreadArray } from \"tslib\";\nimport { isEmpty, isFunction, isNumber, isObject, isString, uniq } 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;\n var rawFields = o.rawFields;\n var fields = [];\n rawFields = (isFunction(rawFields) ? rawFields(type, field) : rawFields) || [];\n // 因为 color 会影响到数据分组,以及最后的图形映射。所以导致 bar 图中的 widthRatio 设置不生效\n // 所以对于 color 字段,仅仅保留 colorField 好了! + rawFields\n // shape, size 同理\n if (field === 'color') {\n fields = __spreadArray([colorField || xField], rawFields, true);\n }\n else if (field === 'shape') {\n fields = __spreadArray([shapeField || xField], rawFields, true);\n }\n else if (field === 'size') {\n fields = __spreadArray([sizeField || xField], rawFields, true);\n }\n else {\n fields = __spreadArray([xField, yField, colorField, shapeField, sizeField, styleField], rawFields, true);\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(\"\".concat(xField, \"*\").concat(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 { deepMix } from '@antv/util';\nimport { deepAssign } from '../../utils';\nimport { getTooltipMapping } from '../../utils/tooltip';\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, useDeferredLabel = options.useDeferredLabel;\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: deepMix({\n shape: smooth ? 'smooth' : 'area',\n tooltip: formatter,\n }, area),\n args: { useDeferredLabel: useDeferredLabel },\n },\n }))\n : params;\n}\n//# sourceMappingURL=area.js.map","import { __assign } from \"tslib\";\nimport { deepAssign } from '../../utils';\nimport { getTooltipMapping } from '../../utils/tooltip';\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, useDeferredLabel = options.useDeferredLabel;\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 args: { useDeferredLabel: useDeferredLabel },\n },\n }))\n : params;\n}\n//# sourceMappingURL=edge.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, useDeferredLabel = options.useDeferredLabel;\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: {\n dodgePadding: dodgePadding,\n intervalPadding: intervalPadding,\n minColumnWidth: minColumnWidth,\n maxColumnWidth: maxColumnWidth,\n background: columnBackground,\n useDeferredLabel: useDeferredLabel,\n },\n },\n }))\n : params).ext;\n return otherAdaptor(__assign(__assign({}, params), { ext: ext }));\n}\n//# sourceMappingURL=interval.js.map","import { deepMix } from '@antv/util';\nimport { deepAssign } from '../../utils';\nimport { getTooltipMapping } from '../../utils/tooltip';\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, useDeferredLabel = options.useDeferredLabel;\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, useDeferredLabel: useDeferredLabel },\n },\n }))\n : params;\n}\n//# sourceMappingURL=line.js.map","import { __assign } from \"tslib\";\nimport { deepAssign } from '../../utils';\nimport { getTooltipMapping } from '../../utils/tooltip';\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, useDeferredLabel = options.useDeferredLabel;\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 args: { useDeferredLabel: useDeferredLabel },\n },\n }))\n : params;\n}\n//# sourceMappingURL=point.js.map","import { __assign } from \"tslib\";\nimport { deepAssign } from '../../utils';\nimport { getTooltipMapping } from '../../utils/tooltip';\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, useDeferredLabel = options.useDeferredLabel;\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 args: { useDeferredLabel: useDeferredLabel },\n },\n }))\n : params;\n}\n//# sourceMappingURL=polygon.js.map","import { __assign } from \"tslib\";\nimport { deepAssign } from '../../utils';\nimport { getTooltipMapping } from '../../utils/tooltip';\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, useDeferredLabel = options.useDeferredLabel;\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 args: { useDeferredLabel: useDeferredLabel },\n },\n }))\n : params;\n}\n//# sourceMappingURL=schema.js.map","import { __assign } from \"tslib\";\nimport { deepAssign } from '../../utils';\nimport { getTooltipMapping } from '../../utils/tooltip';\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 { __assign, __extends, __spreadArray } from \"tslib\";\nimport EE from '@antv/event-emitter';\nimport { Chart } from '@antv/g2';\nimport { each } from '@antv/util';\nimport { bind } from 'size-sensor';\nimport { deepAssign, getAllElementsRecursively, getContainerSize, 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, view) {\n view = view ? view : this.chart;\n var incoming = __spreadArray([], annotations, true);\n var controller = view.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 view.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 { __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 \"\".concat(value).concat(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 \"\".concat(value).concat(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 getDataWhetherPercentage(data, yField, groupField, asField, isPercent) {\n return !isPercent ? data : percent(data, yField, groupField, asField);\n}\n//# sourceMappingURL=percent.js.map","import { __assign, __rest } from \"tslib\";\nimport { each, isArray } from '@antv/util';\nimport { animation, annotation, interaction, limitInPlot, scale, scrollbar, slider, theme, tooltip, } from '../../adaptor/common';\nimport { area, line, point } from '../../adaptor/geometries';\nimport { deepAssign, findGeometry, flow, transformLabel } 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 fields = label.fields, callback = label.callback, cfg = __rest(label, [\"fields\", \"callback\"]);\n lineGeometry.label({\n fields: 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 { __assign, __rest } from \"tslib\";\nimport { each, omit } from '@antv/util';\nimport { animation, annotation, interaction, limitInPlot, pattern, slider, theme, tooltip, transformations, } from '../../adaptor/common';\nimport { area, line, point } from '../../adaptor/geometries';\nimport { deepAssign, findGeometry, flow, transformLabel } from '../../utils';\nimport { getDataWhetherPercentage } from '../../utils/transform/percent';\nimport { axis, legend, meta } 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, areaShape = options.areaShape, 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 = getDataWhetherPercentage(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: {\n color: color,\n style: areaStyle,\n shape: areaShape,\n },\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 fields = label.fields, callback = label.callback, cfg = __rest(label, [\"fields\", \"callback\"]);\n areaGeometry.label({\n fields: 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'), transformations('rect'), geometry, meta, adjust, axis, legend, tooltip, label, slider, annotation(), interaction, animation, limitInPlot)(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 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 { getDataWhetherPercentage } 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(getDataWhetherPercentage(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","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, options) {\n var _a = options || {}, mask = _a.mask, isStartEnable = _a.isStartEnable;\n var maskType = brushType || 'rect';\n switch (interactionType) {\n case 'brush':\n return {\n showEnable: [\n { trigger: 'plot:mouseenter', action: 'cursor:crosshair', isEnable: isStartEnable || (function () { return true; }) },\n { trigger: 'plot:mouseleave', action: 'cursor:default' },\n ],\n start: [\n {\n trigger: 'mousedown',\n isEnable: isStartEnable || isPointInView,\n action: ['brush:start', \"\".concat(maskType, \"-mask:start\"), \"\".concat(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: [\"\".concat(maskType, \"-mask:resize\")],\n },\n ],\n end: [\n {\n trigger: 'mouseup',\n isEnable: isPointInView,\n action: [\n 'brush:filter',\n 'brush:end',\n \"\".concat(maskType, \"-mask:end\"),\n \"\".concat(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', isEnable: isStartEnable || (function () { return true; }) },\n { trigger: 'plot:mousemove', action: 'cursor:crosshair', isEnable: isStartEnable || (function () { return true; }) },\n {\n trigger: 'plot:mousemove',\n action: 'cursor:default',\n isEnable: function (context) { return (isStartEnable ? !isStartEnable(context) : false); },\n },\n { trigger: 'mask:mouseenter', action: 'cursor:move', isEnable: isStartEnable || (function () { return true; }) },\n { trigger: 'plot:mouseleave', action: 'cursor:default' },\n { trigger: 'mask:mouseleave', action: 'cursor:crosshair' },\n ],\n start: [\n {\n trigger: 'plot:mousedown',\n isEnable: isStartEnable ||\n (function (context) {\n // 不要点击在 mask 上重新开始\n return !context.isInShape('mask');\n }),\n action: [\"\".concat(maskType, \"-mask:start\"), \"\".concat(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: [\"\".concat(maskType, \"-mask:moveStart\")],\n },\n ],\n processing: [\n {\n trigger: 'plot:mousemove',\n action: [\"\".concat(maskType, \"-mask:resize\")],\n },\n {\n trigger: 'mask:drag',\n action: [\"\".concat(maskType, \"-mask:move\")],\n },\n {\n trigger: 'mask:change',\n action: ['element-range-highlight:highlight'],\n },\n ],\n end: [\n { trigger: 'plot:mouseup', action: [\"\".concat(maskType, \"-mask:end\")] },\n { trigger: 'mask:dragend', action: [\"\".concat(maskType, \"-mask:moveEnd\")] },\n {\n trigger: 'document:mouseup',\n isEnable: function (context) {\n return !context.isInPlot();\n },\n action: ['element-range-highlight:clear', \"\".concat(maskType, \"-mask:end\"), \"\".concat(maskType, \"-mask:hide\")],\n },\n ],\n rollback: [{ trigger: 'dblclick', action: ['element-range-highlight:clear', \"\".concat(maskType, \"-mask:hide\")] }],\n };\n case 'brush-x':\n return {\n showEnable: [\n { trigger: 'plot:mouseenter', action: 'cursor:crosshair', isEnable: isStartEnable || (function () { return true; }) },\n { trigger: 'plot:mouseleave', action: 'cursor:default' },\n ],\n start: [\n {\n trigger: 'mousedown',\n isEnable: isStartEnable || isPointInView,\n action: ['brush-x:start', \"\".concat(maskType, \"-mask:start\"), \"\".concat(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: [\"\".concat(maskType, \"-mask:resize\")],\n },\n ],\n end: [\n {\n trigger: 'mouseup',\n isEnable: isPointInView,\n action: ['brush-x:filter', 'brush-x:end', \"\".concat(maskType, \"-mask:end\"), \"\".concat(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', isEnable: isStartEnable || (function () { return true; }) },\n { trigger: 'mask:mouseenter', action: 'cursor:move', isEnable: isStartEnable || (function () { return true; }) },\n { trigger: 'plot:mouseleave', action: 'cursor:default' },\n { trigger: 'mask:mouseleave', action: 'cursor:crosshair' },\n ],\n start: [\n {\n trigger: 'plot:mousedown',\n isEnable: isStartEnable ||\n (function (context) {\n // 不要点击在 mask 上重新开始\n return !context.isInShape('mask');\n }),\n action: [\"\".concat(maskType, \"-mask:start\"), \"\".concat(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: [\"\".concat(maskType, \"-mask:moveStart\")],\n },\n ],\n processing: [\n {\n trigger: 'plot:mousemove',\n action: [\"\".concat(maskType, \"-mask:resize\")],\n },\n {\n trigger: 'mask:drag',\n action: [\"\".concat(maskType, \"-mask:move\")],\n },\n {\n trigger: 'mask:change',\n action: ['element-range-highlight:highlight'],\n },\n ],\n end: [\n { trigger: 'plot:mouseup', action: [\"\".concat(maskType, \"-mask:end\")] },\n { trigger: 'mask:dragend', action: [\"\".concat(maskType, \"-mask:moveEnd\")] },\n {\n trigger: 'document:mouseup',\n isEnable: function (context) {\n return !context.isInPlot();\n },\n action: ['element-range-highlight:clear', \"\".concat(maskType, \"-mask:end\"), \"\".concat(maskType, \"-mask:hide\")],\n },\n ],\n rollback: [{ trigger: 'dblclick', action: ['element-range-highlight:clear', \"\".concat(maskType, \"-mask:hide\")] }],\n };\n case 'brush-y':\n return {\n showEnable: [\n { trigger: 'plot:mouseenter', action: 'cursor:crosshair', isEnable: isStartEnable || (function () { return true; }) },\n { trigger: 'plot:mouseleave', action: 'cursor:default' },\n ],\n start: [\n {\n trigger: 'mousedown',\n isEnable: isStartEnable || isPointInView,\n action: ['brush-y:start', \"\".concat(maskType, \"-mask:start\"), \"\".concat(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: [\"\".concat(maskType, \"-mask:resize\")],\n },\n ],\n end: [\n {\n trigger: 'mouseup',\n isEnable: isPointInView,\n action: ['brush-y:filter', 'brush-y:end', \"\".concat(maskType, \"-mask:end\"), \"\".concat(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', isEnable: isStartEnable || (function () { return true; }) },\n { trigger: 'mask:mouseenter', action: 'cursor:move', isEnable: isStartEnable || (function () { return true; }) },\n { trigger: 'plot:mouseleave', action: 'cursor:default' },\n { trigger: 'mask:mouseleave', action: 'cursor:crosshair' },\n ],\n start: [\n {\n trigger: 'plot:mousedown',\n isEnable: isStartEnable ||\n (function (context) {\n // 不要点击在 mask 上重新开始\n return !context.isInShape('mask');\n }),\n action: [\"\".concat(maskType, \"-mask:start\"), \"\".concat(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: [\"\".concat(maskType, \"-mask:moveStart\")],\n },\n ],\n processing: [\n {\n trigger: 'plot:mousemove',\n action: [\"\".concat(maskType, \"-mask:resize\")],\n },\n {\n trigger: 'mask:drag',\n action: [\"\".concat(maskType, \"-mask:move\")],\n },\n {\n trigger: 'mask:change',\n action: ['element-range-highlight:highlight'],\n },\n ],\n end: [\n { trigger: 'plot:mouseup', action: [\"\".concat(maskType, \"-mask:end\")] },\n { trigger: 'mask:dragend', action: [\"\".concat(maskType, \"-mask:moveEnd\")] },\n {\n trigger: 'document:mouseup',\n isEnable: function (context) {\n return !context.isInPlot();\n },\n action: ['element-range-highlight:clear', \"\".concat(maskType, \"-mask:end\"), \"\".concat(maskType, \"-mask:hide\")],\n },\n ],\n rollback: [{ trigger: 'dblclick', action: ['element-range-highlight:clear', \"\".concat(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';\n/** 先引入brush 交互 */\nimport '../interactions/brush';\nimport { getInteractionCfg } from '../interactions/brush';\nimport { deepAssign } from '../utils';\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 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 (brush) {\n obj.cfg = getInteractionCfg(type, brush.type, brush);\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 { 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 { 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 // 0 / 0 没有意义\n if (prev === 0 && next === 0) {\n return '-';\n }\n if (prev === next) {\n return '100%';\n }\n if (prev === 0) {\n return '∞';\n }\n return \"\".concat(((100 * next) / prev).toFixed(2), \"%\");\n}\n//# sourceMappingURL=conversion.js.map","import { __assign } from \"tslib\";\nimport { getTheme } from '@antv/g2';\nimport { each, find, isObject, map } from '@antv/util';\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: \"\".concat(view.id, \"-conversion-tag-arrow-\").concat(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: \"\".concat(view.id, \"-conversion-tag-text-\").concat(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 = \"\".concat(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: \"\".concat(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 { __assign, __rest } from \"tslib\";\nimport { each, filter, isMatch } from '@antv/util';\nimport { brushInteraction } from '../../adaptor/brush';\nimport { animation, annotation, interaction, limitInPlot, scale, scrollbar, slider, state, theme, transformations, } from '../../adaptor/common';\nimport { connectedArea } from '../../adaptor/connected-area';\nimport { conversionTag } from '../../adaptor/conversion-tag';\nimport { interval } from '../../adaptor/geometries';\nimport { pattern } from '../../adaptor/pattern';\nimport { adjustYMetaByZero, deepAssign, findGeometry, flow, pick, transformLabel } from '../../utils';\nimport { getDataWhetherPercentage, 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 : getDataWhetherPercentage(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) {\n var _a;\n return ({\n name: isGroup && isStack ? \"\".concat(datum[seriesField], \" - \").concat(datum[groupField]) : (_a = datum[seriesField]) !== null && _a !== void 0 ? _a : datum[xField],\n value: (Number(datum[yField]) * 100).toFixed(2) + '%',\n });\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)\n ? 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 customItems_1 = tooltipOptions.customItems;\n var tooltipFormatter_1 = (tooltipOptions === null || tooltipOptions === void 0 ? void 0 : tooltipOptions.formatter) ||\n (function (datum) { return ({ name: \"\".concat(datum[seriesField], \" - \").concat(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 // fix https://github.com/antvis/G2Plot/issues/3367\n return customItems_1 ? customItems_1(items) : 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, transformations('rect'), 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","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 // transpose column to bar 对角变换 & y 方向镜像变换\n var options = params.options;\n var coordinateOptions = [{ type: 'transpose' }, { type: 'reflectY' }].concat(options.coordinate || []);\n return deepAssign({}, params, { options: { coordinate: coordinateOptions } });\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","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","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 { __assign, __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { getDataWhetherPercentage } 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 var _a, _b;\n this.updateOption({ data: data });\n var _c = this, chart = _c.chart, options = _c.options;\n var isPercent = options.isPercent;\n var xField = options.xField, yField = options.yField, xAxis = options.xAxis, yAxis = options.yAxis;\n _a = [yField, xField], xField = _a[0], yField = _a[1];\n _b = [yAxis, xAxis], xAxis = _b[0], yAxis = _b[1];\n var switchedFieldOptions = __assign(__assign({}, options), { xField: xField, yField: yField, yAxis: yAxis, xAxis: xAxis });\n meta({ chart: chart, options: switchedFieldOptions });\n chart.changeData(getDataWhetherPercentage(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 { 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 { getDataWhetherPercentage } 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(getDataWhetherPercentage(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 { __assign } from \"tslib\";\nimport { get, isFunction, isNumber, map, maxBy } from '@antv/util';\nimport { FUNNEL_CONVERSATION, FUNNEL_MAPPING_VALUE, FUNNEL_PERCENT } from '../constant';\nexport var CONVERSION_TAG_NAME = 'CONVERSION_TAG_NAME';\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 // @ts-ignore\n var conversionTag = options.conversionTag, filteredData = options.filteredData;\n var data = filteredData || 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 name: CONVERSION_TAG_NAME,\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 { get, isArray, map } from '@antv/util';\nimport { geometry as baseGeometry } from '../../../adaptor/geometries/base';\nimport { findGeometry, flow } from '../../../utils';\nimport { getTooltipMapping } from '../../../utils/tooltip';\nimport { FUNNEL_CONVERSATION, FUNNEL_MAPPING_VALUE, FUNNEL_PERCENT } 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 */\nexport function conversionTag(params) {\n var options = params.options, chart = params.chart;\n var maxSize = options.maxSize;\n // 获取形状位置,再转化为需要的转化率位置\n var dataArray = get(chart, ['geometries', '0', 'dataArray'], []);\n var size = get(chart, ['options', 'data', 'length']);\n var x = map(dataArray, function (item) { return get(item, ['0', 'nextPoints', '0', 'x']) * size - 0.5; });\n var getLineCoordinate = function (datum, datumIndex, data, initLineOption) {\n var percent = maxSize - (maxSize - datum[FUNNEL_MAPPING_VALUE]) / 2;\n return __assign(__assign({}, initLineOption), { start: [x[datumIndex - 1] || datumIndex - 0.5, percent], end: [x[datumIndex - 1] || 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 { get, isArray, isNumber, map } from '@antv/util';\nimport { geometry as baseGeometry } from '../../../adaptor/geometries/base';\nimport { deepAssign, flow } from '../../../utils';\nimport { getTooltipMapping } from '../../../utils/tooltip';\nimport { FUNNEL_CONVERSATION, FUNNEL_MAPPING_VALUE, FUNNEL_PERCENT } 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, showFacetTitle = options.showFacetTitle;\n chart.facet('mirror', {\n fields: [compareField],\n // 漏斗图的转置规则与分面相反,默认是垂直布局\n transpose: !isTransposed,\n padding: isTransposed ? 0 : [32, 0, 0, 0],\n showTitle: showFacetTitle,\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}\nexport function compareConversionTag(params) {\n // @ts-ignore\n var chart = params.chart, index = params.index, options = params.options;\n var conversionTag = options.conversionTag, isTransposed = options.isTransposed;\n (isNumber(index) ? [chart] : chart.views).forEach(function (view, viewIndex) {\n // 获取形状位置,再转化为需要的转化率位置\n var dataArray = get(view, ['geometries', '0', 'dataArray'], []);\n var size = get(view, ['options', 'data', 'length']);\n var x = map(dataArray, function (item) { return get(item, ['0', 'nextPoints', '0', 'x']) * size - 0.5; });\n var getLineCoordinate = function (datum, datumIndex, data, initLineOption) {\n var ratio = (index || viewIndex) === 0 ? -1 : 1;\n return deepAssign({}, initLineOption, {\n start: [x[datumIndex - 1] || datumIndex - 0.5, datum[FUNNEL_MAPPING_VALUE]],\n end: [x[datumIndex - 1] || 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: (index || viewIndex) === 0 ? 'end' : 'start',\n },\n },\n });\n };\n conversionTagComponent(getLineCoordinate)(deepAssign({}, {\n chart: view,\n options: options,\n }));\n });\n}\n/**\n * 转化率组件\n * @param params\n */\nfunction conversionTag(params) {\n var chart = params.chart;\n // @ts-ignore\n chart.once('beforepaint', function () { return compareConversionTag(params); });\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 { __assign } from \"tslib\";\nimport { get, isArray, map, maxBy, reduce } from '@antv/util';\nimport { geometry as baseGeometry } from '../../../adaptor/geometries/base';\nimport { flow } from '../../../utils';\nimport { getTooltipMapping } from '../../../utils/tooltip';\nimport { FUNNEL_CONVERSATION, FUNNEL_PERCENT, FUNNEL_TOTAL_PERCENT, PLOYGON_X, PLOYGON_Y } from '../constant';\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 { deepAssign, flow } 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, showFacetTitle = options.showFacetTitle;\n chart.facet('rect', {\n fields: [seriesField],\n padding: [isTransposed ? 0 : 32, 10, 0, 10],\n showTitle: showFacetTitle,\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, __extends } from \"tslib\";\nimport { Action } from '@antv/g2';\nimport { each, filter, get, map } from '@antv/util';\nimport { conversionTag as basicConversionTag } from '../geometries/basic';\nimport { CONVERSION_TAG_NAME, transformData } from '../geometries/common';\nimport { compareConversionTag } from '../geometries/compare';\n/**\n * Funnel 转化率跟随 legend 变化事件\n */\nvar ConversionTagAction = /** @class */ (function (_super) {\n __extends(ConversionTagAction, _super);\n function ConversionTagAction() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.rendering = false;\n return _this;\n }\n ConversionTagAction.prototype.change = function (options) {\n var _this = this;\n // 防止多次重复渲染\n if (!this.rendering) {\n var seriesField = options.seriesField, compareField = options.compareField;\n var conversionTag_1 = compareField ? compareConversionTag : basicConversionTag;\n var view = this.context.view;\n // 兼容分面漏斗图\n var views = seriesField || compareField ? view.views : [view];\n map(views, function (v, index) {\n // 防止影响其他 annotations 被去除\n var annotationController = v.getController('annotation');\n var annotations = filter(get(annotationController, ['option'], []), function (_a) {\n var name = _a.name;\n return name !== CONVERSION_TAG_NAME;\n });\n annotationController.clear(true);\n each(annotations, function (annotation) {\n if (typeof annotation === 'object') {\n v.annotation()[annotation.type](annotation);\n }\n });\n var data = get(v, ['filteredData'], v.getOptions().data);\n conversionTag_1({\n chart: v,\n index: index,\n options: __assign(__assign({}, options), { \n // @ts-ignore\n filteredData: transformData(data, data, options) }),\n });\n v.filterData(data);\n _this.rendering = true;\n v.render(true);\n });\n }\n this.rendering = false;\n };\n return ConversionTagAction;\n}(Action));\nexport { ConversionTagAction };\n//# sourceMappingURL=funnel-conversion-tag.js.map","import { registerAction, registerInteraction } from '@antv/g2';\nimport { ConversionTagAction } from './funnel-conversion-tag';\nvar FUNNEL_CONVERSION_TAG = 'funnel-conversion-tag';\nexport var FUNNEL_LEGEND_FILTER = 'funnel-afterrender';\nexport var interactionStart = { trigger: 'afterrender', action: \"\".concat(FUNNEL_CONVERSION_TAG, \":change\") };\nregisterAction(FUNNEL_CONVERSION_TAG, ConversionTagAction);\nregisterInteraction(FUNNEL_LEGEND_FILTER, {\n start: [interactionStart],\n});\n//# sourceMappingURL=index.js.map","import { __assign } from \"tslib\";\nimport { clone, each, isFunction } from '@antv/util';\nimport { animation, annotation, scale, theme, tooltip } from '../../adaptor/common';\nimport { getLocale } from '../../core/locale';\nimport { deepAssign, flow } from '../../utils';\nimport { conversionTagFormatter } from '../../utils/conversion';\nimport { FUNNEL_CONVERSATION, FUNNEL_PERCENT } from './constant';\nimport { basicFunnel } from './geometries/basic';\nimport { compareFunnel } from './geometries/compare';\nimport { dynamicHeightFunnel } from './geometries/dynamic-height';\nimport { facetFunnel } from './geometries/facet';\nimport { FUNNEL_LEGEND_FILTER, interactionStart } from './interactions';\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 \"\".concat(datum[yField]); },\n }\n : {\n fields: [xField, yField, FUNNEL_PERCENT, FUNNEL_CONVERSATION],\n offset: 0,\n position: 'middle',\n formatter: function (datum) { return \"\".concat(datum[xField], \" \").concat(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 \"\".concat(i18n.get(['conversionTag', 'label']), \": \").concat(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 * Interaction 配置\n * @param params\n */\nexport function interaction(params) {\n var chart = params.chart, options = params.options;\n // @ts-ignore\n var interactions = options.interactions, dynamicHeight = options.dynamicHeight;\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 // 动态高度 不进行交互操作\n if (!dynamicHeight) {\n chart.interaction(FUNNEL_LEGEND_FILTER, {\n start: [__assign(__assign({}, interactionStart), { arg: options })],\n });\n }\n else {\n chart.removeInteraction(FUNNEL_LEGEND_FILTER);\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 { __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';\nimport './interactions';\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","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 { clamp, get, size, uniq } from '@antv/util';\nimport { PERCENT, RANGE_TYPE, RANGE_VALUE } 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] = \"\".concat(idx), _a[PERCENT] = percent, _a;\n }));\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) ? uniq(ticks) : [0, clamp(percent, 0, 1), 1];\n if (!clampTicks[0]) {\n clampTicks.shift();\n }\n return processRangeData(clampTicks, percent);\n}\n//# sourceMappingURL=utils.js.map","import { __assign } from \"tslib\";\nimport { get, isString } from '@antv/util';\nimport { animation, annotation, interaction, scale, theme } from '../../adaptor/common';\nimport { interval } from '../../adaptor/geometries';\nimport { AXIS_META_CONFIG_KEYS } from '../../constant';\nimport { deepAssign, flow, pick, renderGaugeStatistic } from '../../utils';\nimport { DEFAULT_COLOR, INDICATEOR_VIEW_ID, PERCENT, RANGE_TYPE, RANGE_VALUE, 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(\"\".concat(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, // 外部的 innerRadius * radius = 这里的 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: \"\".concat((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 * tooltip 配置\n */\nfunction tooltip(params) {\n var chart = params.chart, options = params.options;\n var tooltip = options.tooltip;\n if (tooltip) {\n chart.tooltip(deepAssign({\n showTitle: false,\n showMarkers: false,\n containerTpl: '
',\n domStyles: {\n 'g2-tooltip': {\n padding: '4px 8px',\n fontSize: '10px',\n },\n },\n customContent: function (x, data) {\n var percent = get(data, [0, 'data', PERCENT], 0);\n return \"\".concat((percent * 100).toFixed(2), \"%\");\n },\n }, tooltip));\n }\n else {\n // 默认,不展示 tooltip\n chart.tooltip(false);\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 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, tooltip, statistic, interaction, annotation(), other\n // ... 其他的 adaptor flow\n )(params);\n}\n//# sourceMappingURL=adaptor.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 { Event, VIEW_LIFE_CIRCLE } from '@antv/g2';\nimport { Plot } from '../../core/plot';\nimport { adaptor, statistic } from './adaptor';\nimport { DEFAULT_OPTIONS, INDICATEOR_VIEW_ID, RANGE_VIEW_ID } from './constants';\n// 注册 shape\nimport './shapes/indicator';\nimport './shapes/meter-gauge';\nimport { getIndicatorData, getRangeData } from './utils';\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 { clone, each, getRange, groupBy, hasKey, isEmpty, sortBy, valuesOfKey } 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 = \"\".concat(bin[0], \"-\").concat(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 = \"\".concat(bin[0], \"-\").concat(bin[1]);\n var groupKeyBinKey = \"\".concat(binKey, \"-\").concat(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 { 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 { __rest } from \"tslib\";\nimport { animation, interaction, scale, state, theme, tooltip } from '../../adaptor/common';\nimport { interval } from '../../adaptor/geometries';\nimport { pattern } from '../../adaptor/pattern';\nimport { deepAssign, findGeometry, flow, transformLabel } from '../../utils';\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 else {\n chart.legend(false);\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","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 { 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 { InteractionAction } from '@antv/g2';\nimport { each, findIndex } from '@antv/util';\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 { 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 { __spreadArray } 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 ? __spreadArray([], matrix, true) : __spreadArray([], ORIGIN_MATRIX, true);\n return Util.transform(ulMatrix, actions);\n}\n//# sourceMappingURL=matrix.js.map","import { __extends } from \"tslib\";\nimport { Action, Util } 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 { 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","import { __assign, __rest } from \"tslib\";\nimport { each, get, isArray, isEmpty, isFunction, isNil, isNumber, isString, toString } from '@antv/util';\nimport { animation, annotation, legend, state, theme } from '../../adaptor/common';\nimport { interval } from '../../adaptor/geometries';\nimport { getMappingFunction } from '../../adaptor/geometries/base';\nimport { pattern } from '../../adaptor/pattern';\nimport { getLocale } from '../../core/locale';\nimport { deepAssign, flow, processIllegalData, renderStatistic, template, transformLabel } from '../../utils';\nimport { DEFAULT_OPTIONS } from './contants';\nimport { PIE_STATISTIC } from './interactions';\nimport { adaptOffset, getTotalValue, isAllZero } from './utils';\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, shape = options.shape;\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 shape: shape,\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 shape: shape,\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 percent (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) ? \"\".concat((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 // 交互中, datum existed.\n var text = datum\n ? datum[colorField]\n : !isNil(titleOpt_1.content)\n ? titleOpt_1.content\n : i18n.get(['statistic', 'total']);\n var metaFormatter = get(meta, [colorField, 'formatter']) || (function (v) { return v; });\n return metaFormatter(text);\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: \"\".concat(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","import { __extends } from \"tslib\";\nimport { Event, VIEW_LIFE_CIRCLE } from '@antv/g2';\nimport { Plot } from '../../core/plot';\nimport { processIllegalData } from '../../utils';\nimport { adaptor, pieAnnotation } from './adaptor';\nimport { DEFAULT_OPTIONS } from './contants';\nimport './interactions';\nimport { isAllZero } from './utils';\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","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 { 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 // 用于 progressStyle 的回调方法\n current: \"\".concat(clampPercent),\n type: 'current',\n percent: clampPercent,\n },\n {\n current: \"\".concat(clampPercent),\n type: 'target',\n percent: 1,\n },\n ];\n}\n//# sourceMappingURL=utils.js.map","import { isString } from '@antv/util';\nimport { animation, annotation, scale, theme } from '../../adaptor/common';\nimport { interval } from '../../adaptor/geometries';\nimport { deepAssign, flow } from '../../utils';\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: 'current',\n yField: 'percent',\n seriesField: 'type',\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 { __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 { __assign } from \"tslib\";\nimport { get, isNil } from '@antv/util';\nimport { animation, annotation, scale, theme } from '../../adaptor/common';\nimport { deepAssign, flow, renderStatistic } from '../../utils';\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 \"\".concat((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","/**\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 { Event, VIEW_LIFE_CIRCLE } 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","import { __assign } from \"tslib\";\nimport { get, isArray, isNumber } from '@antv/util';\nimport { regressionExp, regressionLinear, regressionLoess, regressionLog, regressionPoly, regressionPow, regressionQuad, } from 'd3-regression';\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, customEquation = regressionLine.equation;\n var pathData;\n var equation = null;\n if (algorithm) {\n pathData = isArray(algorithm) ? algorithm : algorithm(data);\n equation = customEquation;\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 equation = getRegressionEquation(type, pathData);\n }\n return [splinePath(pathData, config), equation];\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/**\n * 获取回归函数表达式\n * @param {string} type - 回归函数类型\n * @param {D3RegressionResult} res - 回归计算结果集\n * @return {string}\n */\nexport function getRegressionEquation(type, res) {\n var _a, _b, _c;\n var roundByPrecision = function (n, p) {\n if (p === void 0) { p = 4; }\n return Math.round(n * Math.pow(10, p)) / Math.pow(10, p);\n };\n var safeFormat = function (value) { return (Number.isFinite(value) ? roundByPrecision(value) : '?'); };\n switch (type) {\n case 'linear':\n // y = ax + b\n return \"y = \".concat(safeFormat(res.a), \"x + \").concat(safeFormat(res.b), \", R^2 = \").concat(safeFormat(res.rSquared));\n case 'exp':\n // y = ae^(bx)\n return \"y = \".concat(safeFormat(res.a), \"e^(\").concat(safeFormat(res.b), \"x), R^2 = \").concat(safeFormat(res.rSquared));\n case 'log':\n // y = a · ln(x) + b\n return \"y = \".concat(safeFormat(res.a), \"ln(x) + \").concat(safeFormat(res.b), \", R^2 = \").concat(safeFormat(res.rSquared));\n case 'quad':\n // y = ax^2 + bx + c\n return \"y = \".concat(safeFormat(res.a), \"x^2 + \").concat(safeFormat(res.b), \"x + \").concat(safeFormat(res.c), \", R^2 = \").concat(safeFormat(res.rSquared));\n case 'poly':\n // y = anx^n + ... + a1x + a0\n // eslint-disable-next-line no-case-declarations\n var temp = \"y = \".concat(safeFormat((_a = res.coefficients) === null || _a === void 0 ? void 0 : _a[0]), \" + \").concat(safeFormat((_b = res.coefficients) === null || _b === void 0 ? void 0 : _b[1]), \"x + \").concat(safeFormat((_c = res.coefficients) === null || _c === void 0 ? void 0 : _c[2]), \"x^2\");\n for (var i = 3; i < res.coefficients.length; ++i) {\n temp += \" + \".concat(safeFormat(res.coefficients[i]), \"x^\").concat(i);\n }\n return \"\".concat(temp, \", R^2 = \").concat(safeFormat(res.rSquared));\n case 'pow':\n // y = ax^b\n return \"y = \".concat(safeFormat(res.a), \"x^\").concat(safeFormat(res.b), \", R^2 = \").concat(safeFormat(res.rSquared));\n }\n return null;\n}\n//# sourceMappingURL=util.js.map","import { __assign, __rest } from \"tslib\";\nimport { isNumber } from '@antv/util';\nimport { brushInteraction } from '../../adaptor/brush';\nimport { animation, annotation, interaction, scale, scrollbar, slider, theme } from '../../adaptor/common';\nimport { point } from '../../adaptor/geometries';\nimport { deepAssign, findGeometry, flow, pick, transformLabel } from '../../utils';\nimport { getMeta, getPath, getQuadrantDefaultConfig } 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.equationStyle, equationStyle_1 = _a === void 0 ? {} : _a, _b = regressionLine.top, top_1 = _b === void 0 ? false : _b, _c = regressionLine.showEquation, showEquation_1 = _c === void 0 ? false : _c;\n var defaultStyle_1 = {\n stroke: '#9ba29a',\n lineWidth: 2,\n opacity: 0.5,\n };\n var defaulEquationStyle_1 = {\n x: 20,\n y: 20,\n textAlign: 'left',\n textBaseline: 'middle',\n fontSize: 14,\n fillOpacity: 0.5,\n };\n chart.annotation().shape({\n top: top_1,\n render: function (container, view) {\n var group = container.addGroup({\n id: \"\".concat(chart.id, \"-regression-line\"),\n name: 'regression-line-group',\n });\n var _a = getPath({\n view: view,\n options: options,\n }), path = _a[0], equation = _a[1];\n group.addShape('path', {\n name: 'regression-line',\n attrs: __assign(__assign({ path: path }, defaultStyle_1), style_1),\n });\n if (showEquation_1) {\n group.addShape('text', {\n name: 'regression-equation',\n attrs: __assign(__assign(__assign({}, defaulEquationStyle_1), equationStyle_1), { text: equation }),\n });\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 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 { 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","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, meta, transformOptions } 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 { 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 { __assign } from \"tslib\";\nimport { isArray, map } from '@antv/util';\nimport { TREND_DOWN, TREND_FIELD, 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 (item) {\n var obj = item && __assign({}, item);\n if (isArray(yField) && obj) {\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 { animation, annotation, interaction, slider, theme } from '../../adaptor/common';\nimport { schema } from '../../adaptor/geometries';\nimport { AXIS_META_CONFIG_KEYS } from '../../constant';\nimport { deepAssign, flow, pick } from '../../utils';\nimport { TREND_DOWN, TREND_FIELD, TREND_UP, Y_FIELD } 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 { DEFAULT_OPTIONS } from './constant';\nimport { getStockData } from './utils';\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","import { map } from '@antv/util';\nexport function getTinyData(data) {\n return map(data || [], function (y, x) { return ({ x: \"\".concat(x), y: y }); });\n}\n//# sourceMappingURL=utils.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 \"\".concat(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 { animation, annotation, pattern, scale, theme, tooltip } from '../../adaptor/common';\nimport { area, line, point } from '../../adaptor/geometries';\nimport { deepAssign, flow } from '../../utils';\nimport { adjustYMetaByZero } from '../../utils/data';\nimport { X_FIELD, Y_FIELD } from '../tiny-line/constants';\nimport { getTinyData } from '../tiny-line/utils';\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 } 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","import { animation, annotation, pattern, theme, tooltip } from '../../adaptor/common';\nimport { interval } from '../../adaptor/geometries';\nimport { deepAssign, flow } from '../../utils';\nimport { meta } from '../tiny-area/adaptor';\nimport { X_FIELD, Y_FIELD } from '../tiny-line/constants';\nimport { getTinyData } from '../tiny-line/utils';\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 { get } from '@antv/util';\nexport var DEFAULT_TOOLTIP_OPTIONS = {\n showTitle: false,\n shared: true,\n showMarkers: false,\n customContent: function (x, data) { return \"\".concat(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 { animation, annotation, theme, tooltip } from '../../adaptor/common';\nimport { line, point } from '../../adaptor/geometries';\nimport { deepAssign, flow } from '../../utils';\nimport { meta } from '../tiny-area/adaptor';\nimport { X_FIELD, Y_FIELD } from './constants';\nimport { getTinyData } from './utils';\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","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 { get } from '@antv/util';\nimport { deepAssign } from '../../utils';\nimport { Area } from '../area';\nimport { adaptor as areaAdaptor } from '../area/adaptor';\nimport { Bar } from '../bar';\nimport { adaptor as barAdaptor } from '../bar/adaptor';\nimport { Column } from '../column';\nimport { adaptor as columnAdaptor } from '../column/adaptor';\nimport { Funnel } from '../funnel';\nimport { adaptor as funnelAdaptor } from '../funnel/adaptor';\nimport { Gauge } from '../gauge';\nimport { adaptor as gaugeAdaptor } from '../gauge/adaptor';\nimport { Histogram } from '../histogram';\nimport { adaptor as histogramAdaptor } from '../histogram/adaptor';\nimport { Line } from '../line';\nimport { adaptor as lineAdaptor } from '../line/adaptor';\nimport { Pie } from '../pie';\nimport { adaptor as pieAdaptor } from '../pie/adaptor';\nimport { Progress } from '../progress';\nimport { adaptor as progressAdaptor } from '../progress/adaptor';\nimport { RingProgress } from '../ring-progress';\nimport { adaptor as ringProgressAdaptor } from '../ring-progress/adaptor';\nimport { Scatter } from '../scatter';\nimport { adaptor as scatterAdaptor } from '../scatter/adaptor';\nimport { Stock } from '../stock';\nimport { adaptor as stockAdaptor } from '../stock/adaptor';\nimport { TinyArea } from '../tiny-area';\nimport { adaptor as tinyAreaAdaptor } from '../tiny-area/adaptor';\nimport { TinyColumn } from '../tiny-column';\nimport { adaptor as tinyColumnAdaptor } from '../tiny-column/adaptor';\nimport { TinyLine } from '../tiny-line';\nimport { adaptor as tinyLineAdaptor } from '../tiny-line/adaptor';\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': tinyAreaAdaptor,\n 'ring-progress': ringProgressAdaptor,\n progress: progressAdaptor,\n scatter: scatterAdaptor,\n histogram: histogramAdaptor,\n funnel: funnelAdaptor,\n stock: stockAdaptor,\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 stock: Stock,\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 \".concat(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 { __assign } from \"tslib\";\nimport { each } from '@antv/util';\nimport { animation, annotation, interaction, theme, tooltip } from '../../adaptor/common';\nimport { geometry as geometryAdaptor } from '../../adaptor/geometries/base';\nimport { AXIS_META_CONFIG_KEYS } from '../../constant';\nimport { PLOT_CONTAINER_OPTIONS } from '../../core/plot';\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, _a = options.data, data = _a === void 0 ? [] : _a;\n each(plots, function (plot) {\n var type = plot.type, region = plot.region, _a = plot.options, options = _a === void 0 ? {} : _a, top = plot.top;\n var tooltip = options.tooltip;\n if (top) {\n execPlotAdaptor(type, chart, __assign(__assign({}, options), { data: data }));\n return;\n }\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, __assign({ data: data }, options));\n });\n return params;\n}\n/**\n * 处理缩略轴的 adaptor (mix)\n * @param params\n */\nexport function slider(params) {\n var chart = params.chart, options = params.options;\n chart.option('slider', options.slider);\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, slider, annotation()\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 { Action, registerAction, registerInteraction } from '@antv/g2';\nimport { each, get, isArray, map } from '@antv/util';\nimport { getAllElements, getSiblingViews, getViews } 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","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 '\".concat(plotType, \"' is in DEV stage, just give us issues.\")\n : stage === Stage.BETA\n ? \"Plot '\".concat(plotType, \"' is in BETA stage, DO NOT use it in production env.\")\n : stage === Stage.STABLE\n ? \"Plot '\".concat(plotType, \"' is in STABLE stage, import it by \\\"import { \").concat(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","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 { animation as commonAnimation, interaction as commonInteraction, limitInPlot as commonLimitInPlot, scale, theme as commonTheme, tooltip, } from '../../adaptor/common';\nimport { interval } from '../../adaptor/geometries';\nimport { deepAssign, findGeometry, findViewById, flow, transformLabel } 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 commonTheme(params);\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 { Event, VIEW_LIFE_CIRCLE } from '@antv/g2';\nimport { Plot } from '../../core/plot';\nimport { deepAssign, findViewById } from '../../utils';\nimport { adaptor } from './adaptor';\nimport { FIRST_AXES_VIEW, SECOND_AXES_VIEW, SERIES_FIELD_KEY } from './constant';\nimport { isHorizontal, syncViewPadding, transformData } from './utils';\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","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 { animation, annotation, interaction, theme, tooltip } from '../../adaptor/common';\nimport { point, schema } from '../../adaptor/geometries';\nimport { AXIS_META_CONFIG_KEYS } from '../../constant';\nimport { deepAssign, flow, pick } from '../../utils';\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, annotation(), interaction, animation, theme)(params);\n}\n//# sourceMappingURL=adaptor.js.map","import { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS, OUTLIERS_VIEW_ID } from './constant';\nimport { transformData } from './utils';\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","/**\n * 获取分类字段 key 值 一个分类值的时候, 返回非索引 key 值,在 tooltip 不做索引区分\n * @param values 数据量\n * @param field 指标字段\n * @param index 索引\n * @returns string\n */\nfunction getSeriesFieldKey(values, field, index) {\n return values.length > 1 ? \"\".concat(field, \"_\").concat(index) : \"\".concat(field);\n}\n/**\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 // 构建 title * range\n var rangeValues = [item[rangeField]].flat();\n rangeValues.sort(function (a, b) { return a - b; });\n rangeValues.forEach(function (d, i) {\n var _a;\n var range = i === 0 ? d : rangeValues[i] - rangeValues[i - 1];\n ds.push((_a = {\n rKey: \"\".concat(rangeField, \"_\").concat(i)\n },\n _a[xField] = xField ? item[xField] : String(index),\n _a[rangeField] = range,\n _a));\n });\n // 构建 title * measure\n var measureValues = [item[measureField]].flat();\n measureValues.forEach(function (d, i) {\n var _a;\n ds.push((_a = {\n mKey: getSeriesFieldKey(measureValues, measureField, i)\n },\n _a[xField] = xField ? item[xField] : String(index),\n _a[measureField] = d,\n _a));\n });\n // 构建 title * target\n var targetValues = [item[targetField]].flat();\n targetValues.forEach(function (d, i) {\n var _a;\n ds.push((_a = {\n tKey: getSeriesFieldKey(targetValues, targetField, i)\n },\n _a[xField] = xField ? item[xField] : String(index),\n _a[targetField] = d,\n _a));\n });\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 { animation, interaction, scale, theme, tooltip } from '../../adaptor/common';\nimport { interval, point } from '../../adaptor/geometries';\nimport { deepAssign, flow, transformLabel } from '../../utils';\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: \"\".concat(measureField),\n },\n _b[rangeField] = {\n sync: \"\".concat(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(\"\".concat(rangeField), false);\n chart.axis(\"\".concat(targetField), false);\n // 为 false 则是不显示轴\n if (xAxis === false) {\n chart.axis(\"\".concat(xField), false);\n }\n else {\n chart.axis(\"\".concat(xField), xAxis);\n }\n if (yAxis === false) {\n chart.axis(\"\".concat(measureField), false);\n }\n else {\n chart.axis(\"\".concat(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(\"\".concat(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(\"\".concat(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(\"\".concat(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","/*\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, // optional, id | weight | frequency | {function}\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 \"\".concat(options.target(edge)) === \"\".concat(id); });\n node.outEdges = edges.filter(function (edge) { return \"\".concat(options.source(edge)) === \"\".concat(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 \"\".concat(options.id(a)).localeCompare(\"\".concat(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 { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor, meta } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\nimport { transformData } from './utils';\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","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 offsetX: offsetX,\n content: name,\n };\n },\n labelEmit: true,\n style: {\n fill: '#8c8c8c',\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: \"\".concat(source, \" -> \").concat(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, __spreadArray } from \"tslib\";\nimport { interaction, state, theme } from '../../adaptor/common';\nimport { edge, polygon } from '../../adaptor/geometries';\nimport { addViewAnimation, flow, getAllGeometriesRecursively, pick, transformDataToNodeLinkData } from '../../utils';\nimport { chordLayout } from '../../utils/transform/chord';\nimport { EDGE_COLOR_FIELD, NODE_COLOR_FIELD, X_FIELD, Y_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, __spreadArray(['id', 'x', 'y', 'name'], rawFields, true))), { 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, __spreadArray(['x', 'y', 'value'], rawFields, true))), { 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 addViewAnimation(chart, animation, getAllGeometriesRecursively(chart));\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","/** 默认的源字段 */\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, __extends } from \"tslib\";\nimport { Action, Util } from '@antv/g2';\nimport { get, isNil, last, 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: \"\".concat(nodeData.name, \"_\").concat(node.height, \"_\").concat(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: \"\".concat(BREAD_CRUMB_NAME, \"_\").concat(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: \"\".concat(config.name, \"_\").concat(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","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 {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 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","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","export function constantZero() {\n return 0;\n}\n\nexport default function(x) {\n return function() {\n return x;\n };\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","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 { filter, isArray, isString } 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(\"\".concat(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","import { assign, isArray } from '@antv/util';\nimport * as d3Hierarchy from 'd3-hierarchy';\nimport { getAllNodes, getField } 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 { HIERARCHY_DATA_TRANSFORM_PARAMS } from '../../interactions/actions/drill-down';\nimport { deepAssign, pick } from '../../utils';\nimport { pack } from '../../utils/hierarchy/pack';\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 = \"\".concat((_a = ancestorNode.parent.data) === null || _a === void 0 ? void 0 : _a.name, \" / \").concat(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","import { __assign, __spreadArray } from \"tslib\";\nimport { get } from '@antv/util';\nimport { animation, annotation, interaction as baseInteraction, legend, pattern, scale, theme, } from '../../adaptor/common';\nimport { point } from '../../adaptor/geometries/point';\nimport { deepAssign, flow } from '../../utils';\nimport { getAdjustAppendPadding, resolveAllPadding } from '../../utils/padding';\nimport { RAW_FIELDS } from './constant';\nimport { resolvePaddingForCircle, transformData } from './utils';\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 }, // 当autofit:false时,默认给固定半径\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: __spreadArray(__spreadArray([], RAW_FIELDS, true), rawFields, true),\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: __spreadArray(__spreadArray([], interactions, true), [\n {\n type: 'drill-down',\n cfg: { drillDownConfig: drilldown, transformData: transformData, enableDrillDown: true },\n },\n ], false),\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 { registerAction, registerInteraction } 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","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","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 { DEFAULT_LEFT_YAXIS_CONFIG, DEFAULT_RIGHT_YAXIS_CONFIG } from '../constant';\nimport { AxisType, DualAxesGeometry, } from '../types';\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 { __assign } from \"tslib\";\nimport { each } from '@antv/util';\nimport { line, point } from '../../../adaptor/geometries';\nimport { deepAssign, pick } from '../../../utils';\nimport { adaptor as columnAdaptor } from '../../column/adaptor';\nimport { isColumn, isLine } 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 { Util } from '@antv/g2';\nimport { get, isEmpty, isFunction, reduce } from '@antv/util';\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.\".concat(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 { 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, every, find, findIndex, get, isBoolean, isEqual, isObject } from '@antv/util';\nimport { animation as commonAnimation, annotation as commonAnnotation, interaction as commonInteraction, limitInPlot as commonLimitInPlot, scale, theme as commonTheme, } from '../../adaptor/common';\nimport { deepAssign, flow } from '../../utils';\nimport { percent } from '../../utils/transform/percent';\nimport { findViewById } from '../../utils/view';\nimport { LEFT_AXES_VIEW, RIGHT_AXES_VIEW } from './constant';\nimport { AxisType, DualAxesGeometry } from './types';\nimport { drawSingleGeometry } from './util/geometry';\nimport { getViewLegendItems } from './util/legend';\nimport { getGeometryOption, getYAxisWithDefault, isColumn, transformObjectToArray } from './util/option';\nimport { doSliderFilter } from './util/render-sider';\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 } from \"tslib\";\nimport { each } from '@antv/util';\nimport { geometry as geometryAdaptor } from '../../adaptor/geometries/base';\nimport { AXIS_META_CONFIG_KEYS } from '../../constant';\nimport { addViewAnimation, deepAssign, pick } 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 addViewAnimation(viewOfG2, animation);\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 { deepAssign, flow, pick } 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","import { __rest } from \"tslib\";\nimport { get, isNumber } from '@antv/util';\nimport { animation, annotation, interaction, pattern, scale, state, theme, tooltip } from '../../adaptor/common';\nimport { geometry as geometryAdaptor } from '../../adaptor/geometries/base';\nimport { deepAssign, findGeometry, flow, transformLabel } from '../../utils';\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, meta = options.meta;\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 _a = (meta === null || meta === void 0 ? void 0 : meta[sizeField]) || {}, min = _a.min, max = _a.max;\n min = isNumber(min) ? min : Math.min.apply(Math, field);\n max = isNumber(max) ? 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 _a, _b;\n var chart = params.chart, options = params.options;\n var coordinate = options.coordinate, reflect = options.reflect;\n var coordinateOption = deepAssign({ actions: [] }, coordinate !== null && coordinate !== void 0 ? coordinate : { type: 'rect' });\n if (reflect) {\n (_b = (_a = coordinateOption.actions) === null || _a === void 0 ? void 0 : _a.push) === null || _b === void 0 ? void 0 : _b.call(_a, ['reflect', reflect]);\n }\n chart.coordinate(coordinateOption);\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","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 { animation, interaction, pattern, scale, theme } from '../../adaptor/common';\nimport { interval } from '../../adaptor/geometries';\nimport { deepAssign, flow, renderStatistic } from '../../utils';\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, shapeStyle = options.shapeStyle, 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 percent: percent,\n radius: radius,\n outline: outline,\n wave: wave,\n shape: shape,\n shapeStyle: shapeStyle,\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 \"\".concat((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 { isNumber, mix, reduce } 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 */\nexport function addWaterWave(x, y, level, waveCount, waveAttrs, group, clip, radius, waveLength, animation) {\n // 盒子属性 颜色 宽高\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 // 循环 waveCount 个数\n for (var idx = 0; idx < waveCount; idx++) {\n var factor = waveCount <= 1 ? 1 : idx / (waveCount - 1);\n // 画波\n var wave = group.addShape('path', {\n name: \"waterwave-path\",\n attrs: {\n // 波形路径配置\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 // 默认 underfind 开启动画\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 \".concat(x0, \" \").concat(y0, \"\\n A \").concat(r, \" \").concat(r, \" 0 1 1 \").concat(x0 + dx * 2, \" \").concat(y0, \"\\n Q \").concat(cpX, \" \").concat(cpY, \" \").concat(x, \" \").concat(y + h / 2, \"\\n Q \").concat(cpX, \" \").concat(cpY, \" \").concat(x0, \" \").concat(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 \".concat(x, \" \").concat(y - ry, \" \\n a \").concat(rx, \" \").concat(ry, \" 0 1 0 0 \").concat(ry * 2, \"\\n a \").concat(rx, \" \").concat(ry, \" 0 1 0 0 \").concat(-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 \".concat(x, \" \").concat(y - h, \"\\n L \").concat(x + w, \" \").concat(y, \"\\n L \").concat(x, \" \").concat(y + h, \"\\n L \").concat(x - w, \" \").concat(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 \".concat(x, \" \").concat(y - h, \"\\n L \").concat(x + w, \" \").concat(y + h, \"\\n L \").concat(x - w, \" \").concat(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 \".concat(x - w, \" \").concat(y - h, \"\\n L \").concat(x + w, \" \").concat(y - h, \"\\n L \").concat(x + w, \" \").concat(y + h, \"\\n L \").concat(x - w, \" \").concat(y + h, \"\\n Z\\n \");\n}\nvar builtInShapeByName = {\n pin: pin,\n circle: circle,\n diamond: diamond,\n triangle: triangle,\n rect: rect,\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, percent = _a.percent, radio = _a.radius, shape = _a.shape, shapeStyle = _a.shapeStyle, 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 buildPath = typeof shape === 'function' ? shape : builtInShapeByName[shape] || builtInShapeByName['circle'];\n var shapePath = buildPath(center.x, center.y, innerRadius * 2, innerRadius * 2);\n // 1. 当 shapeStyle 不为空时,绘制形状样式作为背景\n if (shapeStyle) {\n container.addShape('path', {\n name: 'shape',\n attrs: __assign({ path: shapePath }, shapeStyle),\n });\n }\n // 比例大于 0 时才绘制水波\n if (percent > 0) {\n // 2. 绘制一个波\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 }\n // 5. 绘制一个 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 // 6. 绘制一个 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 { Event, VIEW_LIFE_CIRCLE } from '@antv/g2';\nimport { Plot } from '../../core/plot';\nimport { adaptor, statistic } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constants';\n// register liquid shape\nimport './shapes/liquid';\nimport { getLiquidData } from './utils';\nexport { addWaterWave } from './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","import { __assign, __rest } from \"tslib\";\nimport { animation, annotation, interaction, legend, scale, theme, tooltip } from '../../adaptor/common';\nimport { area, line, point } from '../../adaptor/geometries';\nimport { deepAssign, findGeometry, flow, transformLabel } 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 fields = label.fields, callback = label.callback, cfg = __rest(label, [\"fields\", \"callback\"]);\n geometry.label({\n fields: 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 { Action, registerComponentController, TooltipController, Util } 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 } 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 { animation, annotation, interaction, legend, scale, theme, tooltip } from '../../adaptor/common';\nimport { interval, point } from '../../adaptor/geometries';\nimport { pattern } from '../../adaptor/pattern';\nimport { deepAssign, findGeometry, flow, processIllegalData, transformLabel } 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, shape = options.shape;\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: 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 { __rest } from \"tslib\";\nimport { filter, isArray, isObject } from '@antv/util';\nimport { animation, annotation, interaction, pattern, scale, state, theme, tooltip } from '../../adaptor/common';\nimport { interval } from '../../adaptor/geometries';\nimport { deepAssign, findGeometry, flow, LEVEL, log, transformLabel } 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, sectorStyle = options.sectorStyle, shape = options.shape, 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 shape: shape,\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","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 { __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 { 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(\"\".concat(dfsNode, \"_\").concat(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, \".concat(removedData.length, \" records removed.\"), removedData);\n }\n // 过滤 remove 路径\n return edges.filter(function (edge) { return removedData.findIndex(function (i) { return i === \"\".concat(edge[sourceField], \"_\").concat(edge[targetField]); }) < 0; });\n}\n//# sourceMappingURL=circle.js.map","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, maxValueBy, minValueBy, sumBy } 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, isFunction, isString } from '@antv/util';\nimport { center, justify, left, right, sankey } 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 var nodes = layoutData.nodes\n .map(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 return node;\n })\n .filter(function (node) {\n return node.name !== null;\n });\n var links = layoutData.links\n .map(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 return edge;\n })\n .filter(function (edge) {\n var source = edge.source, target = edge.target;\n return source.name !== null && target.name !== null;\n });\n return { nodes: nodes, links: links };\n}\n//# sourceMappingURL=layout.js.map","import { __assign, __spreadArray } from \"tslib\";\nimport { isRealNumber, pick } from '../../utils';\nimport { transformDataToNodeLinkData } from '../../utils/data';\nimport { cutoffCircle } from './circle';\nimport { sankeyLayout } from './layout';\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, __spreadArray(['x', 'y', 'name'], rawFields, true))), { 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, __spreadArray(['x', 'y', 'value'], rawFields, true))), { isNode: false });\n }),\n };\n}\n//# sourceMappingURL=helper.js.map","import { __spreadArray } from \"tslib\";\nimport { uniq } from '@antv/util';\nimport { theme } from '../../adaptor/common';\nimport { edge, polygon } from '../../adaptor/geometries';\nimport { deepAssign, findViewById, flow } from '../../utils';\nimport { addViewAnimation } from '../../utils/view';\nimport { COLOR_FIELD, EDGES_VIEW_ID, NODES_VIEW_ID, X_FIELD, Y_FIELD } from './constant';\nimport { transformToViewsData } from './helper';\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(__spreadArray(['name', 'source', 'target', 'value', 'isNode'], rawFields, true)),\n },\n label: {\n fields: uniq(__spreadArray(['x', 'name'], rawFields, true)),\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, _a = options.rawFields, rawFields = _a === void 0 ? [] : _a;\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 _b = transformToViewsData(options, chart.width, chart.height), nodes = _b.nodes, edges = _b.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 rawFields: __spreadArray(['source', 'target'], rawFields, true),\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 var geometries = __spreadArray(__spreadArray([], chart.views[0].geometries, true), chart.views[1].geometries, true);\n addViewAnimation(chart, animation, geometries);\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, __spreadArray } 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 = __spreadArray([], data, true);\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 { registerAction, registerInteraction } 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 { EDGES_VIEW_ID, NODES_VIEW_ID } from './constant';\nimport { transformToViewsData } from './helper';\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 { 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","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","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 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 { assign, isArray, reduce, size } from '@antv/util';\nimport * as d3Hierarchy from 'd3-hierarchy';\nimport { getAllNodes, getField } 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","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 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 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 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","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","import { assign, isArray } from '@antv/util';\nimport * as d3Hierarchy from 'd3-hierarchy';\nimport { getAllNodes, getField } 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 { __assign, __spreadArray } 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.\".concat(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 = \"\".concat((_b = ancestorNode.parent.data) === null || _b === void 0 ? void 0 : _b.name, \" / \").concat(path);\n ancestorNode = ancestorNode.parent;\n }\n var nodeInfo = __assign(__assign(__assign({}, pick(node.data, __spreadArray(__spreadArray([], (rawFields || []), true), [hierarchyConfig.field], false))), (_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, __spreadArray } from \"tslib\";\nimport { get, isFunction, uniq } from '@antv/util';\nimport { animation, annotation, interaction as baseInteraction, legend, pattern, scale, theme, } from '../../adaptor/common';\nimport { polygon as polygonAdaptor } from '../../adaptor/geometries';\nimport { deepAssign, findGeometry, flow, transformLabel } 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, shape = options.shape;\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(__spreadArray(__spreadArray([], RAW_FIELDS, true), rawFields, true)),\n polygon: {\n color: color,\n style: style,\n shape: shape,\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: __spreadArray(__spreadArray([], interactions, true), [\n {\n type: 'drill-down',\n cfg: { drillDownConfig: drilldown, transformData: transformData },\n },\n ], false),\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","import { __assign } from \"tslib\";\nimport { get, isArray } 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 { __spreadArray } from \"tslib\";\nimport { get } from '@antv/util';\nimport { animation, annotation, interaction as commonInteraction, legend, theme, tooltip } from '../../adaptor/common';\nimport { polygon as basePolygon } from '../../adaptor/geometries/polygon';\nimport { pattern } from '../../adaptor/pattern';\nimport { deepAssign, flow } from '../../utils';\nimport { getAdjustAppendPadding } from '../../utils/padding';\nimport { enableDrillInteraction, findInteraction, transformData } 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: __spreadArray(__spreadArray([], interactions, true), [\n {\n type: 'drill-down',\n // 🚓 这不是一个规范的 API,后续会变更。慎重参考\n cfg: { drillDownConfig: drilldown, transformData: transformData },\n },\n ], false),\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","// 一些字段常量定义,需要在文档初告知用户\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 { __extends } from \"tslib\";\nimport { Plot } from '../../core/plot';\nimport { adaptor } from './adaptor';\nimport { DEFAULT_OPTIONS } from './constant';\nimport './interactions';\nimport { enableInteraction, resetDrillDown, transformData } from './utils';\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","/** 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 { registerAction, registerInteraction } 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 { __extends } from \"tslib\";\nimport { GeometryLabel, registerGeometryLabel } 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","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nexport default createBaseFor;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","import baseFor from './_baseFor.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nexport default baseForOwn;\n","import isArrayLike from './isArrayLike.js';\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\nexport default createBaseEach;\n","import baseForOwn from './_baseForOwn.js';\nimport createBaseEach from './_createBaseEach.js';\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\nexport default baseEach;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nexport default equalByTag;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nexport default equalObjects;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nexport default baseIsEqualDeep;\n","import { isArray } from 'lodash-es';\nvar SPACES = '\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029';\nvar PATH_COMMAND = new RegExp('([a-z])[' + SPACES + ',]*((-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?[' + SPACES + ']*,?[' + SPACES + ']*)+)', 'ig');\nvar PATH_VALUES = new RegExp('(-?\\\\d*\\\\.?\\\\d*(?:e[\\\\-+]?\\\\d+)?)[' + SPACES + ']*,?[' + SPACES + ']*', 'ig');\n// Parses given path string into an array of arrays of path segments\nexport default function parsePathString(pathString) {\n if (!pathString) {\n return null;\n }\n if (isArray(pathString)) {\n return pathString;\n }\n var paramCounts = {\n a: 7,\n c: 6,\n o: 2,\n h: 1,\n l: 2,\n m: 2,\n r: 4,\n q: 4,\n s: 4,\n t: 2,\n v: 1,\n u: 3,\n z: 0,\n };\n var data = [];\n String(pathString).replace(PATH_COMMAND, function (a, b, c) {\n var params = [];\n var name = b.toLowerCase();\n c.replace(PATH_VALUES, function (a, b) {\n b && params.push(+b);\n });\n if (name === 'm' && params.length > 2) {\n data.push([b].concat(params.splice(0, 2)));\n name = 'l';\n b = b === 'm' ? 'l' : 'L';\n }\n if (name === 'o' && params.length === 1) {\n data.push([b, params[0]]);\n }\n if (name === 'r') {\n data.push([b].concat(params));\n }\n else {\n while (params.length >= paramCounts[name]) {\n data.push([b].concat(params.splice(0, paramCounts[name])));\n if (!paramCounts[name]) {\n break;\n }\n }\n }\n return '';\n });\n return data;\n}\n//# sourceMappingURL=parse-path-string.js.map","var TAU = Math.PI * 2;\nvar mapToEllipse = function (_a, rx, ry, cosphi, sinphi, centerx, centery) {\n var x = _a.x, y = _a.y;\n x *= rx;\n y *= ry;\n var xp = cosphi * x - sinphi * y;\n var yp = sinphi * x + cosphi * y;\n return {\n x: xp + centerx,\n y: yp + centery\n };\n};\nvar approxUnitArc = function (ang1, ang2) {\n // If 90 degree circular arc, use a constant\n // as derived from http://spencermortensen.com/articles/bezier-circle\n var a = ang2 === 1.5707963267948966\n ? 0.551915024494\n : ang2 === -1.5707963267948966\n ? -0.551915024494\n : 4 / 3 * Math.tan(ang2 / 4);\n var x1 = Math.cos(ang1);\n var y1 = Math.sin(ang1);\n var x2 = Math.cos(ang1 + ang2);\n var y2 = Math.sin(ang1 + ang2);\n return [\n {\n x: x1 - y1 * a,\n y: y1 + x1 * a\n },\n {\n x: x2 + y2 * a,\n y: y2 - x2 * a\n },\n {\n x: x2,\n y: y2\n }\n ];\n};\nvar vectorAngle = function (ux, uy, vx, vy) {\n var sign = (ux * vy - uy * vx < 0) ? -1 : 1;\n var dot = ux * vx + uy * vy;\n if (dot > 1) {\n dot = 1;\n }\n if (dot < -1) {\n dot = -1;\n }\n return sign * Math.acos(dot);\n};\nvar getArcCenter = function (px, py, cx, cy, rx, ry, largeArcFlag, sweepFlag, sinphi, cosphi, pxp, pyp) {\n var rxsq = Math.pow(rx, 2);\n var rysq = Math.pow(ry, 2);\n var pxpsq = Math.pow(pxp, 2);\n var pypsq = Math.pow(pyp, 2);\n var radicant = (rxsq * rysq) - (rxsq * pypsq) - (rysq * pxpsq);\n if (radicant < 0) {\n radicant = 0;\n }\n radicant /= (rxsq * pypsq) + (rysq * pxpsq);\n radicant = Math.sqrt(radicant) * (largeArcFlag === sweepFlag ? -1 : 1);\n var centerxp = radicant * rx / ry * pyp;\n var centeryp = radicant * -ry / rx * pxp;\n var centerx = cosphi * centerxp - sinphi * centeryp + (px + cx) / 2;\n var centery = sinphi * centerxp + cosphi * centeryp + (py + cy) / 2;\n var vx1 = (pxp - centerxp) / rx;\n var vy1 = (pyp - centeryp) / ry;\n var vx2 = (-pxp - centerxp) / rx;\n var vy2 = (-pyp - centeryp) / ry;\n var ang1 = vectorAngle(1, 0, vx1, vy1);\n var ang2 = vectorAngle(vx1, vy1, vx2, vy2);\n if (sweepFlag === 0 && ang2 > 0) {\n ang2 -= TAU;\n }\n if (sweepFlag === 1 && ang2 < 0) {\n ang2 += TAU;\n }\n return [centerx, centery, ang1, ang2];\n};\nvar arcToBezier = function (_a) {\n var px = _a.px, py = _a.py, cx = _a.cx, cy = _a.cy, rx = _a.rx, ry = _a.ry, _b = _a.xAxisRotation, xAxisRotation = _b === void 0 ? 0 : _b, _c = _a.largeArcFlag, largeArcFlag = _c === void 0 ? 0 : _c, _d = _a.sweepFlag, sweepFlag = _d === void 0 ? 0 : _d;\n var curves = [];\n if (rx === 0 || ry === 0) {\n return [{ x1: 0, y1: 0, x2: 0, y2: 0, x: cx, y: cy }];\n }\n var sinphi = Math.sin(xAxisRotation * TAU / 360);\n var cosphi = Math.cos(xAxisRotation * TAU / 360);\n var pxp = cosphi * (px - cx) / 2 + sinphi * (py - cy) / 2;\n var pyp = -sinphi * (px - cx) / 2 + cosphi * (py - cy) / 2;\n if (pxp === 0 && pyp === 0) {\n return [{ x1: 0, y1: 0, x2: 0, y2: 0, x: cx, y: cy }];\n }\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n var lambda = Math.pow(pxp, 2) / Math.pow(rx, 2) +\n Math.pow(pyp, 2) / Math.pow(ry, 2);\n if (lambda > 1) {\n rx *= Math.sqrt(lambda);\n ry *= Math.sqrt(lambda);\n }\n var _e = getArcCenter(px, py, cx, cy, rx, ry, largeArcFlag, sweepFlag, sinphi, cosphi, pxp, pyp), centerx = _e[0], centery = _e[1], ang1 = _e[2], ang2 = _e[3];\n // If 'ang2' == 90.0000000001, then `ratio` will evaluate to\n // 1.0000000001. This causes `segments` to be greater than one, which is an\n // unecessary split, and adds extra points to the bezier curve. To alleviate\n // this issue, we round to 1.0 when the ratio is close to 1.0.\n var ratio = Math.abs(ang2) / (TAU / 4);\n if (Math.abs(1.0 - ratio) < 0.0000001) {\n ratio = 1.0;\n }\n var segments = Math.max(Math.ceil(ratio), 1);\n ang2 /= segments;\n for (var i = 0; i < segments; i++) {\n curves.push(approxUnitArc(ang1, ang2));\n ang1 += ang2;\n }\n return curves.map(function (curve) {\n var _a = mapToEllipse(curve[0], rx, ry, cosphi, sinphi, centerx, centery), x1 = _a.x, y1 = _a.y;\n var _b = mapToEllipse(curve[1], rx, ry, cosphi, sinphi, centerx, centery), x2 = _b.x, y2 = _b.y;\n var _c = mapToEllipse(curve[2], rx, ry, cosphi, sinphi, centerx, centery), x = _c.x, y = _c.y;\n return { x1: x1, y1: y1, x2: x2, y2: y2, x: x, y: y };\n });\n};\nexport function arcToCubic(x1, y1, rx, ry, angle, LAF, SF, x2, y2) {\n var curves = arcToBezier({\n px: x1,\n py: y1,\n cx: x2,\n cy: y2,\n rx: rx,\n ry: ry,\n xAxisRotation: angle,\n largeArcFlag: LAF,\n sweepFlag: SF,\n });\n return curves.reduce(function (prev, cur) {\n var x1 = cur.x1, y1 = cur.y1, x2 = cur.x2, y2 = cur.y2, x = cur.x, y = cur.y;\n prev.push(x1, y1, x2, y2, x, y);\n return prev;\n }, []);\n}\n//# sourceMappingURL=arc-2-cubic.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 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(\".concat(r, \", \").concat(g, \", \").concat(b, \", \").concat(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 } from 'fmin';\nimport { distance, getCenter, intersectionArea } 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","import { bisect, conjugateGradient, nelderMead, norm2, scale, zeros, zerosM } from 'fmin';\nimport { circleCircleIntersection, circleOverlap, distance, intersectionArea } 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 // size : circles[setid].size\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 { __assign } from \"tslib\";\nimport { assign, memoize } from '@antv/util';\nimport { LEVEL, log } from '../../utils';\nimport { blend } from '../../utils/color/blend';\nimport { ID_FIELD, PATH_FIELD } from './constant';\nimport { computeTextCentres, intersectionAreaPath } from './layout/diagram';\nimport { scaleSolution, venn } from './layout/layout';\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, __rest } from \"tslib\";\nimport { deepMix, get, isArray, isEqual } from '@antv/util';\nimport { animation, interaction, scale, theme, tooltip } from '../../adaptor/common';\nimport { schema as schemaGeometry } from '../../adaptor/geometries';\nimport { deepAssign, findGeometry, flow, getAdjustAppendPadding, LEVEL, log, normalPadding, resolveAllPadding, transformLabel, } from '../../utils';\nimport { ID_FIELD } from './constant';\nimport './interactions';\nimport './label';\nimport './shape';\nimport { getColorMap, islegalSets, layoutVennData } from './utils';\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","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 // interactions: [{ type: 'active-region' }],\n});\n//# sourceMappingURL=constant.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, max, min } 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 { __assign } from \"tslib\";\nimport { each, get, omit, set } from '@antv/util';\nimport { annotation as baseAnnotation, interaction, theme, tooltip } from '../../adaptor/common';\nimport { interval, point, violin } from '../../adaptor/geometries';\nimport { AXIS_META_CONFIG_KEYS } from '../../constant';\nimport { deepAssign, findViewById, flow, pick } from '../../utils';\nimport { addViewAnimation } from '../../utils/view';\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';\nimport { transformViolinData } from './utils';\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 addViewAnimation(view, animation);\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","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 { 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 } from \"tslib\";\nimport { get, isNumber, isObject, isUndefined, reduce } 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]), \"\".concat(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, __rest } from \"tslib\";\nimport { get } from '@antv/util';\nimport { animation, annotation, interaction, scale, state, theme } from '../../adaptor/common';\nimport { interval } from '../../adaptor/geometries';\nimport { getLocale } from '../../core/locale';\nimport { deepAssign, findGeometry, flow, transformLabel } from '../../utils';\nimport { ABSOLUTE_FIELD, DIFF_FIELD, IS_TOTAL, Y_FIELD } from './constant';\nimport './shape';\nimport { transformData } from './utils';\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, shape = options.shape, customInfo = options.customInfo;\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 // 支持外部自定义形状\n shape: 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(__assign(__assign({}, 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(\"\".concat(xField, \"*\").concat(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","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 { assign, isFunction, isNil } 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, // max execute time\n // imageMask: '', // instance of Image, must be loaded\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', { willReadFrequently: true }).getImageData(0, 0, 1, 1).data\n .length >> 2);\n canvas.width = (cw << 5) / ratio;\n canvas.height = ch / ratio;\n var context = canvas.getContext('2d', { willReadFrequently: true });\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 { getContainerSize, LEVEL, log } from '../../utils';\nimport { normalPadding } from '../../utils/padding';\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 { __spreadArray } from \"tslib\";\nimport { get, isFunction } from '@antv/util';\nimport { animation, interaction, scale, state, theme, tooltip } from '../../adaptor/common';\nimport { point } from '../../adaptor/geometries';\nimport { deepAssign, flow } from '../../utils';\nimport { WORD_CLOUD_COLOR_FIELD } from './constant';\nimport { transform } from './utils';\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) && __spreadArray(__spreadArray([], get(options, 'rawFields', []), true), ['datum'], false),\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';\n// 注册的shape\nimport './shapes/word-cloud';\nimport { processImageMask, transform } from './utils';\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","import { __extends } from \"tslib\";\nimport { Plot } from '../core/plot';\nimport { deepAssign } from '../utils';\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 version = '2.4.32';\n// G2 自定义能力透出\nimport * as G2 from '@antv/g2';\n/** 开放一些通用的 adaptor 通道方法,实验阶段:不保证稳定性 */\nimport { animation, annotation, interaction, legend, scale, theme, tooltip } from './adaptor/common';\n// 国际化处理\nimport { registerLocale } from './core/locale';\nimport { EN_US_LOCALE } from './locales/en_US';\nimport { ZH_CN_LOCALE } from './locales/zh_CN';\n/** 各个 geometry 的 adaptor,可以让开发者更快的构造图形 */\nexport { area, interval, line, point, polygon, schema } from './adaptor/geometries';\n/** 全局变量 */\nexport { setGlobal } from './core/global';\n/** G2Plot 的 Plot 基类 */\nexport { Plot } from './core/plot';\n/** 对于没有开发完成的图表,可以暂时先放到 Lab 下面,先做体验,稳定后放到根 export */\nexport { Lab } from './lab';\n// 面积图及类型定义 | author by [hustcc](https://github.com/hustcc)\nexport { Area } from './plots/area';\n// 条形图及类型定义 | author by [BBSQQ](https://github.com/BBSQQ)\nexport { Bar } from './plots/bar';\n// 对称条形图及类型定义 | author by [arcsin1](https://github.com/arcsin1)\nexport { BidirectionalBar } from './plots/bidirectional-bar';\n// 箱线图及类型定义 | author by [BBSQQ](https://github.com/BBSQQ), [visiky](https://github.com/visiky)\nexport { Box } from './plots/box';\n// 子弹图及类型定义 | author by [arcsin1](https://github.com/arcsin1)\nexport { Bullet } from './plots/bullet';\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// 柱形图及类型定义 | author by [zqlu](https://github.com/zqlu)\nexport { Column } from './plots/column';\n// 混合图形 | author by [liuzhenying](https://github.com/liuzhenying)\nexport { DualAxes } from './plots/dual-axes';\n// 分面图及类型定义 | author by [visiky](https://github.com/visiky)\nexport { Facet } from './plots/facet';\n// 漏斗图及类型定义\nexport { Funnel, FUNNEL_CONVERSATION_FIELD } from './plots/funnel';\n// 仪表盘及类型定义 | author by [hustcc](https://github.com/hustcc)\nexport { Gauge } from './plots/gauge';\n// 热力图及类型定义 | author by [jiazhewang](https://github.com/jiazhewang)\nexport { Heatmap } from './plots/heatmap';\n// 直方图及类型定义 | author by [arcsin1](https://github.com/arcsin1), [visiky](https://github.com/visiky)\nexport { Histogram } from './plots/histogram';\n// 折线图及类型定义 | author by [hustcc](https://github.com/hustcc)\nexport { Line } from './plots/line';\n// 水波图及类型定义 | author by [CarisL](https://github.com/CarisL), [hustcc](https://github.com/hustcc), [pearmini](https://github.com/pearmini)\nexport { addWaterWave, Liquid } from './plots/liquid';\n// 已经废弃,更名为 Mix\nexport { Mix as Mix, Mix as MultiView } from './plots/mix';\n// 饼图及类型定义 | author by [visiky](https://github.com/visiky)\nexport { Pie } from './plots/pie';\n// 进度图及类型定义 | author by [connono](https://github.com/connono)\nexport { Progress } from './plots/progress';\n// 雷达图及类型定义 | author by [visiky](https://github.com/visiky)\nexport { Radar } from './plots/radar';\n// 玉珏图 | author by [yujs](https://github.com/yujs) | updated by [visiky](https://github.com/visiky)\nexport { RadialBar } from './plots/radial-bar';\n// 环形进度图及类型定义 | author by [connono](https://github.com/connono)\nexport { RingProgress } from './plots/ring-progress';\n// 玫瑰图及类型定义 | author by [zhangzhonghe](https://github.com/zhangzhonghe)\nexport { Rose } from './plots/rose';\n// 桑基图及类型定义 | author by [hustcc](https://github.com/hustcc)\nexport { Sankey } from './plots/sankey';\n// 散点图及类型定义 | author by [lxfu1](https://github.com/lxfu1)\nexport { Scatter } from './plots/scatter';\n// K线图及类型定义 | author by [jhwong](https://github.com/jinhuiWong), [visiky](https://github.com/visiky)\nexport { Stock } from './plots/stock';\n// 旭日图及类型定义 | author by [lxfu1](https://github.com/lxfu1), [visiky](https://github.com/visiky)\nexport { Sunburst } from './plots/sunburst';\n// 迷你面积图及类型定义 | author by [connono](https://github.com/connono)\nexport { TinyArea } from './plots/tiny-area';\n// 迷你柱形图及类型定义 | author by [connono](https://github.com/connono)\nexport { TinyColumn } from './plots/tiny-column';\n// 迷你折线图及类型定义 | author by [connono](https://github.com/connono)\nexport { TinyLine } from './plots/tiny-line';\n// 矩形树图\nexport { Treemap } from './plots/treemap';\n// 韦恩图及类型定义 | author by [visiky](https://github.com/visiky)\nexport { Venn } from './plots/venn';\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 { Waterfall } from './plots/waterfall';\n// 词云图及类型定义 | author by [zhangzhonghe](https://github.com/zhangzhonghe)\nexport { WordCloud } from './plots/word-cloud';\n// 以下开放自定义图表开发的能力(目前仅仅是孵化中)\n/** 所有开放图表都使用 G2Plot.P 作为入口开发,理论上官方的所有图表都可以走 G2Plot.P 的入口(暂时不处理) */\nexport { P } from './plugin';\n// 类型定义导出\nexport * from './types';\n/** 开发 adaptor 可能会用到的方法或一些工具方法,不强制使用 */\nexport { flow, measureTextWidth } from './utils';\n/** 开放 getCanvasPatterng 方法 */\nexport { getCanvasPattern } from './utils/pattern';\nexport { G2 };\n/** 透出 国际化 工具函数,便于使用 */\nexport { registerLocale };\n/** default locale register */\nregisterLocale('en-US', EN_US_LOCALE);\nregisterLocale('zh-CN', ZH_CN_LOCALE);\nexport var adaptors = { scale: scale, legend: legend, tooltip: tooltip, annotation: annotation, interaction: interaction, theme: theme, animation: animation };\n//# sourceMappingURL=index.js.map","\n","import mod from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./statisticschart.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../../node_modules/babel-loader/lib/index.js!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./statisticschart.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./statisticschart.vue?vue&type=template&id=ff99882c&\"\nimport script from \"./statisticschart.vue?vue&type=script&lang=js&\"\nexport * from \"./statisticschart.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.SizeSensorId = exports.SensorTabIndex = exports.SensorClassName = void 0;\n/**\n * Created by hustcc on 18/6/9.\n * Contract: i@hust.cc\n */\n\nvar SizeSensorId = 'size-sensor-id';\nexports.SizeSensorId = SizeSensorId;\nvar SensorClassName = 'size-sensor-object';\nexports.SensorClassName = SensorClassName;\nvar SensorTabIndex = '-1';\nexports.SensorTabIndex = SensorTabIndex;","module.exports = function(originalModule) {\n\tif (!originalModule.webpackPolyfill) {\n\t\tvar module = Object.create(originalModule);\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"exports\", {\n\t\t\tenumerable: true\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n"],"sourceRoot":""}