@visactor/vchart 2.1.0-alpha.9 → 2.1.0
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.es.js +49550 -52388
- package/build/index.js +49552 -52390
- package/build/index.min.js +2 -2
- package/build/tsconfig.tsbuildinfo +1 -1
- package/cjs/animation/callback-disappear.d.ts +1 -1
- package/cjs/animation/callback-disappear.js +2 -2
- package/cjs/animation/callback-disappear.js.map +1 -1
- package/cjs/animation/config.js +34 -34
- package/cjs/animation/config.js.map +1 -1
- package/cjs/animation/grammar-dector.js +1 -2
- package/cjs/animation/index.js +2 -1
- package/cjs/chart/base/base-chart.d.ts +2 -0
- package/cjs/chart/base/base-chart.js +14 -5
- package/cjs/chart/base/base-chart.js.map +1 -1
- package/cjs/compile/compiler.js +8 -3
- package/cjs/compile/compiler.js.map +1 -1
- package/cjs/compile/interface/compiler.js.map +1 -1
- package/cjs/compile/morph.js +4 -4
- package/cjs/compile/morph.js.map +1 -1
- package/cjs/compile/stage-app.d.ts +10 -2
- package/cjs/compile/stage-app.js +69 -26
- package/cjs/compile/stage-app.js.map +1 -1
- package/cjs/compile/util.js +1 -2
- package/cjs/component/axis/base-axis.d.ts +1 -1
- package/cjs/component/axis/base-axis.js +3 -3
- package/cjs/component/axis/base-axis.js.map +1 -1
- package/cjs/component/axis/cartesian/band-axis.js +4 -4
- package/cjs/component/axis/cartesian/band-axis.js.map +1 -1
- package/cjs/component/axis/cartesian/linear-axis.d.ts +3 -2
- package/cjs/component/axis/cartesian/linear-axis.js +8 -4
- package/cjs/component/axis/cartesian/linear-axis.js.map +1 -1
- package/cjs/component/axis/mixin/linear-axis-mixin.d.ts +2 -0
- package/cjs/component/axis/mixin/linear-axis-mixin.js +7 -1
- package/cjs/component/axis/mixin/linear-axis-mixin.js.map +1 -1
- package/cjs/component/brush/brush.d.ts +1 -0
- package/cjs/component/brush/brush.js +15 -10
- package/cjs/component/brush/brush.js.map +1 -1
- package/cjs/component/crosshair/base.d.ts +1 -1
- package/cjs/component/crosshair/base.js +3 -3
- package/cjs/component/crosshair/base.js.map +1 -1
- package/cjs/component/crosshair/cartesian.js +3 -3
- package/cjs/component/crosshair/cartesian.js.map +1 -1
- package/cjs/component/index.js +2 -1
- package/cjs/component/label/label.js +2 -2
- package/cjs/component/label/label.js.map +1 -1
- package/cjs/component/legend/base-legend.js +1 -1
- package/cjs/component/legend/base-legend.js.map +1 -1
- package/cjs/component/legend/discrete/interface.d.ts +11 -1
- package/cjs/component/legend/discrete/interface.js.map +1 -1
- package/cjs/component/legend/discrete/legend.d.ts +1 -1
- package/cjs/component/legend/discrete/legend.js +9 -8
- package/cjs/component/legend/discrete/legend.js.map +1 -1
- package/cjs/component/legend/discrete/util.d.ts +2 -1
- package/cjs/component/legend/discrete/util.js +39 -5
- package/cjs/component/legend/discrete/util.js.map +1 -1
- package/cjs/component/marker/base-marker.js +11 -7
- package/cjs/component/marker/base-marker.js.map +1 -1
- package/cjs/component/marker/mark-line/cartesian-mark-line.js +18 -7
- package/cjs/component/marker/mark-line/cartesian-mark-line.js.map +1 -1
- package/cjs/component/marker/mark-line/interface/spec.d.ts +9 -2
- package/cjs/component/marker/mark-line/interface/spec.js.map +1 -1
- package/cjs/component/marker/mark-point/base-mark-point.js +30 -17
- package/cjs/component/marker/mark-point/base-mark-point.js.map +1 -1
- package/cjs/component/marker/utils.js +17 -7
- package/cjs/component/marker/utils.js.map +1 -1
- package/cjs/constant/correlation.js +2 -1
- package/cjs/constant/event.js +1 -2
- package/cjs/constant/marker.js +1 -1
- package/cjs/constant/polar.js +1 -1
- package/cjs/core/index.d.ts +3 -2
- package/cjs/core/index.js +9 -5
- package/cjs/core/index.js.map +1 -1
- package/cjs/core/vchart.js +16 -6
- package/cjs/core/vchart.js.map +1 -1
- package/cjs/data/data-view-utils.js +1 -1
- package/cjs/data/initialize.js +1 -1
- package/cjs/data/register.js +1 -1
- package/cjs/env/env.js +10 -10
- package/cjs/env/env.js.map +1 -1
- package/cjs/mark/arc.js +4 -4
- package/cjs/mark/arc.js.map +1 -1
- package/cjs/mark/area.js +4 -5
- package/cjs/mark/area.js.map +1 -1
- package/cjs/mark/base/base-line.js +2 -2
- package/cjs/mark/base/base-line.js.map +1 -1
- package/cjs/mark/base/base-mark.d.ts +0 -1
- package/cjs/mark/base/base-mark.js +16 -24
- package/cjs/mark/base/base-mark.js.map +1 -1
- package/cjs/mark/glyph.d.ts +3 -0
- package/cjs/mark/glyph.js +29 -5
- package/cjs/mark/glyph.js.map +1 -1
- package/cjs/mark/group.js +5 -5
- package/cjs/mark/group.js.map +1 -1
- package/cjs/mark/interface/common.js.map +1 -1
- package/cjs/mark/line.js +4 -5
- package/cjs/mark/line.js.map +1 -1
- package/cjs/mark/rect.js +3 -3
- package/cjs/mark/rect.js.map +1 -1
- package/cjs/mark/symbol.js +3 -3
- package/cjs/mark/symbol.js.map +1 -1
- package/cjs/mark/text.js +4 -4
- package/cjs/mark/text.js.map +1 -1
- package/cjs/plugin/components/axis-sync/tick-align-transform.js +2 -2
- package/cjs/plugin/components/axis-sync/tick-align-transform.js.map +1 -1
- package/cjs/plugin/components/tooltip-handler/canvas-tooltip-handler.d.ts +2 -2
- package/cjs/plugin/components/tooltip-handler/canvas-tooltip-handler.js +2 -2
- package/cjs/plugin/components/tooltip-handler/canvas-tooltip-handler.js.map +1 -1
- package/cjs/plugin/other.js +5 -5
- package/cjs/plugin/other.js.map +1 -1
- package/cjs/series/base/base-series.d.ts +3 -0
- package/cjs/series/base/base-series.js +57 -27
- package/cjs/series/base/base-series.js.map +1 -1
- package/cjs/series/dot/dot.d.ts +1 -0
- package/cjs/series/interface/common.d.ts +2 -1
- package/cjs/series/interface/common.js.map +1 -1
- package/cjs/series/line/line.js +3 -3
- package/cjs/series/line/line.js.map +1 -1
- package/cjs/series/waterfall/waterfall.d.ts +2 -0
- package/cjs/series/waterfall/waterfall.js +12 -4
- package/cjs/series/waterfall/waterfall.js.map +1 -1
- package/cjs/series/word-cloud/animation.js +3 -0
- package/cjs/series/word-cloud/animation.js.map +1 -1
- package/cjs/theme/builtin/common/series/word-cloud.js +2 -6
- package/cjs/theme/builtin/common/series/word-cloud.js.map +1 -1
- package/cjs/util/mark.js +7 -3
- package/cjs/util/mark.js.map +1 -1
- package/cjs/util/math.d.ts +1 -1
- package/cjs/util/math.js +2 -2
- package/cjs/util/math.js.map +1 -1
- package/cjs/util/style.js +24 -2
- package/cjs/util/style.js.map +1 -1
- package/cjs/util/text.js +2 -2
- package/cjs/util/text.js.map +1 -1
- package/cjs/vchart-line.d.ts +4 -0
- package/cjs/vchart-line.js +35 -0
- package/cjs/vchart-line.js.map +1 -0
- package/cjs/vchart-simple.d.ts +5 -1
- package/cjs/vchart-simple.js +11 -10
- package/cjs/vchart-simple.js.map +1 -1
- package/esm/animation/callback-disappear.d.ts +1 -1
- package/esm/animation/callback-disappear.js +1 -1
- package/esm/animation/callback-disappear.js.map +1 -1
- package/esm/animation/config.js +33 -1
- package/esm/animation/config.js.map +1 -1
- package/esm/animation/grammar-dector.js +1 -2
- package/esm/animation/index.js +2 -1
- package/esm/chart/base/base-chart.d.ts +2 -0
- package/esm/chart/base/base-chart.js +14 -5
- package/esm/chart/base/base-chart.js.map +1 -1
- package/esm/compile/compiler.js +8 -4
- package/esm/compile/compiler.js.map +1 -1
- package/esm/compile/interface/compiler.js.map +1 -1
- package/esm/compile/morph.js +1 -1
- package/esm/compile/morph.js.map +1 -1
- package/esm/compile/stage-app.d.ts +10 -2
- package/esm/compile/stage-app.js +65 -23
- package/esm/compile/stage-app.js.map +1 -1
- package/esm/compile/util.js +1 -2
- package/esm/component/axis/base-axis.d.ts +1 -1
- package/esm/component/axis/base-axis.js +2 -2
- package/esm/component/axis/base-axis.js.map +1 -1
- package/esm/component/axis/cartesian/band-axis.js +4 -2
- package/esm/component/axis/cartesian/band-axis.js.map +1 -1
- package/esm/component/axis/cartesian/linear-axis.d.ts +3 -2
- package/esm/component/axis/cartesian/linear-axis.js +9 -1
- package/esm/component/axis/cartesian/linear-axis.js.map +1 -1
- package/esm/component/axis/mixin/linear-axis-mixin.d.ts +2 -0
- package/esm/component/axis/mixin/linear-axis-mixin.js +7 -1
- package/esm/component/axis/mixin/linear-axis-mixin.js.map +1 -1
- package/esm/component/brush/brush.d.ts +1 -0
- package/esm/component/brush/brush.js +16 -10
- package/esm/component/brush/brush.js.map +1 -1
- package/esm/component/crosshair/base.d.ts +1 -1
- package/esm/component/crosshair/base.js +1 -1
- package/esm/component/crosshair/base.js.map +1 -1
- package/esm/component/crosshair/cartesian.js +3 -1
- package/esm/component/crosshair/cartesian.js.map +1 -1
- package/esm/component/index.js +2 -1
- package/esm/component/label/label.js +1 -1
- package/esm/component/label/label.js.map +1 -1
- package/esm/component/legend/base-legend.js +1 -1
- package/esm/component/legend/base-legend.js.map +1 -1
- package/esm/component/legend/discrete/interface.d.ts +11 -1
- package/esm/component/legend/discrete/interface.js.map +1 -1
- package/esm/component/legend/discrete/legend.d.ts +1 -1
- package/esm/component/legend/discrete/legend.js +4 -3
- package/esm/component/legend/discrete/legend.js.map +1 -1
- package/esm/component/legend/discrete/util.d.ts +2 -1
- package/esm/component/legend/discrete/util.js +37 -4
- package/esm/component/legend/discrete/util.js.map +1 -1
- package/esm/component/marker/base-marker.js +11 -7
- package/esm/component/marker/base-marker.js.map +1 -1
- package/esm/component/marker/mark-line/cartesian-mark-line.js +18 -8
- package/esm/component/marker/mark-line/cartesian-mark-line.js.map +1 -1
- package/esm/component/marker/mark-line/interface/spec.d.ts +9 -2
- package/esm/component/marker/mark-line/interface/spec.js.map +1 -1
- package/esm/component/marker/mark-point/base-mark-point.js +29 -16
- package/esm/component/marker/mark-point/base-mark-point.js.map +1 -1
- package/esm/component/marker/utils.js +16 -6
- package/esm/component/marker/utils.js.map +1 -1
- package/esm/constant/correlation.js +2 -1
- package/esm/constant/event.js +1 -2
- package/esm/constant/marker.js +1 -1
- package/esm/constant/polar.js +1 -1
- package/esm/core/index.d.ts +3 -2
- package/esm/core/index.js +4 -2
- package/esm/core/index.js.map +1 -1
- package/esm/core/vchart.js +15 -5
- package/esm/core/vchart.js.map +1 -1
- package/esm/data/data-view-utils.js +1 -1
- package/esm/data/initialize.js +1 -1
- package/esm/data/register.js +1 -1
- package/esm/env/env.js +1 -1
- package/esm/env/env.js.map +1 -1
- package/esm/mark/arc.js +4 -2
- package/esm/mark/arc.js.map +1 -1
- package/esm/mark/area.js +6 -2
- package/esm/mark/area.js.map +1 -1
- package/esm/mark/base/base-line.js +2 -2
- package/esm/mark/base/base-line.js.map +1 -1
- package/esm/mark/base/base-mark.d.ts +0 -1
- package/esm/mark/base/base-mark.js +16 -24
- package/esm/mark/base/base-mark.js.map +1 -1
- package/esm/mark/glyph.d.ts +3 -0
- package/esm/mark/glyph.js +30 -4
- package/esm/mark/glyph.js.map +1 -1
- package/esm/mark/group.js +5 -4
- package/esm/mark/group.js.map +1 -1
- package/esm/mark/interface/common.js.map +1 -1
- package/esm/mark/line.js +6 -2
- package/esm/mark/line.js.map +1 -1
- package/esm/mark/rect.js +4 -2
- package/esm/mark/rect.js.map +1 -1
- package/esm/mark/symbol.js +4 -2
- package/esm/mark/symbol.js.map +1 -1
- package/esm/mark/text.js +5 -1
- package/esm/mark/text.js.map +1 -1
- package/esm/plugin/components/axis-sync/tick-align-transform.js +1 -1
- package/esm/plugin/components/axis-sync/tick-align-transform.js.map +1 -1
- package/esm/plugin/components/tooltip-handler/canvas-tooltip-handler.d.ts +2 -2
- package/esm/plugin/components/tooltip-handler/canvas-tooltip-handler.js +1 -1
- package/esm/plugin/components/tooltip-handler/canvas-tooltip-handler.js.map +1 -1
- package/esm/plugin/other.js +2 -2
- package/esm/plugin/other.js.map +1 -1
- package/esm/series/base/base-series.d.ts +3 -0
- package/esm/series/base/base-series.js +54 -24
- package/esm/series/base/base-series.js.map +1 -1
- package/esm/series/dot/dot.d.ts +1 -0
- package/esm/series/interface/common.d.ts +2 -1
- package/esm/series/interface/common.js.map +1 -1
- package/esm/series/line/line.js +3 -1
- package/esm/series/line/line.js.map +1 -1
- package/esm/series/waterfall/waterfall.d.ts +2 -0
- package/esm/series/waterfall/waterfall.js +12 -4
- package/esm/series/waterfall/waterfall.js.map +1 -1
- package/esm/series/word-cloud/animation.js +3 -0
- package/esm/series/word-cloud/animation.js.map +1 -1
- package/esm/theme/builtin/common/series/word-cloud.js +2 -6
- package/esm/theme/builtin/common/series/word-cloud.js.map +1 -1
- package/esm/util/mark.js +8 -2
- package/esm/util/mark.js.map +1 -1
- package/esm/util/math.d.ts +1 -1
- package/esm/util/math.js +1 -1
- package/esm/util/math.js.map +1 -1
- package/esm/util/style.js +23 -2
- package/esm/util/style.js.map +1 -1
- package/esm/util/text.js +1 -1
- package/esm/util/text.js.map +1 -1
- package/esm/vchart-line.d.ts +4 -0
- package/esm/vchart-line.js +28 -0
- package/esm/vchart-line.js.map +1 -0
- package/esm/vchart-simple.d.ts +5 -1
- package/esm/vchart-simple.js +9 -1
- package/esm/vchart-simple.js.map +1 -1
- package/package.json +10 -9
|
@@ -2,6 +2,8 @@ import type { IRectMarkSpec, ISymbolMarkSpec, ITextMarkSpec } from '../../../typ
|
|
|
2
2
|
import type { DiscreteLegendAttrs, LegendItemDatum, LegendItem, LegendPagerAttributes, LegendScrollbarAttributes } from '@visactor/vrender-components';
|
|
3
3
|
import type { ILegendCommonSpec, NoVisibleMarkStyle } from '../interface';
|
|
4
4
|
import type { IFormatMethod, StringOrNumber } from '../../../typings';
|
|
5
|
+
import type { ILayoutRect } from '../../../typings/layout';
|
|
6
|
+
import type { IOrientType } from '../../../typings/space';
|
|
5
7
|
import type { IBaseScale } from '@visactor/vscale';
|
|
6
8
|
import type { IGlobalScale } from '../../../scale/interface';
|
|
7
9
|
import type { ComponentThemeWithDirection } from '../../interface';
|
|
@@ -62,6 +64,12 @@ export type ILegendScrollbar = {
|
|
|
62
64
|
railStyle?: Omit<Partial<NoVisibleMarkStyle<IRectMarkSpec>>, 'width' | 'height'>;
|
|
63
65
|
sliderStyle?: Omit<Partial<NoVisibleMarkStyle<IRectMarkSpec>>, 'width' | 'height'>;
|
|
64
66
|
} & Omit<LegendScrollbarAttributes, 'railStyle' | 'sliderStyle'>;
|
|
67
|
+
export interface IDiscreteLegendArrangeContext {
|
|
68
|
+
rect: ILayoutRect;
|
|
69
|
+
orient: IOrientType;
|
|
70
|
+
id?: StringOrNumber;
|
|
71
|
+
}
|
|
72
|
+
export type DiscreteLegendArrangeCount = number | ((ctx: IDiscreteLegendArrangeContext) => number);
|
|
65
73
|
export type IDiscreteLegendSpec = ILegendCommonSpec & {
|
|
66
74
|
type?: 'discrete';
|
|
67
75
|
data?: (data: LegendItemDatum[], colorScale: IBaseScale, globalScale: IGlobalScale) => LegendItemDatum[];
|
|
@@ -71,6 +79,8 @@ export type IDiscreteLegendSpec = ILegendCommonSpec & {
|
|
|
71
79
|
scaleName?: string;
|
|
72
80
|
field?: string;
|
|
73
81
|
defaultSelected?: string[];
|
|
74
|
-
|
|
82
|
+
maxRow?: DiscreteLegendArrangeCount;
|
|
83
|
+
maxCol?: DiscreteLegendArrangeCount;
|
|
84
|
+
} & Omit<DiscreteLegendAttrs, 'layout' | 'title' | 'items' | 'item' | 'pager' | 'maxRow' | 'maxCol'>;
|
|
75
85
|
export type IDiscreteLegendCommonTheme = Omit<IDiscreteLegendSpec, 'type' | 'data' | 'regionIndex' | 'regionId' | 'seriesIndex' | 'seriesId' | 'id' | 'defaultSelected'>;
|
|
76
86
|
export type IDiscreteLegendTheme = ComponentThemeWithDirection<IDiscreteLegendCommonTheme>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/component/legend/discrete/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { IRectMarkSpec, ISymbolMarkSpec, ITextMarkSpec } from '../../../typings/visual';\nimport type {\n DiscreteLegendAttrs,\n LegendItemDatum,\n LegendItem,\n LegendPagerAttributes,\n LegendScrollbarAttributes\n} from '@visactor/vrender-components';\nimport type { ILegendCommonSpec, NoVisibleMarkStyle } from '../interface';\nimport type { IFormatMethod, StringOrNumber } from '../../../typings';\nimport type { IBaseScale } from '@visactor/vscale';\nimport type { IGlobalScale } from '../../../scale/interface';\nimport type { ComponentThemeWithDirection } from '../../interface';\n\n// export type formatterCallback = (text: StringOrNumber, item: LegendItemDatum, index: number) => any;\nexport type formatterCallback = IFormatMethod<[text: StringOrNumber, item: LegendItemDatum, index: number]>;\nexport type LegendItemStyleValue<T> =\n | T\n | ((item: LegendItemDatum, isSelected: boolean, index: number, allItems: LegendItemDatum[]) => T);\nexport type LegendItemStyle<T> = {\n /**\n * 样式配置\n */\n style?: T;\n /**\n * 状态样式配置\n */\n state?: {\n /**\n * 选中态\n */\n selected?: T;\n /**\n * 非选中态\n */\n unSelected?: T;\n /**\n * 选中态 hover\n */\n selectedHover?: T;\n /**\n * 非选中态 hover\n */\n unSelectedHover?: T;\n };\n};\n\nexport type IItem = {\n /**\n * @since 1.10.0\n * 指定图例项中图标和文字的摆放位置,可选值为:\n * 'left' 图标在左侧\n * 'right' 图标在右侧\n * 默认值为: 'left'\n */\n align?: 'left' | 'right';\n /**\n * 图例项背景配置\n */\n background?: {\n /**\n * 是否展示图例项背景\n */\n visible?: boolean;\n } & LegendItemStyle<LegendItemStyleValue<NoVisibleMarkStyle<IRectMarkSpec>>>;\n /**\n * 图例项的 shape 图标的配置\n */\n shape?: {\n /**\n * 图例项的 shape 图标\n */\n visible?: boolean;\n /** shape 同后面 label 的间距 */\n space?: number;\n } & LegendItemStyle<LegendItemStyleValue<Partial<NoVisibleMarkStyle<ISymbolMarkSpec>>>>;\n /**\n * 图例项的 label 文本配置\n */\n label?: {\n /**\n * @since 1.10.0\n * 当 label + value 同时展示,文字超长的时候,label的宽度占比\n */\n widthRatio?: number;\n /**\n * 图例项 label 同后面 value 的间距\n */\n space?: number;\n /**\n * 格式化文本函数\n */\n formatMethod?: formatterCallback;\n /**\n * 格式化模板\n * @description 可以通过类似 `{value:.2f}%` 的形式对指定数据字段进行格式化\n * @since 1.10.0\n */\n formatter?: string;\n } & LegendItemStyle<LegendItemStyleValue<NoVisibleMarkStyle<ITextMarkSpec>>>;\n /**\n * 图例项 value 配置\n */\n value?: {\n /**\n * @since 1.10.0\n * 当 label + value 同时展示,文字超长的时候,label的宽度占比\n */\n widthRatio?: number;\n /** value 同后面元素的间距 */\n space?: number;\n /**\n * 是否右对齐显示,仅当设置图例项宽度 itemWidth 时生效\n * 默认为 false,\n */\n alignRight?: boolean;\n /**\n * 格式化文本函数\n */\n formatMethod?: formatterCallback;\n /**\n * 格式化模板\n * @description 可以通过类似 `{value:.2f}%` 的形式对指定数据字段进行格式化\n * @since 1.10.0\n */\n formatter?: string | string[];\n } & LegendItemStyle<LegendItemStyleValue<NoVisibleMarkStyle<ITextMarkSpec>>>;\n /**\n * 聚焦按钮配置\n */\n focusIconStyle?: NoVisibleMarkStyle<ISymbolMarkSpec>;\n /**\n * 图例项的最大宽度,默认为 null。\n * 可使用百分比,表示显示区域的宽度占比。\n */\n maxWidth?: number | string;\n /**\n * 图例项的宽度, 默认自动计算。\n * 可使用百分比,表示显示区域的宽度占比。\n */\n width?: number | string;\n /**\n * 图例的高度,默认自动计算。\n * 可使用百分比,表示显示区域的高度占比。\n */\n height?: number | string;\n /**\n * @since 1.10.0\n * 当label+ value同时存在的时候,自动省略的策略\n * 'labelFirst' - 尽量保证完整展示`label`\n * 'valueFirst' - 尽量保证完整展示`value`\n * 'none' - 按照`widthRatio`展示label 和 value\n */\n autoEllipsisStrategy?: 'labelFirst' | 'valueFirst' | 'none';\n} & Omit<LegendItem, 'background' | 'shape' | 'label' | 'value' | 'focusIconStyle' | 'width' | 'height' | 'maxWidth'>;\n\nexport type IPager = {\n /**\n * 文本样式配置\n */\n textStyle?: Partial<NoVisibleMarkStyle<ITextMarkSpec>>;\n handler?: {\n /**\n * 按钮同文本内容区的间距,默认为 8\n */\n space?: number;\n /**\n * 上一页按钮形状\n */\n preShape?: string;\n /**\n * 下一页按钮形状\n */\n nextShape?: string;\n style?: Omit<NoVisibleMarkStyle<ISymbolMarkSpec>, 'symbolType'>;\n state?: {\n /**\n * hover 状态下的样式\n */\n hover?: Omit<NoVisibleMarkStyle<ISymbolMarkSpec>, 'symbolType'>;\n /**\n * 不可用状态样式\n */\n disable?: Omit<NoVisibleMarkStyle<ISymbolMarkSpec>, 'symbolType'>;\n };\n };\n} & Omit<LegendPagerAttributes, 'textStyle' | 'handler'>;\n\nexport type ILegendScrollbar = {\n type: 'scrollbar';\n railStyle?: Omit<Partial<NoVisibleMarkStyle<IRectMarkSpec>>, 'width' | 'height'>;\n sliderStyle?: Omit<Partial<NoVisibleMarkStyle<IRectMarkSpec>>, 'width' | 'height'>;\n} & Omit<LegendScrollbarAttributes, 'railStyle' | 'sliderStyle'>;\n\n/** spec */\nexport type IDiscreteLegendSpec = ILegendCommonSpec & {\n type?: 'discrete';\n /**\n * 在原始图例绘制数据的基础上,进行自定义,比如可以自定义 value 值\n * @param data 图例的绘制数据\n * @param colorScale 全局颜色映射 scale\n * @param globalScale 图表上所有的 scale\n * @returns\n */\n data?: (data: LegendItemDatum[], colorScale: IBaseScale, globalScale: IGlobalScale) => LegendItemDatum[];\n\n /** 图例项配置 */\n item?: IItem;\n\n /**\n * 翻页器配置\n */\n pager?: IPager | ILegendScrollbar;\n /**\n * scale must match the id of the scale configured in **scales**\n * 离散图例对应的scale\n * @since 1.10.5\n */\n scale?: string;\n /**\n * 同`scale`,为了和连续图例保持一致,建议统一为`scale`\n */\n scaleName?: string;\n /**\n * After the legend is bound to the scale, the dimension associated with the series data and the legend can be configured through field.\n * If the field is not configured, the first item of fields in the domain of scale is used by default\n * If the domain of the scale is not dependent on data statistics, series.getSeriesField() is used by default\n */\n field?: string;\n /**\n * 默认筛选的数据范围\n */\n defaultSelected?: string[];\n} & Omit<DiscreteLegendAttrs, 'layout' | 'title' | 'items' | 'item' | 'pager'>;\n\n// theme 主题相关配置\nexport type IDiscreteLegendCommonTheme = Omit<\n IDiscreteLegendSpec,\n 'type' | 'data' | 'regionIndex' | 'regionId' | 'seriesIndex' | 'seriesId' | 'id' | 'defaultSelected'\n>;\n\nexport type IDiscreteLegendTheme = ComponentThemeWithDirection<IDiscreteLegendCommonTheme>;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/component/legend/discrete/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { IRectMarkSpec, ISymbolMarkSpec, ITextMarkSpec } from '../../../typings/visual';\nimport type {\n DiscreteLegendAttrs,\n LegendItemDatum,\n LegendItem,\n LegendPagerAttributes,\n LegendScrollbarAttributes\n} from '@visactor/vrender-components';\nimport type { ILegendCommonSpec, NoVisibleMarkStyle } from '../interface';\nimport type { IFormatMethod, StringOrNumber } from '../../../typings';\nimport type { ILayoutRect } from '../../../typings/layout';\nimport type { IOrientType } from '../../../typings/space';\nimport type { IBaseScale } from '@visactor/vscale';\nimport type { IGlobalScale } from '../../../scale/interface';\nimport type { ComponentThemeWithDirection } from '../../interface';\n\n// export type formatterCallback = (text: StringOrNumber, item: LegendItemDatum, index: number) => any;\nexport type formatterCallback = IFormatMethod<[text: StringOrNumber, item: LegendItemDatum, index: number]>;\nexport type LegendItemStyleValue<T> =\n | T\n | ((item: LegendItemDatum, isSelected: boolean, index: number, allItems: LegendItemDatum[]) => T);\nexport type LegendItemStyle<T> = {\n /**\n * 样式配置\n */\n style?: T;\n /**\n * 状态样式配置\n */\n state?: {\n /**\n * 选中态\n */\n selected?: T;\n /**\n * 非选中态\n */\n unSelected?: T;\n /**\n * 选中态 hover\n */\n selectedHover?: T;\n /**\n * 非选中态 hover\n */\n unSelectedHover?: T;\n };\n};\n\nexport type IItem = {\n /**\n * @since 1.10.0\n * 指定图例项中图标和文字的摆放位置,可选值为:\n * 'left' 图标在左侧\n * 'right' 图标在右侧\n * 默认值为: 'left'\n */\n align?: 'left' | 'right';\n /**\n * 图例项背景配置\n */\n background?: {\n /**\n * 是否展示图例项背景\n */\n visible?: boolean;\n } & LegendItemStyle<LegendItemStyleValue<NoVisibleMarkStyle<IRectMarkSpec>>>;\n /**\n * 图例项的 shape 图标的配置\n */\n shape?: {\n /**\n * 图例项的 shape 图标\n */\n visible?: boolean;\n /** shape 同后面 label 的间距 */\n space?: number;\n } & LegendItemStyle<LegendItemStyleValue<Partial<NoVisibleMarkStyle<ISymbolMarkSpec>>>>;\n /**\n * 图例项的 label 文本配置\n */\n label?: {\n /**\n * @since 1.10.0\n * 当 label + value 同时展示,文字超长的时候,label的宽度占比\n */\n widthRatio?: number;\n /**\n * 图例项 label 同后面 value 的间距\n */\n space?: number;\n /**\n * 格式化文本函数\n */\n formatMethod?: formatterCallback;\n /**\n * 格式化模板\n * @description 可以通过类似 `{value:.2f}%` 的形式对指定数据字段进行格式化\n * @since 1.10.0\n */\n formatter?: string;\n } & LegendItemStyle<LegendItemStyleValue<NoVisibleMarkStyle<ITextMarkSpec>>>;\n /**\n * 图例项 value 配置\n */\n value?: {\n /**\n * @since 1.10.0\n * 当 label + value 同时展示,文字超长的时候,label的宽度占比\n */\n widthRatio?: number;\n /** value 同后面元素的间距 */\n space?: number;\n /**\n * 是否右对齐显示,仅当设置图例项宽度 itemWidth 时生效\n * 默认为 false,\n */\n alignRight?: boolean;\n /**\n * 格式化文本函数\n */\n formatMethod?: formatterCallback;\n /**\n * 格式化模板\n * @description 可以通过类似 `{value:.2f}%` 的形式对指定数据字段进行格式化\n * @since 1.10.0\n */\n formatter?: string | string[];\n } & LegendItemStyle<LegendItemStyleValue<NoVisibleMarkStyle<ITextMarkSpec>>>;\n /**\n * 聚焦按钮配置\n */\n focusIconStyle?: NoVisibleMarkStyle<ISymbolMarkSpec>;\n /**\n * 图例项的最大宽度,默认为 null。\n * 可使用百分比,表示显示区域的宽度占比。\n */\n maxWidth?: number | string;\n /**\n * 图例项的宽度, 默认自动计算。\n * 可使用百分比,表示显示区域的宽度占比。\n */\n width?: number | string;\n /**\n * 图例的高度,默认自动计算。\n * 可使用百分比,表示显示区域的高度占比。\n */\n height?: number | string;\n /**\n * @since 1.10.0\n * 当label+ value同时存在的时候,自动省略的策略\n * 'labelFirst' - 尽量保证完整展示`label`\n * 'valueFirst' - 尽量保证完整展示`value`\n * 'none' - 按照`widthRatio`展示label 和 value\n */\n autoEllipsisStrategy?: 'labelFirst' | 'valueFirst' | 'none';\n} & Omit<LegendItem, 'background' | 'shape' | 'label' | 'value' | 'focusIconStyle' | 'width' | 'height' | 'maxWidth'>;\n\nexport type IPager = {\n /**\n * 文本样式配置\n */\n textStyle?: Partial<NoVisibleMarkStyle<ITextMarkSpec>>;\n handler?: {\n /**\n * 按钮同文本内容区的间距,默认为 8\n */\n space?: number;\n /**\n * 上一页按钮形状\n */\n preShape?: string;\n /**\n * 下一页按钮形状\n */\n nextShape?: string;\n style?: Omit<NoVisibleMarkStyle<ISymbolMarkSpec>, 'symbolType'>;\n state?: {\n /**\n * hover 状态下的样式\n */\n hover?: Omit<NoVisibleMarkStyle<ISymbolMarkSpec>, 'symbolType'>;\n /**\n * 不可用状态样式\n */\n disable?: Omit<NoVisibleMarkStyle<ISymbolMarkSpec>, 'symbolType'>;\n };\n };\n} & Omit<LegendPagerAttributes, 'textStyle' | 'handler'>;\n\nexport type ILegendScrollbar = {\n type: 'scrollbar';\n railStyle?: Omit<Partial<NoVisibleMarkStyle<IRectMarkSpec>>, 'width' | 'height'>;\n sliderStyle?: Omit<Partial<NoVisibleMarkStyle<IRectMarkSpec>>, 'width' | 'height'>;\n} & Omit<LegendScrollbarAttributes, 'railStyle' | 'sliderStyle'>;\n\n/** spec */\n/**\n * The layout context passed to a `maxRow` / `maxCol` callback. The callback is evaluated during\n * layout, so the row / column count can be derived from the space actually allocated to the legend.\n * @since 2.0.23\n */\nexport interface IDiscreteLegendArrangeContext {\n /** the layout rect allocated to the legend in the current layout */\n rect: ILayoutRect;\n /** the resolved orient the legend lays out with (defaults to `'left'` when `spec.orient` is unset) */\n orient: IOrientType;\n /** the id of the legend */\n id?: StringOrNumber;\n}\n\n/**\n * The max row / col count of a discrete legend. Either a fixed number, or a callback that returns a\n * number, evaluated during layout against {@link IDiscreteLegendArrangeContext}.\n */\nexport type DiscreteLegendArrangeCount = number | ((ctx: IDiscreteLegendArrangeContext) => number);\n\nexport type IDiscreteLegendSpec = ILegendCommonSpec & {\n type?: 'discrete';\n /**\n * 在原始图例绘制数据的基础上,进行自定义,比如可以自定义 value 值\n * @param data 图例的绘制数据\n * @param colorScale 全局颜色映射 scale\n * @param globalScale 图表上所有的 scale\n * @returns\n */\n data?: (data: LegendItemDatum[], colorScale: IBaseScale, globalScale: IGlobalScale) => LegendItemDatum[];\n\n /** 图例项配置 */\n item?: IItem;\n\n /**\n * 翻页器配置\n */\n pager?: IPager | ILegendScrollbar;\n /**\n * scale must match the id of the scale configured in **scales**\n * 离散图例对应的scale\n * @since 1.10.5\n */\n scale?: string;\n /**\n * 同`scale`,为了和连续图例保持一致,建议统一为`scale`\n */\n scaleName?: string;\n /**\n * After the legend is bound to the scale, the dimension associated with the series data and the legend can be configured through field.\n * If the field is not configured, the first item of fields in the domain of scale is used by default\n * If the domain of the scale is not dependent on data statistics, series.getSeriesField() is used by default\n */\n field?: string;\n /**\n * 默认筛选的数据范围\n */\n defaultSelected?: string[];\n /**\n * The maximum number of rows displayed (for horizontal legend). Besides a fixed number, a\n * callback `(ctx) => number` is also supported, which is evaluated during layout so the row\n * count can adapt to the space allocated to the legend.\n * @since 2.0.23\n */\n maxRow?: DiscreteLegendArrangeCount;\n /**\n * The maximum number of columns displayed (for vertical legend). Besides a fixed number, a\n * callback `(ctx) => number` is also supported (see {@link maxRow}).\n * @since 2.0.23\n */\n maxCol?: DiscreteLegendArrangeCount;\n} & Omit<DiscreteLegendAttrs, 'layout' | 'title' | 'items' | 'item' | 'pager' | 'maxRow' | 'maxCol'>;\n\n// theme 主题相关配置\nexport type IDiscreteLegendCommonTheme = Omit<\n IDiscreteLegendSpec,\n 'type' | 'data' | 'regionIndex' | 'regionId' | 'seriesIndex' | 'seriesId' | 'id' | 'defaultSelected'\n>;\n\nexport type IDiscreteLegendTheme = ComponentThemeWithDirection<IDiscreteLegendCommonTheme>;\n"]}
|
|
@@ -4,7 +4,7 @@ import type { IDiscreteLegendSpec } from './interface';
|
|
|
4
4
|
import type { ISeries } from '../../../series/interface';
|
|
5
5
|
import type { IModelInitOption, IModelSpecInfo } from '../../../model/interface';
|
|
6
6
|
import { ComponentTypeEnum } from '../../interface/type';
|
|
7
|
-
import { DiscreteLegend as LegendComponent } from '@visactor/vrender-components';
|
|
7
|
+
import { DiscreteLegend as LegendComponent } from '@visactor/vrender-components/legend/discrete';
|
|
8
8
|
import { BaseLegend } from '../base-legend';
|
|
9
9
|
import type { ILayoutRect } from '../../../typings/layout';
|
|
10
10
|
import type { StringOrNumber } from '../../../typings';
|
|
@@ -14,9 +14,9 @@ import { getFieldAlias } from "../../../util/data";
|
|
|
14
14
|
|
|
15
15
|
import { isDataDomainSpec } from "../../../util/type";
|
|
16
16
|
|
|
17
|
-
import { LegendEvent } from "@visactor/vrender-components";
|
|
17
|
+
import { LegendEvent } from "@visactor/vrender-components/legend/constant";
|
|
18
18
|
|
|
19
|
-
import { DiscreteLegend as LegendComponent } from "@visactor/vrender-components";
|
|
19
|
+
import { DiscreteLegend as LegendComponent } from "@visactor/vrender-components/legend/discrete";
|
|
20
20
|
|
|
21
21
|
import { discreteLegendDataMake, discreteLegendFilter } from "../../../data/transforms/legend-data/discrete/discrete";
|
|
22
22
|
|
|
@@ -116,7 +116,7 @@ export class DiscreteLegend extends BaseLegend {
|
|
|
116
116
|
layout: layout,
|
|
117
117
|
items: this._getLegendItems(),
|
|
118
118
|
zIndex: this.layoutZIndex
|
|
119
|
-
}, getLegendAttributes(this._spec, rect)), {
|
|
119
|
+
}, getLegendAttributes(this._spec, rect, this.layoutOrient)), {
|
|
120
120
|
maxWidth: rect.width,
|
|
121
121
|
maxHeight: rect.height
|
|
122
122
|
});
|
|
@@ -163,6 +163,7 @@ export class DiscreteLegend extends BaseLegend {
|
|
|
163
163
|
const fillOpacity = datum.style("fillOpacity"), strokeOpacity = datum.style("strokeOpacity"), opacity = datum.style("opacity"), texture = datum.style("texture");
|
|
164
164
|
return {
|
|
165
165
|
label: datum.key,
|
|
166
|
+
datum: datum.datum,
|
|
166
167
|
shape: {
|
|
167
168
|
symbolType: null !== (_b = null !== (_a = datum.style("symbolType")) && void 0 !== _a ? _a : datum.shapeType) && void 0 !== _b ? _b : "circle",
|
|
168
169
|
fillOpacity: isValidNumber(fillOpacity) ? fillOpacity : 1,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/component/legend/discrete/legend.ts"],"names":[],"mappings":"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","file":"legend.js","sourcesContent":["import type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isFunction, isNil, isValidNumber, get } from '@visactor/vutils';\nimport { DataView } from '@visactor/vdataset';\nimport type { IDiscreteLegendSpec } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ISeries } from '../../../series/interface';\nimport type { IModelInitOption, IModelSpecInfo } from '../../../model/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../../interface/type';\n// eslint-disable-next-line no-duplicate-imports\nimport { getLegendAttributes } from './util';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\nimport { eachSeries } from '../../../util/model';\nimport { getFieldAlias } from '../../../util/data';\nimport { isDataDomainSpec } from '../../../util/type';\n// eslint-disable-next-line no-duplicate-imports\nimport type { LegendItemDatum } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { LegendEvent } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport { DiscreteLegend as LegendComponent } from '@visactor/vrender-components';\nimport { discreteLegendDataMake, discreteLegendFilter } from '../../../data/transforms/legend-data/discrete/discrete';\nimport { BaseLegend } from '../base-legend';\nimport { ChartEvent } from '../../../constant/event';\nimport { Factory } from '../../../core/factory';\nimport { TransformLevel } from '../../../data/initialize';\nimport type { ILayoutRect } from '../../../typings/layout';\nimport type { StringOrNumber } from '../../../typings';\nimport { getFormatFunction, getSpecInfo } from '../../util';\nimport type { IDiscreteLegendData } from '../../../data/transforms/legend-data/discrete';\nimport { discreteLegend } from '../../../theme/builtin/common/component/legend/discrete-legend';\n\nexport class DiscreteLegend extends BaseLegend<IDiscreteLegendSpec> {\n static specKey = 'legends';\n\n static readonly builtInTheme = {\n discreteLegend\n };\n static type = ComponentTypeEnum.discreteLegend;\n type = ComponentTypeEnum.discreteLegend;\n name: string = ComponentTypeEnum.discreteLegend;\n\n protected _unselectedData: StringOrNumber[];\n\n static getSpecInfo(chartSpec: any): Maybe<IModelSpecInfo[]> {\n return getSpecInfo<IDiscreteLegendSpec>(chartSpec, this.specKey, this.type, (s: IDiscreteLegendSpec) => {\n return !s.type || s.type === 'discrete';\n });\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n eachSeries(\n this._regions,\n s => {\n s.addViewDataFilter({\n type: 'discreteLegendFilter',\n options: {\n series: s,\n selected: () => this._selectedData,\n field: () => this._getSeriesLegendField(s),\n data: () => this.getLegendDefaultData(),\n customFilter: this._spec.customFilter\n },\n level: TransformLevel.legendFilter\n });\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n\n protected _initLegendData(): DataView {\n registerDataSetInstanceTransform(this._option.dataSet, 'discreteLegendFilter', discreteLegendFilter);\n registerDataSetInstanceTransform(this._option.dataSet, 'discreteLegendDataMake', discreteLegendDataMake);\n const legendData = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_data` });\n legendData.transform({\n type: 'discreteLegendDataMake',\n options: {\n series: () => {\n const result: ISeries[] = [];\n eachSeries(\n this._regions,\n s => {\n result.push(s);\n },\n {\n specIndex: this._spec.seriesIndex,\n userId: this._spec.seriesId\n }\n );\n return result;\n },\n seriesField: (s: ISeries) => this._getSeriesLegendField(s)\n }\n });\n\n return legendData;\n }\n\n protected _getSeriesLegendField(s: ISeries) {\n const defaultField = s.getSeriesField();\n const specifyScaleId = this._spec.scaleName ?? this._spec.scale;\n\n if (isNil(specifyScaleId)) {\n return defaultField;\n }\n if (!s.getRawData()) {\n return defaultField;\n }\n const scaleSpec = this._option.globalScale.getScaleSpec(specifyScaleId);\n if (!scaleSpec) {\n return defaultField;\n }\n\n // field是只在图例指定了scale的情况下生效\n if (this._spec.field) {\n return this._spec.field;\n }\n\n if (!isDataDomainSpec(scaleSpec.domain)) {\n return defaultField;\n }\n const seriesData = scaleSpec.domain.find(d => d.dataId === s.getRawData().name);\n if (!seriesData) {\n return defaultField;\n }\n return seriesData.fields?.[0] ?? defaultField;\n }\n\n protected _initSelectedData(): void {\n const fullSelectedData = this.getLegendDefaultData();\n\n if (this._unselectedData) {\n const selected: StringOrNumber[] = [];\n const unselected: StringOrNumber[] = [];\n\n fullSelectedData.forEach((entry: StringOrNumber) => {\n if (this._unselectedData.includes(entry)) {\n unselected.push(entry);\n } else {\n selected.push(entry);\n }\n });\n this._selectedData = selected;\n this._unselectedData = unselected;\n } else if (this._spec.defaultSelected) {\n this._selectedData = [...this._spec.defaultSelected];\n } else {\n this._selectedData = fullSelectedData;\n }\n }\n\n getLegendDefaultData(originalData?: boolean) {\n if (isFunction(this._spec.data)) {\n return this._getLegendItems().map((obj: LegendItemDatum) => obj.label);\n }\n\n return this._legendData\n .getLatestData()\n .map(originalData ? (obj: IDiscreteLegendData) => obj.originalKey : (obj: IDiscreteLegendData) => obj.key);\n }\n\n private _addDefaultTitleText(attrs: any) {\n if (attrs.title?.visible && isNil(attrs.title.text) && isNil(attrs.title.style?.text)) {\n // 默认使用第0个系列的 seriesField 别名\n const series = this._regions?.[0]?.getSeries()[0];\n if (!series) {\n return;\n }\n // 如果没有别名继续保持 空字符串\n attrs.title.text = getFieldAlias(series.getRawData(), series.getSeriesField());\n }\n }\n\n protected _getLegendAttributes(rect: ILayoutRect) {\n const layout = this.layoutOrient === 'bottom' || this.layoutOrient === 'top' ? 'horizontal' : 'vertical';\n const attrs = {\n layout,\n items: this._getLegendItems(),\n zIndex: this.layoutZIndex,\n ...getLegendAttributes(this._spec, rect),\n // maxWidth 和 maxHeight 已经在布局模块处理了,所以 rect 的优先级最高\n maxWidth: rect.width,\n maxHeight: rect.height\n };\n this._addDefaultTitleText(attrs);\n this._addLegendItemFormatMethods(attrs);\n return attrs;\n }\n\n protected _getLegendConstructor() {\n return LegendComponent;\n }\n\n setSelectedData(selectedData: StringOrNumber[]) {\n if (selectedData) {\n this._unselectedData = this.getLegendDefaultData().filter(\n (entry: StringOrNumber) => !selectedData.includes(entry)\n );\n }\n\n super.setSelectedData(selectedData);\n }\n\n protected _initEvent() {\n if (this._legendComponent) {\n const doFilter = this._spec.filter !== false;\n this._legendComponent.addEventListener(LegendEvent.legendItemClick, (e: any) => {\n const selectedData = get(e, 'detail.currentSelected');\n doFilter && this.setSelectedData(selectedData);\n this.event.emit(ChartEvent.legendItemClick, { model: this, value: selectedData, event: e });\n });\n\n this._legendComponent.addEventListener(LegendEvent.legendItemHover, (e: any) => {\n const detail = get(e, 'detail');\n this.event.emit(ChartEvent.legendItemHover, { model: this, value: detail, event: e });\n });\n\n this._legendComponent.addEventListener(LegendEvent.legendItemUnHover, (e: any) => {\n const detail = get(e, 'detail');\n this.event.emit(ChartEvent.legendItemUnHover, { model: this, value: detail, event: e });\n });\n }\n }\n\n private _getLegendItems() {\n const originData = (this._legendData.getLatestData() || []).map((datum: any) => {\n const fillOpacity = datum.style('fillOpacity');\n const strokeOpacity = datum.style('strokeOpacity');\n const opacity = datum.style('opacity');\n const texture = datum.style('texture');\n\n return {\n label: datum.key,\n shape: {\n symbolType: datum.style('symbolType') ?? datum.shapeType ?? 'circle',\n fillOpacity: isValidNumber(fillOpacity) ? fillOpacity : 1,\n strokeOpacity: isValidNumber(strokeOpacity) ? strokeOpacity : 1,\n opacity: isValidNumber(opacity) ? opacity : 1,\n texturePadding: texture ? 1 : null,\n textureSize: texture ? 4 : null,\n texture,\n fill: datum.style('fill'),\n stroke: datum.style('stroke'),\n textureColor: datum.style('textureColor'),\n innerBorder: datum.style('innerBorder'),\n outerBorder: datum.style('outerBorder'),\n lineDash: datum.style('lineDash'),\n lineDashOffset: datum.style('lineDashOffset'),\n lineWidth: datum.style('lineWidth')\n }\n };\n });\n const legendItems = isFunction(this._spec.data)\n ? this._spec.data(originData, this._option.globalScale.getScale('color'), this._option.globalScale)\n : originData;\n return legendItems;\n }\n\n private _addLegendItemFormatMethods(attrs: any) {\n const { formatMethod: labelFormatMethod, formatter: labelFormatter } = this._spec.item?.label ?? {};\n const { formatMethod: valueFormatMethod, formatter: valueFormatter } = this._spec.item?.value ?? {};\n\n const { formatFunc: labelFormatFunc } = getFormatFunction(labelFormatMethod, labelFormatter);\n if (labelFormatter && !labelFormatMethod && labelFormatFunc) {\n attrs.item.label.formatMethod = (value: string, datum: any) => {\n return labelFormatFunc(value, datum, labelFormatter);\n };\n }\n const { formatFunc: valueFormatFunc } = getFormatFunction(valueFormatMethod, valueFormatter);\n if (valueFormatter && !valueFormatMethod && valueFormatFunc) {\n attrs.item.value.formatMethod = (value: string, datum: any) => {\n return valueFormatFunc(valueFormatter, value, datum, labelFormatter);\n };\n }\n }\n}\n\nexport const registerDiscreteLegend = () => {\n Factory.registerComponent(DiscreteLegend.type, DiscreteLegend);\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/component/legend/discrete/legend.ts"],"names":[],"mappings":"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","file":"legend.js","sourcesContent":["import type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { isFunction, isNil, isValidNumber, get } from '@visactor/vutils';\nimport { DataView } from '@visactor/vdataset';\nimport type { IDiscreteLegendSpec } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ISeries } from '../../../series/interface';\nimport type { IModelInitOption, IModelSpecInfo } from '../../../model/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../../interface/type';\n// eslint-disable-next-line no-duplicate-imports\nimport { getLegendAttributes } from './util';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\nimport { eachSeries } from '../../../util/model';\nimport { getFieldAlias } from '../../../util/data';\nimport { isDataDomainSpec } from '../../../util/type';\n// eslint-disable-next-line no-duplicate-imports\nimport type { LegendItemDatum } from '@visactor/vrender-components/legend/discrete/type';\n// eslint-disable-next-line no-duplicate-imports\nimport { LegendEvent } from '@visactor/vrender-components/legend/constant';\n// eslint-disable-next-line no-duplicate-imports\nimport { DiscreteLegend as LegendComponent } from '@visactor/vrender-components/legend/discrete';\nimport { discreteLegendDataMake, discreteLegendFilter } from '../../../data/transforms/legend-data/discrete/discrete';\nimport { BaseLegend } from '../base-legend';\nimport { ChartEvent } from '../../../constant/event';\nimport { Factory } from '../../../core/factory';\nimport { TransformLevel } from '../../../data/initialize';\nimport type { ILayoutRect } from '../../../typings/layout';\nimport type { StringOrNumber } from '../../../typings';\nimport { getFormatFunction, getSpecInfo } from '../../util';\nimport type { IDiscreteLegendData } from '../../../data/transforms/legend-data/discrete';\nimport { discreteLegend } from '../../../theme/builtin/common/component/legend/discrete-legend';\n\nexport class DiscreteLegend extends BaseLegend<IDiscreteLegendSpec> {\n static specKey = 'legends';\n\n static readonly builtInTheme = {\n discreteLegend\n };\n static type = ComponentTypeEnum.discreteLegend;\n type = ComponentTypeEnum.discreteLegend;\n name: string = ComponentTypeEnum.discreteLegend;\n\n protected _unselectedData: StringOrNumber[];\n\n static getSpecInfo(chartSpec: any): Maybe<IModelSpecInfo[]> {\n return getSpecInfo<IDiscreteLegendSpec>(chartSpec, this.specKey, this.type, (s: IDiscreteLegendSpec) => {\n return !s.type || s.type === 'discrete';\n });\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n eachSeries(\n this._regions,\n s => {\n s.addViewDataFilter({\n type: 'discreteLegendFilter',\n options: {\n series: s,\n selected: () => this._selectedData,\n field: () => this._getSeriesLegendField(s),\n data: () => this.getLegendDefaultData(),\n customFilter: this._spec.customFilter\n },\n level: TransformLevel.legendFilter\n });\n },\n {\n userId: this._seriesUserId,\n specIndex: this._seriesIndex\n }\n );\n }\n\n protected _initLegendData(): DataView {\n registerDataSetInstanceTransform(this._option.dataSet, 'discreteLegendFilter', discreteLegendFilter);\n registerDataSetInstanceTransform(this._option.dataSet, 'discreteLegendDataMake', discreteLegendDataMake);\n const legendData = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_data` });\n legendData.transform({\n type: 'discreteLegendDataMake',\n options: {\n series: () => {\n const result: ISeries[] = [];\n eachSeries(\n this._regions,\n s => {\n result.push(s);\n },\n {\n specIndex: this._spec.seriesIndex,\n userId: this._spec.seriesId\n }\n );\n return result;\n },\n seriesField: (s: ISeries) => this._getSeriesLegendField(s)\n }\n });\n\n return legendData;\n }\n\n protected _getSeriesLegendField(s: ISeries) {\n const defaultField = s.getSeriesField();\n const specifyScaleId = this._spec.scaleName ?? this._spec.scale;\n\n if (isNil(specifyScaleId)) {\n return defaultField;\n }\n if (!s.getRawData()) {\n return defaultField;\n }\n const scaleSpec = this._option.globalScale.getScaleSpec(specifyScaleId);\n if (!scaleSpec) {\n return defaultField;\n }\n\n // field是只在图例指定了scale的情况下生效\n if (this._spec.field) {\n return this._spec.field;\n }\n\n if (!isDataDomainSpec(scaleSpec.domain)) {\n return defaultField;\n }\n const seriesData = scaleSpec.domain.find(d => d.dataId === s.getRawData().name);\n if (!seriesData) {\n return defaultField;\n }\n return seriesData.fields?.[0] ?? defaultField;\n }\n\n protected _initSelectedData(): void {\n const fullSelectedData = this.getLegendDefaultData();\n\n if (this._unselectedData) {\n const selected: StringOrNumber[] = [];\n const unselected: StringOrNumber[] = [];\n\n fullSelectedData.forEach((entry: StringOrNumber) => {\n if (this._unselectedData.includes(entry)) {\n unselected.push(entry);\n } else {\n selected.push(entry);\n }\n });\n this._selectedData = selected;\n this._unselectedData = unselected;\n } else if (this._spec.defaultSelected) {\n this._selectedData = [...this._spec.defaultSelected];\n } else {\n this._selectedData = fullSelectedData;\n }\n }\n\n getLegendDefaultData(originalData?: boolean) {\n if (isFunction(this._spec.data)) {\n return this._getLegendItems().map((obj: LegendItemDatum) => obj.label);\n }\n\n return this._legendData\n .getLatestData()\n .map(originalData ? (obj: IDiscreteLegendData) => obj.originalKey : (obj: IDiscreteLegendData) => obj.key);\n }\n\n private _addDefaultTitleText(attrs: any) {\n if (attrs.title?.visible && isNil(attrs.title.text) && isNil(attrs.title.style?.text)) {\n // 默认使用第0个系列的 seriesField 别名\n const series = this._regions?.[0]?.getSeries()[0];\n if (!series) {\n return;\n }\n // 如果没有别名继续保持 空字符串\n attrs.title.text = getFieldAlias(series.getRawData(), series.getSeriesField());\n }\n }\n\n protected _getLegendAttributes(rect: ILayoutRect) {\n const layout = this.layoutOrient === 'bottom' || this.layoutOrient === 'top' ? 'horizontal' : 'vertical';\n const attrs = {\n layout,\n items: this._getLegendItems(),\n zIndex: this.layoutZIndex,\n ...getLegendAttributes(this._spec, rect, this.layoutOrient),\n // maxWidth 和 maxHeight 已经在布局模块处理了,所以 rect 的优先级最高\n maxWidth: rect.width,\n maxHeight: rect.height\n };\n this._addDefaultTitleText(attrs);\n this._addLegendItemFormatMethods(attrs);\n return attrs;\n }\n\n protected _getLegendConstructor() {\n return LegendComponent;\n }\n\n setSelectedData(selectedData: StringOrNumber[]) {\n if (selectedData) {\n this._unselectedData = this.getLegendDefaultData().filter(\n (entry: StringOrNumber) => !selectedData.includes(entry)\n );\n }\n\n super.setSelectedData(selectedData);\n }\n\n protected _initEvent() {\n if (this._legendComponent) {\n const doFilter = this._spec.filter !== false;\n this._legendComponent.addEventListener(LegendEvent.legendItemClick, (e: any) => {\n const selectedData = get(e, 'detail.currentSelected');\n doFilter && this.setSelectedData(selectedData);\n this.event.emit(ChartEvent.legendItemClick, { model: this, value: selectedData, event: e });\n });\n\n this._legendComponent.addEventListener(LegendEvent.legendItemHover, (e: any) => {\n const detail = get(e, 'detail');\n this.event.emit(ChartEvent.legendItemHover, { model: this, value: detail, event: e });\n });\n\n this._legendComponent.addEventListener(LegendEvent.legendItemUnHover, (e: any) => {\n const detail = get(e, 'detail');\n this.event.emit(ChartEvent.legendItemUnHover, { model: this, value: detail, event: e });\n });\n }\n }\n\n private _getLegendItems() {\n const originData = (this._legendData.getLatestData() || []).map((datum: any) => {\n const fillOpacity = datum.style('fillOpacity');\n const strokeOpacity = datum.style('strokeOpacity');\n const opacity = datum.style('opacity');\n const texture = datum.style('texture');\n\n return {\n label: datum.key,\n datum: datum.datum,\n shape: {\n symbolType: datum.style('symbolType') ?? datum.shapeType ?? 'circle',\n fillOpacity: isValidNumber(fillOpacity) ? fillOpacity : 1,\n strokeOpacity: isValidNumber(strokeOpacity) ? strokeOpacity : 1,\n opacity: isValidNumber(opacity) ? opacity : 1,\n texturePadding: texture ? 1 : null,\n textureSize: texture ? 4 : null,\n texture,\n fill: datum.style('fill'),\n stroke: datum.style('stroke'),\n textureColor: datum.style('textureColor'),\n innerBorder: datum.style('innerBorder'),\n outerBorder: datum.style('outerBorder'),\n lineDash: datum.style('lineDash'),\n lineDashOffset: datum.style('lineDashOffset'),\n lineWidth: datum.style('lineWidth')\n }\n };\n });\n const legendItems = isFunction(this._spec.data)\n ? this._spec.data(originData, this._option.globalScale.getScale('color'), this._option.globalScale)\n : originData;\n return legendItems;\n }\n\n private _addLegendItemFormatMethods(attrs: any) {\n const { formatMethod: labelFormatMethod, formatter: labelFormatter } = this._spec.item?.label ?? {};\n const { formatMethod: valueFormatMethod, formatter: valueFormatter } = this._spec.item?.value ?? {};\n\n const { formatFunc: labelFormatFunc } = getFormatFunction(labelFormatMethod, labelFormatter);\n if (labelFormatter && !labelFormatMethod && labelFormatFunc) {\n attrs.item.label.formatMethod = (value: string, datum: any) => {\n return labelFormatFunc(value, datum, labelFormatter);\n };\n }\n const { formatFunc: valueFormatFunc } = getFormatFunction(valueFormatMethod, valueFormatter);\n if (valueFormatter && !valueFormatMethod && valueFormatFunc) {\n attrs.item.value.formatMethod = (value: string, datum: any) => {\n return valueFormatFunc(valueFormatter, value, datum, labelFormatter);\n };\n }\n }\n}\n\nexport const registerDiscreteLegend = () => {\n Factory.registerComponent(DiscreteLegend.type, DiscreteLegend);\n};\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { IDiscreteLegendSpec } from './interface';
|
|
2
2
|
import type { ILayoutRect } from '../../../typings/layout';
|
|
3
|
-
|
|
3
|
+
import type { IOrientType } from '../../../typings/space';
|
|
4
|
+
export declare function getLegendAttributes(spec: IDiscreteLegendSpec, rect: ILayoutRect, layoutOrient?: IOrientType): any;
|
|
@@ -8,9 +8,9 @@ var __rest = this && this.__rest || function(s, e) {
|
|
|
8
8
|
return t;
|
|
9
9
|
};
|
|
10
10
|
|
|
11
|
-
import { cloneDeep, isEmpty, isValid } from "@visactor/vutils";
|
|
11
|
+
import { cloneDeep, isEmpty, isFunction, isValid } from "@visactor/vutils";
|
|
12
12
|
|
|
13
|
-
import { isPercent } from "../../../util/space";
|
|
13
|
+
import { isPercent, isValidOrient } from "../../../util/space";
|
|
14
14
|
|
|
15
15
|
import { mergeSpec } from "@visactor/vutils-extension";
|
|
16
16
|
|
|
@@ -18,14 +18,47 @@ import { transformComponentStyle, transformToGraphic } from "../../../util/style
|
|
|
18
18
|
|
|
19
19
|
import { transformLegendTitleAttributes } from "../util";
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
function normalizeLegendShapeTextureStyle(style) {
|
|
22
|
+
return isValid(null == style ? void 0 : style.texture) ? Object.assign(Object.assign({}, style), {
|
|
23
|
+
texturePadding: isValid(style.texturePadding) ? style.texturePadding : 1,
|
|
24
|
+
textureSize: isValid(style.textureSize) ? style.textureSize : 4
|
|
25
|
+
}) : style;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function normalizeLegendShapeTextureConfig(shape) {
|
|
29
|
+
const normalizeStyle = style => normalizeLegendShapeTextureStyle(style);
|
|
30
|
+
if (isFunction(shape.style)) {
|
|
31
|
+
const style = shape.style;
|
|
32
|
+
shape.style = (...args) => normalizeStyle(style(...args));
|
|
33
|
+
} else isEmpty(shape.style) || (shape.style = normalizeStyle(shape.style));
|
|
34
|
+
return isEmpty(shape.state) || Object.keys(shape.state).forEach((key => {
|
|
35
|
+
if (isFunction(shape.state[key])) {
|
|
36
|
+
const stateStyle = shape.state[key];
|
|
37
|
+
shape.state[key] = (...args) => normalizeStyle(stateStyle(...args));
|
|
38
|
+
} else isEmpty(shape.state[key]) || (shape.state[key] = normalizeStyle(shape.state[key]));
|
|
39
|
+
})), shape;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function getLegendAttributes(spec, rect, layoutOrient) {
|
|
22
43
|
const {title: titleSpec = {}, item: itemSpec = {}, pager: pagerSpec = {}, background: backgroundSpec = {}, type: type, id: id, visible: visible, orient: orient, position: position, data: data, filter: filter, regionId: regionId, regionIndex: regionIndex, seriesIndex: seriesIndex, seriesId: seriesId, padding: padding} = spec, restSpec = __rest(spec, [ "title", "item", "pager", "background", "type", "id", "visible", "orient", "position", "data", "filter", "regionId", "regionIndex", "seriesIndex", "seriesId", "padding" ]);
|
|
23
44
|
let {title: title = {}, item: item = {}, pager: pager = {}, background: background = {}} = spec;
|
|
24
45
|
title = cloneDeep(title), item = cloneDeep(item), pager = cloneDeep(pager), background = cloneDeep(background);
|
|
25
46
|
const attrs = restSpec;
|
|
47
|
+
if (isFunction(attrs.maxRow) || isFunction(attrs.maxCol)) {
|
|
48
|
+
const resolvedOrient = isValidOrient(layoutOrient) ? layoutOrient : isValidOrient(orient) ? orient : "left";
|
|
49
|
+
isFunction(attrs.maxRow) && (attrs.maxRow = attrs.maxRow({
|
|
50
|
+
rect: rect,
|
|
51
|
+
orient: resolvedOrient,
|
|
52
|
+
id: id
|
|
53
|
+
})), isFunction(attrs.maxCol) && (attrs.maxCol = attrs.maxCol({
|
|
54
|
+
rect: rect,
|
|
55
|
+
orient: resolvedOrient,
|
|
56
|
+
id: id
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
26
59
|
return title.visible ? attrs.title = transformLegendTitleAttributes(title) : attrs.title = {
|
|
27
60
|
visible: !1
|
|
28
|
-
}, isEmpty(item.focusIconStyle) || transformToGraphic(item.focusIconStyle), item.shape && (item.shape = transformComponentStyle(item.shape)),
|
|
61
|
+
}, isEmpty(item.focusIconStyle) || transformToGraphic(item.focusIconStyle), item.shape && (item.shape = normalizeLegendShapeTextureConfig(transformComponentStyle(item.shape))),
|
|
29
62
|
item.label && (item.label = transformComponentStyle(item.label)), item.value && (item.value = transformComponentStyle(item.value)),
|
|
30
63
|
item.background && (item.background = transformComponentStyle(item.background)),
|
|
31
64
|
isPercent(item.maxWidth) && (item.maxWidth = Number(item.maxWidth.substring(0, item.maxWidth.length - 1)) * rect.width / 100),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/component/legend/discrete/util.ts"],"names":[],"mappings":";;;;;;;;;;;AACA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAE,8BAA8B,EAAE,MAAM,SAAS,CAAC;AAIzD,MAAM,UAAU,mBAAmB,CAAC,IAAyB,EAAE,IAAiB;IAC9E,MAAM,EACJ,KAAK,EAAE,SAAS,GAAG,EAAE,EACrB,IAAI,EAAE,QAAQ,GAAG,EAAE,EACnB,KAAK,EAAE,SAAS,GAAG,EAAE,EACrB,UAAU,EAAE,cAAc,GAAG,EAAE,EAE/B,IAAI,EACJ,EAAE,EACF,OAAO,EACP,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,WAAW,EACX,WAAW,EACX,QAAQ,EACR,OAAO,KAGL,IAAI,EADH,QAAQ,UACT,IAAI,EApBF,0KAoBL,CAAO,CAAC;IAET,IAAI,EAEF,KAAK,GAAG,EAAE,EACV,IAAI,GAAG,EAAE,EACT,KAAK,GAAG,EAAE,EACV,UAAU,GAAG,EAAE,EAChB,GAAG,IAAI,CAAC;IAET,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IACzB,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACvB,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IACzB,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IAEnC,MAAM,KAAK,GAAQ,QAAQ,CAAC;IAG5B,IAAI,KAAK,CAAC,OAAO,EAAE;QACjB,KAAK,CAAC,KAAK,GAAG,8BAA8B,CAAC,KAAK,CAAC,CAAC;KACrD;SAAM;QACL,KAAK,CAAC,KAAK,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;KAClC;IAGD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;QACjC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KACzC;IACD,IAAI,IAAI,CAAC,KAAK,EAAE;QACd,IAAI,CAAC,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAClD;IACD,IAAI,IAAI,CAAC,KAAK,EAAE;QACd,IAAI,CAAC,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAClD;IACD,IAAI,IAAI,CAAC,KAAK,EAAE;QACd,IAAI,CAAC,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAClD;IACD,IAAI,IAAI,CAAC,UAAU,EAAE;QACnB,IAAI,CAAC,UAAU,GAAG,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAC5D;IAED,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;QAC5B,IAAI,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;KACnG;IACD,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QACzB,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;KAC1F;IACD,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;QAC1B,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;KAC7F;IACD,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAElB,IAAK,KAA0B,CAAC,IAAI,KAAK,WAAW,EAAE;QACpD,IAAI,CAAC,OAAO,CAAE,KAA0B,CAAC,SAAS,CAAC,EAAE;YACnD,kBAAkB,CAAE,KAA0B,CAAC,SAAS,CAAC,CAAC;SAC3D;QACD,IAAI,CAAC,OAAO,CAAE,KAA0B,CAAC,WAAW,CAAC,EAAE;YACrD,kBAAkB,CAAE,KAA0B,CAAC,WAAW,CAAC,CAAC;SAC7D;KACF;SAAM;QAEL,IAAI,CAAC,OAAO,CAAE,KAAgB,CAAC,SAAS,CAAC,EAAE;YACzC,kBAAkB,CAAE,KAAgB,CAAC,SAAS,CAAC,CAAC;SACjD;QAED,IAAK,KAAgB,CAAC,OAAO,EAAE;YAC7B,uBAAuB,CAAE,KAAgB,CAAC,OAAO,CAAC,CAAC;SACpD;KACF;IAED,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IAEpB,IAAI,UAAU,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;QACpD,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YAC/B,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;SACpC;KACF;IAED,OAAO,KAAK,CAAC;AACf,CAAC","file":"util.js","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { cloneDeep, isEmpty, isValid } from '@visactor/vutils';\nimport { isPercent } from '../../../util/space';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { transformComponentStyle, transformToGraphic } from '../../../util/style';\nimport { transformLegendTitleAttributes } from '../util';\nimport type { IDiscreteLegendSpec, ILegendScrollbar, IPager } from './interface';\nimport type { ILayoutRect } from '../../../typings/layout';\n\nexport function getLegendAttributes(spec: IDiscreteLegendSpec, rect: ILayoutRect) {\n const {\n title: titleSpec = {},\n item: itemSpec = {},\n pager: pagerSpec = {},\n background: backgroundSpec = {},\n // 以下不属于 legend 需要的属性,单独拿出来以免污染传递给组件的属性\n type,\n id,\n visible,\n orient,\n position,\n data,\n filter,\n regionId,\n regionIndex,\n seriesIndex,\n seriesId,\n padding, // vchart 布局模块已经处理了\n\n ...restSpec\n } = spec;\n\n let {\n // 需要进行样式转换的属性\n title = {},\n item = {},\n pager = {},\n background = {}\n } = spec;\n // 需要进行深拷贝,否则会影响到 spec 中的原始数据\n title = cloneDeep(title);\n item = cloneDeep(item);\n pager = cloneDeep(pager);\n background = cloneDeep(background);\n\n const attrs: any = restSpec;\n\n // transform title\n if (title.visible) {\n attrs.title = transformLegendTitleAttributes(title);\n } else {\n attrs.title = { visible: false };\n }\n\n // transform item\n if (!isEmpty(item.focusIconStyle)) {\n transformToGraphic(item.focusIconStyle);\n }\n if (item.shape) {\n item.shape = transformComponentStyle(item.shape);\n }\n if (item.label) {\n item.label = transformComponentStyle(item.label);\n }\n if (item.value) {\n item.value = transformComponentStyle(item.value);\n }\n if (item.background) {\n item.background = transformComponentStyle(item.background);\n }\n\n if (isPercent(item.maxWidth)) {\n item.maxWidth = (Number(item.maxWidth.substring(0, item.maxWidth.length - 1)) * rect.width) / 100;\n }\n if (isPercent(item.width)) {\n item.width = (Number(item.width.substring(0, item.width.length - 1)) * rect.width) / 100;\n }\n if (isPercent(item.height)) {\n item.height = (Number(item.height.substring(0, item.height.length - 1)) * rect.width) / 100;\n }\n attrs.item = item;\n\n if ((pager as ILegendScrollbar).type === 'scrollbar') {\n if (!isEmpty((pager as ILegendScrollbar).railStyle)) {\n transformToGraphic((pager as ILegendScrollbar).railStyle);\n }\n if (!isEmpty((pager as ILegendScrollbar).sliderStyle)) {\n transformToGraphic((pager as ILegendScrollbar).sliderStyle);\n }\n } else {\n // transform pager\n if (!isEmpty((pager as IPager).textStyle)) {\n transformToGraphic((pager as IPager).textStyle);\n }\n\n if ((pager as IPager).handler) {\n transformComponentStyle((pager as IPager).handler);\n }\n }\n\n attrs.pager = pager;\n\n if (background.visible && !isEmpty(background.style)) {\n mergeSpec(attrs, background.style);\n if (isValid(background.padding)) {\n attrs.padding = background.padding;\n }\n }\n\n return attrs;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/component/legend/discrete/util.ts"],"names":[],"mappings":";;;;;;;;;;;AACA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAE,8BAA8B,EAAE,MAAM,SAAS,CAAC;AAKzD,SAAS,gCAAgC,CAAC,KAAU;IAClD,IAAI,CAAC,OAAO,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,CAAC,EAAE;QAC5B,OAAO,KAAK,CAAC;KACd;IAED,uCACK,KAAK,KACR,cAAc,EAAE,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EACxE,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAC/D;AACJ,CAAC;AAED,SAAS,iCAAiC,CAAC,KAAU;IACnD,MAAM,cAAc,GAAG,CAAC,KAAU,EAAE,EAAE,CAAC,gCAAgC,CAAC,KAAK,CAAC,CAAC;IAE/E,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1B,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;KAClE;SAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QAChC,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KAC3C;IAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QACzB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACrC,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE;gBAChC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACpC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;aAC5E;iBAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE;gBACrC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;aACrD;QACH,CAAC,CAAC,CAAC;KACJ;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAyB,EAAE,IAAiB,EAAE,YAA0B;IAC1G,MAAM,EACJ,KAAK,EAAE,SAAS,GAAG,EAAE,EACrB,IAAI,EAAE,QAAQ,GAAG,EAAE,EACnB,KAAK,EAAE,SAAS,GAAG,EAAE,EACrB,UAAU,EAAE,cAAc,GAAG,EAAE,EAE/B,IAAI,EACJ,EAAE,EACF,OAAO,EACP,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,WAAW,EACX,WAAW,EACX,QAAQ,EACR,OAAO,KAGL,IAAI,EADH,QAAQ,UACT,IAAI,EApBF,0KAoBL,CAAO,CAAC;IAET,IAAI,EAEF,KAAK,GAAG,EAAE,EACV,IAAI,GAAG,EAAE,EACT,KAAK,GAAG,EAAE,EACV,UAAU,GAAG,EAAE,EAChB,GAAG,IAAI,CAAC;IAET,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IACzB,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACvB,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IACzB,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IAEnC,MAAM,KAAK,GAAQ,QAAQ,CAAC;IAQ5B,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;QACxD,MAAM,cAAc,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QAC5G,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YAC5B,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC;SACnE;QACD,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YAC5B,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC;SACnE;KACF;IAGD,IAAI,KAAK,CAAC,OAAO,EAAE;QACjB,KAAK,CAAC,KAAK,GAAG,8BAA8B,CAAC,KAAK,CAAC,CAAC;KACrD;SAAM;QACL,KAAK,CAAC,KAAK,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;KAClC;IAGD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;QACjC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KACzC;IACD,IAAI,IAAI,CAAC,KAAK,EAAE;QACd,IAAI,CAAC,KAAK,GAAG,iCAAiC,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;KACrF;IACD,IAAI,IAAI,CAAC,KAAK,EAAE;QACd,IAAI,CAAC,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAClD;IACD,IAAI,IAAI,CAAC,KAAK,EAAE;QACd,IAAI,CAAC,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAClD;IACD,IAAI,IAAI,CAAC,UAAU,EAAE;QACnB,IAAI,CAAC,UAAU,GAAG,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAC5D;IAED,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;QAC5B,IAAI,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;KACnG;IACD,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QACzB,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;KAC1F;IACD,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;QAC1B,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;KAC7F;IACD,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAElB,IAAK,KAA0B,CAAC,IAAI,KAAK,WAAW,EAAE;QACpD,IAAI,CAAC,OAAO,CAAE,KAA0B,CAAC,SAAS,CAAC,EAAE;YACnD,kBAAkB,CAAE,KAA0B,CAAC,SAAS,CAAC,CAAC;SAC3D;QACD,IAAI,CAAC,OAAO,CAAE,KAA0B,CAAC,WAAW,CAAC,EAAE;YACrD,kBAAkB,CAAE,KAA0B,CAAC,WAAW,CAAC,CAAC;SAC7D;KACF;SAAM;QAEL,IAAI,CAAC,OAAO,CAAE,KAAgB,CAAC,SAAS,CAAC,EAAE;YACzC,kBAAkB,CAAE,KAAgB,CAAC,SAAS,CAAC,CAAC;SACjD;QAED,IAAK,KAAgB,CAAC,OAAO,EAAE;YAC7B,uBAAuB,CAAE,KAAgB,CAAC,OAAO,CAAC,CAAC;SACpD;KACF;IAED,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IAEpB,IAAI,UAAU,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;QACpD,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YAC/B,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;SACpC;KACF;IAED,OAAO,KAAK,CAAC;AACf,CAAC","file":"util.js","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { cloneDeep, isEmpty, isFunction, isValid } from '@visactor/vutils';\nimport { isPercent, isValidOrient } from '../../../util/space';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { transformComponentStyle, transformToGraphic } from '../../../util/style';\nimport { transformLegendTitleAttributes } from '../util';\nimport type { IDiscreteLegendSpec, ILegendScrollbar, IPager } from './interface';\nimport type { ILayoutRect } from '../../../typings/layout';\nimport type { IOrientType } from '../../../typings/space';\n\nfunction normalizeLegendShapeTextureStyle(style: any) {\n if (!isValid(style?.texture)) {\n return style;\n }\n\n return {\n ...style,\n texturePadding: isValid(style.texturePadding) ? style.texturePadding : 1,\n textureSize: isValid(style.textureSize) ? style.textureSize : 4\n };\n}\n\nfunction normalizeLegendShapeTextureConfig(shape: any) {\n const normalizeStyle = (style: any) => normalizeLegendShapeTextureStyle(style);\n\n if (isFunction(shape.style)) {\n const style = shape.style;\n shape.style = (...args: any[]) => normalizeStyle(style(...args));\n } else if (!isEmpty(shape.style)) {\n shape.style = normalizeStyle(shape.style);\n }\n\n if (!isEmpty(shape.state)) {\n Object.keys(shape.state).forEach(key => {\n if (isFunction(shape.state[key])) {\n const stateStyle = shape.state[key];\n shape.state[key] = (...args: any[]) => normalizeStyle(stateStyle(...args));\n } else if (!isEmpty(shape.state[key])) {\n shape.state[key] = normalizeStyle(shape.state[key]);\n }\n });\n }\n\n return shape;\n}\n\nexport function getLegendAttributes(spec: IDiscreteLegendSpec, rect: ILayoutRect, layoutOrient?: IOrientType) {\n const {\n title: titleSpec = {},\n item: itemSpec = {},\n pager: pagerSpec = {},\n background: backgroundSpec = {},\n // 以下不属于 legend 需要的属性,单独拿出来以免污染传递给组件的属性\n type,\n id,\n visible,\n orient,\n position,\n data,\n filter,\n regionId,\n regionIndex,\n seriesIndex,\n seriesId,\n padding, // vchart 布局模块已经处理了\n\n ...restSpec\n } = spec;\n\n let {\n // 需要进行样式转换的属性\n title = {},\n item = {},\n pager = {},\n background = {}\n } = spec;\n // 需要进行深拷贝,否则会影响到 spec 中的原始数据\n title = cloneDeep(title);\n item = cloneDeep(item);\n pager = cloneDeep(pager);\n background = cloneDeep(background);\n\n const attrs: any = restSpec;\n\n // `maxRow` / `maxCol` may be a callback, evaluated here during layout against the legend's\n // available `rect` so the row / column count can adapt to the space (e.g. allow more rows on\n // a tall-and-narrow legend). The callback receives the layout context and returns a number.\n // Use the layout-resolved orient (falling back to the spec orient default rule) so the callback\n // sees the orient the legend actually lays out with, not the raw `spec.orient` which is\n // `undefined` when the user omits it.\n if (isFunction(attrs.maxRow) || isFunction(attrs.maxCol)) {\n const resolvedOrient = isValidOrient(layoutOrient) ? layoutOrient : isValidOrient(orient) ? orient : 'left';\n if (isFunction(attrs.maxRow)) {\n attrs.maxRow = attrs.maxRow({ rect, orient: resolvedOrient, id });\n }\n if (isFunction(attrs.maxCol)) {\n attrs.maxCol = attrs.maxCol({ rect, orient: resolvedOrient, id });\n }\n }\n\n // transform title\n if (title.visible) {\n attrs.title = transformLegendTitleAttributes(title);\n } else {\n attrs.title = { visible: false };\n }\n\n // transform item\n if (!isEmpty(item.focusIconStyle)) {\n transformToGraphic(item.focusIconStyle);\n }\n if (item.shape) {\n item.shape = normalizeLegendShapeTextureConfig(transformComponentStyle(item.shape));\n }\n if (item.label) {\n item.label = transformComponentStyle(item.label);\n }\n if (item.value) {\n item.value = transformComponentStyle(item.value);\n }\n if (item.background) {\n item.background = transformComponentStyle(item.background);\n }\n\n if (isPercent(item.maxWidth)) {\n item.maxWidth = (Number(item.maxWidth.substring(0, item.maxWidth.length - 1)) * rect.width) / 100;\n }\n if (isPercent(item.width)) {\n item.width = (Number(item.width.substring(0, item.width.length - 1)) * rect.width) / 100;\n }\n if (isPercent(item.height)) {\n item.height = (Number(item.height.substring(0, item.height.length - 1)) * rect.width) / 100;\n }\n attrs.item = item;\n\n if ((pager as ILegendScrollbar).type === 'scrollbar') {\n if (!isEmpty((pager as ILegendScrollbar).railStyle)) {\n transformToGraphic((pager as ILegendScrollbar).railStyle);\n }\n if (!isEmpty((pager as ILegendScrollbar).sliderStyle)) {\n transformToGraphic((pager as ILegendScrollbar).sliderStyle);\n }\n } else {\n // transform pager\n if (!isEmpty((pager as IPager).textStyle)) {\n transformToGraphic((pager as IPager).textStyle);\n }\n\n if ((pager as IPager).handler) {\n transformComponentStyle((pager as IPager).handler);\n }\n }\n\n attrs.pager = pager;\n\n if (background.visible && !isEmpty(background.style)) {\n mergeSpec(attrs, background.style);\n if (isValid(background.padding)) {\n attrs.padding = background.padding;\n }\n }\n\n return attrs;\n}\n"]}
|
|
@@ -22,7 +22,7 @@ import { markerFilter } from "../../data/transforms/marker-filter";
|
|
|
22
22
|
|
|
23
23
|
import { releaseDataViewWithDependencies } from "../../data/data-view-utils";
|
|
24
24
|
|
|
25
|
-
const MARKER_FORMAT_METHOD_PLACEHOLDER = "__vchart_marker_format_method__", MARKER_COORDINATE_PLACEHOLDER = "__vchart_marker_coordinate__", MARKER_TEXT_PLACEHOLDER = "__vchart_marker_text__", MARKER_AUTO_RANGE_PLACEHOLDER = "__vchart_marker_auto_range__", MARKER_STYLE_PLACEHOLDER = "__vchart_marker_style__", MARKER_DOMAIN_POSITION_SPEC_KEYS = [ "coordinate", "coordinates", "x", "y", "x1", "y1", "angle", "angle1", "radius", "radius1" ], MARKER_LAYOUT_POSITION_SPEC_KEYS = [ "position", "positions", "coordinatesOffset", "regionRelative" ], normalizeMarkerLabelFormatMethod = label => Array.isArray(label) ? label.map(normalizeMarkerLabelFormatMethod) : label && "object" == typeof label ? "function" != typeof label.formatMethod ? label : Object.assign(Object.assign({}, label), {
|
|
25
|
+
const MARKER_FORMAT_METHOD_PLACEHOLDER = "__vchart_marker_format_method__", MARKER_COORDINATE_PLACEHOLDER = "__vchart_marker_coordinate__", MARKER_TEXT_PLACEHOLDER = "__vchart_marker_text__", MARKER_AUTO_RANGE_PLACEHOLDER = "__vchart_marker_auto_range__", MARKER_STYLE_PLACEHOLDER = "__vchart_marker_style__", MARKER_DOMAIN_POSITION_SPEC_KEYS = [ "coordinate", "coordinates", "x", "y", "x1", "y1", "angle", "angle1", "radius", "radius1" ], MARKER_LAYOUT_POSITION_SPEC_KEYS = [ "position", "positions", "coordinatesOffset", "regionRelative" ], MARKER_ITEM_CONTENT_LAYOUT_SPEC_KEYS = [ "offsetX", "offsetY", "confine" ], normalizeMarkerLabelFormatMethod = label => Array.isArray(label) ? label.map(normalizeMarkerLabelFormatMethod) : label && "object" == typeof label ? "function" != typeof label.formatMethod ? label : Object.assign(Object.assign({}, label), {
|
|
26
26
|
formatMethod: MARKER_FORMAT_METHOD_PLACEHOLDER
|
|
27
27
|
}) : label, normalizeMarkerStyles = value => {
|
|
28
28
|
if (Array.isArray(value)) return value.map(normalizeMarkerStyles);
|
|
@@ -32,7 +32,6 @@ const MARKER_FORMAT_METHOD_PLACEHOLDER = "__vchart_marker_format_method__", MARK
|
|
|
32
32
|
"style" === key || key.endsWith("Style") ? normalized[key] = MARKER_STYLE_PLACEHOLDER : normalized[key] = normalizeMarkerStyles(normalized[key]);
|
|
33
33
|
})), normalized;
|
|
34
34
|
}, normalizeMarkerSpecForComponentOnlyUpdate = (spec, options) => {
|
|
35
|
-
var _a;
|
|
36
35
|
if (!spec || "object" != typeof spec) return spec;
|
|
37
36
|
const normalized = Object.assign({}, spec);
|
|
38
37
|
options.normalizeDomainPosition && MARKER_DOMAIN_POSITION_SPEC_KEYS.forEach((key => {
|
|
@@ -44,12 +43,17 @@ const MARKER_FORMAT_METHOD_PLACEHOLDER = "__vchart_marker_format_method__", MARK
|
|
|
44
43
|
Object.keys(normalized).forEach((key => {
|
|
45
44
|
normalized[key] = normalizeMarkerStyles(normalized[key]);
|
|
46
45
|
}));
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
const itemContent = normalized.itemContent;
|
|
47
|
+
if (itemContent && "object" == typeof itemContent) {
|
|
48
|
+
normalized.itemContent = Object.assign({}, itemContent), MARKER_ITEM_CONTENT_LAYOUT_SPEC_KEYS.forEach((key => {
|
|
49
|
+
key in normalized.itemContent && (normalized.itemContent[key] = MARKER_COORDINATE_PLACEHOLDER);
|
|
50
|
+
}));
|
|
51
|
+
const text = normalized.itemContent.text;
|
|
52
|
+
text && "object" == typeof text && (normalized.itemContent.text = Object.assign(Object.assign({}, normalizeMarkerLabelFormatMethod(text)), {
|
|
50
53
|
text: MARKER_TEXT_PLACEHOLDER
|
|
51
|
-
})
|
|
52
|
-
}
|
|
54
|
+
}));
|
|
55
|
+
}
|
|
56
|
+
return normalized;
|
|
53
57
|
};
|
|
54
58
|
|
|
55
59
|
export class BaseMarker extends BaseComponent {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/component/marker/base-marker.ts"],"names":[],"mappings":"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","file":"base-marker.js","sourcesContent":["import { DataSet, DataView } from '@visactor/vdataset';\nimport type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { array, isValid, isNil, isString, isEqual } from '@visactor/vutils';\nimport type { IModelRenderOption, IModelSpecInfo } from '../../model/interface';\nimport type { IRegion } from '../../region/interface';\nimport type { ICartesianSeries } from '../../series/interface';\nimport type { CoordinateType, ILayoutRect, ILayoutType, IRect, StringOrNumber } from '../../typings';\nimport { BaseComponent } from '../base/base-component';\nimport type {\n IAggrType,\n IDataPos,\n IDataPosCallback,\n IMarkerAttributeContext,\n IMarkerSpec,\n IMarkerSupportSeries,\n IMarkProcessOptions\n} from './interface';\nimport type { IGraphic, IGroup } from '@visactor/vrender-core';\nimport { calcLayoutNumber } from '../../util/space';\nimport { isAggrSpec } from './utils';\nimport { getFirstSeries } from '../../util';\nimport { arrayParser } from '../../data/parser/array';\nimport { getSpecInfo } from '../util';\nimport type { IOptionWithCoordinates } from '../../data/transforms/interface';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { markerAggregation } from '../../data/transforms/aggregation';\nimport { markerFilter } from '../../data/transforms/marker-filter';\nimport { releaseDataViewWithDependencies } from '../../data/data-view-utils';\n\nconst MARKER_FORMAT_METHOD_PLACEHOLDER = '__vchart_marker_format_method__';\nconst MARKER_COORDINATE_PLACEHOLDER = '__vchart_marker_coordinate__';\nconst MARKER_TEXT_PLACEHOLDER = '__vchart_marker_text__';\nconst MARKER_AUTO_RANGE_PLACEHOLDER = '__vchart_marker_auto_range__';\nconst MARKER_STYLE_PLACEHOLDER = '__vchart_marker_style__';\nconst MARKER_DOMAIN_POSITION_SPEC_KEYS = [\n 'coordinate',\n 'coordinates',\n 'x',\n 'y',\n 'x1',\n 'y1',\n 'angle',\n 'angle1',\n 'radius',\n 'radius1'\n];\nconst MARKER_LAYOUT_POSITION_SPEC_KEYS = ['position', 'positions', 'coordinatesOffset', 'regionRelative'];\n\nconst normalizeMarkerLabelFormatMethod = (label: any): any => {\n if (Array.isArray(label)) {\n return label.map(normalizeMarkerLabelFormatMethod);\n }\n if (!label || typeof label !== 'object') {\n return label;\n }\n if (typeof label.formatMethod !== 'function') {\n return label;\n }\n return {\n ...label,\n formatMethod: MARKER_FORMAT_METHOD_PLACEHOLDER\n };\n};\n\nconst normalizeMarkerStyles = (value: any): any => {\n if (Array.isArray(value)) {\n return value.map(normalizeMarkerStyles);\n }\n if (!value || typeof value !== 'object') {\n return value;\n }\n\n const normalized = { ...value };\n Object.keys(normalized).forEach(key => {\n if (key === 'style' || key.endsWith('Style')) {\n normalized[key] = MARKER_STYLE_PLACEHOLDER;\n } else {\n normalized[key] = normalizeMarkerStyles(normalized[key]);\n }\n });\n return normalized;\n};\n\nconst normalizeMarkerSpecForComponentOnlyUpdate = (\n spec: any,\n options: { normalizeDomainPosition: boolean; normalizeAutoRange?: boolean }\n) => {\n if (!spec || typeof spec !== 'object') {\n return spec;\n }\n\n const normalized = { ...spec };\n if (options.normalizeDomainPosition) {\n MARKER_DOMAIN_POSITION_SPEC_KEYS.forEach(key => {\n normalized[key] = MARKER_COORDINATE_PLACEHOLDER;\n });\n }\n if (options.normalizeAutoRange && 'autoRange' in normalized) {\n normalized.autoRange = MARKER_AUTO_RANGE_PLACEHOLDER;\n }\n MARKER_LAYOUT_POSITION_SPEC_KEYS.forEach(key => {\n if (key in normalized) {\n normalized[key] = MARKER_COORDINATE_PLACEHOLDER;\n }\n });\n if ('label' in normalized) {\n normalized.label = normalizeMarkerLabelFormatMethod(normalized.label);\n }\n\n Object.keys(normalized).forEach(key => {\n normalized[key] = normalizeMarkerStyles(normalized[key]);\n });\n\n const text = normalized.itemContent?.text;\n if (text && typeof text === 'object') {\n normalized.itemContent = {\n ...normalized.itemContent,\n text: {\n ...normalizeMarkerLabelFormatMethod(text),\n text: MARKER_TEXT_PLACEHOLDER\n }\n };\n }\n\n return normalized;\n};\n\nexport abstract class BaseMarker<T extends IMarkerSpec> extends BaseComponent<T> {\n layoutType: ILayoutType | 'none' = 'none';\n\n // 下面三个属性需要子组件复写\n static specKey: string;\n static type: string;\n static coordinateType: string;\n coordinateType: CoordinateType;\n\n protected _startRelativeSeries!: IMarkerSupportSeries;\n protected _endRelativeSeries!: IMarkerSupportSeries;\n protected _relativeSeries!: IMarkerSupportSeries;\n protected _specifiedDataSeries!: IMarkerSupportSeries | IMarkerSupportSeries[];\n getRelativeSeries() {\n return this._relativeSeries;\n }\n\n // marker 组件数据\n protected _markerData!: DataView;\n getMarkerData() {\n return this._markerData;\n }\n private _markerDataChangeHandler: (() => void) | null = null;\n private _markerDataOwned: boolean = false;\n // marker 组件\n protected _markerComponent!: any;\n\n protected _layoutOffsetX: number = 0;\n protected _layoutOffsetY: number = 0;\n\n private _firstSeries: ICartesianSeries;\n\n protected abstract _initDataView(): void;\n protected abstract _createMarkerComponent(): IGroup;\n protected abstract _markerLayout(): void;\n protected abstract _computeOptions(): IMarkProcessOptions;\n // 该方法需要子组件复写\n static _getMarkerCoordinateType(markerSpec: any): string {\n return 'cartesian';\n }\n\n static getSpecInfo(chartSpec: any): Maybe<IModelSpecInfo[]> {\n return getSpecInfo<IMarkerSpec>(chartSpec, this.specKey, this.type, (s: IMarkerSpec) => {\n return s.visible !== false && this._getMarkerCoordinateType(s) === this.coordinateType;\n });\n }\n\n protected _markAttributeContext: IMarkerAttributeContext;\n getMarkAttributeContext() {\n return this._markAttributeContext;\n }\n\n protected _buildMarkerAttributeContext() {\n this._markAttributeContext = {\n relativeSeries: this._relativeSeries,\n startRelativeSeries: this._startRelativeSeries,\n endRelativeSeries: this._endRelativeSeries,\n vchart: this._option.globalInstance\n };\n }\n\n created() {\n super.created();\n this._bindSeries();\n this._initDataView();\n this.initEvent();\n this._buildMarkerAttributeContext();\n }\n\n protected _getAllRelativeSeries() {\n return {\n getRelativeSeries: () => this._relativeSeries,\n getStartRelativeSeries: () => this._startRelativeSeries,\n getEndRelativeSeries: () => this._endRelativeSeries\n };\n }\n\n protected _getAutoRangeExtendDomainKeyPrefix() {\n return `marker_${this.type}_${this.id}`;\n }\n\n private _getAutoRangeExtendDomainKey(axisKey: 'xAxis' | 'yAxis' | 'angleAxis' | 'radiusAxis') {\n return `${this._getAutoRangeExtendDomainKeyPrefix()}_${axisKey}_extend`;\n }\n\n private _clearAutoRangeExtendDomain() {\n const seriesList = array(this._option.getAllSeries?.() as IMarkerSupportSeries[]);\n\n seriesList.forEach((series: any) => {\n series?.getXAxisHelper?.()?.setExtendDomain?.(this._getAutoRangeExtendDomainKey('xAxis'), undefined);\n series?.getYAxisHelper?.()?.setExtendDomain?.(this._getAutoRangeExtendDomainKey('yAxis'), undefined);\n series?.angleAxisHelper?.setExtendDomain?.(this._getAutoRangeExtendDomainKey('angleAxis'), undefined);\n series?.radiusAxisHelper?.setExtendDomain?.(this._getAutoRangeExtendDomainKey('radiusAxis'), undefined);\n });\n }\n\n private _updateMarkerLayout() {\n this._clearAutoRangeExtendDomain();\n this._markerLayout();\n }\n\n private _getFieldInfoFromSpec(\n dim: 'x' | 'y' | 'angle' | 'radius' | 'areaName',\n spec: IDataPos | IDataPosCallback,\n relativeSeries: IMarkerSupportSeries\n ) {\n const specKeyByDim = {\n x: 'xField',\n y: 'yField',\n radius: 'valueField',\n angle: 'categoryField',\n areaName: 'nameField'\n };\n\n if (isString(spec) && isAggrSpec(spec)) {\n return {\n field: relativeSeries.getSpec()[specKeyByDim[dim]],\n aggrType: spec as unknown as IAggrType\n };\n }\n return spec;\n }\n\n protected _processSpecByDims(\n dimSpec: {\n dim: 'x' | 'y' | 'angle' | 'radius' | 'areaName';\n specValue: IDataPos | IDataPosCallback;\n }[]\n ) {\n const relativeSeries = this._relativeSeries;\n const dimMap = {};\n dimSpec.forEach(d => (dimMap[d.dim] = this._getFieldInfoFromSpec(d.dim, d.specValue, relativeSeries)));\n return {\n ...dimMap,\n ...this._getAllRelativeSeries()\n };\n }\n\n protected _processSpecCoo(spec: any): IOptionWithCoordinates {\n return {\n coordinates: spec.coordinates || spec.coordinate,\n ...this._getAllRelativeSeries(),\n getSeriesByIdOrIndex: (seriesUserId: StringOrNumber, seriesIndex: number) =>\n this._getSeriesByIdOrIndex(seriesUserId, seriesIndex),\n coordinateType: this.coordinateType\n };\n }\n\n protected _getRelativeDataView() {\n if (this._specifiedDataSeries) {\n let resultData: any[] = [];\n array(this._specifiedDataSeries).forEach(series => {\n resultData = resultData.concat(series.getViewData().latestData);\n });\n const dataSet = new DataSet();\n dataSet.registerParser('array', arrayParser);\n return new DataView(dataSet).parse(resultData, { type: 'array' });\n }\n return this._relativeSeries.getViewData();\n }\n\n protected _setMarkerData(data: DataView, owned: boolean = false) {\n this._releaseMarkerData();\n this._markerData = data;\n this._markerDataOwned = owned;\n }\n\n protected _bindMarkerDataChange() {\n if (!this._markerData?.target) {\n return;\n }\n\n this._markerDataChangeHandler = () => {\n this._updateMarkerLayout();\n };\n this._markerData.target.on('change', this._markerDataChangeHandler);\n }\n\n private _releaseMarkerData() {\n const markerData = this._markerData;\n\n if (markerData?.target && this._markerDataChangeHandler) {\n markerData.target.removeListener('change', this._markerDataChangeHandler);\n }\n this._markerDataChangeHandler = null;\n\n if (this._markerDataOwned) {\n releaseDataViewWithDependencies(markerData, dataView => dataView.name === `${this.type}_${this.id}_data`);\n }\n this._markerData = null as unknown as DataView;\n this._markerDataOwned = false;\n }\n\n updateLayoutAttribute(): void {\n const markerVisible = this._spec.visible ?? true;\n if (markerVisible) {\n // 创建marker组件\n if (!this._markerComponent) {\n const markerComponent = this._createMarkerComponent();\n markerComponent.name = this._spec.name ?? this.type;\n markerComponent.id = this._spec.id ?? `${this.type}-${this.id}`;\n this._markerComponent = markerComponent;\n\n this.getContainer().add(this._markerComponent);\n // 代理 marker 组件上的事件\n this._markerComponent.on('*', (event: any, type: string) => {\n this._delegateEvent(\n this._markerComponent as unknown as IGraphic,\n event,\n type,\n null,\n this.getMarkerData.bind(this)\n );\n });\n }\n this._updateMarkerLayout();\n }\n\n super.updateLayoutAttribute();\n }\n\n private _getSeriesByIdOrIndex(seriesUserId: StringOrNumber, seriesIndex: number) {\n let series: IMarkerSupportSeries;\n series = this._option.getSeriesInUserIdOrIndex(isValid(seriesUserId) ? [seriesUserId] : [], [\n seriesIndex\n ])?.[0] as IMarkerSupportSeries;\n if (!series) {\n series = this._relativeSeries ?? this._getFirstSeries();\n }\n return series;\n }\n\n protected _bindSeries() {\n const spec: any = this._spec;\n this._relativeSeries = this._getSeriesByIdOrIndex(spec.relativeSeriesId, spec.relativeSeriesIndex);\n this._startRelativeSeries = this._getSeriesByIdOrIndex(spec.startRelativeSeriesId, spec.startRelativeSeriesIndex);\n this._endRelativeSeries = this._getSeriesByIdOrIndex(spec.endRelativeSeriesId, spec.endRelativeSeriesIndex);\n if (\n (spec.specifiedDataSeriesIndex && spec.specifiedDataSeriesIndex === 'all') ||\n (spec.specifiedDataSeriesId && spec.specifiedDataSeriesId === 'all')\n ) {\n this._specifiedDataSeries = this._option.getAllSeries() as IMarkerSupportSeries[];\n } else if (spec.specifiedDataSeriesIndex || spec.specifiedDataSeriesId) {\n this._specifiedDataSeries = this._getSeriesByIdOrIndex(spec.specifiedDataSeriesId, spec.specifiedDataSeriesIndex);\n }\n }\n\n protected initEvent() {\n // 在极坐标系/地理坐标系中, 滚动或缩放画布不会update layout, 所以需要通过事件监听来更新标注的位置\n // 在直角坐标系中, update layout中已经更新标注位置, 在这里不需要重复监听\n if (this._relativeSeries.coordinate !== 'cartesian') {\n this._relativeSeries.event.on('zoom', this._updateMarkerLayout.bind(this));\n this._relativeSeries.event.on('panmove', this._updateMarkerLayout.bind(this));\n this._relativeSeries.event.on('scroll', this._updateMarkerLayout.bind(this));\n }\n }\n\n clear(): void {\n super.clear();\n this._markerComponent = null;\n this._firstSeries = null;\n }\n\n release(): void {\n this._releaseMarkerData();\n super.release();\n }\n\n private _getFirstSeries(): ICartesianSeries {\n if (this._firstSeries) {\n return this._firstSeries;\n }\n const firstSeries = getFirstSeries(this._regions) as ICartesianSeries;\n if (firstSeries) {\n this._firstSeries = firstSeries;\n return firstSeries;\n }\n this._option?.onError('need at least one series');\n return null;\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._markerComponent] as unknown as IGroup[];\n }\n\n onLayoutStart(layoutRect: IRect, chartViewRect: ILayoutRect): void {\n // offset\n if (!isNil(this._spec.offsetX)) {\n this._layoutOffsetX = calcLayoutNumber(this._spec.offsetX, chartViewRect.width, chartViewRect);\n }\n if (!isNil(this._spec.offsetY)) {\n this._layoutOffsetY = calcLayoutNumber(this._spec.offsetY, chartViewRect.height, chartViewRect);\n }\n super.onLayoutStart(layoutRect, chartViewRect);\n }\n\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n if (!isEqual(prevSpec, spec)) {\n result.reRender = true;\n result.change = true;\n if (!result.reMake && !result.reCompile && this._isComponentOnlySpecChange(spec, prevSpec)) {\n result.effects = {\n ...result.effects,\n component: true,\n layout: true,\n render: true\n };\n } else if (!result.reMake && !result.reCompile && this._isAutoRangeSpecChange(spec, prevSpec)) {\n result.effects = {\n ...result.effects,\n component: true,\n scaleDomain: true,\n layout: true,\n render: true\n };\n } else {\n result.reMake = true;\n }\n }\n return result;\n }\n\n protected _isComponentOnlySpecChange(spec: T, prevSpec: T) {\n const normalizeDomainPosition = !spec?.autoRange && !prevSpec?.autoRange;\n\n return isEqual(\n normalizeMarkerSpecForComponentOnlyUpdate(prevSpec, { normalizeDomainPosition }),\n normalizeMarkerSpecForComponentOnlyUpdate(spec, { normalizeDomainPosition })\n );\n }\n\n protected _isAutoRangeSpecChange(spec: T, prevSpec: T) {\n if (!spec?.autoRange && !prevSpec?.autoRange) {\n return false;\n }\n\n return isEqual(\n normalizeMarkerSpecForComponentOnlyUpdate(prevSpec, {\n normalizeDomainPosition: true,\n normalizeAutoRange: true\n }),\n normalizeMarkerSpecForComponentOnlyUpdate(spec, {\n normalizeDomainPosition: true,\n normalizeAutoRange: true\n })\n );\n }\n\n reInit(spec?: T) {\n super.reInit(spec);\n this._releaseMarkerData();\n this._bindSeries();\n this._initDataView();\n this._buildMarkerAttributeContext();\n if (this._markerComponent) {\n this._updateMarkerLayout();\n }\n }\n\n _initCommonDataView() {\n const { options } = this._computeOptions();\n\n const seriesData = this._getRelativeDataView();\n registerDataSetInstanceTransform(this._option.dataSet, 'markerAggregation', markerAggregation);\n registerDataSetInstanceTransform(this._option.dataSet, 'markerFilter', markerFilter);\n // 重建 marker 自有数据链路前先释放旧链路,避免 transform/listener 残留。\n this._releaseMarkerData();\n const data = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_data` });\n data.parse([seriesData], {\n type: 'dataview'\n });\n data.transform({\n type: 'markerAggregation',\n options\n });\n\n data.transform({\n type: 'markerFilter',\n options: this._getAllRelativeSeries()\n });\n\n this._setMarkerData(data, true);\n this._bindMarkerDataChange();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/component/marker/base-marker.ts"],"names":[],"mappings":"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","file":"base-marker.js","sourcesContent":["import { DataSet, DataView } from '@visactor/vdataset';\nimport type { Maybe } from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport { array, isValid, isNil, isString, isEqual } from '@visactor/vutils';\nimport type { IModelRenderOption, IModelSpecInfo } from '../../model/interface';\nimport type { IRegion } from '../../region/interface';\nimport type { ICartesianSeries } from '../../series/interface';\nimport type { CoordinateType, ILayoutRect, ILayoutType, IRect, StringOrNumber } from '../../typings';\nimport { BaseComponent } from '../base/base-component';\nimport type {\n IAggrType,\n IDataPos,\n IDataPosCallback,\n IMarkerAttributeContext,\n IMarkerSpec,\n IMarkerSupportSeries,\n IMarkProcessOptions\n} from './interface';\nimport type { IGraphic, IGroup } from '@visactor/vrender-core';\nimport { calcLayoutNumber } from '../../util/space';\nimport { isAggrSpec } from './utils';\nimport { getFirstSeries } from '../../util';\nimport { arrayParser } from '../../data/parser/array';\nimport { getSpecInfo } from '../util';\nimport type { IOptionWithCoordinates } from '../../data/transforms/interface';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { markerAggregation } from '../../data/transforms/aggregation';\nimport { markerFilter } from '../../data/transforms/marker-filter';\nimport { releaseDataViewWithDependencies } from '../../data/data-view-utils';\n\nconst MARKER_FORMAT_METHOD_PLACEHOLDER = '__vchart_marker_format_method__';\nconst MARKER_COORDINATE_PLACEHOLDER = '__vchart_marker_coordinate__';\nconst MARKER_TEXT_PLACEHOLDER = '__vchart_marker_text__';\nconst MARKER_AUTO_RANGE_PLACEHOLDER = '__vchart_marker_auto_range__';\nconst MARKER_STYLE_PLACEHOLDER = '__vchart_marker_style__';\nconst MARKER_DOMAIN_POSITION_SPEC_KEYS = [\n 'coordinate',\n 'coordinates',\n 'x',\n 'y',\n 'x1',\n 'y1',\n 'angle',\n 'angle1',\n 'radius',\n 'radius1'\n];\nconst MARKER_LAYOUT_POSITION_SPEC_KEYS = ['position', 'positions', 'coordinatesOffset', 'regionRelative'];\nconst MARKER_ITEM_CONTENT_LAYOUT_SPEC_KEYS = ['offsetX', 'offsetY', 'confine'];\n\nconst normalizeMarkerLabelFormatMethod = (label: any): any => {\n if (Array.isArray(label)) {\n return label.map(normalizeMarkerLabelFormatMethod);\n }\n if (!label || typeof label !== 'object') {\n return label;\n }\n if (typeof label.formatMethod !== 'function') {\n return label;\n }\n return {\n ...label,\n formatMethod: MARKER_FORMAT_METHOD_PLACEHOLDER\n };\n};\n\nconst normalizeMarkerStyles = (value: any): any => {\n if (Array.isArray(value)) {\n return value.map(normalizeMarkerStyles);\n }\n if (!value || typeof value !== 'object') {\n return value;\n }\n\n const normalized = { ...value };\n Object.keys(normalized).forEach(key => {\n if (key === 'style' || key.endsWith('Style')) {\n normalized[key] = MARKER_STYLE_PLACEHOLDER;\n } else {\n normalized[key] = normalizeMarkerStyles(normalized[key]);\n }\n });\n return normalized;\n};\n\nconst normalizeMarkerSpecForComponentOnlyUpdate = (\n spec: any,\n options: { normalizeDomainPosition: boolean; normalizeAutoRange?: boolean }\n) => {\n if (!spec || typeof spec !== 'object') {\n return spec;\n }\n\n const normalized = { ...spec };\n if (options.normalizeDomainPosition) {\n MARKER_DOMAIN_POSITION_SPEC_KEYS.forEach(key => {\n normalized[key] = MARKER_COORDINATE_PLACEHOLDER;\n });\n }\n if (options.normalizeAutoRange && 'autoRange' in normalized) {\n normalized.autoRange = MARKER_AUTO_RANGE_PLACEHOLDER;\n }\n MARKER_LAYOUT_POSITION_SPEC_KEYS.forEach(key => {\n if (key in normalized) {\n normalized[key] = MARKER_COORDINATE_PLACEHOLDER;\n }\n });\n if ('label' in normalized) {\n normalized.label = normalizeMarkerLabelFormatMethod(normalized.label);\n }\n\n Object.keys(normalized).forEach(key => {\n normalized[key] = normalizeMarkerStyles(normalized[key]);\n });\n\n const itemContent = normalized.itemContent;\n if (itemContent && typeof itemContent === 'object') {\n normalized.itemContent = {\n ...itemContent\n };\n MARKER_ITEM_CONTENT_LAYOUT_SPEC_KEYS.forEach(key => {\n if (key in normalized.itemContent) {\n normalized.itemContent[key] = MARKER_COORDINATE_PLACEHOLDER;\n }\n });\n\n const text = normalized.itemContent.text;\n if (text && typeof text === 'object') {\n normalized.itemContent.text = {\n ...normalizeMarkerLabelFormatMethod(text),\n text: MARKER_TEXT_PLACEHOLDER\n };\n }\n }\n\n return normalized;\n};\n\nexport abstract class BaseMarker<T extends IMarkerSpec> extends BaseComponent<T> {\n layoutType: ILayoutType | 'none' = 'none';\n\n // 下面三个属性需要子组件复写\n static specKey: string;\n static type: string;\n static coordinateType: string;\n coordinateType: CoordinateType;\n\n protected _startRelativeSeries!: IMarkerSupportSeries;\n protected _endRelativeSeries!: IMarkerSupportSeries;\n protected _relativeSeries!: IMarkerSupportSeries;\n protected _specifiedDataSeries!: IMarkerSupportSeries | IMarkerSupportSeries[];\n getRelativeSeries() {\n return this._relativeSeries;\n }\n\n // marker 组件数据\n protected _markerData!: DataView;\n getMarkerData() {\n return this._markerData;\n }\n private _markerDataChangeHandler: (() => void) | null = null;\n private _markerDataOwned: boolean = false;\n // marker 组件\n protected _markerComponent!: any;\n\n protected _layoutOffsetX: number = 0;\n protected _layoutOffsetY: number = 0;\n\n private _firstSeries: ICartesianSeries;\n\n protected abstract _initDataView(): void;\n protected abstract _createMarkerComponent(): IGroup;\n protected abstract _markerLayout(): void;\n protected abstract _computeOptions(): IMarkProcessOptions;\n // 该方法需要子组件复写\n static _getMarkerCoordinateType(markerSpec: any): string {\n return 'cartesian';\n }\n\n static getSpecInfo(chartSpec: any): Maybe<IModelSpecInfo[]> {\n return getSpecInfo<IMarkerSpec>(chartSpec, this.specKey, this.type, (s: IMarkerSpec) => {\n return s.visible !== false && this._getMarkerCoordinateType(s) === this.coordinateType;\n });\n }\n\n protected _markAttributeContext: IMarkerAttributeContext;\n getMarkAttributeContext() {\n return this._markAttributeContext;\n }\n\n protected _buildMarkerAttributeContext() {\n this._markAttributeContext = {\n relativeSeries: this._relativeSeries,\n startRelativeSeries: this._startRelativeSeries,\n endRelativeSeries: this._endRelativeSeries,\n vchart: this._option.globalInstance\n };\n }\n\n created() {\n super.created();\n this._bindSeries();\n this._initDataView();\n this.initEvent();\n this._buildMarkerAttributeContext();\n }\n\n protected _getAllRelativeSeries() {\n return {\n getRelativeSeries: () => this._relativeSeries,\n getStartRelativeSeries: () => this._startRelativeSeries,\n getEndRelativeSeries: () => this._endRelativeSeries\n };\n }\n\n protected _getAutoRangeExtendDomainKeyPrefix() {\n return `marker_${this.type}_${this.id}`;\n }\n\n private _getAutoRangeExtendDomainKey(axisKey: 'xAxis' | 'yAxis' | 'angleAxis' | 'radiusAxis') {\n return `${this._getAutoRangeExtendDomainKeyPrefix()}_${axisKey}_extend`;\n }\n\n private _clearAutoRangeExtendDomain() {\n const seriesList = array(this._option.getAllSeries?.() as IMarkerSupportSeries[]);\n\n seriesList.forEach((series: any) => {\n series?.getXAxisHelper?.()?.setExtendDomain?.(this._getAutoRangeExtendDomainKey('xAxis'), undefined);\n series?.getYAxisHelper?.()?.setExtendDomain?.(this._getAutoRangeExtendDomainKey('yAxis'), undefined);\n series?.angleAxisHelper?.setExtendDomain?.(this._getAutoRangeExtendDomainKey('angleAxis'), undefined);\n series?.radiusAxisHelper?.setExtendDomain?.(this._getAutoRangeExtendDomainKey('radiusAxis'), undefined);\n });\n }\n\n private _updateMarkerLayout() {\n this._clearAutoRangeExtendDomain();\n this._markerLayout();\n }\n\n private _getFieldInfoFromSpec(\n dim: 'x' | 'y' | 'angle' | 'radius' | 'areaName',\n spec: IDataPos | IDataPosCallback,\n relativeSeries: IMarkerSupportSeries\n ) {\n const specKeyByDim = {\n x: 'xField',\n y: 'yField',\n radius: 'valueField',\n angle: 'categoryField',\n areaName: 'nameField'\n };\n\n if (isString(spec) && isAggrSpec(spec)) {\n return {\n field: relativeSeries.getSpec()[specKeyByDim[dim]],\n aggrType: spec as unknown as IAggrType\n };\n }\n return spec;\n }\n\n protected _processSpecByDims(\n dimSpec: {\n dim: 'x' | 'y' | 'angle' | 'radius' | 'areaName';\n specValue: IDataPos | IDataPosCallback;\n }[]\n ) {\n const relativeSeries = this._relativeSeries;\n const dimMap = {};\n dimSpec.forEach(d => (dimMap[d.dim] = this._getFieldInfoFromSpec(d.dim, d.specValue, relativeSeries)));\n return {\n ...dimMap,\n ...this._getAllRelativeSeries()\n };\n }\n\n protected _processSpecCoo(spec: any): IOptionWithCoordinates {\n return {\n coordinates: spec.coordinates || spec.coordinate,\n ...this._getAllRelativeSeries(),\n getSeriesByIdOrIndex: (seriesUserId: StringOrNumber, seriesIndex: number) =>\n this._getSeriesByIdOrIndex(seriesUserId, seriesIndex),\n coordinateType: this.coordinateType\n };\n }\n\n protected _getRelativeDataView() {\n if (this._specifiedDataSeries) {\n let resultData: any[] = [];\n array(this._specifiedDataSeries).forEach(series => {\n resultData = resultData.concat(series.getViewData().latestData);\n });\n const dataSet = new DataSet();\n dataSet.registerParser('array', arrayParser);\n return new DataView(dataSet).parse(resultData, { type: 'array' });\n }\n return this._relativeSeries.getViewData();\n }\n\n protected _setMarkerData(data: DataView, owned: boolean = false) {\n this._releaseMarkerData();\n this._markerData = data;\n this._markerDataOwned = owned;\n }\n\n protected _bindMarkerDataChange() {\n if (!this._markerData?.target) {\n return;\n }\n\n this._markerDataChangeHandler = () => {\n this._updateMarkerLayout();\n };\n this._markerData.target.on('change', this._markerDataChangeHandler);\n }\n\n private _releaseMarkerData() {\n const markerData = this._markerData;\n\n if (markerData?.target && this._markerDataChangeHandler) {\n markerData.target.removeListener('change', this._markerDataChangeHandler);\n }\n this._markerDataChangeHandler = null;\n\n if (this._markerDataOwned) {\n releaseDataViewWithDependencies(markerData, dataView => dataView.name === `${this.type}_${this.id}_data`);\n }\n this._markerData = null as unknown as DataView;\n this._markerDataOwned = false;\n }\n\n updateLayoutAttribute(): void {\n const markerVisible = this._spec.visible ?? true;\n if (markerVisible) {\n // 创建marker组件\n if (!this._markerComponent) {\n const markerComponent = this._createMarkerComponent();\n markerComponent.name = this._spec.name ?? this.type;\n markerComponent.id = this._spec.id ?? `${this.type}-${this.id}`;\n this._markerComponent = markerComponent;\n\n this.getContainer().add(this._markerComponent);\n // 代理 marker 组件上的事件\n this._markerComponent.on('*', (event: any, type: string) => {\n this._delegateEvent(\n this._markerComponent as unknown as IGraphic,\n event,\n type,\n null,\n this.getMarkerData.bind(this)\n );\n });\n }\n this._updateMarkerLayout();\n }\n\n super.updateLayoutAttribute();\n }\n\n private _getSeriesByIdOrIndex(seriesUserId: StringOrNumber, seriesIndex: number) {\n let series: IMarkerSupportSeries;\n series = this._option.getSeriesInUserIdOrIndex(isValid(seriesUserId) ? [seriesUserId] : [], [\n seriesIndex\n ])?.[0] as IMarkerSupportSeries;\n if (!series) {\n series = this._relativeSeries ?? this._getFirstSeries();\n }\n return series;\n }\n\n protected _bindSeries() {\n const spec: any = this._spec;\n this._relativeSeries = this._getSeriesByIdOrIndex(spec.relativeSeriesId, spec.relativeSeriesIndex);\n this._startRelativeSeries = this._getSeriesByIdOrIndex(spec.startRelativeSeriesId, spec.startRelativeSeriesIndex);\n this._endRelativeSeries = this._getSeriesByIdOrIndex(spec.endRelativeSeriesId, spec.endRelativeSeriesIndex);\n if (\n (spec.specifiedDataSeriesIndex && spec.specifiedDataSeriesIndex === 'all') ||\n (spec.specifiedDataSeriesId && spec.specifiedDataSeriesId === 'all')\n ) {\n this._specifiedDataSeries = this._option.getAllSeries() as IMarkerSupportSeries[];\n } else if (spec.specifiedDataSeriesIndex || spec.specifiedDataSeriesId) {\n this._specifiedDataSeries = this._getSeriesByIdOrIndex(spec.specifiedDataSeriesId, spec.specifiedDataSeriesIndex);\n }\n }\n\n protected initEvent() {\n // 在极坐标系/地理坐标系中, 滚动或缩放画布不会update layout, 所以需要通过事件监听来更新标注的位置\n // 在直角坐标系中, update layout中已经更新标注位置, 在这里不需要重复监听\n if (this._relativeSeries.coordinate !== 'cartesian') {\n this._relativeSeries.event.on('zoom', this._updateMarkerLayout.bind(this));\n this._relativeSeries.event.on('panmove', this._updateMarkerLayout.bind(this));\n this._relativeSeries.event.on('scroll', this._updateMarkerLayout.bind(this));\n }\n }\n\n clear(): void {\n super.clear();\n this._markerComponent = null;\n this._firstSeries = null;\n }\n\n release(): void {\n this._releaseMarkerData();\n super.release();\n }\n\n private _getFirstSeries(): ICartesianSeries {\n if (this._firstSeries) {\n return this._firstSeries;\n }\n const firstSeries = getFirstSeries(this._regions) as ICartesianSeries;\n if (firstSeries) {\n this._firstSeries = firstSeries;\n return firstSeries;\n }\n this._option?.onError('need at least one series');\n return null;\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._markerComponent] as unknown as IGroup[];\n }\n\n onLayoutStart(layoutRect: IRect, chartViewRect: ILayoutRect): void {\n // offset\n if (!isNil(this._spec.offsetX)) {\n this._layoutOffsetX = calcLayoutNumber(this._spec.offsetX, chartViewRect.width, chartViewRect);\n }\n if (!isNil(this._spec.offsetY)) {\n this._layoutOffsetY = calcLayoutNumber(this._spec.offsetY, chartViewRect.height, chartViewRect);\n }\n super.onLayoutStart(layoutRect, chartViewRect);\n }\n\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n if (!isEqual(prevSpec, spec)) {\n result.reRender = true;\n result.change = true;\n if (!result.reMake && !result.reCompile && this._isComponentOnlySpecChange(spec, prevSpec)) {\n result.effects = {\n ...result.effects,\n component: true,\n layout: true,\n render: true\n };\n } else if (!result.reMake && !result.reCompile && this._isAutoRangeSpecChange(spec, prevSpec)) {\n result.effects = {\n ...result.effects,\n component: true,\n scaleDomain: true,\n layout: true,\n render: true\n };\n } else {\n result.reMake = true;\n }\n }\n return result;\n }\n\n protected _isComponentOnlySpecChange(spec: T, prevSpec: T) {\n const normalizeDomainPosition = !spec?.autoRange && !prevSpec?.autoRange;\n\n return isEqual(\n normalizeMarkerSpecForComponentOnlyUpdate(prevSpec, { normalizeDomainPosition }),\n normalizeMarkerSpecForComponentOnlyUpdate(spec, { normalizeDomainPosition })\n );\n }\n\n protected _isAutoRangeSpecChange(spec: T, prevSpec: T) {\n if (!spec?.autoRange && !prevSpec?.autoRange) {\n return false;\n }\n\n return isEqual(\n normalizeMarkerSpecForComponentOnlyUpdate(prevSpec, {\n normalizeDomainPosition: true,\n normalizeAutoRange: true\n }),\n normalizeMarkerSpecForComponentOnlyUpdate(spec, {\n normalizeDomainPosition: true,\n normalizeAutoRange: true\n })\n );\n }\n\n reInit(spec?: T) {\n super.reInit(spec);\n this._releaseMarkerData();\n this._bindSeries();\n this._initDataView();\n this._buildMarkerAttributeContext();\n if (this._markerComponent) {\n this._updateMarkerLayout();\n }\n }\n\n _initCommonDataView() {\n const { options } = this._computeOptions();\n\n const seriesData = this._getRelativeDataView();\n registerDataSetInstanceTransform(this._option.dataSet, 'markerAggregation', markerAggregation);\n registerDataSetInstanceTransform(this._option.dataSet, 'markerFilter', markerFilter);\n // 重建 marker 自有数据链路前先释放旧链路,避免 transform/listener 残留。\n this._releaseMarkerData();\n const data = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_data` });\n data.parse([seriesData], {\n type: 'dataview'\n });\n data.transform({\n type: 'markerAggregation',\n options\n });\n\n data.transform({\n type: 'markerFilter',\n options: this._getAllRelativeSeries()\n });\n\n this._setMarkerData(data, true);\n this._bindMarkerDataChange();\n }\n}\n"]}
|
|
@@ -6,7 +6,7 @@ import { cartesianCoordinateLayout, positionLayout, xyLayout, getMarkLineProcess
|
|
|
6
6
|
|
|
7
7
|
import { MarkLine as MarkLineComponent, registerMarkLineAnimate } from "@visactor/vrender-components";
|
|
8
8
|
|
|
9
|
-
import { array, isValid, isValidNumber } from "@visactor/vutils";
|
|
9
|
+
import { array, isFunction, isValid, isValidNumber } from "@visactor/vutils";
|
|
10
10
|
|
|
11
11
|
import { getInsertPoints, getTextOffset } from "./util";
|
|
12
12
|
|
|
@@ -39,10 +39,21 @@ export class CartesianMarkLine extends BaseMarkLine {
|
|
|
39
39
|
};
|
|
40
40
|
}
|
|
41
41
|
_markerLayout() {
|
|
42
|
-
var _a, _b, _c, _d, _e;
|
|
42
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
43
43
|
const updateAttrs = this._getUpdateMarkerAttrs();
|
|
44
44
|
if ("type-step" === this._spec.type) {
|
|
45
|
-
const startRelativeSeries = this._startRelativeSeries, endRelativeSeries = this._endRelativeSeries, {multiSegment: multiSegment, mainSegmentIndex: mainSegmentIndex} = this._spec.line || {}, {connectDirection: connectDirection
|
|
45
|
+
const startRelativeSeries = this._startRelativeSeries, endRelativeSeries = this._endRelativeSeries, {multiSegment: multiSegment, mainSegmentIndex: mainSegmentIndex} = this._spec.line || {}, {connectDirection: connectDirection} = this._spec;
|
|
46
|
+
let {expandDistance: expandDistance = 0} = this._spec;
|
|
47
|
+
const {points: points, limitRect: limitRect} = updateAttrs, coordinatePoints = array(points).filter(Boolean);
|
|
48
|
+
if (isFunction(expandDistance)) {
|
|
49
|
+
const startRegion = null === (_a = null == startRelativeSeries ? void 0 : startRelativeSeries.getRegion) || void 0 === _a ? void 0 : _a.call(startRelativeSeries), endRegion = null === (_b = null == endRelativeSeries ? void 0 : endRelativeSeries.getRegion) || void 0 === _b ? void 0 : _b.call(endRelativeSeries);
|
|
50
|
+
expandDistance = expandDistance(this._markerData, Object.assign(Object.assign({}, this.getMarkAttributeContext()), {
|
|
51
|
+
region: null === (_d = null === (_c = this._relativeSeries) || void 0 === _c ? void 0 : _c.getRegion) || void 0 === _d ? void 0 : _d.call(_c),
|
|
52
|
+
startRegion: startRegion,
|
|
53
|
+
endRegion: endRegion,
|
|
54
|
+
coordinatePoints: coordinatePoints
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
46
57
|
let expandDistanceValue;
|
|
47
58
|
if (isPercent(expandDistance)) {
|
|
48
59
|
const regionStart = startRelativeSeries.getRegion(), regionStartLayoutStartPoint = regionStart.getLayoutStartPoint(), regionEnd = endRelativeSeries.getRegion(), regionEndLayoutStartPoint = regionEnd.getLayoutStartPoint();
|
|
@@ -54,8 +65,7 @@ export class CartesianMarkLine extends BaseMarkLine {
|
|
|
54
65
|
expandDistanceValue = Number(expandDistance.substring(0, expandDistance.length - 1)) * regionWidth / 100;
|
|
55
66
|
}
|
|
56
67
|
} else expandDistanceValue = expandDistance;
|
|
57
|
-
|
|
58
|
-
if (!points || points.length < 2) return void (null === (_a = this._markerComponent) || void 0 === _a || _a.setAttributes(updateAttrs));
|
|
68
|
+
if (!points || points.length < 2) return void (null === (_e = this._markerComponent) || void 0 === _e || _e.setAttributes(updateAttrs));
|
|
59
69
|
const joinPoints = getInsertPoints(points[0], points[1], connectDirection, expandDistanceValue);
|
|
60
70
|
let labelPositionAttrs;
|
|
61
71
|
labelPositionAttrs = multiSegment && isValid(mainSegmentIndex) ? {
|
|
@@ -65,8 +75,8 @@ export class CartesianMarkLine extends BaseMarkLine {
|
|
|
65
75
|
position: "start",
|
|
66
76
|
autoRotate: !1
|
|
67
77
|
}, getTextOffset(points[0], points[1], connectDirection, expandDistanceValue));
|
|
68
|
-
const markerComponentAttr = null !== (
|
|
69
|
-
null === (
|
|
78
|
+
const markerComponentAttr = null !== (_g = null === (_f = this._markerComponent) || void 0 === _f ? void 0 : _f.attribute) && void 0 !== _g ? _g : {}, prevLabelAttrs = array(markerComponentAttr.label), updateLabels = array(updateAttrs.label), labelsInSpec = array(this._spec.label);
|
|
79
|
+
null === (_h = this._markerComponent) || void 0 === _h || _h.setAttributes({
|
|
70
80
|
points: multiSegment ? [ [ joinPoints[0], joinPoints[1] ], [ joinPoints[1], joinPoints[2] ], [ joinPoints[2], joinPoints[3] ] ] : joinPoints,
|
|
71
81
|
label: updateLabels.map(((labelItem, index) => {
|
|
72
82
|
var _a, _b, _c, _d;
|
|
@@ -93,7 +103,7 @@ export class CartesianMarkLine extends BaseMarkLine {
|
|
|
93
103
|
dx: this._layoutOffsetX,
|
|
94
104
|
dy: this._layoutOffsetY
|
|
95
105
|
});
|
|
96
|
-
} else null === (
|
|
106
|
+
} else null === (_j = this._markerComponent) || void 0 === _j || _j.setAttributes(updateAttrs);
|
|
97
107
|
}
|
|
98
108
|
_computeOptions() {
|
|
99
109
|
let options, processData = this._getRelativeDataView(), needAggr = !0, needRegr = !1;
|