@visactor/vchart 1.3.1 → 1.4.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/es5/index.js +3 -3
- package/build/index.js +15097 -11432
- package/build/index.min.js +2 -2
- package/build/tsconfig.tsbuildinfo +1 -1
- package/cjs/chart/base-chart.d.ts +5 -0
- package/cjs/chart/base-chart.js +43 -24
- package/cjs/chart/base-chart.js.map +1 -1
- package/cjs/chart/common/common.d.ts +2 -0
- package/cjs/chart/common/common.js +15 -1
- package/cjs/chart/common/common.js.map +1 -1
- package/cjs/chart/interface/chart.d.ts +5 -0
- package/cjs/chart/interface/chart.js.map +1 -1
- package/cjs/chart/rose/rose.js.map +1 -1
- package/cjs/compile/compiler.d.ts +2 -2
- package/cjs/compile/compiler.js +32 -13
- package/cjs/compile/compiler.js.map +1 -1
- package/cjs/compile/data/compilable-data.d.ts +1 -1
- package/cjs/compile/data/compilable-data.js +1 -1
- package/cjs/compile/data/compilable-data.js.map +1 -1
- package/cjs/compile/mark/compilable-mark.d.ts +9 -4
- package/cjs/compile/mark/compilable-mark.js +20 -6
- package/cjs/compile/mark/compilable-mark.js.map +1 -1
- package/cjs/compile/mark/interface.d.ts +4 -2
- package/cjs/compile/mark/interface.js.map +1 -1
- package/cjs/compile/signal/state-manager.d.ts +1 -1
- package/cjs/compile/signal/state-manager.js +1 -1
- package/cjs/compile/signal/state-manager.js.map +1 -1
- package/cjs/component/axis/base-axis.d.ts +14 -13
- package/cjs/component/axis/base-axis.js +46 -37
- package/cjs/component/axis/base-axis.js.map +1 -1
- package/cjs/component/axis/cartesian/axis.js +64 -32
- package/cjs/component/axis/cartesian/axis.js.map +1 -1
- package/cjs/component/axis/cartesian/interface/spec.js.map +1 -1
- package/cjs/component/axis/cartesian/time-axis.js.map +1 -1
- package/cjs/component/axis/interface.d.ts +1 -0
- package/cjs/component/axis/interface.js.map +1 -1
- package/cjs/component/axis/mixin/linear-axis-mixin.js +1 -1
- package/cjs/component/axis/mixin/linear-axis-mixin.js.map +1 -1
- package/cjs/component/axis/polar/axis.d.ts +2 -1
- package/cjs/component/axis/polar/axis.js +69 -51
- package/cjs/component/axis/polar/axis.js.map +1 -1
- package/cjs/component/base/base-component.js +2 -2
- package/cjs/component/base/base-component.js.map +1 -1
- package/cjs/component/crosshair/base.d.ts +1 -1
- package/cjs/component/crosshair/base.js +4 -2
- package/cjs/component/crosshair/base.js.map +1 -1
- package/cjs/component/crosshair/cartesian.d.ts +1 -1
- package/cjs/component/crosshair/cartesian.js +2 -2
- package/cjs/component/crosshair/cartesian.js.map +1 -1
- package/cjs/component/crosshair/interface/spec.d.ts +1 -0
- package/cjs/component/crosshair/interface/spec.js.map +1 -1
- package/cjs/component/crosshair/polar.d.ts +1 -1
- package/cjs/component/crosshair/polar.js +2 -2
- package/cjs/component/crosshair/polar.js.map +1 -1
- package/cjs/component/label/label.d.ts +12 -6
- package/cjs/component/label/label.js +73 -58
- package/cjs/component/label/label.js.map +1 -1
- package/cjs/component/label/totalLabel.js +4 -3
- package/cjs/component/label/totalLabel.js.map +1 -1
- package/cjs/component/label/util.d.ts +44 -6
- package/cjs/component/label/util.js +123 -7
- package/cjs/component/label/util.js.map +1 -1
- package/cjs/component/legend/base-legend.d.ts +1 -1
- package/cjs/component/legend/util.d.ts +1 -1
- package/cjs/component/tooltip/handler/base.d.ts +2 -2
- package/cjs/component/tooltip/handler/base.js +15 -14
- package/cjs/component/tooltip/handler/base.js.map +1 -1
- package/cjs/component/tooltip/handler/dom/dom-tooltip-handler.js.map +1 -1
- package/cjs/component/tooltip/handler/dom/model/interface.d.ts +3 -3
- package/cjs/component/tooltip/handler/dom/model/interface.js.map +1 -1
- package/cjs/component/tooltip/handler/dom/util.d.ts +1 -1
- package/cjs/component/tooltip/handler/dom/util.js.map +1 -1
- package/cjs/component/tooltip/handler/utils/attribute.d.ts +1 -1
- package/cjs/component/tooltip/handler/utils/attribute.js.map +1 -1
- package/cjs/component/tooltip/tooltip.d.ts +1 -1
- package/cjs/component/tooltip/tooltip.js +11 -12
- package/cjs/component/tooltip/tooltip.js.map +1 -1
- package/cjs/constant/event.d.ts +2 -1
- package/cjs/constant/event.js +1 -1
- package/cjs/constant/event.js.map +1 -1
- package/cjs/constant/index.d.ts +1 -1
- package/cjs/constant/index.js +1 -1
- package/cjs/constant/index.js.map +1 -1
- package/cjs/core/index.d.ts +1 -1
- package/cjs/core/index.js +1 -1
- package/cjs/core/index.js.map +1 -1
- package/cjs/core/interface.d.ts +8 -0
- package/cjs/core/interface.js.map +1 -1
- package/cjs/core/vchart.d.ts +12 -2
- package/cjs/core/vchart.js +51 -17
- package/cjs/core/vchart.js.map +1 -1
- package/cjs/data/transforms/dimension-data.js +6 -4
- package/cjs/data/transforms/dimension-data.js.map +1 -1
- package/cjs/data/transforms/dimension-statistics.d.ts +0 -29
- package/cjs/data/transforms/dimension-statistics.js +31 -73
- package/cjs/data/transforms/dimension-statistics.js.map +1 -1
- package/cjs/data/transforms/waterfall.js +4 -3
- package/cjs/data/transforms/waterfall.js.map +1 -1
- package/cjs/event/event-dispatcher.d.ts +2 -0
- package/cjs/event/event-dispatcher.js +13 -2
- package/cjs/event/event-dispatcher.js.map +1 -1
- package/cjs/event/events/dimension/dimension-hover.js +1 -1
- package/cjs/event/events/dimension/dimension-hover.js.map +1 -1
- package/cjs/mark/base/base-mark.js +4 -4
- package/cjs/mark/base/base-mark.js.map +1 -1
- package/cjs/mark/interface/type.d.ts +2 -1
- package/cjs/mark/interface/type.js +1 -1
- package/cjs/mark/interface/type.js.map +1 -1
- package/cjs/mark/label.d.ts +26 -0
- package/cjs/mark/label.js +34 -0
- package/cjs/mark/label.js.map +1 -0
- package/cjs/model/base-model.d.ts +1 -1
- package/cjs/model/interface.d.ts +1 -1
- package/cjs/model/interface.js.map +1 -1
- package/cjs/plugin/components/axis-sync-plugin/tick-align-transform.js +3 -4
- package/cjs/plugin/components/axis-sync-plugin/tick-align-transform.js.map +1 -1
- package/cjs/series/area/area.js +1 -1
- package/cjs/series/area/area.js.map +1 -1
- package/cjs/series/base/base-series.d.ts +5 -6
- package/cjs/series/base/base-series.js +16 -10
- package/cjs/series/base/base-series.js.map +1 -1
- package/cjs/series/base/group.d.ts +2 -1
- package/cjs/series/base/group.js.map +1 -1
- package/cjs/series/funnel/funnel-3d.d.ts +2 -0
- package/cjs/series/funnel/funnel-3d.js +15 -21
- package/cjs/series/funnel/funnel-3d.js.map +1 -1
- package/cjs/series/funnel/funnel.d.ts +4 -2
- package/cjs/series/funnel/funnel.js +55 -53
- package/cjs/series/funnel/funnel.js.map +1 -1
- package/cjs/series/gauge/gauge.js +2 -2
- package/cjs/series/gauge/gauge.js.map +1 -1
- package/cjs/series/interface/series.d.ts +4 -5
- package/cjs/series/interface/series.js.map +1 -1
- package/cjs/series/line/line.js +1 -1
- package/cjs/series/line/line.js.map +1 -1
- package/cjs/series/pie/pie-3d.js +2 -2
- package/cjs/series/pie/pie-3d.js.map +1 -1
- package/cjs/series/pie/pie.js +3 -3
- package/cjs/series/pie/pie.js.map +1 -1
- package/cjs/series/polar/progress-like/progress-like.js +5 -6
- package/cjs/series/polar/progress-like/progress-like.js.map +1 -1
- package/cjs/series/radar/radar.js +4 -4
- package/cjs/series/radar/radar.js.map +1 -1
- package/cjs/series/sunburst/sunburst.d.ts +1 -1
- package/cjs/series/waterfall/waterfall.d.ts +6 -2
- package/cjs/series/waterfall/waterfall.js +47 -46
- package/cjs/series/waterfall/waterfall.js.map +1 -1
- package/cjs/theme/builtin/common/series/waterfall.js +1 -0
- package/cjs/theme/builtin/common/series/waterfall.js.map +1 -1
- package/cjs/theme/theme-manager.d.ts +1 -1
- package/cjs/theme/theme-manager.js +2 -2
- package/cjs/theme/theme-manager.js.map +1 -1
- package/cjs/typings/group.d.ts +8 -0
- package/cjs/{data/transforms/tick-data/interface.js → typings/group.js} +1 -1
- package/cjs/typings/group.js.map +1 -0
- package/cjs/typings/index.d.ts +1 -0
- package/cjs/typings/index.js +1 -1
- package/cjs/typings/index.js.map +1 -1
- package/cjs/typings/visual.d.ts +3 -3
- package/cjs/typings/visual.js.map +1 -1
- package/cjs/util/data.js.map +1 -1
- package/cjs/util/env.js +1 -1
- package/cjs/util/env.js.map +1 -1
- package/cjs/util/math.d.ts +5 -19
- package/cjs/util/math.js +22 -120
- package/cjs/util/math.js.map +1 -1
- package/cjs/util/spec/common.d.ts +2 -0
- package/cjs/util/spec/common.js +8 -3
- package/cjs/util/spec/common.js.map +1 -1
- package/cjs/util/spec/merge-spec.d.ts +4 -0
- package/cjs/util/spec/merge-spec.js +12 -2
- package/cjs/util/spec/merge-spec.js.map +1 -1
- package/cjs/util/style.js +1 -1
- package/cjs/util/style.js.map +1 -1
- package/cjs/util/text.d.ts +4 -3
- package/cjs/util/text.js +5 -8
- package/cjs/util/text.js.map +1 -1
- package/cjs/vchart-all.js +1 -1
- package/cjs/vchart-all.js.map +1 -1
- package/esm/chart/base-chart.d.ts +5 -0
- package/esm/chart/base-chart.js +44 -24
- package/esm/chart/base-chart.js.map +1 -1
- package/esm/chart/common/common.d.ts +2 -0
- package/esm/chart/common/common.js +16 -0
- package/esm/chart/common/common.js.map +1 -1
- package/esm/chart/interface/chart.d.ts +5 -0
- package/esm/chart/interface/chart.js.map +1 -1
- package/esm/chart/rose/rose.js.map +1 -1
- package/esm/compile/compiler.d.ts +2 -2
- package/esm/compile/compiler.js +31 -14
- package/esm/compile/compiler.js.map +1 -1
- package/esm/compile/data/compilable-data.d.ts +1 -1
- package/esm/compile/data/compilable-data.js +1 -1
- package/esm/compile/data/compilable-data.js.map +1 -1
- package/esm/compile/mark/compilable-mark.d.ts +9 -4
- package/esm/compile/mark/compilable-mark.js +20 -6
- package/esm/compile/mark/compilable-mark.js.map +1 -1
- package/esm/compile/mark/interface.d.ts +4 -2
- package/esm/compile/mark/interface.js.map +1 -1
- package/esm/compile/signal/state-manager.d.ts +1 -1
- package/esm/compile/signal/state-manager.js +1 -1
- package/esm/compile/signal/state-manager.js.map +1 -1
- package/esm/component/axis/base-axis.d.ts +14 -13
- package/esm/component/axis/base-axis.js +43 -34
- package/esm/component/axis/base-axis.js.map +1 -1
- package/esm/component/axis/cartesian/axis.js +62 -28
- package/esm/component/axis/cartesian/axis.js.map +1 -1
- package/esm/component/axis/cartesian/interface/spec.js.map +1 -1
- package/esm/component/axis/cartesian/time-axis.js.map +1 -1
- package/esm/component/axis/interface.d.ts +1 -0
- package/esm/component/axis/interface.js.map +1 -1
- package/esm/component/axis/mixin/linear-axis-mixin.js +1 -1
- package/esm/component/axis/mixin/linear-axis-mixin.js.map +1 -1
- package/esm/component/axis/polar/axis.d.ts +2 -1
- package/esm/component/axis/polar/axis.js +70 -53
- package/esm/component/axis/polar/axis.js.map +1 -1
- package/esm/component/base/base-component.js +2 -2
- package/esm/component/base/base-component.js.map +1 -1
- package/esm/component/crosshair/base.d.ts +1 -1
- package/esm/component/crosshair/base.js +4 -2
- package/esm/component/crosshair/base.js.map +1 -1
- package/esm/component/crosshair/cartesian.d.ts +1 -1
- package/esm/component/crosshair/cartesian.js +2 -2
- package/esm/component/crosshair/cartesian.js.map +1 -1
- package/esm/component/crosshair/interface/spec.d.ts +1 -0
- package/esm/component/crosshair/interface/spec.js.map +1 -1
- package/esm/component/crosshair/polar.d.ts +1 -1
- package/esm/component/crosshair/polar.js +2 -2
- package/esm/component/crosshair/polar.js.map +1 -1
- package/esm/component/label/label.d.ts +12 -6
- package/esm/component/label/label.js +77 -58
- package/esm/component/label/label.js.map +1 -1
- package/esm/component/label/totalLabel.js +4 -3
- package/esm/component/label/totalLabel.js.map +1 -1
- package/esm/component/label/util.d.ts +44 -6
- package/esm/component/label/util.js +121 -5
- package/esm/component/label/util.js.map +1 -1
- package/esm/component/legend/base-legend.d.ts +1 -1
- package/esm/component/legend/util.d.ts +1 -1
- package/esm/component/tooltip/handler/base.d.ts +2 -2
- package/esm/component/tooltip/handler/base.js +15 -14
- package/esm/component/tooltip/handler/base.js.map +1 -1
- package/esm/component/tooltip/handler/dom/dom-tooltip-handler.js.map +1 -1
- package/esm/component/tooltip/handler/dom/model/interface.d.ts +3 -3
- package/esm/component/tooltip/handler/dom/model/interface.js.map +1 -1
- package/esm/component/tooltip/handler/dom/util.d.ts +1 -1
- package/esm/component/tooltip/handler/dom/util.js.map +1 -1
- package/esm/component/tooltip/handler/utils/attribute.d.ts +1 -1
- package/esm/component/tooltip/handler/utils/attribute.js.map +1 -1
- package/esm/component/tooltip/tooltip.d.ts +1 -1
- package/esm/component/tooltip/tooltip.js +11 -12
- package/esm/component/tooltip/tooltip.js.map +1 -1
- package/esm/constant/event.d.ts +2 -1
- package/esm/constant/event.js +1 -1
- package/esm/constant/event.js.map +1 -1
- package/esm/constant/index.d.ts +1 -1
- package/esm/constant/index.js +1 -1
- package/esm/constant/index.js.map +1 -1
- package/esm/core/index.d.ts +1 -1
- package/esm/core/index.js +1 -1
- package/esm/core/index.js.map +1 -1
- package/esm/core/interface.d.ts +8 -0
- package/esm/core/interface.js.map +1 -1
- package/esm/core/vchart.d.ts +12 -2
- package/esm/core/vchart.js +49 -18
- package/esm/core/vchart.js.map +1 -1
- package/esm/data/transforms/dimension-data.js +6 -4
- package/esm/data/transforms/dimension-data.js.map +1 -1
- package/esm/data/transforms/dimension-statistics.d.ts +0 -29
- package/esm/data/transforms/dimension-statistics.js +28 -69
- package/esm/data/transforms/dimension-statistics.js.map +1 -1
- package/esm/data/transforms/waterfall.js +4 -4
- package/esm/data/transforms/waterfall.js.map +1 -1
- package/esm/event/event-dispatcher.d.ts +2 -0
- package/esm/event/event-dispatcher.js +13 -2
- package/esm/event/event-dispatcher.js.map +1 -1
- package/esm/event/events/dimension/dimension-hover.js +1 -1
- package/esm/event/events/dimension/dimension-hover.js.map +1 -1
- package/esm/mark/base/base-mark.js +5 -5
- package/esm/mark/base/base-mark.js.map +1 -1
- package/esm/mark/interface/type.d.ts +2 -1
- package/esm/mark/interface/type.js +1 -1
- package/esm/mark/interface/type.js.map +1 -1
- package/esm/mark/label.d.ts +26 -0
- package/esm/mark/label.js +30 -0
- package/esm/mark/label.js.map +1 -0
- package/esm/model/base-model.d.ts +1 -1
- package/esm/model/interface.d.ts +1 -1
- package/esm/model/interface.js.map +1 -1
- package/esm/plugin/components/axis-sync-plugin/tick-align-transform.js +3 -4
- package/esm/plugin/components/axis-sync-plugin/tick-align-transform.js.map +1 -1
- package/esm/series/area/area.js +1 -1
- package/esm/series/area/area.js.map +1 -1
- package/esm/series/base/base-series.d.ts +5 -6
- package/esm/series/base/base-series.js +16 -11
- package/esm/series/base/base-series.js.map +1 -1
- package/esm/series/base/group.d.ts +2 -1
- package/esm/series/base/group.js.map +1 -1
- package/esm/series/funnel/funnel-3d.d.ts +2 -0
- package/esm/series/funnel/funnel-3d.js +15 -21
- package/esm/series/funnel/funnel-3d.js.map +1 -1
- package/esm/series/funnel/funnel.d.ts +4 -2
- package/esm/series/funnel/funnel.js +56 -53
- package/esm/series/funnel/funnel.js.map +1 -1
- package/esm/series/gauge/gauge.js +4 -2
- package/esm/series/gauge/gauge.js.map +1 -1
- package/esm/series/interface/series.d.ts +4 -5
- package/esm/series/interface/series.js.map +1 -1
- package/esm/series/line/line.js +1 -1
- package/esm/series/line/line.js.map +1 -1
- package/esm/series/pie/pie-3d.js +4 -2
- package/esm/series/pie/pie-3d.js.map +1 -1
- package/esm/series/pie/pie.js +4 -4
- package/esm/series/pie/pie.js.map +1 -1
- package/esm/series/polar/progress-like/progress-like.js +7 -6
- package/esm/series/polar/progress-like/progress-like.js.map +1 -1
- package/esm/series/radar/radar.js +6 -6
- package/esm/series/radar/radar.js.map +1 -1
- package/esm/series/sunburst/sunburst.d.ts +1 -1
- package/esm/series/waterfall/waterfall.d.ts +6 -2
- package/esm/series/waterfall/waterfall.js +49 -45
- package/esm/series/waterfall/waterfall.js.map +1 -1
- package/esm/theme/builtin/common/series/waterfall.js +1 -0
- package/esm/theme/builtin/common/series/waterfall.js.map +1 -1
- package/esm/theme/theme-manager.d.ts +1 -1
- package/esm/theme/theme-manager.js +3 -1
- package/esm/theme/theme-manager.js.map +1 -1
- package/esm/typings/group.d.ts +8 -0
- package/esm/typings/group.js +2 -0
- package/esm/typings/group.js.map +1 -0
- package/esm/typings/index.d.ts +1 -0
- package/esm/typings/index.js +2 -0
- package/esm/typings/index.js.map +1 -1
- package/esm/typings/visual.d.ts +3 -3
- package/esm/typings/visual.js.map +1 -1
- package/esm/util/data.js.map +1 -1
- package/esm/util/env.js +1 -1
- package/esm/util/env.js.map +1 -1
- package/esm/util/math.d.ts +5 -19
- package/esm/util/math.js +5 -107
- package/esm/util/math.js.map +1 -1
- package/esm/util/spec/common.d.ts +2 -0
- package/esm/util/spec/common.js +8 -0
- package/esm/util/spec/common.js.map +1 -1
- package/esm/util/spec/merge-spec.d.ts +4 -0
- package/esm/util/spec/merge-spec.js +10 -1
- package/esm/util/spec/merge-spec.js.map +1 -1
- package/esm/util/style.js +1 -1
- package/esm/util/style.js.map +1 -1
- package/esm/util/text.d.ts +4 -3
- package/esm/util/text.js +6 -12
- package/esm/util/text.js.map +1 -1
- package/esm/vchart-all.js +1 -1
- package/esm/vchart-all.js.map +1 -1
- package/package.json +14 -13
- package/cjs/component/label/bar.d.ts +0 -9
- package/cjs/component/label/bar.js +0 -47
- package/cjs/component/label/bar.js.map +0 -1
- package/cjs/component/label/pie.d.ts +0 -5
- package/cjs/component/label/pie.js +0 -21
- package/cjs/component/label/pie.js.map +0 -1
- package/cjs/component/label/symbol.d.ts +0 -9
- package/cjs/component/label/symbol.js +0 -26
- package/cjs/component/label/symbol.js.map +0 -1
- package/cjs/data/transforms/tick-data/config.d.ts +0 -1
- package/cjs/data/transforms/tick-data/config.js +0 -6
- package/cjs/data/transforms/tick-data/config.js.map +0 -1
- package/cjs/data/transforms/tick-data/continuous.d.ts +0 -3
- package/cjs/data/transforms/tick-data/continuous.js +0 -44
- package/cjs/data/transforms/tick-data/continuous.js.map +0 -1
- package/cjs/data/transforms/tick-data/discrete/linear.d.ts +0 -3
- package/cjs/data/transforms/tick-data/discrete/linear.js +0 -90
- package/cjs/data/transforms/tick-data/discrete/linear.js.map +0 -1
- package/cjs/data/transforms/tick-data/discrete/polar-angle.d.ts +0 -3
- package/cjs/data/transforms/tick-data/discrete/polar-angle.js +0 -46
- package/cjs/data/transforms/tick-data/discrete/polar-angle.js.map +0 -1
- package/cjs/data/transforms/tick-data/index.d.ts +0 -4
- package/cjs/data/transforms/tick-data/index.js +0 -36
- package/cjs/data/transforms/tick-data/index.js.map +0 -1
- package/cjs/data/transforms/tick-data/interface.d.ts +0 -31
- package/cjs/data/transforms/tick-data/interface.js.map +0 -1
- package/cjs/data/transforms/tick-data/util.d.ts +0 -15
- package/cjs/data/transforms/tick-data/util.js +0 -80
- package/cjs/data/transforms/tick-data/util.js.map +0 -1
- package/esm/component/label/bar.d.ts +0 -9
- package/esm/component/label/bar.js +0 -39
- package/esm/component/label/bar.js.map +0 -1
- package/esm/component/label/pie.d.ts +0 -5
- package/esm/component/label/pie.js +0 -13
- package/esm/component/label/pie.js.map +0 -1
- package/esm/component/label/symbol.d.ts +0 -9
- package/esm/component/label/symbol.js +0 -20
- package/esm/component/label/symbol.js.map +0 -1
- package/esm/data/transforms/tick-data/config.d.ts +0 -1
- package/esm/data/transforms/tick-data/config.js +0 -2
- package/esm/data/transforms/tick-data/config.js.map +0 -1
- package/esm/data/transforms/tick-data/continuous.d.ts +0 -3
- package/esm/data/transforms/tick-data/continuous.js +0 -43
- package/esm/data/transforms/tick-data/continuous.js.map +0 -1
- package/esm/data/transforms/tick-data/discrete/linear.d.ts +0 -3
- package/esm/data/transforms/tick-data/discrete/linear.js +0 -81
- package/esm/data/transforms/tick-data/discrete/linear.js.map +0 -1
- package/esm/data/transforms/tick-data/discrete/polar-angle.d.ts +0 -3
- package/esm/data/transforms/tick-data/discrete/polar-angle.js +0 -41
- package/esm/data/transforms/tick-data/discrete/polar-angle.js.map +0 -1
- package/esm/data/transforms/tick-data/index.d.ts +0 -4
- package/esm/data/transforms/tick-data/index.js +0 -21
- package/esm/data/transforms/tick-data/index.js.map +0 -1
- package/esm/data/transforms/tick-data/interface.d.ts +0 -31
- package/esm/data/transforms/tick-data/interface.js +0 -2
- package/esm/data/transforms/tick-data/interface.js.map +0 -1
- package/esm/data/transforms/tick-data/util.d.ts +0 -15
- package/esm/data/transforms/tick-data/util.js +0 -70
- package/esm/data/transforms/tick-data/util.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/component/label/pie.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAM5C,SAAgB,QAAQ,CAAC,SAAqB;;IAC5C,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;IACvC,MAAM,SAAS,GAAG,MAAA,QAAQ,CAAC,YAAY,EAAE,mCAAI,EAAE,CAAC;IAGhD,MAAM,aAAa,GAAG,MAAA,SAAS,CAAC,QAAQ,mCAAI,SAAS,CAAC;IACtD,MAAM,QAAQ,GAAG,aAA2C,CAAC;IAG7D,IAAI,WAAW,CAAC;IAChB,IAAI,SAAS,CAAC,WAAW,EAAE;QACzB,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;KACrC;SAAM;QACL,WAAW,GAAG,IAAA,iBAAQ,EAAC,aAAa,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;KAC3E;IAED,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AACnC,CAAC;AAjBD,4BAiBC","file":"pie.js","sourcesContent":["import { isString } from '@visactor/vutils';\nimport type { ILabelInfo } from './label';\nimport type { BaseLabelAttrs, Strategy } from '@visactor/vrender-components';\nimport type { ICartesianSeries } from '../../series/interface';\nimport type { Datum } from '../../typings';\n\nexport function pieLabel(labelInfo: ILabelInfo) {\n const { series, baseMark } = labelInfo;\n const labelSpec = baseMark.getLabelSpec() ?? {};\n\n // encode position config\n const labelPosition = labelSpec.position ?? 'outside';\n const position = labelPosition as BaseLabelAttrs['position'];\n\n // encode smartInvert\n let smartInvert;\n if (labelSpec.smartInvert) {\n smartInvert = labelSpec.smartInvert;\n } else {\n smartInvert = isString(labelPosition) && labelPosition.includes('inside');\n }\n\n return { position, smartInvert };\n}\n"]}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { ILabelInfo } from './label';
|
|
2
|
-
import type { Strategy } from '@visactor/vrender-components';
|
|
3
|
-
export declare function symbolLabel(labelInfo: ILabelInfo): {
|
|
4
|
-
position: string;
|
|
5
|
-
overlap: boolean | {
|
|
6
|
-
strategy: Strategy[];
|
|
7
|
-
avoidBaseMark: boolean;
|
|
8
|
-
};
|
|
9
|
-
};
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
function symbolLabel(labelInfo) {
|
|
4
|
-
var _a, _b, _c, _d;
|
|
5
|
-
const {series: series, baseMark: baseMark} = labelInfo, labelSpec = null !== (_a = baseMark.getLabelSpec()) && void 0 !== _a ? _a : {}, defaultPosition = "horizontal" === series.direction ? "right" : "top", position = null !== (_b = labelSpec.position) && void 0 !== _b ? _b : defaultPosition;
|
|
6
|
-
let overlap;
|
|
7
|
-
return overlap = !1 !== labelSpec.overlap && {
|
|
8
|
-
strategy: null !== (_d = null === (_c = labelSpec.overlap) || void 0 === _c ? void 0 : _c.strategy) && void 0 !== _d ? _d : symbolLabelOverlapStrategy(),
|
|
9
|
-
avoidBaseMark: "center" !== position
|
|
10
|
-
}, {
|
|
11
|
-
position: position,
|
|
12
|
-
overlap: overlap
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
function symbolLabelOverlapStrategy() {
|
|
17
|
-
return [ {
|
|
18
|
-
type: "position",
|
|
19
|
-
position: [ "top", "bottom", "right", "left", "top-right", "top-left", "bottom-left", "bottom-right" ]
|
|
20
|
-
} ];
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
Object.defineProperty(exports, "__esModule", {
|
|
24
|
-
value: !0
|
|
25
|
-
}), exports.symbolLabel = void 0, exports.symbolLabel = symbolLabel;
|
|
26
|
-
//# sourceMappingURL=symbol.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/component/label/symbol.ts"],"names":[],"mappings":";;;AAIA,SAAgB,WAAW,CAAC,SAAqB;;IAC/C,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;IACvC,MAAM,SAAS,GAAG,MAAA,QAAQ,CAAC,YAAY,EAAE,mCAAI,EAAE,CAAC;IAGhD,MAAM,eAAe,GAAI,MAA2B,CAAC,SAAS,KAAK,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAClG,MAAM,QAAQ,GAAG,MAAA,SAAS,CAAC,QAAQ,mCAAI,eAAe,CAAC;IAGvD,IAAI,OAAO,CAAC;IACZ,IAAI,SAAS,CAAC,OAAO,KAAK,KAAK,EAAE;QAC/B,OAAO,GAAG,KAAK,CAAC;KACjB;SAAM;QACL,OAAO,GAAG;YACR,QAAQ,EAAE,MAAA,MAAA,SAAS,CAAC,OAAO,0CAAE,QAAQ,mCAAI,0BAA0B,EAAE;YACrE,aAAa,EAAE,QAAQ,KAAK,QAAQ;SACrC,CAAC;KACH;IAED,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC;AApBD,kCAoBC;AAED,SAAS,0BAA0B;IACjC,MAAM,QAAQ,GAAe;QAC3B;YACE,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,CAAC;SACrG;KACF,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC","file":"symbol.js","sourcesContent":["import type { ILabelInfo } from './label';\nimport type { Strategy } from '@visactor/vrender-components';\nimport type { ICartesianSeries } from '../../series/interface';\n\nexport function symbolLabel(labelInfo: ILabelInfo) {\n const { series, baseMark } = labelInfo;\n const labelSpec = baseMark.getLabelSpec() ?? {};\n\n // encode position config\n const defaultPosition = (series as ICartesianSeries).direction === 'horizontal' ? 'right' : 'top';\n const position = labelSpec.position ?? defaultPosition;\n\n // encode overlap config\n let overlap;\n if (labelSpec.overlap === false) {\n overlap = false;\n } else {\n overlap = {\n strategy: labelSpec.overlap?.strategy ?? symbolLabelOverlapStrategy(),\n avoidBaseMark: position !== 'center'\n };\n }\n\n return { position, overlap };\n}\n\nfunction symbolLabelOverlapStrategy() {\n const strategy: Strategy[] = [\n {\n type: 'position',\n position: ['top', 'bottom', 'right', 'left', 'top-right', 'top-left', 'bottom-left', 'bottom-right']\n }\n ];\n\n return strategy;\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const DEFAULT_CONTINUOUS_TICK_COUNT = 5;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/transforms/tick-data/config.ts"],"names":[],"mappings":";;;AACa,QAAA,6BAA6B,GAAG,CAAC,CAAC","file":"config.js","sourcesContent":["/** 连续轴默认 tick 数量 */\nexport const DEFAULT_CONTINUOUS_TICK_COUNT = 5;\n"]}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: !0
|
|
5
|
-
}), exports.continuousTicks = void 0;
|
|
6
|
-
|
|
7
|
-
const vscale_1 = require("@visactor/vscale"), util_1 = require("../../../util"), config_1 = require("./config"), util_2 = require("./util"), continuousTicks = (scale, op) => {
|
|
8
|
-
if (!(0, vscale_1.isContinuous)(scale.type)) return (0, util_2.convertDomainToTickData)(scale.domain(), op);
|
|
9
|
-
const range = scale.range();
|
|
10
|
-
if (Math.abs(range[range.length - 1] - range[0]) < 2) return (0, util_2.convertDomainToTickData)([ scale.domain()[0] ], op);
|
|
11
|
-
const {tickCount: tickCount, forceTickCount: forceTickCount, tickStep: tickStep, noDecimals: noDecimals = !1} = op;
|
|
12
|
-
let scaleTicks;
|
|
13
|
-
if (scaleTicks = (0, util_1.isValid)(tickStep) ? scale.stepTicks(tickStep) : (0,
|
|
14
|
-
util_1.isValid)(forceTickCount) ? scale.forceTicks(forceTickCount) : "d3" === op.tickMode ? scale.d3Ticks(null != tickCount ? tickCount : config_1.DEFAULT_CONTINUOUS_TICK_COUNT, {
|
|
15
|
-
noDecimals: noDecimals
|
|
16
|
-
}) : scale.ticks(null != tickCount ? tickCount : config_1.DEFAULT_CONTINUOUS_TICK_COUNT, {
|
|
17
|
-
noDecimals: noDecimals
|
|
18
|
-
}), op.sampling && ("cartesian" === op.coordinateType || "polar" === op.coordinateType && "radius" === op.axisOrientType)) {
|
|
19
|
-
const {labelGap: labelGap = 4, labelFlush: labelFlush} = op;
|
|
20
|
-
let items = (0, util_2.getCartesianLabelBounds)(scale, scaleTicks, op).map(((bounds, i) => ({
|
|
21
|
-
AABBBounds: bounds,
|
|
22
|
-
value: scaleTicks[i]
|
|
23
|
-
})));
|
|
24
|
-
for (;items.length >= 3 && (0, util_2.hasOverlap)(items, labelGap); ) items = methods.parity(items);
|
|
25
|
-
const ticks = items.map((item => item.value));
|
|
26
|
-
ticks.length < 3 && labelFlush && (ticks.length > 1 && ticks.pop(), (0, util_1.peek)(ticks) !== (0,
|
|
27
|
-
util_1.peek)(scaleTicks) && ticks.push((0, util_1.peek)(scaleTicks))), scaleTicks = ticks;
|
|
28
|
-
}
|
|
29
|
-
return (0, util_2.convertDomainToTickData)(scaleTicks, op);
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
exports.continuousTicks = continuousTicks;
|
|
33
|
-
|
|
34
|
-
const methods = {
|
|
35
|
-
parity: function(items) {
|
|
36
|
-
return items.filter(((item, i) => i % 2 == 0));
|
|
37
|
-
},
|
|
38
|
-
greedy: function(items, sep) {
|
|
39
|
-
let a;
|
|
40
|
-
return items.filter(((b, i) => (!i || !(0, util_2.intersect)(a.AABBBounds, b.AABBBounds, sep)) && (a = b,
|
|
41
|
-
!0)));
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
//# sourceMappingURL=continuous.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/transforms/tick-data/continuous.ts"],"names":[],"mappings":"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","file":"continuous.js","sourcesContent":["import type { LinearScale, ContinuousScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous } from '@visactor/vscale';\nimport { isValid, peek } from '../../../util';\nimport { DEFAULT_CONTINUOUS_TICK_COUNT } from './config';\nimport type { ICartesianTickDataOpt, ITickData, ITickDataOpt } from './interface';\nimport type { ILabelItem } from './util';\n// eslint-disable-next-line no-duplicate-imports\nimport { convertDomainToTickData, getCartesianLabelBounds, hasOverlap, intersect } from './util';\n\n/**\n * 对于连续轴:\n * - 如果spec配了tickCount、forceTickCount、tickStep,则直接输出LinearScale的ticks()、forceTicks()、stepTicks()结果;\n * - 默认输出tickCount为10的ticks()结果。\n *\n * @param scale\n * @param op\n * @returns\n */\nexport const continuousTicks = (scale: ContinuousScale, op: ITickDataOpt): ITickData[] => {\n if (!isContinuous(scale.type)) {\n return convertDomainToTickData(scale.domain(), op);\n }\n // if range is so small\n const range = scale.range();\n const rangeSize = Math.abs(range[range.length - 1] - range[0]);\n if (rangeSize < 2) {\n return convertDomainToTickData([scale.domain()[0]], op);\n }\n\n const { tickCount, forceTickCount, tickStep, noDecimals = false } = op;\n\n let scaleTicks: number[];\n if (isValid(tickStep)) {\n scaleTicks = (scale as LinearScale).stepTicks(tickStep);\n } else if (isValid(forceTickCount)) {\n scaleTicks = (scale as LinearScale).forceTicks(forceTickCount);\n } else if (op.tickMode === 'd3') {\n scaleTicks = (scale as LinearScale).d3Ticks(tickCount ?? DEFAULT_CONTINUOUS_TICK_COUNT, { noDecimals });\n } else {\n scaleTicks = (scale as LinearScale).ticks(tickCount ?? DEFAULT_CONTINUOUS_TICK_COUNT, { noDecimals });\n }\n\n if (op.sampling) {\n // 判断重叠\n if (op.coordinateType === 'cartesian' || (op.coordinateType === 'polar' && op.axisOrientType === 'radius')) {\n const { labelGap = 4, labelFlush } = op as ICartesianTickDataOpt;\n let items = getCartesianLabelBounds(scale, scaleTicks, op as ICartesianTickDataOpt).map(\n (bounds, i) =>\n ({\n AABBBounds: bounds,\n value: scaleTicks[i]\n } as ILabelItem<number>)\n );\n while (items.length >= 3 && hasOverlap(items, labelGap)) {\n items = methods.parity(items);\n }\n const ticks = items.map(item => item.value);\n\n if (ticks.length < 3 && labelFlush) {\n if (ticks.length > 1) {\n ticks.pop();\n }\n if (peek(ticks) !== peek(scaleTicks)) {\n ticks.push(peek(scaleTicks));\n }\n }\n\n scaleTicks = ticks;\n }\n }\n\n return convertDomainToTickData(scaleTicks, op);\n};\n\nconst methods = {\n parity: function <T>(items: ILabelItem<T>[]) {\n return items.filter((item, i) => i % 2 === 0);\n },\n greedy: function <T>(items: ILabelItem<T>[], sep: number) {\n let a: ILabelItem<T>;\n return items.filter((b, i) => {\n if (!i || !intersect(a.AABBBounds, b.AABBBounds, sep)) {\n a = b;\n return true;\n }\n return false;\n });\n }\n};\n"]}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: !0
|
|
5
|
-
}), exports.linearDiscreteTicks = void 0;
|
|
6
|
-
|
|
7
|
-
const util_1 = require("../../../../util"), util_2 = require("../util"), linearDiscreteTicks = (scale, op) => {
|
|
8
|
-
var _a;
|
|
9
|
-
const domain = scale.domain();
|
|
10
|
-
if (!domain.length) return [];
|
|
11
|
-
const {tickCount: tickCount, forceTickCount: forceTickCount, tickStep: tickStep, labelGap: labelGap = 4, axisOrientType: axisOrientType} = op, isHorizontal = [ "bottom", "top" ].includes(axisOrientType), range = scale.range(), rangeSize = Math.abs(range[range.length - 1] - range[0]);
|
|
12
|
-
if (rangeSize < 2) return op.labelLastVisible ? (0, util_2.convertDomainToTickData)([ domain[domain.length - 1] ], op) : (0,
|
|
13
|
-
util_2.convertDomainToTickData)([ domain[0] ], op);
|
|
14
|
-
let scaleTicks;
|
|
15
|
-
if ((0, util_1.isValid)(tickStep)) scaleTicks = scale.stepTicks(tickStep); else if ((0,
|
|
16
|
-
util_1.isValid)(forceTickCount)) scaleTicks = scale.forceTicks(forceTickCount); else if ((0,
|
|
17
|
-
util_1.isValid)(tickCount)) scaleTicks = scale.ticks(tickCount); else if (op.sampling) {
|
|
18
|
-
let labelBoundsList;
|
|
19
|
-
const fontSize = (null !== (_a = op.labelStyle.fontSize) && void 0 !== _a ? _a : 12) + 2;
|
|
20
|
-
if (domain.length <= rangeSize / fontSize) labelBoundsList = (0, util_2.getCartesianLabelBounds)(scale, domain, op); else {
|
|
21
|
-
const tempDomain = [ domain[0], domain[Math.floor(domain.length / 2)], domain[domain.length - 1] ], tempList = (0,
|
|
22
|
-
util_2.getCartesianLabelBounds)(scale, tempDomain, op);
|
|
23
|
-
let maxBounds = null, maxBoundsIndex = 0;
|
|
24
|
-
tempList.forEach(((current, index) => {
|
|
25
|
-
if (!maxBounds) return maxBounds = current, void (maxBoundsIndex = index);
|
|
26
|
-
isHorizontal ? maxBounds.width() < current.width() && (maxBounds = current, maxBoundsIndex = index) : maxBounds.height() < current.height() && (maxBounds = current,
|
|
27
|
-
maxBoundsIndex = index);
|
|
28
|
-
}));
|
|
29
|
-
const maxBoundsDomainIndex = 0 === maxBoundsIndex ? 0 : 2 === maxBoundsIndex ? domain.length - 1 : Math.floor(domain.length / 2), maxBoundsPos = scale.scale(domain[maxBoundsDomainIndex]);
|
|
30
|
-
labelBoundsList = new Array(domain.length);
|
|
31
|
-
for (let i = 0; i < labelBoundsList.length; i++) {
|
|
32
|
-
labelBoundsList[i] = maxBounds.clone();
|
|
33
|
-
const currentPos = scale.scale(domain[i]);
|
|
34
|
-
isHorizontal ? labelBoundsList[i].translate(currentPos - maxBoundsPos, 0) : labelBoundsList[i].translate(0, currentPos - maxBoundsPos);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
const domainLengthList = labelBoundsList.map((b => isHorizontal ? b.width() : b.height())), rangeStart = Math.min(...range), incrementUnit = (Math.max(...range) - rangeStart) / domain.length, result = getStep(domain, labelBoundsList, labelGap, op.labelLastVisible, isHorizontal, Math.floor(Math.min(...domainLengthList) / incrementUnit));
|
|
38
|
-
scaleTicks = scale.stepTicks(result.step), op.labelLastVisible && (scaleTicks = scaleTicks.slice(0, scaleTicks.length - result.delCount),
|
|
39
|
-
scaleTicks.push(domain[domain.length - 1]));
|
|
40
|
-
} else scaleTicks = scale.domain();
|
|
41
|
-
return (0, util_2.convertDomainToTickData)(scaleTicks, op);
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
exports.linearDiscreteTicks = linearDiscreteTicks;
|
|
45
|
-
|
|
46
|
-
const getStep = (domain, labelBoundsList, labelGap, labelLastVisible, isHorizontal, defaultStep) => {
|
|
47
|
-
let step = defaultStep, delCount = 0, resultDelCount = 0, resultStep = 0, resultTickCount = -1, minDiff = Number.MAX_VALUE;
|
|
48
|
-
do {
|
|
49
|
-
let success = !0;
|
|
50
|
-
step++;
|
|
51
|
-
let ptr = 0;
|
|
52
|
-
do {
|
|
53
|
-
ptr + step < domain.length && (0, util_2.labelOverlap)(labelBoundsList[ptr], labelBoundsList[ptr + step], labelGap) && (success = !1),
|
|
54
|
-
ptr += step;
|
|
55
|
-
} while (success && ptr < domain.length);
|
|
56
|
-
if (success) {
|
|
57
|
-
if (!labelLastVisible) {
|
|
58
|
-
resultStep = step;
|
|
59
|
-
break;
|
|
60
|
-
}
|
|
61
|
-
{
|
|
62
|
-
const lastIndex = domain.length - 1;
|
|
63
|
-
delCount = 0;
|
|
64
|
-
do {
|
|
65
|
-
if (ptr -= step, ptr !== lastIndex && !(0, util_2.labelOverlap)(labelBoundsList[ptr], labelBoundsList[lastIndex], labelGap)) break;
|
|
66
|
-
delCount++;
|
|
67
|
-
} while (ptr > 0);
|
|
68
|
-
if (ptr === lastIndex) {
|
|
69
|
-
resultStep = step, resultDelCount = delCount;
|
|
70
|
-
break;
|
|
71
|
-
}
|
|
72
|
-
{
|
|
73
|
-
const tickCount = Math.floor(domain.length / step) - delCount + 1;
|
|
74
|
-
if (tickCount < resultTickCount) break;
|
|
75
|
-
{
|
|
76
|
-
resultTickCount = tickCount;
|
|
77
|
-
const distanceIndex = isHorizontal ? 0 : 1, distance1 = (0, util_2.labelDistance)(labelBoundsList[ptr], labelBoundsList[lastIndex])[distanceIndex], distance2 = ptr - step >= 0 ? (0,
|
|
78
|
-
util_2.labelDistance)(labelBoundsList[ptr - step], labelBoundsList[ptr])[distanceIndex] : distance1, diff = Math.abs(distance1 - distance2);
|
|
79
|
-
diff < minDiff && (minDiff = diff, resultStep = step, resultDelCount = delCount);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
} while (step <= domain.length);
|
|
85
|
-
return {
|
|
86
|
-
step: resultStep,
|
|
87
|
-
delCount: resultDelCount
|
|
88
|
-
};
|
|
89
|
-
};
|
|
90
|
-
//# sourceMappingURL=linear.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/transforms/tick-data/discrete/linear.ts"],"names":[],"mappings":";;;AACA,2CAA2C;AAE3C,kCAAwG;AAcjG,MAAM,mBAAmB,GAAG,CAAC,KAAgB,EAAE,EAAyB,EAAe,EAAE;;IAC9F,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;IAC9B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;QAClB,OAAO,EAAE,CAAC;KACX;IACD,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,GAAG,CAAC,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC;IACjF,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAG5B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,IAAI,SAAS,GAAG,CAAC,EAAE;QACjB,IAAI,EAAE,CAAC,gBAAgB,EAAE;YACvB,OAAO,IAAA,8BAAuB,EAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SACjE;QACD,OAAO,IAAA,8BAAuB,EAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;KACjD;IAED,IAAI,UAAU,CAAC;IACf,IAAI,IAAA,cAAO,EAAC,QAAQ,CAAC,EAAE;QACrB,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;KACxC;SAAM,IAAI,IAAA,cAAO,EAAC,cAAc,CAAC,EAAE;QAClC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;KAC/C;SAAM,IAAI,IAAA,cAAO,EAAC,SAAS,CAAC,EAAE;QAC7B,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;KACrC;SAAM,IAAI,EAAE,CAAC,QAAQ,EAAE;QACtB,IAAI,eAA6B,CAAC;QAClC,MAAM,QAAQ,GAAG,CAAC,MAAA,EAAE,CAAC,UAAU,CAAC,QAAQ,mCAAI,EAAE,CAAC,GAAG,CAAC,CAAC;QACpD,IAAI,MAAM,CAAC,MAAM,IAAI,SAAS,GAAG,QAAQ,EAAE;YACzC,eAAe,GAAG,IAAA,8BAAuB,EAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;SAC9D;aAAM;YAEL,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YACjG,MAAM,QAAQ,GAAG,IAAA,8BAAuB,EAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;YAChE,IAAI,SAAS,GAAe,IAAI,CAAC;YACjC,IAAI,cAAc,GAAG,CAAC,CAAC;YACvB,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;gBAClC,IAAI,CAAC,SAAS,EAAE;oBACd,SAAS,GAAG,OAAO,CAAC;oBACpB,cAAc,GAAG,KAAK,CAAC;oBACvB,OAAO;iBACR;gBACD,IAAI,YAAY,EAAE;oBAChB,IAAI,SAAS,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,EAAE;wBACvC,SAAS,GAAG,OAAO,CAAC;wBACpB,cAAc,GAAG,KAAK,CAAC;qBACxB;iBACF;qBAAM,IAAI,SAAS,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE;oBAChD,SAAS,GAAG,OAAO,CAAC;oBACpB,cAAc,GAAG,KAAK,CAAC;iBACxB;YACH,CAAC,CAAC,CAAC;YACH,MAAM,oBAAoB,GACxB,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACtG,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAC/D,eAAe,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC/C,eAAe,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;gBACvC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1C,IAAI,YAAY,EAAE;oBAChB,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC;iBAC5D;qBAAM;oBACL,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC,CAAC;iBAC5D;aACF;SACF;QAED,MAAM,gBAAgB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAC/C,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;QACpC,MAAM,aAAa,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QAC9D,MAAM,MAAM,GAAG,OAAO,CACpB,MAAM,EACN,eAAe,EACf,QAAQ,EACR,EAAE,CAAC,gBAAgB,EACnB,YAAY,EACZ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,GAAG,aAAa,CAAC,CAC1D,CAAC;QAEF,UAAU,GAAI,KAAmB,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,EAAE,CAAC,gBAAgB,EAAE;YACvB,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YACtE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;SAC5C;KACF;SAAM;QACL,UAAU,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;KAC7B;IAED,OAAO,IAAA,8BAAuB,EAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC,CAAC;AA9FW,QAAA,mBAAmB,uBA8F9B;AAGF,MAAM,OAAO,GAAG,CACd,MAAa,EACb,eAA6B,EAC7B,QAAgB,EAChB,gBAAyB,EACzB,YAAqB,EACrB,WAAmB,EACnB,EAAE;IACF,IAAI,IAAI,GAAG,WAAW,CAAC;IACvB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,eAAe,GAAG,CAAC,CAAC,CAAC;IACzB,IAAI,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC;IAE/B,GAAG;QACD,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,IAAI,EAAE,CAAC;QACP,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,GAAG;YACD,IAAI,GAAG,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,IAAI,IAAA,mBAAY,EAAC,eAAe,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE;gBAC3G,OAAO,GAAG,KAAK,CAAC;aACjB;YACD,GAAG,IAAI,IAAI,CAAC;SACb,QAAQ,OAAO,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE;QAEzC,IAAI,OAAO,EAAE;YACX,IAAI,gBAAgB,EAAE;gBACpB,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;gBACpC,QAAQ,GAAG,CAAC,CAAC;gBACb,GAAG;oBACD,GAAG,IAAI,IAAI,CAAC;oBACZ,IAAI,GAAG,KAAK,SAAS,IAAI,IAAA,mBAAY,EAAC,eAAe,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,EAAE;wBACjG,QAAQ,EAAE,CAAC;qBACZ;yBAAM;wBACL,MAAM;qBACP;iBACF,QAAQ,GAAG,GAAG,CAAC,EAAE;gBAClB,IAAI,GAAG,KAAK,SAAS,EAAE;oBAErB,UAAU,GAAG,IAAI,CAAC;oBAClB,cAAc,GAAG,QAAQ,CAAC;oBAC1B,MAAM;iBACP;qBAAM;oBAEL,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC;oBAClE,IAAI,SAAS,GAAG,eAAe,EAAE;wBAC/B,MAAM;qBACP;yBAAM;wBACL,eAAe,GAAG,SAAS,CAAC;wBAC5B,MAAM,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC3C,MAAM,SAAS,GAAG,IAAA,oBAAa,EAAC,eAAe,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;wBACjG,MAAM,SAAS,GACb,GAAG,GAAG,IAAI,IAAI,CAAC;4BACb,CAAC,CAAC,IAAA,oBAAa,EAAC,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC;4BACjF,CAAC,CAAC,SAAS,CAAC;wBAChB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;wBAC7C,IAAI,IAAI,GAAG,OAAO,EAAE;4BAClB,OAAO,GAAG,IAAI,CAAC;4BACf,UAAU,GAAG,IAAI,CAAC;4BAClB,cAAc,GAAG,QAAQ,CAAC;yBAC3B;qBACF;iBACF;aACF;iBAAM;gBACL,UAAU,GAAG,IAAI,CAAC;gBAClB,MAAM;aACP;SACF;KACF,QAAQ,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE;IAEhC,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,cAAc;KACzB,CAAC;AACJ,CAAC,CAAC","file":"linear.js","sourcesContent":["import type { BandScale } from '@visactor/vscale';\nimport { isValid } from '../../../../util';\nimport type { ICartesianTickDataOpt, ITickData } from '../interface';\nimport { convertDomainToTickData, getCartesianLabelBounds, labelDistance, labelOverlap } from '../util';\nimport type { AABBBounds } from '@visactor/vutils';\n\n/**\n * 对于离散轴:\n * - 如果spec配了tickCount、forceTickCount、tickStep,则直接输出BandScale的ticks()、forceTicks()、stepTicks()结果;\n * - 估算所有轴label的宽度(或高度,在竖轴的情况下)并存为数组domainLengthList;\n * - 通过循环来寻找最小的step,使:如果在这个step下采样,轴标签互不遮挡(此处用到domainLengthList和scale.range());\n * - 如果用户配置了spec.label.lastVisible,则处理右边界:强制采样最后一个tick数据,并删掉这个tick的label所覆盖的那些tick数据。\n *\n * @param scale\n * @param op\n * @returns\n */\nexport const linearDiscreteTicks = (scale: BandScale, op: ICartesianTickDataOpt): ITickData[] => {\n const domain = scale.domain();\n if (!domain.length) {\n return [];\n }\n const { tickCount, forceTickCount, tickStep, labelGap = 4, axisOrientType } = op;\n const isHorizontal = ['bottom', 'top'].includes(axisOrientType);\n const range = scale.range();\n\n // if range is so small\n const rangeSize = Math.abs(range[range.length - 1] - range[0]);\n if (rangeSize < 2) {\n if (op.labelLastVisible) {\n return convertDomainToTickData([domain[domain.length - 1]], op);\n }\n return convertDomainToTickData([domain[0]], op);\n }\n\n let scaleTicks;\n if (isValid(tickStep)) {\n scaleTicks = scale.stepTicks(tickStep);\n } else if (isValid(forceTickCount)) {\n scaleTicks = scale.forceTicks(forceTickCount);\n } else if (isValid(tickCount)) {\n scaleTicks = scale.ticks(tickCount);\n } else if (op.sampling) {\n let labelBoundsList: AABBBounds[];\n const fontSize = (op.labelStyle.fontSize ?? 12) + 2;\n if (domain.length <= rangeSize / fontSize) {\n labelBoundsList = getCartesianLabelBounds(scale, domain, op);\n } else {\n // only check first middle last, use the max size to sampling\n const tempDomain = [domain[0], domain[Math.floor(domain.length / 2)], domain[domain.length - 1]];\n const tempList = getCartesianLabelBounds(scale, tempDomain, op);\n let maxBounds: AABBBounds = null;\n let maxBoundsIndex = 0;\n tempList.forEach((current, index) => {\n if (!maxBounds) {\n maxBounds = current;\n maxBoundsIndex = index;\n return;\n }\n if (isHorizontal) {\n if (maxBounds.width() < current.width()) {\n maxBounds = current;\n maxBoundsIndex = index;\n }\n } else if (maxBounds.height() < current.height()) {\n maxBounds = current;\n maxBoundsIndex = index;\n }\n });\n const maxBoundsDomainIndex =\n maxBoundsIndex === 0 ? 0 : maxBoundsIndex === 2 ? domain.length - 1 : Math.floor(domain.length / 2);\n const maxBoundsPos = scale.scale(domain[maxBoundsDomainIndex]);\n labelBoundsList = new Array(domain.length);\n // set bounds to each pos\n for (let i = 0; i < labelBoundsList.length; i++) {\n labelBoundsList[i] = maxBounds.clone();\n const currentPos = scale.scale(domain[i]);\n if (isHorizontal) {\n labelBoundsList[i].translate(currentPos - maxBoundsPos, 0);\n } else {\n labelBoundsList[i].translate(0, currentPos - maxBoundsPos);\n }\n }\n }\n\n const domainLengthList = labelBoundsList.map(b => {\n return isHorizontal ? b.width() : b.height();\n });\n\n const rangeStart = Math.min(...range);\n const rangeEnd = Math.max(...range);\n const incrementUnit = (rangeEnd - rangeStart) / domain.length;\n const result = getStep(\n domain,\n labelBoundsList,\n labelGap,\n op.labelLastVisible,\n isHorizontal,\n Math.floor(Math.min(...domainLengthList) / incrementUnit) // 给step赋上合适的初值,有效改善外层循环次数\n );\n\n scaleTicks = (scale as BandScale).stepTicks(result.step);\n if (op.labelLastVisible) {\n scaleTicks = scaleTicks.slice(0, scaleTicks.length - result.delCount);\n scaleTicks.push(domain[domain.length - 1]);\n }\n } else {\n scaleTicks = scale.domain();\n }\n\n return convertDomainToTickData(scaleTicks, op);\n};\n\n/** 计算合适的step */\nconst getStep = (\n domain: any[],\n labelBoundsList: AABBBounds[],\n labelGap: number,\n labelLastVisible: boolean,\n isHorizontal: boolean,\n defaultStep: number\n) => {\n let step = defaultStep;\n let delCount = 0;\n let resultDelCount = 0;\n let resultStep = 0;\n let resultTickCount = -1;\n let minDiff = Number.MAX_VALUE;\n // 通过循环来寻找最小的step,使:如果在这个step下采样,轴标签互不遮挡\n do {\n let success = true;\n step++;\n let ptr = 0;\n do {\n if (ptr + step < domain.length && labelOverlap(labelBoundsList[ptr], labelBoundsList[ptr + step], labelGap)) {\n success = false;\n }\n ptr += step;\n } while (success && ptr < domain.length);\n\n if (success) {\n if (labelLastVisible) {\n const lastIndex = domain.length - 1;\n delCount = 0;\n do {\n ptr -= step; // 获取最后一个label位置\n if (ptr === lastIndex || labelOverlap(labelBoundsList[ptr], labelBoundsList[lastIndex], labelGap)) {\n delCount++;\n } else {\n break;\n }\n } while (ptr > 0);\n if (ptr === lastIndex) {\n // 采到的最后的一个 label 刚好是最后一项,直接退出\n resultStep = step;\n resultDelCount = delCount;\n break;\n } else {\n // 尝试获取最均匀的结果,防止倒数第二项和最后一项有大的空档\n const tickCount = Math.floor(domain.length / step) - delCount + 1;\n if (tickCount < resultTickCount) {\n break;\n } else {\n resultTickCount = tickCount;\n const distanceIndex = isHorizontal ? 0 : 1;\n const distance1 = labelDistance(labelBoundsList[ptr], labelBoundsList[lastIndex])[distanceIndex]; // 倒数第2项和最后一项的距离\n const distance2 =\n ptr - step >= 0\n ? labelDistance(labelBoundsList[ptr - step], labelBoundsList[ptr])[distanceIndex]\n : distance1; // 倒数第3项和倒数第2项的距离\n const diff = Math.abs(distance1 - distance2);\n if (diff < minDiff) {\n minDiff = diff;\n resultStep = step; // 记录最均匀的 step\n resultDelCount = delCount;\n }\n }\n }\n } else {\n resultStep = step;\n break;\n }\n }\n } while (step <= domain.length);\n\n return {\n step: resultStep,\n delCount: resultDelCount\n };\n};\n"]}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: !0
|
|
5
|
-
}), exports.polarAngleAxisDiscreteTicks = void 0;
|
|
6
|
-
|
|
7
|
-
const util_1 = require("../../../../util"), util_2 = require("../util"), util_3 = require("../../../../component/axis/util"), polarAngleAxisDiscreteTicks = (scale, op) => {
|
|
8
|
-
const {tickCount: tickCount, forceTickCount: forceTickCount, tickStep: tickStep, getRadius: getRadius, axisSpec: axisSpec, labelGap: labelGap = 0} = op, radius = null == getRadius ? void 0 : getRadius();
|
|
9
|
-
if (!radius) return (0, util_2.convertDomainToTickData)(scale.domain(), op);
|
|
10
|
-
let scaleTicks;
|
|
11
|
-
if ((0, util_1.isValid)(tickStep)) scaleTicks = scale.stepTicks(tickStep); else if ((0,
|
|
12
|
-
util_1.isValid)(forceTickCount)) scaleTicks = scale.forceTicks(forceTickCount); else if ((0,
|
|
13
|
-
util_1.isValid)(tickCount)) scaleTicks = scale.ticks(tickCount); else if (op.sampling) {
|
|
14
|
-
const domain = scale.domain(), range = scale.range(), labelOffset = (0, util_3.getAxisLabelOffset)(axisSpec), labelBoundsList = (0,
|
|
15
|
-
util_2.getPolarAngleLabelBounds)(scale, domain, op), rangeStart = Math.min(...range), rangeEnd = Math.max(...range), incrementUnit = Math.abs(rangeEnd - rangeStart) * (radius + labelOffset) / domain.length, {step: step, delCount: delCount} = getStep(domain, labelBoundsList, labelGap, Math.floor(labelBoundsList.reduce(((min, curBounds) => Math.min(min, curBounds.width(), curBounds.height())), Number.MAX_VALUE) / incrementUnit));
|
|
16
|
-
scaleTicks = scale.stepTicks(step), scaleTicks = scaleTicks.slice(0, scaleTicks.length - delCount);
|
|
17
|
-
} else scaleTicks = scale.domain();
|
|
18
|
-
return (0, util_2.convertDomainToTickData)(scaleTicks, op);
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
exports.polarAngleAxisDiscreteTicks = polarAngleAxisDiscreteTicks;
|
|
22
|
-
|
|
23
|
-
const getStep = (domain, labelBoundsList, labelGap, defaultStep) => {
|
|
24
|
-
let step = defaultStep;
|
|
25
|
-
do {
|
|
26
|
-
let success = !0;
|
|
27
|
-
step++;
|
|
28
|
-
let ptr = 0;
|
|
29
|
-
do {
|
|
30
|
-
ptr + step < domain.length && (0, util_2.labelOverlap)(labelBoundsList[ptr], labelBoundsList[ptr + step], labelGap) && (success = !1),
|
|
31
|
-
ptr += step;
|
|
32
|
-
} while (success && ptr < domain.length);
|
|
33
|
-
if (success) break;
|
|
34
|
-
} while (step <= domain.length);
|
|
35
|
-
let delCount = 0;
|
|
36
|
-
if (domain.length > 2) {
|
|
37
|
-
let ptr = domain.length - domain.length % step;
|
|
38
|
-
for (ptr >= domain.length && (ptr -= step); ptr > 0 && (0, util_2.labelOverlap)(labelBoundsList[0], labelBoundsList[ptr]); ) delCount++,
|
|
39
|
-
ptr -= step;
|
|
40
|
-
}
|
|
41
|
-
return {
|
|
42
|
-
step: step,
|
|
43
|
-
delCount: delCount
|
|
44
|
-
};
|
|
45
|
-
};
|
|
46
|
-
//# sourceMappingURL=polar-angle.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/transforms/tick-data/discrete/polar-angle.ts"],"names":[],"mappings":"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","file":"polar-angle.js","sourcesContent":["import type { BandScale } from '@visactor/vscale';\nimport { isValid } from '../../../../util';\nimport type { IPolarTickDataOpt, ITickData } from '../interface';\nimport { convertDomainToTickData, getPolarAngleLabelBounds, labelOverlap } from '../util';\nimport type { AABBBounds } from '@visactor/vutils';\nimport { getAxisLabelOffset } from '../../../../component/axis/util';\n\n/**\n * 对于离散轴:\n * - 如果spec配了tickCount、forceTickCount、tickStep,则直接输出BandScale的ticks()、forceTicks()、stepTicks()结果;\n * - 估算所有轴label的宽高并存为数组labelBoundsList;\n * - 通过循环来寻找最小的step,使:如果在这个step下采样,轴标签互不遮挡(此处用到labelBoundsList和scale.range());\n *\n * @param scale\n * @param op\n * @returns\n */\nexport const polarAngleAxisDiscreteTicks = (scale: BandScale, op: IPolarTickDataOpt): ITickData[] => {\n const { tickCount, forceTickCount, tickStep, getRadius, axisSpec, labelGap = 0 } = op;\n const radius = getRadius?.();\n if (!radius) {\n return convertDomainToTickData(scale.domain(), op);\n }\n\n let scaleTicks;\n if (isValid(tickStep)) {\n scaleTicks = scale.stepTicks(tickStep);\n } else if (isValid(forceTickCount)) {\n scaleTicks = scale.forceTicks(forceTickCount);\n } else if (isValid(tickCount)) {\n scaleTicks = scale.ticks(tickCount);\n } else if (op.sampling) {\n const domain = scale.domain();\n const range = scale.range();\n\n const labelOffset = getAxisLabelOffset(axisSpec);\n const labelBoundsList = getPolarAngleLabelBounds(scale, domain, op);\n\n const rangeStart = Math.min(...range);\n const rangeEnd = Math.max(...range);\n\n const axisLength = Math.abs(rangeEnd - rangeStart) * (radius + labelOffset);\n const incrementUnit = axisLength / domain.length;\n const { step, delCount } = getStep(\n domain,\n labelBoundsList,\n labelGap,\n Math.floor(\n labelBoundsList.reduce((min, curBounds) => {\n return Math.min(min, curBounds.width(), curBounds.height());\n }, Number.MAX_VALUE) / incrementUnit\n ) // 给step赋上合适的初值,有效改善外层循环次数\n );\n\n scaleTicks = (scale as BandScale).stepTicks(step);\n scaleTicks = scaleTicks.slice(0, scaleTicks.length - delCount);\n } else {\n scaleTicks = scale.domain();\n }\n\n return convertDomainToTickData(scaleTicks, op);\n};\n\n/** 计算合适的step */\nconst getStep = (domain: any[], labelBoundsList: AABBBounds[], labelGap: number, defaultStep: number) => {\n let step = defaultStep;\n // 通过循环来寻找最小的step,使:如果在这个step下采样,轴标签互不遮挡\n do {\n let success = true;\n step++;\n let ptr = 0;\n do {\n if (ptr + step < domain.length && labelOverlap(labelBoundsList[ptr], labelBoundsList[ptr + step], labelGap)) {\n success = false;\n }\n ptr += step;\n } while (success && ptr < domain.length);\n if (success) {\n break;\n }\n } while (step <= domain.length);\n\n let delCount = 0;\n if (domain.length > 2) {\n let ptr = domain.length - (domain.length % step);\n if (ptr >= domain.length) {\n ptr -= step;\n }\n // 判断首尾是否互相覆盖\n while (ptr > 0 && labelOverlap(labelBoundsList[0], labelBoundsList[ptr])) {\n delCount++;\n ptr -= step;\n }\n }\n\n return {\n step,\n delCount\n };\n};\n"]}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var __createBinding = this && this.__createBinding || (Object.create ? function(o, m, k, k2) {
|
|
4
|
-
void 0 === k2 && (k2 = k);
|
|
5
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
-
desc && !("get" in desc ? !m.__esModule : desc.writable || desc.configurable) || (desc = {
|
|
7
|
-
enumerable: !0,
|
|
8
|
-
get: function() {
|
|
9
|
-
return m[k];
|
|
10
|
-
}
|
|
11
|
-
}), Object.defineProperty(o, k2, desc);
|
|
12
|
-
} : function(o, m, k, k2) {
|
|
13
|
-
void 0 === k2 && (k2 = k), o[k2] = m[k];
|
|
14
|
-
}), __exportStar = this && this.__exportStar || function(m, exports) {
|
|
15
|
-
for (var p in m) "default" === p || Object.prototype.hasOwnProperty.call(exports, p) || __createBinding(exports, m, p);
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
Object.defineProperty(exports, "__esModule", {
|
|
19
|
-
value: !0
|
|
20
|
-
}), exports.ticks = void 0;
|
|
21
|
-
|
|
22
|
-
const vscale_1 = require("@visactor/vscale"), continuous_1 = require("./continuous"), linear_1 = require("./discrete/linear"), polar_angle_1 = require("./discrete/polar-angle"), util_1 = require("./util");
|
|
23
|
-
|
|
24
|
-
__exportStar(require("./interface"), exports);
|
|
25
|
-
|
|
26
|
-
const ticks = (scale, op) => {
|
|
27
|
-
if ((0, vscale_1.isContinuous)(scale.type)) return (0, continuous_1.continuousTicks)(scale, op);
|
|
28
|
-
if ((0, vscale_1.isDiscrete)(scale.type)) {
|
|
29
|
-
if ("cartesian" === op.coordinateType) return (0, linear_1.linearDiscreteTicks)(scale, op);
|
|
30
|
-
if ("polar" === op.coordinateType && "angle" === op.axisOrientType) return (0, polar_angle_1.polarAngleAxisDiscreteTicks)(scale, op);
|
|
31
|
-
}
|
|
32
|
-
return (0, util_1.convertDomainToTickData)(scale.domain(), op);
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
exports.ticks = ticks;
|
|
36
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/transforms/tick-data/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAEA,6CAA4D;AAC5D,6CAA+C;AAC/C,8CAAwD;AACxD,wDAAqE;AAErE,iCAAiD;AAEjD,8CAA4B;AAGrB,MAAM,KAAK,GAAG,CAAC,KAAiB,EAAE,EAAgB,EAAe,EAAE;IACxE,IAAI,IAAA,qBAAY,EAAC,KAAK,CAAC,IAAI,CAAC,EAAE;QAC5B,OAAO,IAAA,4BAAe,EAAC,KAAwB,EAAE,EAAE,CAAC,CAAC;KACtD;SAAM,IAAI,IAAA,mBAAU,EAAC,KAAK,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,EAAE,CAAC,cAAc,KAAK,WAAW,EAAE;YACrC,OAAO,IAAA,4BAAmB,EAAC,KAAkB,EAAE,EAA2B,CAAC,CAAC;SAC7E;aAAM,IAAI,EAAE,CAAC,cAAc,KAAK,OAAO,EAAE;YACxC,IAAI,EAAE,CAAC,cAAc,KAAK,OAAO,EAAE;gBACjC,OAAO,IAAA,yCAA2B,EAAC,KAAkB,EAAE,EAAuB,CAAC,CAAC;aACjF;SACF;KACF;IACD,OAAO,IAAA,8BAAuB,EAAC,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;AACrD,CAAC,CAAC;AAbW,QAAA,KAAK,SAahB","file":"index.js","sourcesContent":["import type { BandScale, ContinuousScale, IBaseScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous, isDiscrete } from '@visactor/vscale';\nimport { continuousTicks } from './continuous';\nimport { linearDiscreteTicks } from './discrete/linear';\nimport { polarAngleAxisDiscreteTicks } from './discrete/polar-angle';\nimport type { ICartesianTickDataOpt, IPolarTickDataOpt, ITickData, ITickDataOpt } from './interface';\nimport { convertDomainToTickData } from './util';\n\nexport * from './interface';\n\n// 总入口\nexport const ticks = (scale: IBaseScale, op: ITickDataOpt): ITickData[] => {\n if (isContinuous(scale.type)) {\n return continuousTicks(scale as ContinuousScale, op);\n } else if (isDiscrete(scale.type)) {\n if (op.coordinateType === 'cartesian') {\n return linearDiscreteTicks(scale as BandScale, op as ICartesianTickDataOpt);\n } else if (op.coordinateType === 'polar') {\n if (op.axisOrientType === 'angle') {\n return polarAngleAxisDiscreteTicks(scale as BandScale, op as IPolarTickDataOpt);\n }\n }\n }\n return convertDomainToTickData(scale.domain(), op);\n};\n"]}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import type { ITick } from '../../../component/axis';
|
|
2
|
-
import type { IPolarAxisSpec } from '../../../component/axis/polar/interface';
|
|
3
|
-
import type { CoordinateType, IOrientType, IPolarOrientType, ITextMarkSpec } from '../../../typings';
|
|
4
|
-
export interface ITickDataOpt {
|
|
5
|
-
sampling?: boolean;
|
|
6
|
-
tickCount?: number;
|
|
7
|
-
forceTickCount?: number;
|
|
8
|
-
tickStep?: number;
|
|
9
|
-
tickMode?: ITick['tickMode'];
|
|
10
|
-
noDecimals?: ITick['noDecimals'];
|
|
11
|
-
coordinateType: CoordinateType;
|
|
12
|
-
axisOrientType: IOrientType | IPolarOrientType;
|
|
13
|
-
startAngle?: number;
|
|
14
|
-
labelFormatter?: (value: any) => string;
|
|
15
|
-
labelStyle: ITextMarkSpec;
|
|
16
|
-
labelGap?: number;
|
|
17
|
-
}
|
|
18
|
-
export interface ICartesianTickDataOpt extends ITickDataOpt {
|
|
19
|
-
axisOrientType: IOrientType;
|
|
20
|
-
labelLastVisible: boolean;
|
|
21
|
-
labelFlush: boolean;
|
|
22
|
-
}
|
|
23
|
-
export interface IPolarTickDataOpt extends ITickDataOpt {
|
|
24
|
-
axisOrientType: IPolarOrientType;
|
|
25
|
-
getRadius: () => number;
|
|
26
|
-
axisSpec: IPolarAxisSpec;
|
|
27
|
-
}
|
|
28
|
-
export interface ITickData {
|
|
29
|
-
index: number;
|
|
30
|
-
value: number | string;
|
|
31
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/transforms/tick-data/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { ITick } from '../../../component/axis';\nimport type { IPolarAxisSpec } from '../../../component/axis/polar/interface';\nimport type { CoordinateType, IOrientType, IPolarOrientType, ITextMarkSpec } from '../../../typings';\n\nexport interface ITickDataOpt {\n /**\n * 是否进行轴采样\n */\n sampling?: boolean;\n tickCount?: number;\n forceTickCount?: number;\n tickStep?: number;\n tickMode?: ITick['tickMode'];\n noDecimals?: ITick['noDecimals'];\n\n coordinateType: CoordinateType;\n axisOrientType: IOrientType | IPolarOrientType;\n startAngle?: number;\n\n labelFormatter?: (value: any) => string;\n labelStyle: ITextMarkSpec;\n labelGap?: number;\n}\n\nexport interface ICartesianTickDataOpt extends ITickDataOpt {\n axisOrientType: IOrientType;\n labelLastVisible: boolean;\n labelFlush: boolean;\n}\n\nexport interface IPolarTickDataOpt extends ITickDataOpt {\n axisOrientType: IPolarOrientType;\n getRadius: () => number;\n axisSpec: IPolarAxisSpec;\n}\n\nexport interface ITickData {\n index: number;\n value: number | string;\n // label: string;\n}\n"]}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { IBaseScale } from '@visactor/vscale';
|
|
2
|
-
import type { IBoundsLike } from '@visactor/vutils';
|
|
3
|
-
import { AABBBounds } from '@visactor/vutils';
|
|
4
|
-
import type { ICartesianTickDataOpt, IPolarTickDataOpt, ITickData, ITickDataOpt } from './interface';
|
|
5
|
-
import type { IGraphic } from '@visactor/vrender';
|
|
6
|
-
export declare const convertDomainToTickData: (domain: any[], op: ITickDataOpt) => ITickData[];
|
|
7
|
-
export declare const labelOverlap: (prevLabel: AABBBounds, nextLabel: AABBBounds, gap?: number) => boolean;
|
|
8
|
-
export declare const labelDistance: (prevLabel: AABBBounds, nextLabel: AABBBounds) => [number, number];
|
|
9
|
-
export declare function intersect(a: IBoundsLike, b: IBoundsLike, sep: number): boolean;
|
|
10
|
-
export interface ILabelItem<T> extends Pick<IGraphic, 'AABBBounds'> {
|
|
11
|
-
value?: T;
|
|
12
|
-
}
|
|
13
|
-
export declare function hasOverlap<T>(items: ILabelItem<T>[], pad: number): boolean;
|
|
14
|
-
export declare const getCartesianLabelBounds: (scale: IBaseScale, domain: any[], op: ICartesianTickDataOpt) => AABBBounds[];
|
|
15
|
-
export declare const getPolarAngleLabelBounds: (scale: IBaseScale, domain: any[], op: IPolarTickDataOpt) => AABBBounds[];
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: !0
|
|
5
|
-
}), exports.getPolarAngleLabelBounds = exports.getCartesianLabelBounds = exports.hasOverlap = exports.intersect = exports.labelDistance = exports.labelOverlap = exports.convertDomainToTickData = void 0;
|
|
6
|
-
|
|
7
|
-
const vutils_1 = require("@visactor/vutils"), util_1 = require("../../../component/axis/util"), util_2 = require("../../../util"), convertDomainToTickData = (domain, op) => domain.map(((t, index) => ({
|
|
8
|
-
index: index,
|
|
9
|
-
value: t
|
|
10
|
-
})));
|
|
11
|
-
|
|
12
|
-
exports.convertDomainToTickData = convertDomainToTickData;
|
|
13
|
-
|
|
14
|
-
const labelOverlap = (prevLabel, nextLabel, gap = 0) => {
|
|
15
|
-
const prevBounds = new vutils_1.AABBBounds(prevLabel).expand(gap / 2), nextBounds = new vutils_1.AABBBounds(nextLabel).expand(gap / 2);
|
|
16
|
-
return prevBounds.intersects(nextBounds);
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
exports.labelOverlap = labelOverlap;
|
|
20
|
-
|
|
21
|
-
const labelDistance = (prevLabel, nextLabel) => {
|
|
22
|
-
let horizontal = 0;
|
|
23
|
-
prevLabel.x2 < nextLabel.x1 ? horizontal = nextLabel.x1 - prevLabel.x2 : nextLabel.x2 < prevLabel.x1 && (horizontal = prevLabel.x1 - nextLabel.x2);
|
|
24
|
-
let vertical = 0;
|
|
25
|
-
return prevLabel.y2 < nextLabel.y1 ? vertical = nextLabel.y1 - prevLabel.y2 : nextLabel.y2 < prevLabel.y1 && (vertical = prevLabel.y1 - nextLabel.y2),
|
|
26
|
-
[ horizontal, vertical ];
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
function intersect(a, b, sep) {
|
|
30
|
-
return sep > Math.max(b.x1 - a.x2, a.x1 - b.x2, b.y1 - a.y2, a.y1 - b.y2);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
function hasOverlap(items, pad) {
|
|
34
|
-
for (let b, i = 1, n = items.length, a = items[0]; i < n; a = b, ++i) if (b = items[i],
|
|
35
|
-
intersect(a.AABBBounds, b.AABBBounds, pad)) return !0;
|
|
36
|
-
return !1;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
exports.labelDistance = labelDistance, exports.intersect = intersect, exports.hasOverlap = hasOverlap;
|
|
40
|
-
|
|
41
|
-
const MIN_TICK_GAP = 12, getCartesianLabelBounds = (scale, domain, op) => {
|
|
42
|
-
var _a;
|
|
43
|
-
const {labelStyle: labelStyle, axisOrientType: axisOrientType, labelFlush: labelFlush, labelFormatter: labelFormatter, startAngle: startAngle = 0} = op, labelAngle = null !== (_a = labelStyle.angle) && void 0 !== _a ? _a : 0, isHorizontal = [ "bottom", "top" ].includes(axisOrientType), isVertical = [ "left", "right" ].includes(axisOrientType);
|
|
44
|
-
let orientAngle = startAngle;
|
|
45
|
-
isHorizontal ? orientAngle = 0 : isVertical && (orientAngle = (0, util_2.radians)(-90));
|
|
46
|
-
const textMeasure = (0, util_2.initTextMeasure)(labelStyle), labelBoundsList = domain.map(((v, i) => {
|
|
47
|
-
var _a, _b;
|
|
48
|
-
const str = labelFormatter ? labelFormatter(v) : `${v}`, {width: width, height: height} = textMeasure.quickMeasure(str), textWidth = Math.max(width, 12), textHeight = Math.max(height, 12), pos = scale.scale(v);
|
|
49
|
-
let align, baseline, textX = Math.cos(orientAngle) * pos, textY = -Math.sin(orientAngle) * pos;
|
|
50
|
-
align = labelFlush && isHorizontal && 0 === i ? "left" : labelFlush && isHorizontal && i === domain.length - 1 ? "right" : null !== (_a = labelStyle.textAlign) && void 0 !== _a ? _a : "center",
|
|
51
|
-
"right" === align ? textX -= textWidth : "center" === align && (textX -= textWidth / 2),
|
|
52
|
-
baseline = labelFlush && isVertical && 0 === i ? "top" : labelFlush && isVertical && i === domain.length - 1 ? "bottom" : null !== (_b = labelStyle.textBaseline) && void 0 !== _b ? _b : "middle",
|
|
53
|
-
"bottom" === baseline ? textY -= textHeight : "middle" === baseline && (textY -= textHeight / 2);
|
|
54
|
-
return (new vutils_1.AABBBounds).set(textX, textY, textX + textWidth, textY + textHeight).rotate(labelAngle, textX + textWidth / 2, textY + textHeight / 2);
|
|
55
|
-
}));
|
|
56
|
-
return labelBoundsList;
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
exports.getCartesianLabelBounds = getCartesianLabelBounds;
|
|
60
|
-
|
|
61
|
-
const getPolarAngleLabelBounds = (scale, domain, op) => {
|
|
62
|
-
var _a;
|
|
63
|
-
const {labelStyle: labelStyle, getRadius: getRadius, axisSpec: axisSpec, labelFormatter: labelFormatter} = op, radius = null == getRadius ? void 0 : getRadius(), labelAngle = null !== (_a = labelStyle.angle) && void 0 !== _a ? _a : 0, labelOffset = (0,
|
|
64
|
-
util_1.getAxisLabelOffset)(axisSpec), textMeasure = (0, util_2.initTextMeasure)(labelStyle);
|
|
65
|
-
return domain.map((v => {
|
|
66
|
-
const str = labelFormatter ? labelFormatter(v) : `${v}`, {width: width, height: height} = textMeasure.quickMeasure(str), textWidth = Math.max(width, 12), textHeight = Math.max(height, 12), angle = scale.scale(v);
|
|
67
|
-
let textX = 0, textY = 0;
|
|
68
|
-
const orient = (0, util_2.angleLabelOrientAttribute)(angle), {x: x, y: y} = (0,
|
|
69
|
-
vutils_1.polarToCartesian)({
|
|
70
|
-
x: 0,
|
|
71
|
-
y: 0
|
|
72
|
-
}, radius + labelOffset, angle);
|
|
73
|
-
textX = x + ("right" === orient.align ? -textWidth : "center" === orient.align ? -textWidth / 2 : 0),
|
|
74
|
-
textY = y + ("bottom" === orient.baseline ? -textHeight : "middle" === orient.baseline ? -textHeight / 2 : 0);
|
|
75
|
-
return (new vutils_1.AABBBounds).set(textX, textY, textX + textWidth, textY + textHeight).rotate(labelAngle, textX + textWidth / 2, textY + textHeight / 2);
|
|
76
|
-
}));
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
exports.getPolarAngleLabelBounds = getPolarAngleLabelBounds;
|
|
80
|
-
//# sourceMappingURL=util.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/transforms/tick-data/util.ts"],"names":[],"mappings":";;;AAGA,6CAAgE;AAChE,uDAAkE;AAElE,wCAAoF;AAI7E,MAAM,uBAAuB,GAAG,CAAC,MAAa,EAAE,EAAgB,EAAe,EAAE;IACtF,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,KAAa,EAAE,EAAE;QACpD,OAAO;YACL,KAAK;YACL,KAAK,EAAE,CAAC;SAET,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AATW,QAAA,uBAAuB,2BASlC;AAGK,MAAM,YAAY,GAAG,CAAC,SAAqB,EAAE,SAAqB,EAAE,MAAc,CAAC,EAAW,EAAE;IACrG,MAAM,UAAU,GAAG,IAAI,mBAAU,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,IAAI,mBAAU,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC7D,OAAO,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC3C,CAAC,CAAC;AAJW,QAAA,YAAY,gBAIvB;AAGK,MAAM,aAAa,GAAG,CAAC,SAAqB,EAAE,SAAqB,EAAoB,EAAE;IAC9F,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,SAAS,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,EAAE;QAC/B,UAAU,GAAG,SAAS,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;KAC1C;SAAM,IAAI,SAAS,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,EAAE;QACtC,UAAU,GAAG,SAAS,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;KAC1C;IAED,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,SAAS,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,EAAE;QAC/B,QAAQ,GAAG,SAAS,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;KACxC;SAAM,IAAI,SAAS,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,EAAE;QACtC,QAAQ,GAAG,SAAS,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;KACxC;IAED,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAChC,CAAC,CAAC;AAhBW,QAAA,aAAa,iBAgBxB;AAEF,SAAgB,SAAS,CAAC,CAAc,EAAE,CAAc,EAAE,GAAW;IACnE,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAC5E,CAAC;AAFD,8BAEC;AAMD,SAAgB,UAAU,CAAI,KAAsB,EAAE,GAAW;IAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;QACpE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACb,IAAI,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE;YAC9C,OAAO,IAAI,CAAC;SACb;KACF;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AARD,gCAQC;AAED,MAAM,YAAY,GAAG,EAAE,CAAC;AAEjB,MAAM,uBAAuB,GAAG,CAAC,KAAiB,EAAE,MAAa,EAAE,EAAyB,EAAgB,EAAE;;IACnH,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;IACtF,MAAM,UAAU,GAAG,MAAA,UAAU,CAAC,KAAK,mCAAI,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC9D,IAAI,WAAW,GAAG,UAAU,CAAC;IAC7B,IAAI,YAAY,EAAE;QAChB,WAAW,GAAG,CAAC,CAAC;KACjB;SAAM,IAAI,UAAU,EAAE;QACrB,WAAW,GAAG,IAAA,cAAO,EAAC,CAAC,EAAE,CAAC,CAAC;KAC5B;IAED,MAAM,WAAW,GAAG,IAAA,sBAAe,EAAC,UAAU,CAAC,CAAC;IAChD,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,CAAS,EAAE,EAAE;;QACvD,MAAM,GAAG,GAAG,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QAGxD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAGlD,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC;QACxC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC;QAEzC,IAAI,KAAgB,CAAC;QACrB,IAAI,UAAU,IAAI,YAAY,IAAI,CAAC,KAAK,CAAC,EAAE;YACzC,KAAK,GAAG,MAAM,CAAC;SAChB;aAAM,IAAI,UAAU,IAAI,YAAY,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAChE,KAAK,GAAG,OAAO,CAAC;SACjB;aAAM;YACL,KAAK,GAAG,MAAA,UAAU,CAAC,SAAS,mCAAI,QAAQ,CAAC;SAC1C;QACD,IAAI,KAAK,KAAK,OAAO,EAAE;YACrB,KAAK,IAAI,SAAS,CAAC;SACpB;aAAM,IAAI,KAAK,KAAK,QAAQ,EAAE;YAC7B,KAAK,IAAI,SAAS,GAAG,CAAC,CAAC;SACxB;QAED,IAAI,QAAsB,CAAC;QAC3B,IAAI,UAAU,IAAI,UAAU,IAAI,CAAC,KAAK,CAAC,EAAE;YACvC,QAAQ,GAAG,KAAK,CAAC;SAClB;aAAM,IAAI,UAAU,IAAI,UAAU,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9D,QAAQ,GAAG,QAAQ,CAAC;SACrB;aAAM;YACL,QAAQ,GAAG,MAAA,UAAU,CAAC,YAAY,mCAAI,QAAQ,CAAC;SAChD;QACD,IAAI,QAAQ,KAAK,QAAQ,EAAE;YACzB,KAAK,IAAI,UAAU,CAAC;SACrB;aAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE;YAChC,KAAK,IAAI,UAAU,GAAG,CAAC,CAAC;SACzB;QAGD,MAAM,MAAM,GAAG,IAAI,mBAAU,EAAE;aAC5B,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,SAAS,EAAE,KAAK,GAAG,UAAU,CAAC;aACxD,MAAM,CAAC,UAAU,EAAE,KAAK,GAAG,SAAS,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC;QACrE,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,OAAO,eAAe,CAAC;AACzB,CAAC,CAAC;AA9DW,QAAA,uBAAuB,2BA8DlC;AAEK,MAAM,wBAAwB,GAAG,CAAC,KAAiB,EAAE,MAAa,EAAE,EAAqB,EAAgB,EAAE;;IAChH,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC;IAC/D,MAAM,MAAM,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,EAAI,CAAC;IAC7B,MAAM,UAAU,GAAG,MAAA,UAAU,CAAC,KAAK,mCAAI,CAAC,CAAC;IAEzC,MAAM,WAAW,GAAG,IAAA,yBAAkB,EAAC,QAAQ,CAAC,CAAC;IAEjD,MAAM,WAAW,GAAG,IAAA,sBAAe,EAAC,UAAU,CAAC,CAAC;IAChD,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;QAC5C,MAAM,GAAG,GAAG,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QAGxD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAGlD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,MAAM,GAAG,IAAA,gCAAyB,EAAC,KAAK,CAAC,CAAC;QAChD,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAA,yBAAgB,EAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,EAAE,KAAK,CAAC,CAAC;QAC/E,KAAK,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrG,KAAK,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAG9G,MAAM,MAAM,GAAG,IAAI,mBAAU,EAAE;aAC5B,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,SAAS,EAAE,KAAK,GAAG,UAAU,CAAC;aACxD,MAAM,CAAC,UAAU,EAAE,KAAK,GAAG,SAAS,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC;QACrE,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,OAAO,eAAe,CAAC;AACzB,CAAC,CAAC;AAjCW,QAAA,wBAAwB,4BAiCnC","file":"util.js","sourcesContent":["import type { IBaseScale } from '@visactor/vscale';\nimport type { IBoundsLike } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { AABBBounds, polarToCartesian } from '@visactor/vutils';\nimport { getAxisLabelOffset } from '../../../component/axis/util';\nimport type { TextAlign, TextBaseLine } from '../../../typings';\nimport { angleLabelOrientAttribute, initTextMeasure, radians } from '../../../util';\nimport type { ICartesianTickDataOpt, IPolarTickDataOpt, ITickData, ITickDataOpt } from './interface';\nimport type { IGraphic } from '@visactor/vrender';\n\nexport const convertDomainToTickData = (domain: any[], op: ITickDataOpt): ITickData[] => {\n const ticks = domain.map((t: number, index: number) => {\n return {\n index,\n value: t\n // label: op.labelFormatter ? op.labelFormatter(t) : `${t}`\n };\n });\n return ticks;\n};\n\n/** 判断两个label是否有重叠情况 */\nexport const labelOverlap = (prevLabel: AABBBounds, nextLabel: AABBBounds, gap: number = 0): boolean => {\n const prevBounds = new AABBBounds(prevLabel).expand(gap / 2);\n const nextBounds = new AABBBounds(nextLabel).expand(gap / 2);\n return prevBounds.intersects(nextBounds);\n};\n\n/** 判断两个不相交的label相隔的距离 */\nexport const labelDistance = (prevLabel: AABBBounds, nextLabel: AABBBounds): [number, number] => {\n let horizontal = 0;\n if (prevLabel.x2 < nextLabel.x1) {\n horizontal = nextLabel.x1 - prevLabel.x2;\n } else if (nextLabel.x2 < prevLabel.x1) {\n horizontal = prevLabel.x1 - nextLabel.x2;\n }\n\n let vertical = 0;\n if (prevLabel.y2 < nextLabel.y1) {\n vertical = nextLabel.y1 - prevLabel.y2;\n } else if (nextLabel.y2 < prevLabel.y1) {\n vertical = prevLabel.y1 - nextLabel.y2;\n }\n\n return [horizontal, vertical];\n};\n\nexport function intersect(a: IBoundsLike, b: IBoundsLike, sep: number) {\n return sep > Math.max(b.x1 - a.x2, a.x1 - b.x2, b.y1 - a.y2, a.y1 - b.y2);\n}\n\nexport interface ILabelItem<T> extends Pick<IGraphic, 'AABBBounds'> {\n value?: T;\n}\n\nexport function hasOverlap<T>(items: ILabelItem<T>[], pad: number): boolean {\n for (let i = 1, n = items.length, a = items[0], b; i < n; a = b, ++i) {\n b = items[i];\n if (intersect(a.AABBBounds, b.AABBBounds, pad)) {\n return true;\n }\n }\n return false;\n}\n\nconst MIN_TICK_GAP = 12;\n\nexport const getCartesianLabelBounds = (scale: IBaseScale, domain: any[], op: ICartesianTickDataOpt): AABBBounds[] => {\n const { labelStyle, axisOrientType, labelFlush, labelFormatter, startAngle = 0 } = op;\n const labelAngle = labelStyle.angle ?? 0;\n const isHorizontal = ['bottom', 'top'].includes(axisOrientType);\n const isVertical = ['left', 'right'].includes(axisOrientType);\n let orientAngle = startAngle;\n if (isHorizontal) {\n orientAngle = 0;\n } else if (isVertical) {\n orientAngle = radians(-90);\n }\n\n const textMeasure = initTextMeasure(labelStyle);\n const labelBoundsList = domain.map((v: any, i: number) => {\n const str = labelFormatter ? labelFormatter(v) : `${v}`;\n\n // 估算文本宽高\n const { width, height } = textMeasure.quickMeasure(str);\n const textWidth = Math.max(width, MIN_TICK_GAP);\n const textHeight = Math.max(height, MIN_TICK_GAP);\n\n // 估算文本位置\n const pos = scale.scale(v);\n let textX = Math.cos(orientAngle) * pos;\n let textY = -Math.sin(orientAngle) * pos;\n\n let align: TextAlign;\n if (labelFlush && isHorizontal && i === 0) {\n align = 'left';\n } else if (labelFlush && isHorizontal && i === domain.length - 1) {\n align = 'right';\n } else {\n align = labelStyle.textAlign ?? 'center';\n }\n if (align === 'right') {\n textX -= textWidth;\n } else if (align === 'center') {\n textX -= textWidth / 2;\n }\n\n let baseline: TextBaseLine;\n if (labelFlush && isVertical && i === 0) {\n baseline = 'top';\n } else if (labelFlush && isVertical && i === domain.length - 1) {\n baseline = 'bottom';\n } else {\n baseline = labelStyle.textBaseline ?? 'middle';\n }\n if (baseline === 'bottom') {\n textY -= textHeight;\n } else if (baseline === 'middle') {\n textY -= textHeight / 2;\n }\n\n // 计算 label 包围盒\n const bounds = new AABBBounds()\n .set(textX, textY, textX + textWidth, textY + textHeight)\n .rotate(labelAngle, textX + textWidth / 2, textY + textHeight / 2);\n return bounds;\n });\n\n return labelBoundsList;\n};\n\nexport const getPolarAngleLabelBounds = (scale: IBaseScale, domain: any[], op: IPolarTickDataOpt): AABBBounds[] => {\n const { labelStyle, getRadius, axisSpec, labelFormatter } = op;\n const radius = getRadius?.();\n const labelAngle = labelStyle.angle ?? 0;\n\n const labelOffset = getAxisLabelOffset(axisSpec);\n\n const textMeasure = initTextMeasure(labelStyle);\n const labelBoundsList = domain.map((v: any) => {\n const str = labelFormatter ? labelFormatter(v) : `${v}`;\n\n // 估算文本宽高\n const { width, height } = textMeasure.quickMeasure(str);\n const textWidth = Math.max(width, MIN_TICK_GAP);\n const textHeight = Math.max(height, MIN_TICK_GAP);\n\n // 估算文本位置\n const angle = scale.scale(v);\n let textX = 0;\n let textY = 0;\n const orient = angleLabelOrientAttribute(angle);\n const { x, y } = polarToCartesian({ x: 0, y: 0 }, radius + labelOffset, angle);\n textX = x + (orient.align === 'right' ? -textWidth : orient.align === 'center' ? -textWidth / 2 : 0);\n textY = y + (orient.baseline === 'bottom' ? -textHeight : orient.baseline === 'middle' ? -textHeight / 2 : 0);\n\n // 计算 label 包围盒\n const bounds = new AABBBounds()\n .set(textX, textY, textX + textWidth, textY + textHeight)\n .rotate(labelAngle, textX + textWidth / 2, textY + textHeight / 2);\n return bounds;\n });\n\n return labelBoundsList;\n};\n"]}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { ILabelInfo } from './label';
|
|
2
|
-
import type { Strategy } from '@visactor/vrender-components';
|
|
3
|
-
export declare function barLabel(labelInfo: ILabelInfo): {
|
|
4
|
-
position: string | ((data: any) => string);
|
|
5
|
-
overlap: boolean | {
|
|
6
|
-
strategy: Strategy[];
|
|
7
|
-
};
|
|
8
|
-
smartInvert: boolean;
|
|
9
|
-
};
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { isString } from "@visactor/vutils";
|
|
2
|
-
|
|
3
|
-
export function barLabel(labelInfo) {
|
|
4
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
5
|
-
const {series: series, baseMark: baseMark} = labelInfo, labelSpec = null !== (_a = baseMark.getLabelSpec()) && void 0 !== _a ? _a : {}, labelPosition = null !== (_b = labelSpec.position) && void 0 !== _b ? _b : "outside", direction = null !== (_c = series.direction) && void 0 !== _c ? _c : "vertical", isInverse = "horizontal" === series.direction ? null === (_d = series.getXAxisHelper()) || void 0 === _d ? void 0 : _d.isInverse() : null === (_e = series.getYAxisHelper()) || void 0 === _e ? void 0 : _e.isInverse();
|
|
6
|
-
let overlap, position = labelPosition;
|
|
7
|
-
"inside" !== position && (position = data => {
|
|
8
|
-
const {data: datum} = data, dataField = series.getMeasureField()[0];
|
|
9
|
-
if ("outside" === labelPosition) {
|
|
10
|
-
const positionMap = {
|
|
11
|
-
vertical: [ "top", "bottom" ],
|
|
12
|
-
horizontal: [ "right", "left" ]
|
|
13
|
-
}, index = (null == datum ? void 0 : datum[dataField]) >= 0 && isInverse || (null == datum ? void 0 : datum[dataField]) < 0 && !isInverse ? 1 : 0;
|
|
14
|
-
return positionMap[direction][index];
|
|
15
|
-
}
|
|
16
|
-
return "inside-bottom" === labelPosition ? "horizontal" === series.direction ? "inside-left" : "inside-bottom" : "inside-top" === labelPosition ? "horizontal" === series.direction ? "inside-right" : "inside-top" : labelPosition;
|
|
17
|
-
}), overlap = !1 !== labelSpec.overlap && {
|
|
18
|
-
strategy: null !== (_g = null === (_f = labelSpec.overlap) || void 0 === _f ? void 0 : _f.strategy) && void 0 !== _g ? _g : barLabelOverlapStrategy(series)
|
|
19
|
-
};
|
|
20
|
-
let smartInvert = !1;
|
|
21
|
-
return isString(labelPosition) && labelPosition.includes("inside") && (smartInvert = !0),
|
|
22
|
-
{
|
|
23
|
-
position: position,
|
|
24
|
-
overlap: overlap,
|
|
25
|
-
smartInvert: smartInvert
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function barLabelOverlapStrategy(series) {
|
|
30
|
-
return [ {
|
|
31
|
-
type: "position",
|
|
32
|
-
position: data => {
|
|
33
|
-
var _a, _b;
|
|
34
|
-
const {data: datum} = data, dataField = series.getMeasureField()[0];
|
|
35
|
-
return ("horizontal" === series.direction ? null === (_a = series.getXAxisHelper()) || void 0 === _a ? void 0 : _a.isInverse() : null === (_b = series.getYAxisHelper()) || void 0 === _b ? void 0 : _b.isInverse()) ? (null == datum ? void 0 : datum[dataField]) >= 0 ? "horizontal" === series.direction ? [ "left", "inside-left" ] : [ "bottom", "inside-bottom" ] : "horizontal" === series.direction ? [ "right", "inside-right" ] : [ "top", "inside-top" ] : (null == datum ? void 0 : datum[dataField]) >= 0 ? "horizontal" === series.direction ? [ "right", "inside-right" ] : [ "top", "inside-top" ] : "horizontal" === series.direction ? [ "left", "inside-left" ] : [ "bottom", "inside-bottom" ];
|
|
36
|
-
}
|
|
37
|
-
} ];
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=bar.js.map
|