@visactor/vchart 2.1.0-alpha.4 → 2.1.0-alpha.6
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 +1 -1
- package/build/index.es.js +362 -236
- package/build/index.js +362 -236
- package/build/index.min.js +2 -2
- package/build/tsconfig.tsbuildinfo +1 -1
- package/cjs/chart/base/base-chart.d.ts +1 -0
- package/cjs/chart/base/base-chart.js +10 -2
- package/cjs/chart/base/base-chart.js.map +1 -1
- package/cjs/chart/gauge/gauge-transformer.js +3 -2
- package/cjs/chart/gauge/gauge-transformer.js.map +1 -1
- package/cjs/chart/polar/polar-transformer.js +1 -1
- package/cjs/chart/polar/polar-transformer.js.map +1 -1
- package/cjs/chart/polar/progress-like/progress-like-transformer.js +1 -1
- package/cjs/chart/polar/progress-like/progress-like-transformer.js.map +1 -1
- package/cjs/chart/progress/circular/circular-progress-transformer.js +3 -2
- package/cjs/chart/progress/circular/circular-progress-transformer.js.map +1 -1
- package/cjs/chart/progress/linear/linear-progress-transformer.js +1 -1
- package/cjs/chart/progress/linear/linear-progress-transformer.js.map +1 -1
- package/cjs/chart/radar/radar-transformer.js +3 -2
- package/cjs/chart/radar/radar-transformer.js.map +1 -1
- package/cjs/chart/range-area/range-area-transformer.js +2 -2
- package/cjs/chart/range-area/range-area-transformer.js.map +1 -1
- package/cjs/chart/rose/rose-transformer.js +2 -1
- package/cjs/chart/rose/rose-transformer.js.map +1 -1
- package/cjs/compile/compiler.js +9 -7
- package/cjs/compile/compiler.js.map +1 -1
- package/cjs/component/axis/polar/band-axis.d.ts +2 -0
- package/cjs/component/axis/polar/band-axis.js +3 -0
- package/cjs/component/axis/polar/band-axis.js.map +1 -1
- package/cjs/component/axis/polar/linear-axis.js +3 -0
- package/cjs/component/axis/polar/linear-axis.js.map +1 -1
- package/cjs/component/indicator/indicator.js +2 -2
- package/cjs/component/indicator/indicator.js.map +1 -1
- package/cjs/component/indicator/util.d.ts +4 -3
- package/cjs/component/indicator/util.js +1 -1
- package/cjs/component/indicator/util.js.map +1 -1
- package/cjs/constant/funnel.js +2 -1
- package/cjs/constant/scatter.js +1 -2
- package/cjs/constant/scroll-bar.js +1 -1
- package/cjs/constant/sunburst.js +1 -1
- package/cjs/constant/waterfall.js +1 -1
- package/cjs/constant/word-cloud.js +1 -1
- package/cjs/core/instance-manager.js +1 -1
- package/cjs/core/interface.js +1 -1
- package/cjs/core/util.js +1 -1
- package/cjs/core/vchart.js +1 -1
- package/cjs/data/transforms/box-plot.d.ts +4 -1
- package/cjs/data/transforms/box-plot.js +3 -3
- package/cjs/data/transforms/box-plot.js.map +1 -1
- package/cjs/data/transforms/correlation-center.d.ts +11 -4
- package/cjs/data/transforms/correlation-center.js +3 -2
- package/cjs/data/transforms/correlation-center.js.map +1 -1
- package/cjs/data/transforms/correlation.d.ts +18 -15
- package/cjs/data/transforms/correlation.js +22 -17
- package/cjs/data/transforms/correlation.js.map +1 -1
- package/cjs/data/transforms/funnel.d.ts +10 -8
- package/cjs/data/transforms/funnel.js +4 -3
- package/cjs/data/transforms/funnel.js.map +1 -1
- package/cjs/data/transforms/lookup.d.ts +3 -3
- package/cjs/data/transforms/lookup.js +12 -7
- package/cjs/data/transforms/lookup.js.map +1 -1
- package/cjs/data/transforms/map.d.ts +8 -2
- package/cjs/data/transforms/map.js +9 -6
- package/cjs/data/transforms/map.js.map +1 -1
- package/cjs/data/transforms/sankey.d.ts +12 -4
- package/cjs/data/transforms/sankey.js +18 -13
- package/cjs/data/transforms/sankey.js.map +1 -1
- package/cjs/data/transforms/stack-split.d.ts +2 -1
- package/cjs/data/transforms/stack-split.js +1 -1
- package/cjs/data/transforms/stack-split.js.map +1 -1
- package/cjs/data/transforms/treemap.d.ts +5 -3
- package/cjs/data/transforms/treemap.js +7 -6
- package/cjs/data/transforms/treemap.js.map +1 -1
- package/cjs/data/transforms/venn.d.ts +4 -2
- package/cjs/data/transforms/venn.js +4 -4
- package/cjs/data/transforms/venn.js.map +1 -1
- package/cjs/data/transforms/waterfall.d.ts +4 -2
- package/cjs/data/transforms/waterfall.js +7 -7
- package/cjs/data/transforms/waterfall.js.map +1 -1
- package/cjs/series/base/base-series.js +2 -2
- package/cjs/series/base/base-series.js.map +1 -1
- package/cjs/series/box-plot/box-plot.js +2 -2
- package/cjs/series/box-plot/box-plot.js.map +1 -1
- package/cjs/series/correlation/correlation.js +13 -11
- package/cjs/series/correlation/correlation.js.map +1 -1
- package/cjs/series/dot/dot.d.ts +11 -0
- package/cjs/series/dot/dot.js +16 -1
- package/cjs/series/dot/dot.js.map +1 -1
- package/cjs/series/funnel/funnel.js +5 -8
- package/cjs/series/funnel/funnel.js.map +1 -1
- package/cjs/series/map/map.js +3 -3
- package/cjs/series/map/map.js.map +1 -1
- package/cjs/series/polar/progress-like/progress-like.d.ts +2 -0
- package/cjs/series/polar/progress-like/progress-like.js +16 -1
- package/cjs/series/polar/progress-like/progress-like.js.map +1 -1
- package/cjs/series/polar/rose-like/rose-like.d.ts +2 -0
- package/cjs/series/polar/rose-like/rose-like.js +15 -1
- package/cjs/series/polar/rose-like/rose-like.js.map +1 -1
- package/cjs/series/progress/circular/circular.js +2 -1
- package/cjs/series/progress/circular/circular.js.map +1 -1
- package/cjs/series/progress/linear/linear.js +3 -1
- package/cjs/series/progress/linear/linear.js.map +1 -1
- package/cjs/series/sankey/sankey.js +35 -33
- package/cjs/series/sankey/sankey.js.map +1 -1
- package/cjs/series/treemap/treemap.js +23 -20
- package/cjs/series/treemap/treemap.js.map +1 -1
- package/cjs/series/venn/venn.js +2 -2
- package/cjs/series/venn/venn.js.map +1 -1
- package/cjs/series/waterfall/waterfall.js +26 -20
- package/cjs/series/waterfall/waterfall.js.map +1 -1
- package/esm/chart/base/base-chart.d.ts +1 -0
- package/esm/chart/base/base-chart.js +9 -2
- package/esm/chart/base/base-chart.js.map +1 -1
- package/esm/chart/gauge/gauge-transformer.js +3 -2
- package/esm/chart/gauge/gauge-transformer.js.map +1 -1
- package/esm/chart/polar/polar-transformer.js +1 -1
- package/esm/chart/polar/polar-transformer.js.map +1 -1
- package/esm/chart/polar/progress-like/progress-like-transformer.js +1 -1
- package/esm/chart/polar/progress-like/progress-like-transformer.js.map +1 -1
- package/esm/chart/progress/circular/circular-progress-transformer.js +3 -2
- package/esm/chart/progress/circular/circular-progress-transformer.js.map +1 -1
- package/esm/chart/progress/linear/linear-progress-transformer.js +1 -1
- package/esm/chart/progress/linear/linear-progress-transformer.js.map +1 -1
- package/esm/chart/radar/radar-transformer.js +3 -2
- package/esm/chart/radar/radar-transformer.js.map +1 -1
- package/esm/chart/range-area/range-area-transformer.js +2 -2
- package/esm/chart/range-area/range-area-transformer.js.map +1 -1
- package/esm/chart/rose/rose-transformer.js +2 -1
- package/esm/chart/rose/rose-transformer.js.map +1 -1
- package/esm/compile/compiler.js +9 -7
- package/esm/compile/compiler.js.map +1 -1
- package/esm/component/axis/polar/band-axis.d.ts +2 -0
- package/esm/component/axis/polar/band-axis.js +3 -0
- package/esm/component/axis/polar/band-axis.js.map +1 -1
- package/esm/component/axis/polar/linear-axis.js +3 -0
- package/esm/component/axis/polar/linear-axis.js.map +1 -1
- package/esm/component/indicator/indicator.js +2 -2
- package/esm/component/indicator/indicator.js.map +1 -1
- package/esm/component/indicator/util.d.ts +4 -3
- package/esm/component/indicator/util.js +2 -2
- package/esm/component/indicator/util.js.map +1 -1
- package/esm/constant/funnel.js +2 -1
- package/esm/constant/scatter.js +1 -2
- package/esm/constant/scroll-bar.js +1 -1
- package/esm/constant/sunburst.js +1 -1
- package/esm/constant/waterfall.js +1 -1
- package/esm/constant/word-cloud.js +1 -1
- package/esm/core/instance-manager.js +1 -1
- package/esm/core/interface.js +1 -1
- package/esm/core/util.js +1 -1
- package/esm/core/vchart.js +1 -1
- package/esm/data/transforms/box-plot.d.ts +4 -1
- package/esm/data/transforms/box-plot.js +4 -4
- package/esm/data/transforms/box-plot.js.map +1 -1
- package/esm/data/transforms/correlation-center.d.ts +11 -4
- package/esm/data/transforms/correlation-center.js +4 -2
- package/esm/data/transforms/correlation-center.js.map +1 -1
- package/esm/data/transforms/correlation.d.ts +18 -15
- package/esm/data/transforms/correlation.js +13 -8
- package/esm/data/transforms/correlation.js.map +1 -1
- package/esm/data/transforms/funnel.d.ts +10 -8
- package/esm/data/transforms/funnel.js +5 -3
- package/esm/data/transforms/funnel.js.map +1 -1
- package/esm/data/transforms/lookup.d.ts +3 -3
- package/esm/data/transforms/lookup.js +12 -6
- package/esm/data/transforms/lookup.js.map +1 -1
- package/esm/data/transforms/map.d.ts +8 -2
- package/esm/data/transforms/map.js +11 -6
- package/esm/data/transforms/map.js.map +1 -1
- package/esm/data/transforms/sankey.d.ts +12 -4
- package/esm/data/transforms/sankey.js +19 -14
- package/esm/data/transforms/sankey.js.map +1 -1
- package/esm/data/transforms/stack-split.d.ts +2 -1
- package/esm/data/transforms/stack-split.js +2 -2
- package/esm/data/transforms/stack-split.js.map +1 -1
- package/esm/data/transforms/treemap.d.ts +5 -3
- package/esm/data/transforms/treemap.js +8 -5
- package/esm/data/transforms/treemap.js.map +1 -1
- package/esm/data/transforms/venn.d.ts +4 -2
- package/esm/data/transforms/venn.js +5 -3
- package/esm/data/transforms/venn.js.map +1 -1
- package/esm/data/transforms/waterfall.d.ts +4 -2
- package/esm/data/transforms/waterfall.js +7 -8
- package/esm/data/transforms/waterfall.js.map +1 -1
- package/esm/series/base/base-series.js +2 -2
- package/esm/series/base/base-series.js.map +1 -1
- package/esm/series/box-plot/box-plot.js +2 -2
- package/esm/series/box-plot/box-plot.js.map +1 -1
- package/esm/series/correlation/correlation.js +13 -11
- package/esm/series/correlation/correlation.js.map +1 -1
- package/esm/series/dot/dot.d.ts +11 -0
- package/esm/series/dot/dot.js +17 -0
- package/esm/series/dot/dot.js.map +1 -1
- package/esm/series/funnel/funnel.js +5 -8
- package/esm/series/funnel/funnel.js.map +1 -1
- package/esm/series/map/map.js +3 -3
- package/esm/series/map/map.js.map +1 -1
- package/esm/series/polar/progress-like/progress-like.d.ts +2 -0
- package/esm/series/polar/progress-like/progress-like.js +17 -0
- package/esm/series/polar/progress-like/progress-like.js.map +1 -1
- package/esm/series/polar/rose-like/rose-like.d.ts +2 -0
- package/esm/series/polar/rose-like/rose-like.js +16 -0
- package/esm/series/polar/rose-like/rose-like.js.map +1 -1
- package/esm/series/progress/circular/circular.js +2 -1
- package/esm/series/progress/circular/circular.js.map +1 -1
- package/esm/series/progress/linear/linear.js +3 -1
- package/esm/series/progress/linear/linear.js.map +1 -1
- package/esm/series/sankey/sankey.js +35 -33
- package/esm/series/sankey/sankey.js.map +1 -1
- package/esm/series/treemap/treemap.js +23 -20
- package/esm/series/treemap/treemap.js.map +1 -1
- package/esm/series/venn/venn.js +2 -2
- package/esm/series/venn/venn.js.map +1 -1
- package/esm/series/waterfall/waterfall.js +26 -20
- package/esm/series/waterfall/waterfall.js.map +1 -1
- package/package.json +10 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/component/axis/polar/linear-axis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACnH,OAAO,EAAE,gCAAgC,EAAE,MAAM,wBAAwB,CAAC;AAG1E,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,0DAA0D,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,0DAA0D,CAAC;AACtF,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,yDAAyD,CAAC;AAchG,MAAM,OAAO,eAAuE,SAAQ,SAAY;IAAxG;;QAEE,SAAI,GAAG,iBAAiB,CAAC,eAAe,CAAC;QAU/B,UAAK,GAAY,IAAI,CAAC;QACtB,UAAK,GAAY,IAAI,CAAC;QACtB,YAAO,GAA8B,EAAE,CAAC;QAExC,WAAM,GAAG,IAAI,WAAW,EAAE,CAAC;
|
|
1
|
+
{"version":3,"sources":["../src/component/axis/polar/linear-axis.ts"],"names":[],"mappings":"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","file":"linear-axis.js","sourcesContent":["import { LinearScale } from '@visactor/vscale';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport { PolarAxis } from './axis';\nimport type { IPolarLinearAxisSpec } from './interface/spec';\nimport { LinearAxisMixin } from '../mixin/linear-axis-mixin';\nimport { mixin } from '@visactor/vutils';\nimport { Factory } from '../../../core/factory';\nimport { registerAxis } from '../base-axis';\nimport type { IPolarAxisHelper } from './interface';\nimport { CircleAxis, CircleAxisGrid, continuousTicks, LineAxis, LineAxisGrid } from '@visactor/vrender-components';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\nimport type { IGroup } from '@visactor/vrender-core';\nimport type { VRenderComponentOptions } from '../../../core/interface';\nimport { GridEnum, AxisEnum } from '../interface';\nimport { axisLinear } from '../../../theme/builtin/common/component/axis/linear-axis';\nimport { commonAxis } from '../../../theme/builtin/common/component/axis/common-axis';\nimport { axisAngle, axisRadius } from '../../../theme/builtin/common/component/axis/polar-axis';\n\nexport interface PolarLinearAxis<T extends IPolarLinearAxisSpec = IPolarLinearAxisSpec>\n extends Pick<\n LinearAxisMixin,\n | 'setExtraAttrFromSpec'\n | 'transformScaleDomain'\n | 'valueToPosition'\n | 'computeLinearDomain'\n | 'setScaleNice'\n | 'setExtendDomain'\n >,\n PolarAxis<T> {}\n\nexport class PolarLinearAxis<T extends IPolarLinearAxisSpec = IPolarLinearAxisSpec> extends PolarAxis<T> {\n static type = ComponentTypeEnum.polarLinearAxis;\n type = ComponentTypeEnum.polarLinearAxis;\n\n static specKey = 'axes';\n static readonly builtInTheme = {\n axis: commonAxis,\n axisLinear,\n axisAngle,\n axisRadius\n };\n\n protected _zero: boolean = true;\n protected _nice: boolean = true;\n protected _extend: { [key: string]: number } = {};\n\n protected _scale = new LinearScale();\n protected declare _groupScales: LinearScale[];\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this.setExtraAttrFromSpec();\n const tickTransform = this._tickData?.[0]\n ?.getDataView()\n .transformsArr.find(t => t.type === this.registerTicksTransform());\n tickTransform && (tickTransform.options = this._tickTransformOption());\n }\n\n protected initScales() {\n super.initScales();\n this.setScaleNice();\n }\n\n protected computeDomain(data: { min: number; max: number; values: any[] }[]): number[] {\n return this.computeLinearDomain(data);\n }\n\n protected axisHelper() {\n const helper: IPolarAxisHelper = super.axisHelper();\n helper.setExtendDomain = this.setExtendDomain.bind(this);\n return helper as any;\n }\n\n protected registerTicksTransform() {\n const name = `${this.type}-ticks`;\n registerDataSetInstanceTransform(this._option.dataSet, name, continuousTicks);\n\n return name;\n }\n}\n\nmixin(PolarLinearAxis, LinearAxisMixin);\n\nexport const registerPolarLinearAxis = () => {\n Factory.registerGraphicComponent(AxisEnum.lineAxis, (attrs: any, options: VRenderComponentOptions) => {\n return new LineAxis(attrs, options) as unknown as IGroup;\n });\n Factory.registerGraphicComponent(GridEnum.lineAxisGrid, (attrs: any, options: VRenderComponentOptions) => {\n return new LineAxisGrid(attrs, options) as unknown as IGroup;\n });\n\n Factory.registerGraphicComponent(AxisEnum.circleAxis, (attrs: any, options: VRenderComponentOptions) => {\n return new CircleAxis(attrs, options) as unknown as IGroup;\n });\n Factory.registerGraphicComponent(GridEnum.circleAxisGrid, (attrs: any, options: VRenderComponentOptions) => {\n return new CircleAxisGrid(attrs, options) as unknown as IGroup;\n });\n registerAxis();\n Factory.registerComponent(PolarLinearAxis.type, PolarLinearAxis);\n};\n"]}
|
|
@@ -91,11 +91,11 @@ export class Indicator extends BaseComponent {
|
|
|
91
91
|
});
|
|
92
92
|
displayData.transform({
|
|
93
93
|
type: "indicatorFilter",
|
|
94
|
-
options: {
|
|
94
|
+
options: () => ({
|
|
95
95
|
title: this._title,
|
|
96
96
|
content: this._content,
|
|
97
97
|
datum: () => this._activeDatum
|
|
98
|
-
}
|
|
98
|
+
})
|
|
99
99
|
}), displayData.target.addListener("change", this.updateDatum.bind(this)), this._displayData = new CompilableData(this._option, displayData);
|
|
100
100
|
}
|
|
101
101
|
updateLayoutAttribute() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/component/indicator/indicator.ts"],"names":[],"mappings":"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","file":"indicator.js","sourcesContent":["import { DataView } from '@visactor/vdataset';\nimport { LayoutLevel, LayoutZIndex } from '../../constant/layout';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport { BaseComponent } from '../base/base-component';\nimport type { IRegion } from '../../region/interface';\nimport type { IIndicator, IIndicatorItemSpec, IIndicatorSpec } from './interface';\nimport type { Datum, Maybe } from '../../typings';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { transformIndicatorStyle } from '../../util/style';\nimport { getActualNumValue } from '../../util/space';\nimport { isEqual, isValid, isFunction, array, pickWithout } from '@visactor/vutils';\nimport { indicatorMapper } from './util';\nimport type { IModelSpecInfo } from '../../model/interface';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { CompilableData } from '../../compile/data/compilable-data';\nimport { Indicator as IndicatorComponents } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IndicatorAttributes } from '@visactor/vrender-components';\nimport type { IGraphic, INode, IGroup } from '@visactor/vrender-core';\nimport type { FunctionType } from '../../typings/visual';\nimport { Factory } from '../../core/factory';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IRichTextCharacter } from '@visactor/vrender-core';\nimport { getSpecInfo } from '../util';\nimport { getDatumOfGraphic } from '../../util/mark';\nimport type { IMarkGraphic } from '../../mark/interface';\nimport { indicator } from '../../theme/builtin/common/component/indicator';\n\nexport class Indicator<T extends IIndicatorSpec> extends BaseComponent<T> implements IIndicator {\n static type = ComponentTypeEnum.indicator;\n type = ComponentTypeEnum.indicator;\n name: string = ComponentTypeEnum.indicator;\n\n static readonly builtInTheme = {\n indicator\n };\n static specKey = 'indicator';\n specKey = 'indicator';\n\n layoutType: 'none' = 'none';\n layoutZIndex: number = LayoutZIndex.Indicator;\n layoutLevel: number = LayoutLevel.Indicator;\n\n private _gap: number = 0;\n\n private _activeDatum: any = null;\n private _displayData!: CompilableData;\n\n private _title: IIndicatorItemSpec;\n private _content: IIndicatorItemSpec[];\n\n private _indicatorComponent: IndicatorComponents;\n private _cacheAttrs: IndicatorAttributes;\n\n static getSpecInfo(chartSpec: any): Maybe<IModelSpecInfo[]> {\n return getSpecInfo<IIndicatorSpec>(chartSpec, this.specKey, this.type, (s: IIndicatorSpec) => {\n return s && s.visible !== false;\n });\n }\n\n created() {\n super.created();\n // data\n this.initData();\n // event\n this.initEvent();\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this._gap = this._spec.gap || 0;\n this._title = this._spec.title;\n this._content = array(this._spec.content);\n this._regions = this._option.getRegionsInUserIdOrIndex(array(this._spec.regionId), array(this._spec.regionIndex));\n }\n\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n const specChanged = !isEqual(prevSpec, spec);\n\n if (specChanged && !result.reMake && !result.reCompile) {\n result.change = true;\n result.reRender = true;\n result.effects = {\n ...result.effects,\n component: true,\n layout: true,\n render: true\n };\n }\n\n return result;\n }\n\n // event\n protected initEvent() {\n if (this._option.disableTriggerEvent) {\n return;\n }\n const trigger = this._spec.trigger;\n if (trigger === 'none') {\n return;\n }\n\n if (this._spec.trigger === 'hover') {\n this.event.on('element-highlight:start', (params: any) => {\n const g = params.graphics[0];\n\n if (this.isRelativeModel(g)) {\n this.updateDatum(getDatumOfGraphic(g) as Datum[]);\n }\n });\n this.event.on('element-highlight:reset', (params: any) => {\n if (this._activeDatum) {\n this.updateDatum(null);\n }\n });\n } else {\n this.event.on('element-select:start', (params: any) => {\n const g = params.graphics[0];\n\n if (this.isRelativeModel(g)) {\n this.updateDatum(getDatumOfGraphic(g) as Datum[]);\n }\n });\n this.event.on('element-select:reset', (params: any) => {\n if (this._activeDatum) {\n this.updateDatum(null);\n }\n });\n }\n }\n\n updateDatum(datum: any) {\n this._activeDatum = datum;\n this._displayData.updateData();\n const attrs = this._getIndicatorAttrs();\n this._createOrUpdateIndicatorComponent(attrs);\n }\n\n // data\n private initData() {\n registerDataSetInstanceTransform(this._option.dataSet, 'indicatorFilter', indicatorMapper);\n const displayData = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_data` });\n displayData.transform({\n type: 'indicatorFilter',\n options: {\n title: this._title,\n content: this._content,\n datum: () => this._activeDatum\n }\n });\n\n displayData.target.addListener('change', this.updateDatum.bind(this));\n\n this._displayData = new CompilableData(this._option, displayData);\n }\n\n updateLayoutAttribute(): void {\n const attrs = this._getIndicatorAttrs();\n this._createOrUpdateIndicatorComponent(attrs);\n\n super.updateLayoutAttribute();\n }\n\n private _getIndicatorAttrs() {\n if (this._spec.visible === false || (this._spec.fixed === false && this._activeDatum === null)) {\n return {\n visible: false\n } as IndicatorAttributes;\n }\n\n const region = this._regions[0];\n const { width, height } = region.getLayoutRect();\n const { x, y } = region.getLayoutStartPoint();\n const { content, offsetX, offsetY, limitRatio, title, ...restSpec } = this._spec;\n\n const contentComponentSpec: IIndicatorItemSpec[] = [];\n array(content).forEach((eachItem: IIndicatorItemSpec) => {\n const contentSpec = mergeSpec({}, this._theme.content, eachItem);\n contentComponentSpec.push({\n visible: contentSpec.visible !== false && (contentSpec.field ? this._activeDatum !== null : true),\n space: contentSpec.space || this._gap,\n autoLimit: contentSpec.autoLimit,\n autoFit: contentSpec.autoFit,\n fitPercent: contentSpec.fitPercent,\n fitStrategy: contentSpec.fitStrategy,\n style: {\n ...transformIndicatorStyle(pickWithout(contentSpec.style, ['text']), this._activeDatum),\n text: this._createText(contentSpec.field, contentSpec.style.text)\n }\n });\n });\n\n return {\n visible: true,\n size: {\n width: width,\n height: height\n },\n zIndex: this.layoutZIndex,\n x: x,\n y: y,\n dx: offsetX ? getActualNumValue(offsetX, this._computeLayoutRadius()) : 0,\n dy: offsetY ? getActualNumValue(offsetY, this._computeLayoutRadius()) : 0,\n limitRatio: limitRatio || Infinity,\n title: {\n visible: title.visible !== false && (!isValid(title.field) || this._activeDatum !== null),\n space: title.space || this._gap,\n autoLimit: title.autoLimit,\n autoFit: title.autoFit,\n fitPercent: title.fitPercent,\n fitStrategy: title.fitStrategy,\n style: {\n ...transformIndicatorStyle(pickWithout(title.style, ['text']), this._activeDatum),\n text: this._createText(title.field, title.style.text as any) // FIXME: type\n }\n },\n content: contentComponentSpec,\n ...(restSpec as unknown as IndicatorAttributes)\n } as IndicatorAttributes;\n }\n\n private _createOrUpdateIndicatorComponent(attrs: IndicatorAttributes) {\n if (attrs.visible === false) {\n // 按照vrender-component 的设置,只切换visible: false,并不会更新组件,所以强制删掉节点\n if (this._indicatorComponent && this._indicatorComponent.parent) {\n this._indicatorComponent.parent.removeChild(this._indicatorComponent);\n }\n this._indicatorComponent = null;\n return;\n }\n\n if (this._indicatorComponent) {\n if (!isEqual(attrs, this._cacheAttrs)) {\n this._indicatorComponent.setAttributes(attrs);\n }\n } else {\n const container = this.getContainer();\n //FIXME:类型“IndicatorAttributes”的参数不能赋给类型“Required<IndicatorAttributes>”的参数\n const indicator = new IndicatorComponents(attrs as any);\n indicator.name = 'indicator';\n container.add(indicator as unknown as INode);\n this._indicatorComponent = indicator;\n this._indicatorComponent.on('*', (event: any, type: string) =>\n this._delegateEvent(this._indicatorComponent as unknown as IGraphic, event, type)\n );\n }\n this._cacheAttrs = attrs;\n }\n\n private _createText(\n field: string | undefined,\n text:\n | string\n | number\n | string[]\n | number[]\n | IRichTextCharacter[]\n | FunctionType<number | number[] | string | string[] | IRichTextCharacter[]>\n ) {\n if (field) {\n return this._activeDatum ? this._activeDatum[field] : '';\n }\n if (isFunction(text)) {\n return text(this._activeDatum, undefined) ?? '';\n }\n return text ?? '';\n }\n\n private _computeLayoutRadius() {\n const region = this._regions[0];\n const { width, height } = region.getLayoutRect();\n return Math.min(width / 2, height / 2);\n }\n\n private isRelativeModel(g: IMarkGraphic) {\n return this._regions.some(region => !!region.getSeriesInId(g.context.modelId));\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._indicatorComponent] as unknown as IGroup[];\n }\n\n clear(): void {\n this._cacheAttrs = null;\n super.clear();\n }\n\n getIndicatorComponent(): IndicatorComponents {\n return this._indicatorComponent;\n }\n}\n\nexport const registerIndicator = () => {\n Factory.registerComponent(Indicator.type, Indicator);\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/component/indicator/indicator.ts"],"names":[],"mappings":"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","file":"indicator.js","sourcesContent":["import { DataView } from '@visactor/vdataset';\nimport { LayoutLevel, LayoutZIndex } from '../../constant/layout';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport { BaseComponent } from '../base/base-component';\nimport type { IRegion } from '../../region/interface';\nimport type { IIndicator, IIndicatorItemSpec, IIndicatorSpec } from './interface';\nimport type { Datum, Maybe } from '../../typings';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { transformIndicatorStyle } from '../../util/style';\nimport { getActualNumValue } from '../../util/space';\nimport { isEqual, isValid, isFunction, array, pickWithout } from '@visactor/vutils';\nimport { indicatorMapper } from './util';\nimport type { IModelSpecInfo } from '../../model/interface';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { CompilableData } from '../../compile/data/compilable-data';\nimport { Indicator as IndicatorComponents } from '@visactor/vrender-components';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IndicatorAttributes } from '@visactor/vrender-components';\nimport type { IGraphic, INode, IGroup } from '@visactor/vrender-core';\nimport type { FunctionType } from '../../typings/visual';\nimport { Factory } from '../../core/factory';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IRichTextCharacter } from '@visactor/vrender-core';\nimport { getSpecInfo } from '../util';\nimport { getDatumOfGraphic } from '../../util/mark';\nimport type { IMarkGraphic } from '../../mark/interface';\nimport { indicator } from '../../theme/builtin/common/component/indicator';\n\nexport class Indicator<T extends IIndicatorSpec> extends BaseComponent<T> implements IIndicator {\n static type = ComponentTypeEnum.indicator;\n type = ComponentTypeEnum.indicator;\n name: string = ComponentTypeEnum.indicator;\n\n static readonly builtInTheme = {\n indicator\n };\n static specKey = 'indicator';\n specKey = 'indicator';\n\n layoutType: 'none' = 'none';\n layoutZIndex: number = LayoutZIndex.Indicator;\n layoutLevel: number = LayoutLevel.Indicator;\n\n private _gap: number = 0;\n\n private _activeDatum: any = null;\n private _displayData!: CompilableData;\n\n private _title: IIndicatorItemSpec;\n private _content: IIndicatorItemSpec[];\n\n private _indicatorComponent: IndicatorComponents;\n private _cacheAttrs: IndicatorAttributes;\n\n static getSpecInfo(chartSpec: any): Maybe<IModelSpecInfo[]> {\n return getSpecInfo<IIndicatorSpec>(chartSpec, this.specKey, this.type, (s: IIndicatorSpec) => {\n return s && s.visible !== false;\n });\n }\n\n created() {\n super.created();\n // data\n this.initData();\n // event\n this.initEvent();\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this._gap = this._spec.gap || 0;\n this._title = this._spec.title;\n this._content = array(this._spec.content);\n this._regions = this._option.getRegionsInUserIdOrIndex(array(this._spec.regionId), array(this._spec.regionIndex));\n }\n\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n const specChanged = !isEqual(prevSpec, spec);\n\n if (specChanged && !result.reMake && !result.reCompile) {\n result.change = true;\n result.reRender = true;\n result.effects = {\n ...result.effects,\n component: true,\n layout: true,\n render: true\n };\n }\n\n return result;\n }\n\n // event\n protected initEvent() {\n if (this._option.disableTriggerEvent) {\n return;\n }\n const trigger = this._spec.trigger;\n if (trigger === 'none') {\n return;\n }\n\n if (this._spec.trigger === 'hover') {\n this.event.on('element-highlight:start', (params: any) => {\n const g = params.graphics[0];\n\n if (this.isRelativeModel(g)) {\n this.updateDatum(getDatumOfGraphic(g) as Datum[]);\n }\n });\n this.event.on('element-highlight:reset', (params: any) => {\n if (this._activeDatum) {\n this.updateDatum(null);\n }\n });\n } else {\n this.event.on('element-select:start', (params: any) => {\n const g = params.graphics[0];\n\n if (this.isRelativeModel(g)) {\n this.updateDatum(getDatumOfGraphic(g) as Datum[]);\n }\n });\n this.event.on('element-select:reset', (params: any) => {\n if (this._activeDatum) {\n this.updateDatum(null);\n }\n });\n }\n }\n\n updateDatum(datum: any) {\n this._activeDatum = datum;\n this._displayData.updateData();\n const attrs = this._getIndicatorAttrs();\n this._createOrUpdateIndicatorComponent(attrs);\n }\n\n // data\n private initData() {\n registerDataSetInstanceTransform(this._option.dataSet, 'indicatorFilter', indicatorMapper);\n const displayData = new DataView(this._option.dataSet, { name: `${this.type}_${this.id}_data` });\n displayData.transform({\n type: 'indicatorFilter',\n options: () => ({\n title: this._title,\n content: this._content,\n datum: () => this._activeDatum\n })\n });\n\n displayData.target.addListener('change', this.updateDatum.bind(this));\n\n this._displayData = new CompilableData(this._option, displayData);\n }\n\n updateLayoutAttribute(): void {\n const attrs = this._getIndicatorAttrs();\n this._createOrUpdateIndicatorComponent(attrs);\n\n super.updateLayoutAttribute();\n }\n\n private _getIndicatorAttrs() {\n if (this._spec.visible === false || (this._spec.fixed === false && this._activeDatum === null)) {\n return {\n visible: false\n } as IndicatorAttributes;\n }\n\n const region = this._regions[0];\n const { width, height } = region.getLayoutRect();\n const { x, y } = region.getLayoutStartPoint();\n const { content, offsetX, offsetY, limitRatio, title, ...restSpec } = this._spec;\n\n const contentComponentSpec: IIndicatorItemSpec[] = [];\n array(content).forEach((eachItem: IIndicatorItemSpec) => {\n const contentSpec = mergeSpec({}, this._theme.content, eachItem);\n contentComponentSpec.push({\n visible: contentSpec.visible !== false && (contentSpec.field ? this._activeDatum !== null : true),\n space: contentSpec.space || this._gap,\n autoLimit: contentSpec.autoLimit,\n autoFit: contentSpec.autoFit,\n fitPercent: contentSpec.fitPercent,\n fitStrategy: contentSpec.fitStrategy,\n style: {\n ...transformIndicatorStyle(pickWithout(contentSpec.style, ['text']), this._activeDatum),\n text: this._createText(contentSpec.field, contentSpec.style.text)\n }\n });\n });\n\n return {\n visible: true,\n size: {\n width: width,\n height: height\n },\n zIndex: this.layoutZIndex,\n x: x,\n y: y,\n dx: offsetX ? getActualNumValue(offsetX, this._computeLayoutRadius()) : 0,\n dy: offsetY ? getActualNumValue(offsetY, this._computeLayoutRadius()) : 0,\n limitRatio: limitRatio || Infinity,\n title: {\n visible: title.visible !== false && (!isValid(title.field) || this._activeDatum !== null),\n space: title.space || this._gap,\n autoLimit: title.autoLimit,\n autoFit: title.autoFit,\n fitPercent: title.fitPercent,\n fitStrategy: title.fitStrategy,\n style: {\n ...transformIndicatorStyle(pickWithout(title.style, ['text']), this._activeDatum),\n text: this._createText(title.field, title.style.text as any) // FIXME: type\n }\n },\n content: contentComponentSpec,\n ...(restSpec as unknown as IndicatorAttributes)\n } as IndicatorAttributes;\n }\n\n private _createOrUpdateIndicatorComponent(attrs: IndicatorAttributes) {\n if (attrs.visible === false) {\n // 按照vrender-component 的设置,只切换visible: false,并不会更新组件,所以强制删掉节点\n if (this._indicatorComponent && this._indicatorComponent.parent) {\n this._indicatorComponent.parent.removeChild(this._indicatorComponent);\n }\n this._indicatorComponent = null;\n return;\n }\n\n if (this._indicatorComponent) {\n if (!isEqual(attrs, this._cacheAttrs)) {\n this._indicatorComponent.setAttributes(attrs);\n }\n } else {\n const container = this.getContainer();\n //FIXME:类型“IndicatorAttributes”的参数不能赋给类型“Required<IndicatorAttributes>”的参数\n const indicator = new IndicatorComponents(attrs as any);\n indicator.name = 'indicator';\n container.add(indicator as unknown as INode);\n this._indicatorComponent = indicator;\n this._indicatorComponent.on('*', (event: any, type: string) =>\n this._delegateEvent(this._indicatorComponent as unknown as IGraphic, event, type)\n );\n }\n this._cacheAttrs = attrs;\n }\n\n private _createText(\n field: string | undefined,\n text:\n | string\n | number\n | string[]\n | number[]\n | IRichTextCharacter[]\n | FunctionType<number | number[] | string | string[] | IRichTextCharacter[]>\n ) {\n if (field) {\n return this._activeDatum ? this._activeDatum[field] : '';\n }\n if (isFunction(text)) {\n return text(this._activeDatum, undefined) ?? '';\n }\n return text ?? '';\n }\n\n private _computeLayoutRadius() {\n const region = this._regions[0];\n const { width, height } = region.getLayoutRect();\n return Math.min(width / 2, height / 2);\n }\n\n private isRelativeModel(g: IMarkGraphic) {\n return this._regions.some(region => !!region.getSeriesInId(g.context.modelId));\n }\n\n protected _getNeedClearVRenderComponents(): IGraphic[] {\n return [this._indicatorComponent] as unknown as IGroup[];\n }\n\n clear(): void {\n this._cacheAttrs = null;\n super.clear();\n }\n\n getIndicatorComponent(): IndicatorComponents {\n return this._indicatorComponent;\n }\n}\n\nexport const registerIndicator = () => {\n Factory.registerComponent(Indicator.type, Indicator);\n};\n"]}
|
|
@@ -2,12 +2,13 @@ import type { IIndicatorItemSpec } from './interface';
|
|
|
2
2
|
export interface IIndicatorDatum {
|
|
3
3
|
type: 'title' | 'content';
|
|
4
4
|
index: number;
|
|
5
|
-
datum:
|
|
5
|
+
datum: unknown;
|
|
6
6
|
spec: IIndicatorItemSpec;
|
|
7
7
|
}
|
|
8
8
|
export interface IIndicatorMapper {
|
|
9
9
|
title: IIndicatorItemSpec;
|
|
10
10
|
content: IIndicatorItemSpec[];
|
|
11
|
-
datum: () =>
|
|
11
|
+
datum: () => unknown;
|
|
12
12
|
}
|
|
13
|
-
export
|
|
13
|
+
export type IndicatorMapperOption = IIndicatorMapper | (() => IIndicatorMapper);
|
|
14
|
+
export declare const indicatorMapper: (data: Array<unknown>, op: IndicatorMapperOption) => IIndicatorDatum[];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { array } from "@visactor/vutils";
|
|
1
|
+
import { array, isFunction } from "@visactor/vutils";
|
|
2
2
|
|
|
3
3
|
export const indicatorMapper = (data, op) => {
|
|
4
|
-
const {datum: datum, title: title, content: content} = op, mappedData = [], datumResult = datum.call(null);
|
|
4
|
+
const {datum: datum, title: title, content: content} = isFunction(op) ? op() : op, mappedData = [], datumResult = datum.call(null);
|
|
5
5
|
return title.visible && mappedData.push({
|
|
6
6
|
type: "title",
|
|
7
7
|
index: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/component/indicator/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"sources":["../src/component/indicator/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAkBrD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAoB,EAAE,EAAyB,EAAE,EAAE;IACjF,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,MAAM,UAAU,GAAsB,EAAE,CAAC;IACzC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,OAAO,EAAE;QACjB,UAAU,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,WAAW;YAClB,IAAI,EAAE,KAAK;SACO,CAAC,CAAC;KACvB;IACD,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC9B,IAAI,CAAC,CAAC,OAAO,EAAE;YACb,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,CAAC;gBACR,KAAK,EAAE,WAAW;gBAClB,IAAI,EAAE,CAAC;aACW,CAAC,CAAC;SACvB;IACH,CAAC,CAAC,CAAC;IACH,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC","file":"util.js","sourcesContent":["import { array, isFunction } from '@visactor/vutils';\nimport type { IIndicatorItemSpec } from './interface';\n\nexport interface IIndicatorDatum {\n type: 'title' | 'content';\n index: number;\n datum: unknown;\n spec: IIndicatorItemSpec;\n}\n\nexport interface IIndicatorMapper {\n title: IIndicatorItemSpec;\n content: IIndicatorItemSpec[];\n datum: () => unknown;\n}\n\nexport type IndicatorMapperOption = IIndicatorMapper | (() => IIndicatorMapper);\n\nexport const indicatorMapper = (data: Array<unknown>, op: IndicatorMapperOption) => {\n const { datum, title, content } = isFunction(op) ? op() : op;\n const mappedData: IIndicatorDatum[] = [];\n const datumResult = datum.call(null);\n if (title.visible) {\n mappedData.push({\n type: 'title',\n index: 0,\n datum: datumResult,\n spec: title\n } as IIndicatorDatum);\n }\n array(content).forEach((c, i) => {\n if (c.visible) {\n mappedData.push({\n type: 'content',\n index: i,\n datum: datumResult,\n spec: c\n } as IIndicatorDatum);\n }\n });\n return mappedData;\n};\n"]}
|
package/esm/constant/funnel.js
CHANGED
package/esm/constant/scatter.js
CHANGED
|
@@ -10,5 +10,4 @@ export const SCATTER_DEFAULT_SHAPE = "circle";
|
|
|
10
10
|
|
|
11
11
|
export const SCATTER_DEFAULT_SHAPE_SCALE_TYPE = ScaleEnum.Ordinal;
|
|
12
12
|
|
|
13
|
-
export const SCATTER_DEFAULT_RANGE_SHAPE = [ "circle", "square", "triangle", "diamond", "star" ];
|
|
14
|
-
//# sourceMappingURL=scatter.js.map
|
|
13
|
+
export const SCATTER_DEFAULT_RANGE_SHAPE = [ "circle", "square", "triangle", "diamond", "star" ];
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export const SCROLL_BAR_DEFAULT_SIZE = 12;
|
|
2
|
-
//# sourceMappingURL=scroll-bar.js.map
|
|
2
|
+
//# sourceMappingURL=scroll-bar.js.map
|
package/esm/constant/sunburst.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export const SUNBURST_AUTO_VISIBLE_DEFAULT_THRESHOLD = 10;
|
|
2
|
-
//# sourceMappingURL=sunburst.js.map
|
|
2
|
+
//# sourceMappingURL=sunburst.js.map
|
|
@@ -13,4 +13,4 @@ export const WORDCLOUD_DATA_TOTAL = `${PREFIX}_WORDCLOUD_DATA_TOTAL`;
|
|
|
13
13
|
export const WORD_CLOUD_TEXT = `${PREFIX}_WORD_CLOUD_TEXT`;
|
|
14
14
|
|
|
15
15
|
export const WORDCLOUD_SHAPE_DATA_TOTAL = `${PREFIX}_WORDCLOUD_SHAPE_DATA_TOTAL`;
|
|
16
|
-
//# sourceMappingURL=word-cloud.js.map
|
|
16
|
+
//# sourceMappingURL=word-cloud.js.map
|
package/esm/core/interface.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { };
|
|
2
|
-
//# sourceMappingURL=interface.js.map
|
|
2
|
+
//# sourceMappingURL=interface.js.map
|
package/esm/core/util.js
CHANGED
package/esm/core/vchart.js
CHANGED
|
@@ -1034,4 +1034,4 @@ export const registerVChartCore = () => {
|
|
|
1034
1034
|
Factory.registerRegion("region", Region), Factory.registerLayout("base", Layout),
|
|
1035
1035
|
registerGroupMark(), registerGesturePlugin(), registerElementHighlight(), registerElementSelect(),
|
|
1036
1036
|
registerTheme(darkTheme.name, darkTheme);
|
|
1037
|
-
//# sourceMappingURL=vchart.js.map
|
|
1037
|
+
//# sourceMappingURL=vchart.js.map
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import type { DataView } from '@visactor/vdataset';
|
|
1
2
|
export interface IBoxPlotOutlierOpt {
|
|
2
3
|
dimensionField: string[];
|
|
3
4
|
outliersField: string;
|
|
4
5
|
seriesField?: string;
|
|
5
6
|
}
|
|
6
|
-
|
|
7
|
+
type BoxPlotOutlierOption = IBoxPlotOutlierOpt | (() => IBoxPlotOutlierOpt);
|
|
8
|
+
export declare const foldOutlierData: (data: Array<DataView>, op: BoxPlotOutlierOption) => Record<string, unknown>[];
|
|
9
|
+
export {};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { isArray, isValid } from "@visactor/vutils";
|
|
1
|
+
import { isArray, isFunction, isValid } from "@visactor/vutils";
|
|
2
2
|
|
|
3
3
|
import { BOX_PLOT_OUTLIER_VALUE_FIELD } from "../../constant/box-plot";
|
|
4
4
|
|
|
5
5
|
export const foldOutlierData = (data, op) => {
|
|
6
|
-
const result = [], {outliersField: outliersField, dimensionField: dimensionField, seriesField: seriesField} =
|
|
6
|
+
const result = [], options = isFunction(op) ? op() : op, {outliersField: outliersField, dimensionField: dimensionField, seriesField: seriesField} = options;
|
|
7
7
|
return (data[0].latestData || []).forEach((d => {
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
const rawOutlierValues = d[outliersField], outlierValues = isArray(rawOutlierValues) ? rawOutlierValues : [ rawOutlierValues ];
|
|
9
|
+
result.push(...outlierValues.map((v => {
|
|
10
10
|
const resData = {
|
|
11
11
|
[BOX_PLOT_OUTLIER_VALUE_FIELD]: v
|
|
12
12
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/transforms/box-plot.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/data/transforms/box-plot.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AAevE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAqB,EAAE,EAAwB,EAAE,EAAE;IACjF,MAAM,MAAM,GAAmC,EAAE,CAAC;IAClD,MAAM,OAAO,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3C,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAC/D,MAAM,UAAU,GAAI,IAAI,CAAC,CAAC,CAAgE,CAAC,UAAU,IAAI,EAAE,CAAC;IAE5G,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACrB,MAAM,gBAAgB,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC;QAC1C,MAAM,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;QACxF,MAAM,CAAC,IAAI,CACT,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAU,EAAE,EAAE;YAClC,MAAM,OAAO,GAA4B;gBACvC,CAAC,4BAA4B,CAAC,EAAE,CAAC;aAClC,CAAC;YACF,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBAC7B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;YAEH,IAAI,OAAO,CAAC,WAAW,CAAC,EAAE;gBACxB,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;aACvC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC","file":"box-plot.js","sourcesContent":["import type { DataView } from '@visactor/vdataset';\nimport { isArray, isFunction, isValid } from '@visactor/vutils';\nimport { BOX_PLOT_OUTLIER_VALUE_FIELD } from '../../constant/box-plot';\n\nexport interface IBoxPlotOutlierOpt {\n dimensionField: string[];\n outliersField: string;\n seriesField?: string;\n}\n\ntype BoxPlotOutlierOption = IBoxPlotOutlierOpt | (() => IBoxPlotOutlierOpt);\n/**\n * 将箱型图outlier数组展平\n * @param data\n * @param options\n * @returns\n */\nexport const foldOutlierData = (data: Array<DataView>, op: BoxPlotOutlierOption) => {\n const result: Array<Record<string, unknown>> = [];\n const options = isFunction(op) ? op() : op;\n const { outliersField, dimensionField, seriesField } = options;\n const latestData = (data[0] as unknown as { latestData?: Array<Record<string, unknown>> }).latestData || [];\n\n latestData.forEach(d => {\n const rawOutlierValues = d[outliersField];\n const outlierValues = isArray(rawOutlierValues) ? rawOutlierValues : [rawOutlierValues];\n result.push(\n ...outlierValues.map((v: unknown) => {\n const resData: Record<string, unknown> = {\n [BOX_PLOT_OUTLIER_VALUE_FIELD]: v\n };\n dimensionField.forEach(field => {\n resData[field] = d[field];\n });\n\n if (isValid(seriesField)) {\n resData[seriesField] = d[seriesField];\n }\n\n return resData;\n })\n );\n });\n return result;\n};\n"]}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
1
|
+
type CorrelationCenterOptionValue<T> = T | (() => T);
|
|
2
|
+
type CorrelationCenterData = Array<{
|
|
3
|
+
latestData: Array<Record<string, unknown>>;
|
|
4
|
+
}>;
|
|
5
|
+
export interface ICorrelationCenterOpt {
|
|
6
|
+
keyword: CorrelationCenterOptionValue<string>;
|
|
7
|
+
categoryField: CorrelationCenterOptionValue<string>;
|
|
8
|
+
}
|
|
9
|
+
export declare const correlationCenter: (data: CorrelationCenterData, options: ICorrelationCenterOpt) => Record<string, unknown> | [
|
|
10
|
+
];
|
|
11
|
+
export {};
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { isArray } from "@visactor/vutils";
|
|
1
|
+
import { isArray, isFunction } from "@visactor/vutils";
|
|
2
2
|
|
|
3
3
|
import { DEFAULT_DATA_INDEX, DEFAULT_DATA_SERIES_FIELD } from "../../constant/data";
|
|
4
4
|
|
|
5
|
+
const resolveOptionValue = option => isFunction(option) ? option() : option;
|
|
6
|
+
|
|
5
7
|
export const correlationCenter = (data, options) => {
|
|
6
8
|
if (!data || !isArray(data)) return [];
|
|
7
|
-
const
|
|
9
|
+
const keyword = resolveOptionValue(options.keyword), categoryField = resolveOptionValue(options.categoryField), nodeInfo = data[0].latestData[0];
|
|
8
10
|
return {
|
|
9
11
|
[categoryField]: keyword,
|
|
10
12
|
[DEFAULT_DATA_INDEX]: null == nodeInfo ? void 0 : nodeInfo[DEFAULT_DATA_INDEX],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/transforms/correlation-center.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"sources":["../src/data/transforms/correlation-center.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAUpF,MAAM,kBAAkB,GAAG,CAAI,MAAuC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,IAA2B,EAC3B,OAA8B,EACA,EAAE;IAChC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC3B,OAAO,EAAE,CAAC;KACX;IAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,kBAAkB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAEhE,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAEvC,MAAM,UAAU,GAAG;QACjB,CAAC,aAAa,CAAC,EAAE,OAAO;QACxB,CAAC,kBAAkB,CAAC,EAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,kBAAkB,CAAC;QACpD,CAAC,yBAAyB,CAAC,EAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,yBAAyB,CAAC;KACnE,CAAC;IAEF,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC","file":"correlation-center.js","sourcesContent":["import { isArray, isFunction } from '@visactor/vutils';\nimport { DEFAULT_DATA_INDEX, DEFAULT_DATA_SERIES_FIELD } from '../../constant/data';\n\ntype CorrelationCenterOptionValue<T> = T | (() => T);\ntype CorrelationCenterData = Array<{ latestData: Array<Record<string, unknown>> }>;\n\nexport interface ICorrelationCenterOpt {\n keyword: CorrelationCenterOptionValue<string>;\n categoryField: CorrelationCenterOptionValue<string>;\n}\n\nconst resolveOptionValue = <T>(option: CorrelationCenterOptionValue<T>) => (isFunction(option) ? option() : option);\n\nexport const correlationCenter = (\n data: CorrelationCenterData,\n options: ICorrelationCenterOpt\n): Record<string, unknown> | [] => {\n if (!data || !isArray(data)) {\n return [];\n }\n\n const keyword = resolveOptionValue(options.keyword);\n const categoryField = resolveOptionValue(options.categoryField);\n\n const nodeInfo = data[0].latestData[0];\n\n const centerInfo = {\n [categoryField]: keyword,\n [DEFAULT_DATA_INDEX]: nodeInfo?.[DEFAULT_DATA_INDEX],\n [DEFAULT_DATA_SERIES_FIELD]: nodeInfo?.[DEFAULT_DATA_SERIES_FIELD]\n };\n\n return centerInfo;\n};\n"]}
|
|
@@ -1,17 +1,20 @@
|
|
|
1
|
+
type CorrelationOptionValue<T> = T | (() => T);
|
|
1
2
|
export interface ICorrelationOpt {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
view: () => {
|
|
4
|
+
x0: number;
|
|
5
|
+
x1: number;
|
|
6
|
+
y0: number;
|
|
7
|
+
y1: number;
|
|
8
|
+
};
|
|
9
|
+
field: CorrelationOptionValue<string>;
|
|
10
|
+
radiusField?: CorrelationOptionValue<string | undefined>;
|
|
11
|
+
radiusRange?: CorrelationOptionValue<[number, number] | undefined>;
|
|
12
|
+
center?: CorrelationOptionValue<[string | number, string | number] | undefined>;
|
|
13
|
+
startAngle?: CorrelationOptionValue<number | undefined>;
|
|
14
|
+
endAngle?: CorrelationOptionValue<number | undefined>;
|
|
15
|
+
innerRadius?: CorrelationOptionValue<string | number | undefined>;
|
|
16
|
+
outerRadius?: CorrelationOptionValue<string | number | undefined>;
|
|
10
17
|
}
|
|
11
|
-
export
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
size: number;
|
|
15
|
-
datum: any;
|
|
16
|
-
}
|
|
17
|
-
export declare const correlation: (data: any, options: any) => any;
|
|
18
|
+
export type CircularRelationItem = Record<string, unknown>;
|
|
19
|
+
export declare const correlation: (data: unknown, options: ICorrelationOpt) => unknown;
|
|
20
|
+
export {};
|
|
@@ -1,20 +1,22 @@
|
|
|
1
|
-
import { isNil, isNumber, degreeToRadian, isArray, field as getFieldAccessor, extent, toPercent } from "@visactor/vutils";
|
|
1
|
+
import { isNil, isNumber, degreeToRadian, isArray, isFunction, field as getFieldAccessor, extent, toPercent } from "@visactor/vutils";
|
|
2
2
|
|
|
3
3
|
import { CORRELATION_X, CORRELATION_Y, CORRELATION_SIZE } from "../../constant/correlation";
|
|
4
4
|
|
|
5
|
+
const resolveOptionValue = option => isFunction(option) ? option() : option;
|
|
6
|
+
|
|
5
7
|
export const correlation = (data, options) => {
|
|
6
|
-
var _a, _b, _c, _d, _e, _f, _g, _h
|
|
8
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
7
9
|
if (!data || !(null == options ? void 0 : options.view) || !isArray(data)) return data;
|
|
8
|
-
const viewBox = options.view();
|
|
10
|
+
const dataList = data, viewBox = options.view();
|
|
9
11
|
if (viewBox.x1 - viewBox.x0 == 0 || viewBox.y1 - viewBox.y0 == 0 || viewBox.x1 - viewBox.x0 == -1 / 0 || viewBox.x1 - viewBox.x0 == 1 / 0 || viewBox.y1 - viewBox.y0 == -1 / 0 || viewBox.y1 - viewBox.y0 == 1 / 0) return data;
|
|
10
|
-
const startAngle = degreeToRadian(null !== (_a = options.startAngle) && void 0 !== _a ? _a : -90), endAngle = degreeToRadian(null !== (_b = options.endAngle) && void 0 !== _b ? _b : 270), maxRadius = Math.max((viewBox.x1 - viewBox.x0) / 2, (viewBox.y1 - viewBox.y0) / 2), innerRadius = toPercent(null !== (_c = options.innerRadius) && void 0 !== _c ? _c : 0, maxRadius), outerRadius = toPercent(options.outerRadius, maxRadius),
|
|
12
|
+
const startAngle = degreeToRadian(null !== (_a = resolveOptionValue(options.startAngle)) && void 0 !== _a ? _a : -90), endAngle = degreeToRadian(null !== (_b = resolveOptionValue(options.endAngle)) && void 0 !== _b ? _b : 270), maxRadius = Math.max((viewBox.x1 - viewBox.x0) / 2, (viewBox.y1 - viewBox.y0) / 2), innerRadius = toPercent(null !== (_c = resolveOptionValue(options.innerRadius)) && void 0 !== _c ? _c : 0, maxRadius), outerRadius = toPercent(resolveOptionValue(options.outerRadius), maxRadius), centerOption = resolveOptionValue(options.center), center = [ isNumber(null == centerOption ? void 0 : centerOption[0]) ? centerOption[0] : viewBox.x0 + toPercent(null !== (_d = null == centerOption ? void 0 : centerOption[0]) && void 0 !== _d ? _d : "50%", viewBox.x1 - viewBox.x0), isNumber(null == centerOption ? void 0 : centerOption[1]) ? centerOption[1] : viewBox.y0 + toPercent(null !== (_e = null == centerOption ? void 0 : centerOption[1]) && void 0 !== _e ? _e : "50%", viewBox.y1 - viewBox.y0) ], fieldAccessor = getFieldAccessor(resolveOptionValue(options.field)), values = dataList.map(fieldAccessor), [min, max] = extent(values), radiusScale = min === max ? val => (innerRadius + outerRadius) / 2 : val => innerRadius + (outerRadius - innerRadius) * (val - min) / (max - min), radiusField = resolveOptionValue(options.radiusField), radiusRange = resolveOptionValue(options.radiusRange), sizeAccessor = isNil(radiusField) ? fieldAccessor : getFieldAccessor(radiusField), defaultSize = null !== (_f = null == radiusRange ? void 0 : radiusRange[1]) && void 0 !== _f ? _f : 5;
|
|
11
13
|
let sizeScale = datum => defaultSize;
|
|
12
14
|
if (sizeAccessor) {
|
|
13
|
-
const [minSize, maxSize] = sizeAccessor !== fieldAccessor ? extent(
|
|
15
|
+
const [minSize, maxSize] = sizeAccessor !== fieldAccessor ? extent(dataList.map(sizeAccessor)) : [ min, max ], minR = null !== (_g = null == radiusRange ? void 0 : radiusRange[0]) && void 0 !== _g ? _g : 5, maxR = null !== (_h = null == radiusRange ? void 0 : radiusRange[1]) && void 0 !== _h ? _h : 5;
|
|
14
16
|
minSize !== maxSize && (sizeScale = datum => minR + (maxR - minR) * (sizeAccessor(datum) - minSize) / (maxSize - minSize));
|
|
15
17
|
}
|
|
16
|
-
const minAngle = Math.min(startAngle, endAngle), maxAngle = Math.max(startAngle, endAngle), angles = getPartialAngles(minAngle, maxAngle,
|
|
17
|
-
return
|
|
18
|
+
const minAngle = Math.min(startAngle, endAngle), maxAngle = Math.max(startAngle, endAngle), angles = getPartialAngles(minAngle, maxAngle, dataList.length), res = [], searchAngle = (maxAngle - minAngle) / 60;
|
|
19
|
+
return dataList.forEach(((datum, index) => {
|
|
18
20
|
const radius = radiusScale(values[index]), size = sizeScale(datum);
|
|
19
21
|
let x, y, angle = angles[index];
|
|
20
22
|
for (let i = 0; i < 60 && (x = center[0] + radius * Math.cos(angle), y = center[1] + radius * Math.sin(angle),
|
|
@@ -41,5 +43,8 @@ const getPartialAngles = (minAngle, maxAngle, count) => {
|
|
|
41
43
|
startAngle = -1 === stepSign ? maxAngle - offsetAngle : minAngle + offsetAngle,
|
|
42
44
|
stepIndex >= 2 && (stepAngle /= 2, stepCount *= 2));
|
|
43
45
|
return res;
|
|
44
|
-
}, hasOverlap = (item, arr) => !(!arr || !arr.length) && arr.some((entry =>
|
|
46
|
+
}, hasOverlap = (item, arr) => !(!arr || !arr.length) && arr.some((entry => {
|
|
47
|
+
const x = entry.x, y = entry.y, size = entry.size;
|
|
48
|
+
return Math.pow(item.x - x, 2) + Math.pow(item.y - y, 2) < Math.pow(item.size + size, 2);
|
|
49
|
+
}));
|
|
45
50
|
//# sourceMappingURL=correlation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/transforms/correlation.ts"],"names":[],"mappings":"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","file":"correlation.js","sourcesContent":["import {\n isNil,\n isNumber,\n degreeToRadian,\n isArray,\n field as getFieldAccessor,\n extent,\n toPercent\n} from '@visactor/vutils';\nimport { CORRELATION_X, CORRELATION_Y, CORRELATION_SIZE } from '../../constant/correlation';\n\nexport interface ICorrelationOpt {\n field: string;\n radiusField?: string;\n radiusRange?: [number, number];\n center?: [string | number, string | number];\n startAngle?: number;\n endAngle?: number;\n innerRadius?: string | number;\n outerRadius?: string | number;\n}\n\nexport interface CircularRelationItem {\n x: number;\n y: number;\n size: number;\n datum: any;\n}\n\nexport const correlation = (data: any, options: any) => {\n if (!data || !options?.view || !isArray(data)) {\n return data;\n }\n\n const viewBox = options.view();\n\n if (\n viewBox.x1 - viewBox.x0 === 0 ||\n viewBox.y1 - viewBox.y0 === 0 ||\n viewBox.x1 - viewBox.x0 === -Infinity ||\n viewBox.x1 - viewBox.x0 === Infinity ||\n viewBox.y1 - viewBox.y0 === -Infinity ||\n viewBox.y1 - viewBox.y0 === Infinity\n ) {\n return data;\n }\n\n const startAngle = degreeToRadian(options.startAngle ?? -90);\n const endAngle = degreeToRadian(options.endAngle ?? 270);\n const maxRadius = Math.max((viewBox.x1 - viewBox.x0) / 2, (viewBox.y1 - viewBox.y0) / 2);\n const innerRadius = toPercent(options.innerRadius ?? 0, maxRadius);\n const outerRadius = toPercent(options.outerRadius, maxRadius);\n\n const center = [\n isNumber(options.center?.[0])\n ? options.center[0]\n : viewBox.x0 + toPercent(options.center?.[0] ?? '50%', viewBox.x1 - viewBox.x0),\n isNumber(options.center?.[1])\n ? options.center[1]\n : viewBox.y0 + toPercent(options.center?.[1] ?? '50%', viewBox.y1 - viewBox.y0)\n ] as [number, number];\n const fieldAccessor = getFieldAccessor(options.field);\n const values = data.map(fieldAccessor);\n const [min, max] = extent(values);\n const radiusScale =\n min === max\n ? (val: number) => (innerRadius + outerRadius) / 2\n : (val: number) => innerRadius + ((outerRadius - innerRadius) * (val - min)) / (max - min);\n\n const sizeAccessor = !isNil(options.radiusField) ? getFieldAccessor(options.radiusField) : fieldAccessor;\n const defaultSize = options?.radiusRange?.[1] ?? 5;\n let sizeScale = (datum: any) => defaultSize;\n\n if (sizeAccessor) {\n const [minSize, maxSize] = sizeAccessor !== fieldAccessor ? extent(data.map(sizeAccessor)) : [min, max];\n const minR = options.radiusRange?.[0] ?? 5;\n const maxR = options.radiusRange?.[1] ?? 5;\n\n if (minSize !== maxSize) {\n sizeScale = (datum: any) => minR + ((maxR - minR) * (sizeAccessor(datum) - minSize)) / (maxSize - minSize);\n }\n }\n\n const minAngle = Math.min(startAngle, endAngle);\n const maxAngle = Math.max(startAngle, endAngle);\n const angles = getPartialAngles(minAngle, maxAngle, data.length);\n\n const res: CircularRelationItem[] = [];\n const searchStep = 60;\n const searchAngle = (maxAngle - minAngle) / searchStep;\n\n data.forEach((datum, index) => {\n const radius = radiusScale(values[index] as number);\n const size = sizeScale(datum);\n let x: number;\n let y: number;\n let angle = angles[index];\n\n for (let i = 0; i < searchStep; i++) {\n x = center[0] + radius * Math.cos(angle);\n y = center[1] + radius * Math.sin(angle);\n\n if (\n hasOverlap({ x, y, size }, res) ||\n x - size < viewBox.x0 ||\n x + size > viewBox.x1 ||\n y - size < viewBox.y0 ||\n y + size > viewBox.y1\n ) {\n if (i < searchStep - 1) {\n angle += searchAngle;\n\n if (angle > maxAngle) {\n angle = minAngle;\n } else if (angle < minAngle) {\n angle = maxAngle;\n }\n }\n continue;\n } else {\n break;\n }\n }\n\n res.push({ [CORRELATION_X]: x, [CORRELATION_Y]: y, [CORRELATION_SIZE]: size, ...datum });\n });\n return res;\n};\n\nconst getPartialAngles = (minAngle: number, maxAngle: number, count: number) => {\n let offsetAngle = 0;\n let stepCount = Math.max(Math.ceil((2 * (maxAngle - minAngle)) / Math.PI), 2);\n let stepAngle = (maxAngle - minAngle) / stepCount;\n let stepIndex = 0;\n let stepSign = 1;\n let i = 0;\n let j = 0;\n const res: number[] = [];\n let startAngle = minAngle;\n\n while (i < count) {\n if (j < stepCount) {\n res.push(startAngle + (j % 2 ? Math.floor(j / 2) + Math.floor(stepCount / 2) : j / 2) * stepAngle * stepSign);\n j++;\n }\n\n i++;\n\n if (j === stepCount) {\n j = 0;\n stepIndex += 1;\n stepSign *= -1;\n\n if (offsetAngle === 0) {\n offsetAngle = stepAngle / 2;\n } else {\n offsetAngle /= 2;\n }\n startAngle = stepSign === -1 ? maxAngle - offsetAngle : minAngle + offsetAngle;\n\n if (stepIndex >= 2) {\n stepAngle /= 2;\n stepCount *= 2;\n }\n }\n }\n\n return res;\n};\n\nconst hasOverlap = (item: Omit<CircularRelationItem, 'datum'>, arr: CircularRelationItem[]) => {\n if (!arr || !arr.length) {\n return false;\n }\n\n return arr.some(entry => {\n return Math.pow(item.x - entry.x, 2) + Math.pow(item.y - entry.y, 2) < Math.pow(item.size + entry.size, 2);\n });\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/data/transforms/correlation.ts"],"names":[],"mappings":"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","file":"correlation.js","sourcesContent":["import {\n isNil,\n isNumber,\n degreeToRadian,\n isArray,\n isFunction,\n field as getFieldAccessor,\n extent,\n toPercent\n} from '@visactor/vutils';\nimport { CORRELATION_X, CORRELATION_Y, CORRELATION_SIZE } from '../../constant/correlation';\n\ntype CorrelationOptionValue<T> = T | (() => T);\ntype CorrelationDatum = Record<string, unknown>;\n\nexport interface ICorrelationOpt {\n view: () => { x0: number; x1: number; y0: number; y1: number };\n field: CorrelationOptionValue<string>;\n radiusField?: CorrelationOptionValue<string | undefined>;\n radiusRange?: CorrelationOptionValue<[number, number] | undefined>;\n center?: CorrelationOptionValue<[string | number, string | number] | undefined>;\n startAngle?: CorrelationOptionValue<number | undefined>;\n endAngle?: CorrelationOptionValue<number | undefined>;\n innerRadius?: CorrelationOptionValue<string | number | undefined>;\n outerRadius?: CorrelationOptionValue<string | number | undefined>;\n}\n\ninterface CorrelationLayoutItem {\n x: number;\n y: number;\n size: number;\n}\n\nexport type CircularRelationItem = Record<string, unknown>;\n\nconst resolveOptionValue = <T>(option: CorrelationOptionValue<T>) => (isFunction(option) ? option() : option);\n\nexport const correlation = (data: unknown, options: ICorrelationOpt) => {\n if (!data || !options?.view || !isArray(data)) {\n return data;\n }\n const dataList = data as CorrelationDatum[];\n\n const viewBox = options.view();\n\n if (\n viewBox.x1 - viewBox.x0 === 0 ||\n viewBox.y1 - viewBox.y0 === 0 ||\n viewBox.x1 - viewBox.x0 === -Infinity ||\n viewBox.x1 - viewBox.x0 === Infinity ||\n viewBox.y1 - viewBox.y0 === -Infinity ||\n viewBox.y1 - viewBox.y0 === Infinity\n ) {\n return data;\n }\n\n const startAngle = degreeToRadian(resolveOptionValue(options.startAngle) ?? -90);\n const endAngle = degreeToRadian(resolveOptionValue(options.endAngle) ?? 270);\n const maxRadius = Math.max((viewBox.x1 - viewBox.x0) / 2, (viewBox.y1 - viewBox.y0) / 2);\n const innerRadius = toPercent(resolveOptionValue(options.innerRadius) ?? 0, maxRadius);\n const outerRadius = toPercent(resolveOptionValue(options.outerRadius), maxRadius);\n const centerOption = resolveOptionValue(options.center);\n\n const center = [\n isNumber(centerOption?.[0])\n ? centerOption[0]\n : viewBox.x0 + toPercent(centerOption?.[0] ?? '50%', viewBox.x1 - viewBox.x0),\n isNumber(centerOption?.[1])\n ? centerOption[1]\n : viewBox.y0 + toPercent(centerOption?.[1] ?? '50%', viewBox.y1 - viewBox.y0)\n ] as [number, number];\n const fieldAccessor = getFieldAccessor(resolveOptionValue(options.field));\n const values = dataList.map(fieldAccessor);\n const [min, max] = extent(values);\n const radiusScale =\n min === max\n ? (val: number) => (innerRadius + outerRadius) / 2\n : (val: number) => innerRadius + ((outerRadius - innerRadius) * (val - min)) / (max - min);\n\n const radiusField = resolveOptionValue(options.radiusField);\n const radiusRange = resolveOptionValue(options.radiusRange);\n const sizeAccessor = !isNil(radiusField) ? getFieldAccessor(radiusField) : fieldAccessor;\n const defaultSize = radiusRange?.[1] ?? 5;\n let sizeScale = (datum: CorrelationDatum) => defaultSize;\n\n if (sizeAccessor) {\n const [minSize, maxSize] = sizeAccessor !== fieldAccessor ? extent(dataList.map(sizeAccessor)) : [min, max];\n const minR = radiusRange?.[0] ?? 5;\n const maxR = radiusRange?.[1] ?? 5;\n\n if (minSize !== maxSize) {\n sizeScale = (datum: CorrelationDatum) =>\n minR + ((maxR - minR) * (sizeAccessor(datum) - minSize)) / (maxSize - minSize);\n }\n }\n\n const minAngle = Math.min(startAngle, endAngle);\n const maxAngle = Math.max(startAngle, endAngle);\n const angles = getPartialAngles(minAngle, maxAngle, dataList.length);\n\n const res: CircularRelationItem[] = [];\n const searchStep = 60;\n const searchAngle = (maxAngle - minAngle) / searchStep;\n\n dataList.forEach((datum, index) => {\n const radius = radiusScale(values[index] as number);\n const size = sizeScale(datum);\n let x: number;\n let y: number;\n let angle = angles[index];\n\n for (let i = 0; i < searchStep; i++) {\n x = center[0] + radius * Math.cos(angle);\n y = center[1] + radius * Math.sin(angle);\n\n if (\n hasOverlap({ x, y, size }, res) ||\n x - size < viewBox.x0 ||\n x + size > viewBox.x1 ||\n y - size < viewBox.y0 ||\n y + size > viewBox.y1\n ) {\n if (i < searchStep - 1) {\n angle += searchAngle;\n\n if (angle > maxAngle) {\n angle = minAngle;\n } else if (angle < minAngle) {\n angle = maxAngle;\n }\n }\n continue;\n } else {\n break;\n }\n }\n\n res.push({ [CORRELATION_X]: x, [CORRELATION_Y]: y, [CORRELATION_SIZE]: size, ...datum });\n });\n return res;\n};\n\nconst getPartialAngles = (minAngle: number, maxAngle: number, count: number) => {\n let offsetAngle = 0;\n let stepCount = Math.max(Math.ceil((2 * (maxAngle - minAngle)) / Math.PI), 2);\n let stepAngle = (maxAngle - minAngle) / stepCount;\n let stepIndex = 0;\n let stepSign = 1;\n let i = 0;\n let j = 0;\n const res: number[] = [];\n let startAngle = minAngle;\n\n while (i < count) {\n if (j < stepCount) {\n res.push(startAngle + (j % 2 ? Math.floor(j / 2) + Math.floor(stepCount / 2) : j / 2) * stepAngle * stepSign);\n j++;\n }\n\n i++;\n\n if (j === stepCount) {\n j = 0;\n stepIndex += 1;\n stepSign *= -1;\n\n if (offsetAngle === 0) {\n offsetAngle = stepAngle / 2;\n } else {\n offsetAngle /= 2;\n }\n startAngle = stepSign === -1 ? maxAngle - offsetAngle : minAngle + offsetAngle;\n\n if (stepIndex >= 2) {\n stepAngle /= 2;\n stepCount *= 2;\n }\n }\n }\n\n return res;\n};\n\nconst hasOverlap = (item: CorrelationLayoutItem, arr: CircularRelationItem[]) => {\n if (!arr || !arr.length) {\n return false;\n }\n\n return arr.some(entry => {\n const x = entry.x as number;\n const y = entry.y as number;\n const size = entry.size as number;\n return Math.pow(item.x - x, 2) + Math.pow(item.y - y, 2) < Math.pow(item.size + size, 2);\n });\n};\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { DataView } from '@visactor/vdataset';
|
|
2
|
+
type FunnelOptionValue<T> = T | (() => T);
|
|
2
3
|
export interface IFunnelOpt {
|
|
3
|
-
valueField: string
|
|
4
|
+
valueField: FunnelOptionValue<string>;
|
|
4
5
|
asTransformRatio: string;
|
|
5
6
|
asReachRatio: string;
|
|
6
7
|
asHeightRatio: string;
|
|
@@ -10,12 +11,12 @@ export interface IFunnelOpt {
|
|
|
10
11
|
asCurrentValue: string;
|
|
11
12
|
asLastValue: string;
|
|
12
13
|
asNextValue: string;
|
|
13
|
-
isCone?: boolean
|
|
14
|
-
heightVisual?: boolean
|
|
15
|
-
range?: {
|
|
16
|
-
min
|
|
17
|
-
max
|
|
18
|
-
}
|
|
14
|
+
isCone?: FunnelOptionValue<boolean | undefined>;
|
|
15
|
+
heightVisual?: FunnelOptionValue<boolean | undefined>;
|
|
16
|
+
range?: FunnelOptionValue<{
|
|
17
|
+
min?: number;
|
|
18
|
+
max?: number;
|
|
19
|
+
} | undefined>;
|
|
19
20
|
}
|
|
20
21
|
export declare const funnel: (originData: Array<DataView>, op: IFunnelOpt) => {
|
|
21
22
|
dataSet: import("@visactor/vdataset").DataSet;
|
|
@@ -43,4 +44,5 @@ export declare const funnel: (originData: Array<DataView>, op: IFunnelOpt) => {
|
|
|
43
44
|
export interface IFunnelTransformOpt {
|
|
44
45
|
asIsTransformLevel: string;
|
|
45
46
|
}
|
|
46
|
-
export declare const funnelTransform: (originData: Array<DataView>, op: IFunnelTransformOpt) =>
|
|
47
|
+
export declare const funnelTransform: (originData: Array<DataView>, op: IFunnelTransformOpt) => Record<string, unknown>[];
|
|
48
|
+
export {};
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { isValidNumber } from "@visactor/vutils";
|
|
1
|
+
import { isFunction, isValidNumber } from "@visactor/vutils";
|
|
2
|
+
|
|
3
|
+
const resolveOptionValue = option => isFunction(option) ? option() : option;
|
|
2
4
|
|
|
3
5
|
export const funnel = (originData, op) => {
|
|
4
|
-
var _a, _b;
|
|
6
|
+
var _a, _b, _c, _d;
|
|
5
7
|
const data = originData.map((datum => Object.assign({}, datum)));
|
|
6
8
|
if (!data || 0 === data.length) return data;
|
|
7
|
-
const {
|
|
9
|
+
const {asTransformRatio: asTransformRatio, asReachRatio: asReachRatio, asHeightRatio: asHeightRatio, asValueRatio: asValueRatio, asNextValueRatio: asNextValueRatio, asLastValueRatio: asLastValueRatio, asLastValue: asLastValue, asCurrentValue: asCurrentValue, asNextValue: asNextValue} = op, valueField = resolveOptionValue(op.valueField), heightVisual = null !== (_a = resolveOptionValue(op.heightVisual)) && void 0 !== _a && _a, isCone = null === (_b = resolveOptionValue(op.isCone)) || void 0 === _b || _b, range = resolveOptionValue(op.range), max = data.reduce(((m, d) => Math.max(m, Number.parseFloat(d[valueField]) || -1 / 0)), -1 / 0), min = data.reduce(((m, d) => Math.min(m, Number.parseFloat(d[valueField]) || 1 / 0)), 1 / 0), rangeArr = [ null !== (_c = null == range ? void 0 : range.min) && void 0 !== _c ? _c : min, null !== (_d = null == range ? void 0 : range.max) && void 0 !== _d ? _d : max ];
|
|
8
10
|
return data.forEach(((d, i) => {
|
|
9
11
|
var _a, _b;
|
|
10
12
|
const currentValue = Number.parseFloat(d[valueField]), lastValue = Number.parseFloat(null === (_a = data[i - 1]) || void 0 === _a ? void 0 : _a[valueField]), nextValue = Number.parseFloat(null === (_b = data[i + 1]) || void 0 === _b ? void 0 : _b[valueField]), transformRatio = isValidNumber(nextValue * currentValue) && 0 !== currentValue ? nextValue / currentValue : 0, reachRatio = isValidNumber(currentValue * lastValue) && 0 !== lastValue ? currentValue / lastValue : 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/transforms/funnel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"sources":["../src/data/transforms/funnel.ts"],"names":[],"mappings":"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","file":"funnel.js","sourcesContent":["import type { DataView } from '@visactor/vdataset';\nimport { isFunction, isValidNumber } from '@visactor/vutils';\n\ntype FunnelOptionValue<T> = T | (() => T);\n\nexport interface IFunnelOpt {\n valueField: FunnelOptionValue<string>;\n /** 转化率(当前层到下一层的比例) **/\n asTransformRatio: string;\n /** 到达率 (上一层到当前层的比例)*/\n asReachRatio: string;\n /** 高度轴占总量的比例 **/\n asHeightRatio: string;\n /** 当前值大小占比 */\n asValueRatio: string;\n /** 上一层值大小占比 */\n asLastValueRatio: string;\n /** 下一层值大小占比 */\n asNextValueRatio: string;\n /** 当前层的值 */\n asCurrentValue: string;\n /** 上一层的值 **/\n asLastValue: string;\n /** 下一层的值 **/\n asNextValue: string;\n\n /** 最底层漏斗是否为锥形 */\n isCone?: FunnelOptionValue<boolean | undefined>;\n /** 高度是否进行数据映射 **/\n heightVisual?: FunnelOptionValue<boolean | undefined>;\n\n /** 数值范围 */\n range?: FunnelOptionValue<{ min?: number; max?: number } | undefined>;\n}\n\nconst resolveOptionValue = <T>(option: FunnelOptionValue<T>) => (isFunction(option) ? option() : option);\n\nexport const funnel = (originData: Array<DataView>, op: IFunnelOpt) => {\n const data = originData.map(datum => ({ ...datum }));\n if (!data || data.length === 0) {\n return data;\n }\n const {\n asTransformRatio,\n asReachRatio,\n asHeightRatio,\n asValueRatio,\n asNextValueRatio,\n asLastValueRatio,\n asLastValue,\n asCurrentValue,\n asNextValue,\n } = op;\n const valueField = resolveOptionValue(op.valueField);\n const heightVisual = resolveOptionValue(op.heightVisual) ?? false;\n const isCone = resolveOptionValue(op.isCone) ?? true;\n const range = resolveOptionValue(op.range);\n\n const max = data.reduce((m, d) => Math.max(m, Number.parseFloat(d[valueField]) || -Infinity), -Infinity);\n const min = data.reduce((m, d) => Math.min(m, Number.parseFloat(d[valueField]) || Infinity), Infinity);\n const rangeArr = [range?.min ?? min, range?.max ?? max];\n\n data.forEach((d, i) => {\n const currentValue: number = Number.parseFloat(d[valueField]);\n const lastValue: number = Number.parseFloat(data[i - 1]?.[valueField]);\n const nextValue: number = Number.parseFloat(data[i + 1]?.[valueField]);\n\n const transformRatio =\n !isValidNumber(nextValue * currentValue) || currentValue === 0 ? 0 : nextValue / currentValue;\n const reachRatio = !isValidNumber(currentValue * lastValue) || lastValue === 0 ? 0 : currentValue / lastValue;\n\n asLastValue && (d[asLastValue] = lastValue);\n asNextValue && (d[asNextValue] = nextValue);\n asTransformRatio && (d[asTransformRatio] = transformRatio);\n asReachRatio && (d[asReachRatio] = i === 0 ? 1 : reachRatio);\n asHeightRatio && (d[asHeightRatio] = heightVisual === true ? transformRatio : 1 / data.length);\n asValueRatio && (d[asValueRatio] = currentValue / rangeArr[1]);\n asNextValueRatio &&\n (d[asNextValueRatio] = i === data.length - 1 ? (isCone ? 0 : d[asValueRatio]) : nextValue / rangeArr[1]);\n asLastValueRatio && (d[asLastValueRatio] = i === 0 ? 1 : lastValue / rangeArr[1]);\n asCurrentValue && (d[asCurrentValue] = currentValue);\n });\n\n return data;\n};\n\nexport interface IFunnelTransformOpt {\n asIsTransformLevel: string;\n}\n\nexport const funnelTransform = (originData: Array<DataView>, op: IFunnelTransformOpt) => {\n const data: Array<Record<string, unknown>> | undefined = originData[0]?.latestData?.map(\n (datum: Record<string, unknown>) => ({ ...datum })\n );\n if (!data || data.length === 0) {\n return data;\n }\n data.shift();\n data.forEach(d => {\n d[op.asIsTransformLevel] = true;\n });\n return data;\n};\n"]}
|