@visactor/vchart 1.10.6-alpha.0 → 1.10.6-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/es5/index.js +1 -1
- package/build/index.js +44 -24
- package/build/index.min.js +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/cjs/chart/interface/chart.d.ts +1 -0
- package/cjs/chart/interface/chart.js.map +1 -1
- package/cjs/chart/stack.js +1 -2
- package/cjs/compile/data/compilable-data.js +3 -1
- package/cjs/compile/data/compilable-data.js.map +1 -1
- package/cjs/compile/grammar-item.js +2 -1
- package/cjs/component/common/trigger/mobile.js +1 -2
- package/cjs/component/common/trigger/mobile.js.map +1 -1
- package/cjs/component/crosshair/base.js +1 -1
- package/cjs/component/crosshair/base.js.map +1 -1
- package/cjs/component/label/total-label.js +3 -0
- package/cjs/component/label/total-label.js.map +1 -1
- package/cjs/component/marker/utils.js +1 -1
- package/cjs/component/marker/utils.js.map +1 -1
- package/cjs/core/index.d.ts +1 -1
- package/cjs/core/index.js +1 -1
- package/cjs/core/index.js.map +1 -1
- package/cjs/series/base/base-series.js +3 -2
- package/cjs/series/base/base-series.js.map +1 -1
- package/cjs/series/funnel/funnel.js +8 -4
- package/cjs/series/funnel/funnel.js.map +1 -1
- package/cjs/series/interface/common.d.ts +2 -2
- package/cjs/series/interface/common.js.map +1 -1
- package/cjs/series/waterfall/waterfall.d.ts +1 -0
- package/cjs/series/waterfall/waterfall.js +12 -4
- package/cjs/series/waterfall/waterfall.js.map +1 -1
- package/cjs/series/word-cloud/base.d.ts +2 -0
- package/cjs/series/word-cloud/base.js +9 -4
- package/cjs/series/word-cloud/base.js.map +1 -1
- package/esm/chart/interface/chart.d.ts +1 -0
- package/esm/chart/interface/chart.js.map +1 -1
- package/esm/chart/stack.js +1 -2
- package/esm/compile/data/compilable-data.js +3 -1
- package/esm/compile/data/compilable-data.js.map +1 -1
- package/esm/compile/grammar-item.js +2 -1
- package/esm/component/common/trigger/mobile.js +1 -2
- package/esm/component/common/trigger/mobile.js.map +1 -1
- package/esm/component/crosshair/base.js +1 -1
- package/esm/component/crosshair/base.js.map +1 -1
- package/esm/component/label/total-label.js +3 -0
- package/esm/component/label/total-label.js.map +1 -1
- package/esm/component/marker/utils.js +1 -1
- package/esm/component/marker/utils.js.map +1 -1
- package/esm/core/index.d.ts +1 -1
- package/esm/core/index.js +1 -1
- package/esm/core/index.js.map +1 -1
- package/esm/series/base/base-series.js +3 -2
- package/esm/series/base/base-series.js.map +1 -1
- package/esm/series/funnel/funnel.js +8 -4
- package/esm/series/funnel/funnel.js.map +1 -1
- package/esm/series/interface/common.d.ts +2 -2
- package/esm/series/interface/common.js.map +1 -1
- package/esm/series/waterfall/waterfall.d.ts +1 -0
- package/esm/series/waterfall/waterfall.js +11 -4
- package/esm/series/waterfall/waterfall.js.map +1 -1
- package/esm/series/word-cloud/base.d.ts +2 -0
- package/esm/series/word-cloud/base.js +9 -4
- package/esm/series/word-cloud/base.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/series/funnel/funnel.ts"],"names":[],"mappings":"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","file":"funnel.js","sourcesContent":["/* eslint-disable no-duplicate-imports */\nimport type { IFunnelSeries, SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum } from '../interface/type';\nimport type { IOrientType, IPoint, TextAlign, TextBaseLine, Datum, StringOrNumber } from '../../typings';\nimport { SeriesTypeEnum } from '../interface/type';\nimport type { IPolygonMark } from '../../mark/polygon/polygon';\nimport { BaseSeries } from '../base/base-series';\nimport { AttributeLevel, DEFAULT_DATA_KEY, PREFIX } from '../../constant';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { DataView } from '@visactor/vdataset';\nimport type { IMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport type { IFunnelOpt } from '../../data/transforms/funnel';\nimport { funnel, funnelTransform } from '../../data/transforms/funnel';\nimport {\n FUNNEL_CURRENT_VALUE,\n FUNNEL_HEIGHT_RATIO,\n FUNNEL_LABEL_LINE_LENGTH,\n FUNNEL_LABEL_SPACE_WIDTH,\n FUNNEL_LAST_VALUE,\n FUNNEL_LAST_VALUE_RATIO,\n FUNNEL_MAX_SIZE,\n FUNNEL_MIN_SIZE,\n FUNNEL_NEXT_VALUE,\n FUNNEL_NEXT_VALUE_RATIO,\n FUNNEL_REACH_RATIO,\n FUNNEL_TRANSFORM_LEVEL,\n FUNNEL_TRANSFORM_RATIO,\n FUNNEL_VALUE_RATIO\n} from '../../constant/funnel';\nimport type { ITextMark } from '../../mark/text';\nimport { calcLayoutNumber } from '../../util/space';\nimport { field } from '../../util/object';\nimport type { FunnelAppearPreset, IFunnelSeriesSpec } from './interface';\nimport type { IRuleMark } from '../../mark/rule';\nimport { FunnelSeriesTooltipHelper } from './tooltip-helper';\nimport { isFunction, isValid, isNumber, isBoolean } from '@visactor/vutils';\nimport {\n FadeInOutAnimation,\n registerCartesianGroupClipAnimation,\n registerFadeInOutAnimation\n} from '../../animation/config';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport { SeriesData } from '../base/series-data';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { registerPolygonMark } from '../../mark/polygon/polygon';\nimport { registerTextMark } from '../../mark/text';\nimport { registerRuleMark } from '../../mark/rule';\nimport { funnelSeriesMark } from './constant';\nimport type { ILabelMark } from '../../mark/label';\nimport type { LabelItem } from '@visactor/vrender-components';\nimport { Factory } from '../../core/factory';\nimport { FunnelSeriesSpecTransformer } from './funnel-transformer';\n\nexport class FunnelSeries<T extends IFunnelSeriesSpec = IFunnelSeriesSpec>\n extends BaseSeries<T>\n implements IFunnelSeries\n{\n static readonly type: string = SeriesTypeEnum.funnel;\n type = SeriesTypeEnum.funnel;\n protected _funnelMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.funnel;\n protected _funnelMarkType: MarkTypeEnum = MarkTypeEnum.polygon;\n protected _transformMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.transform;\n protected _transformMarkType: MarkTypeEnum = MarkTypeEnum.polygon;\n\n static readonly mark: SeriesMarkMap = funnelSeriesMark;\n static readonly transformerConstructor = FunnelSeriesSpecTransformer as any;\n readonly transformerConstructor = FunnelSeriesSpecTransformer;\n\n protected _categoryField!: string;\n getCategoryField() {\n return this._categoryField;\n }\n setCategoryField(f: string): string {\n this._categoryField = f;\n return this._categoryField;\n }\n\n protected _valueField!: string;\n getValueField() {\n return this._valueField;\n }\n setValueField(f: string): string {\n this._valueField = f;\n return this._valueField;\n }\n\n protected _viewDataTransform!: SeriesData;\n\n protected _funnelAlign: 'left' | 'center' | 'right' | 'top' | 'bottom';\n protected _funnelOrient: IOrientType;\n protected _shape: 'rect' | 'trapezoid';\n\n protected _funnelMark: IPolygonMark | null = null;\n protected _funnelTransformMark: IPolygonMark | null = null;\n protected _labelMark: ILabelMark | null = null;\n protected _transformLabelMark: ILabelMark | null = null;\n protected _funnelOuterLabelMark: { label?: ITextMark; line?: IRuleMark } = {};\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n\n this.setCategoryField(this._spec.categoryField);\n this.setValueField(this._spec.valueField);\n\n this._funnelOrient = this._spec.funnelOrient ?? 'top';\n this._shape = this._spec.shape ?? 'trapezoid';\n\n if (this._isHorizontal()) {\n this._funnelAlign = ['top', 'bottom'].includes(this._spec.funnelAlign) ? this._spec.funnelAlign : 'center';\n } else {\n this._funnelAlign = ['left', 'right'].includes(this._spec.funnelAlign) ? this._spec.funnelAlign : 'center';\n }\n\n if (this._spec.categoryField) {\n this.setSeriesField(this._spec.categoryField);\n }\n }\n\n initData() {\n super.initData();\n if (!this._data) {\n return;\n }\n\n registerDataSetInstanceTransform(this._dataSet, 'funnel', funnel);\n registerDataSetInstanceTransform(this._dataSet, 'funnelTransform', funnelTransform);\n\n const viewDataTransform = new DataView(this._dataSet, { name: `${PREFIX}_series_${this.id}_viewDataTransform` });\n viewDataTransform.parse([this.getViewData()], {\n type: 'dataview'\n });\n\n this._viewDataTransform = new SeriesData(this._option, viewDataTransform);\n }\n\n getStatisticFields() {\n const fields: { key: string; operations: Array<'max' | 'min' | 'values'> }[] = [];\n fields.push({ key: this._categoryField, operations: ['values'] });\n fields.push({ key: this._valueField, operations: ['max', 'min'] });\n return fields;\n }\n\n protected _statisticViewData(): void {\n super._statisticViewData();\n this._data.getDataView().transform({\n type: 'funnel',\n options: {\n valueField: this.getValueField(),\n isCone: this._spec.isCone,\n // heightVisual: true,\n asCurrentValue: FUNNEL_CURRENT_VALUE,\n asTransformRatio: FUNNEL_TRANSFORM_RATIO,\n asReachRatio: FUNNEL_REACH_RATIO,\n asHeightRatio: FUNNEL_HEIGHT_RATIO,\n asValueRatio: FUNNEL_VALUE_RATIO,\n asNextValueRatio: FUNNEL_NEXT_VALUE_RATIO,\n asLastValueRatio: FUNNEL_LAST_VALUE_RATIO,\n asLastValue: FUNNEL_LAST_VALUE,\n asNextValue: FUNNEL_NEXT_VALUE,\n range: {\n min: this._spec.range?.min ?? this.getViewDataStatistics().latestData?.[this.getValueField()]?.min,\n max: this._spec.range?.max ?? this.getViewDataStatistics().latestData?.[this.getValueField()]?.max\n }\n } as IFunnelOpt\n });\n\n this._viewDataTransform.getDataView()?.transform({\n type: 'funnelTransform',\n options: { asIsTransformLevel: FUNNEL_TRANSFORM_LEVEL }\n });\n }\n\n initMark() {\n this._funnelMark = this._createMark(\n {\n ...FunnelSeries.mark.funnel,\n name: this._funnelMarkName,\n type: this._funnelMarkType\n },\n {\n themeSpec: this._theme?.funnel,\n morph: shouldMarkDoMorph(this._spec, this._funnelMarkName),\n defaultMorphElementKey: this._seriesField,\n groupKey: this._seriesField,\n isSeriesMark: true,\n customShape: this._spec.funnel?.customShape,\n stateSort: this._spec.funnel?.stateSort\n }\n ) as IPolygonMark;\n\n if (this._spec.isTransform) {\n this._funnelTransformMark = this._createMark(\n {\n ...FunnelSeries.mark.transform,\n name: this._transformMarkName,\n type: this._transformMarkType\n },\n {\n themeSpec: this._theme?.transform,\n skipBeforeLayouted: false,\n dataView: this._viewDataTransform.getDataView(),\n dataProductId: this._viewDataTransform.getProductId(),\n customShape: this._spec.transform?.customShape,\n stateSort: this._spec.transform?.stateSort\n }\n );\n }\n\n if (this._spec?.outerLabel?.visible) {\n const { line } = this._spec.outerLabel ?? {};\n const { line: lineTheme } = this._theme?.outerLabel ?? {};\n\n this._funnelOuterLabelMark.label = this._createMark(FunnelSeries.mark.outerLabel, {\n themeSpec: this._theme?.outerLabel,\n markSpec: this._spec.outerLabel,\n skipBeforeLayouted: true\n }) as ITextMark;\n\n this._funnelOuterLabelMark.line = this._createMark(FunnelSeries.mark.outerLabelLine, {\n themeSpec: lineTheme,\n markSpec: line,\n depend: [this._funnelOuterLabelMark.label]\n }) as IRuleMark;\n }\n }\n\n protected initTooltip() {\n this._tooltipHelper = new FunnelSeriesTooltipHelper(this);\n this._funnelMark && this._tooltipHelper.activeTriggerSet.mark.add(this._funnelMark);\n this._funnelTransformMark && this._tooltipHelper.activeTriggerSet.mark.add(this._funnelTransformMark);\n }\n\n getDimensionField(): string[] {\n return this._seriesField ? [this._seriesField] : [];\n }\n getMeasureField(): string[] {\n return [this._valueField];\n }\n\n getGroupFields(): string[] {\n return null;\n }\n\n initMarkStyle() {\n const funnelMark = this._funnelMark;\n if (funnelMark) {\n this.setMarkStyle(\n funnelMark,\n {\n points: (datum: Datum) => this.getPoints(datum),\n visible: (datum: Datum) => isValid(datum[this._valueField]),\n fill: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n const funnelTransformMark = this._funnelTransformMark;\n if (funnelTransformMark) {\n this.setMarkStyle(\n funnelTransformMark,\n { points: (datum: Datum) => this.getPoints(datum) },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n const outerLabelMark = this._funnelOuterLabelMark.label;\n if (outerLabelMark) {\n this.setMarkStyle(\n outerLabelMark,\n {\n text: (datum: Datum) => {\n const text = `${datum[this.getCategoryField()]}`;\n if (isFunction(this._spec.outerLabel.formatMethod)) {\n return this._spec.outerLabel.formatMethod(text, datum) as unknown as any;\n }\n return text;\n },\n x: (datum: Datum) => this._computeOuterLabelPosition(datum).x,\n y: (datum: Datum) => this._computeOuterLabelPosition(datum).y,\n textAlign: (datum: Datum) => this._computeOuterLabelPosition(datum).align,\n textBaseline: (datum: Datum) => this._computeOuterLabelPosition(datum).textBaseline,\n maxLineWidth: (datum: Datum) => this._computeOuterLabelLimit(datum)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n const outerLabelLineMark = this._funnelOuterLabelMark.line;\n if (outerLabelLineMark && outerLabelMark) {\n this.setMarkStyle(\n outerLabelLineMark,\n {\n x: (datum: Datum) => this._computeOuterLabelLinePosition(datum).x1,\n y: (datum: Datum) => this._computeOuterLabelLinePosition(datum).y1,\n x1: (datum: Datum) => this._computeOuterLabelLinePosition(datum).x2,\n y1: (datum: Datum) => this._computeOuterLabelLinePosition(datum).y2\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initLabelMarkStyle(labelMark?: ILabelMark) {\n if (!labelMark) {\n return;\n }\n\n const target = labelMark.getTarget();\n const component = labelMark.getComponent();\n\n if (target === this._funnelMark) {\n this._labelMark = labelMark;\n this.setMarkStyle(\n labelMark,\n {\n text: (datum: Datum) => `${datum[this.getCategoryField()]} ${datum[this.getValueField()]}`,\n x: (datum: Datum) => this._computeLabelPosition(datum).x,\n y: (datum: Datum) => this._computeLabelPosition(datum).y,\n maxLineWidth: (datum: Datum) => this._computeLabelLimit(datum, this._spec.label),\n stroke: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n if (this._funnelOuterLabelMark?.label) {\n this._funnelOuterLabelMark.label.setDepend(component);\n }\n\n if (this._funnelOuterLabelMark?.line) {\n this._funnelOuterLabelMark.line.setDepend(...this._funnelOuterLabelMark.line.getDepend());\n }\n } else if (this._funnelTransformMark && target === this._funnelTransformMark) {\n this._transformLabelMark = labelMark;\n this.setMarkStyle(\n labelMark,\n {\n text: (datum: Datum) => {\n const ratio = field(FUNNEL_REACH_RATIO).bind(this)(datum) as number;\n return `${(ratio * 100).toFixed(1)}%`;\n },\n x: (datum: Datum) => this._computeLabelPosition(datum).x,\n y: (datum: Datum) => this._computeLabelPosition(datum).y,\n maxLineWidth: (datum: Datum) => this._computeLabelLimit(datum, this._spec.transformLabel)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initAnimation() {\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec<FunnelAppearPreset>)?.preset ?? 'clipIn';\n if (appearPreset === 'clipIn') {\n if (this._rootMark) {\n this._rootMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('cartesianGroupClip')?.(\n {\n direction: () => (this._isHorizontal() ? 'x' : 'y'),\n width: () => {\n const rootMark = this.getRootMark().getProduct();\n if (rootMark) {\n const { x1, x2 } = rootMark.getBounds();\n return Math.max(x1, x2); // rootMark.x === 0, so need to find largest bound x instead of bounds width\n }\n return this.getLayoutRect().width;\n },\n height: () => {\n const rootMark = this.getRootMark().getProduct();\n if (rootMark) {\n const { y1, y2 } = rootMark.getBounds();\n return Math.max(y1, y2);\n }\n return this.getLayoutRect().height;\n },\n orient: () => (this._isReverse() ? 'negative' : 'positive')\n },\n appearPreset\n ),\n userAnimationConfig(SeriesMarkNameEnum.group, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n [this._funnelOuterLabelMark?.label].forEach(m => {\n if (m) {\n m.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')(),\n userAnimationConfig(m.name, this._spec, this._markAttributeContext)\n )\n );\n }\n });\n\n [this._funnelMark, this._funnelTransformMark].forEach(m => {\n if (m) {\n m.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('funnel')({}, appearPreset),\n userAnimationConfig(m.name, this._spec, this._markAttributeContext)\n )\n );\n }\n });\n\n if (this._funnelOuterLabelMark?.line) {\n this._funnelOuterLabelMark.line.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.outerLabelLine, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n // hack group\n initGroups() {\n // do nothing\n }\n\n // handle stack\n getStackGroupFields(): string[] {\n return [];\n }\n\n getStackValueField(): string {\n // hack\n return null;\n }\n\n /** event */\n protected initEvent() {\n super.initEvent();\n // 同步更新转化层数据\n this._viewDataTransform.getDataView()?.target.addListener('change', (d: DataView) => {\n this._viewDataTransform.updateData();\n });\n }\n\n /**\n *\n * P0 ----------- P1 P2 ------ P3\n * \\ / / \\\n * P3 ------ P2 P1 ---------- P0\n *\n * P1 P0\n * |\\ P2 P3 /|\n * | | | |\n * |/ P3 P2 \\|\n * P0 P1\n */\n getPoints(datum: Datum) {\n // 对特殊数据层不进行绘制\n const isTransformLevel = this.isTransformLevel(datum);\n\n const heightHalf = this._getMainAxisLength(isTransformLevel) / 2;\n let upperLeft;\n let lowerLeft;\n if (isTransformLevel) {\n upperLeft =\n this._shape === 'rect'\n ? this._getSecondaryAxisLength(datum[FUNNEL_LAST_VALUE_RATIO]) / 2\n : this._getSecondaryAxisLength(datum[FUNNEL_VALUE_RATIO]) / 2;\n lowerLeft = this._getSecondaryAxisLength(datum[FUNNEL_VALUE_RATIO]) / 2;\n } else {\n upperLeft = this._getSecondaryAxisLength(datum[FUNNEL_VALUE_RATIO]) / 2;\n lowerLeft = this._shape === 'rect' ? upperLeft : this._getSecondaryAxisLength(datum[FUNNEL_NEXT_VALUE_RATIO]) / 2;\n }\n\n const { x, y } = this._getPositionByData(datum);\n\n const points = this._getPolygonPoints([x, y], upperLeft, lowerLeft, upperLeft, lowerLeft, heightHalf);\n\n if (this._funnelAlign !== 'center') {\n this._adjustPoints(points);\n }\n return points;\n }\n\n isTransformLevel(datum: Datum) {\n return !!datum?.[FUNNEL_TRANSFORM_LEVEL];\n }\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n this._markAttributeContext.valueToPosition = this.valueToPosition.bind(this);\n this._markAttributeContext.getPoints = this.getPoints.bind(this);\n this._markAttributeContext.isTransformLevel = this.isTransformLevel.bind(this);\n }\n\n valueToPosition(category: StringOrNumber) {\n const innerDatum = this.getViewData()?.latestData?.find?.((d: Datum) => d[this._categoryField] === category);\n if (!isValid(innerDatum)) {\n return null;\n }\n return this._getPolygonCenter(this.getPoints(innerDatum));\n }\n\n dataToPosition(datum: any, checkInViewData?: boolean) {\n if (checkInViewData && !this.isDatumInViewData(datum)) {\n return null;\n }\n return this.valueToPosition(datum[this._categoryField]);\n }\n\n dataToPositionX(datum: any) {\n return this.dataToPosition(datum)?.x;\n }\n\n dataToPositionY(datum: any) {\n return this.dataToPosition(datum)?.y;\n }\n\n dataToPositionZ(datum: any) {\n return 0;\n }\n\n private _getMainAxisLength(isTransform = false) {\n const funnelCount = this.getViewData().latestData.length;\n const viewHeight = this._isHorizontal() ? this.getLayoutRect().width : this.getLayoutRect().height;\n\n const hasTransform = !!this._spec.isTransform;\n const gap = hasTransform ? 0 : this._spec.gap ?? 0;\n const transformCount = hasTransform ? Math.max(0, funnelCount - 1) : 0;\n const heightRatio = this._spec.heightRatio || 0.5;\n const funnelHeight =\n (viewHeight - gap * Math.max(0, funnelCount - 1)) / (funnelCount + heightRatio * transformCount);\n if (isTransform) {\n return hasTransform ? funnelHeight * heightRatio : 0;\n }\n return funnelHeight;\n }\n\n private _getSecondaryAxisLength(ratio: number) {\n const validRatio = Number.isNaN(ratio) || !Number.isFinite(ratio) ? 0 : ratio;\n const maxSize = this._computeMaxSize();\n const minSize = this._computeMinSize();\n return minSize + (maxSize - minSize) * validRatio;\n }\n\n /**\n * 根据数据计算主轴中心点\n * @param datum\n * @returns\n */\n private _getPositionByData(datum: Datum) {\n const index = this.getViewData().latestData?.findIndex(\n (d: Datum) =>\n d[this._categoryField] === datum[this._categoryField] && d[DEFAULT_DATA_KEY] === datum[DEFAULT_DATA_KEY]\n );\n if (!isValid(index) || index < 0) {\n return {};\n }\n const isTransform = this.isTransformLevel(datum);\n const isHorizontal = this._isHorizontal();\n const viewWidth = isHorizontal ? this.getLayoutRect().height : this.getLayoutRect().width;\n const viewHeight = isHorizontal ? this.getLayoutRect().width : this.getLayoutRect().height;\n const centerX = viewWidth / 2;\n\n let centerY = 0;\n const funnelHeight = this._getMainAxisLength();\n const transformHeight = this._getMainAxisLength(true);\n const offset = funnelHeight + transformHeight;\n\n centerY += index * offset;\n centerY += isTransform ? -transformHeight / 2 : funnelHeight / 2;\n if (!this._spec.isTransform && this._spec.gap) {\n centerY += this._spec.gap * index;\n }\n\n this._isReverse() && (centerY = viewHeight - centerY);\n\n return this._isHorizontal() ? { x: centerY, y: centerX } : { x: centerX, y: centerY };\n }\n\n private _getPolygonPoints(\n center: [number, number],\n upperLeft: number,\n lowerLeft: number,\n upperRight: number,\n lowerRight: number,\n heightHalf: number\n ) {\n const x = center[0];\n const y = center[1];\n switch (this._funnelOrient) {\n case 'left':\n return [\n { x: x - heightHalf, y: y + upperLeft },\n { x: x - heightHalf, y: y - upperRight },\n { x: x + heightHalf, y: y - lowerRight },\n { x: x + heightHalf, y: y + lowerLeft }\n ];\n case 'right':\n return [\n { x: x + heightHalf, y: y - upperRight },\n { x: x + heightHalf, y: y + upperRight },\n { x: x - heightHalf, y: y + lowerLeft },\n { x: x - heightHalf, y: y - lowerLeft }\n ];\n case 'bottom':\n return [\n { x: x + upperLeft, y: y + heightHalf },\n { x: x - upperRight, y: y + heightHalf },\n { x: x - lowerRight, y: y - heightHalf },\n { x: x + lowerLeft, y: y - heightHalf }\n ];\n default:\n // top\n return [\n { x: x - upperLeft, y: y - heightHalf },\n { x: x + upperRight, y: y - heightHalf },\n { x: x + lowerRight, y: y + heightHalf },\n { x: x - lowerLeft, y: y + heightHalf }\n ];\n }\n }\n\n /** 计算梯形中位线的中点\n * @param points\n * @returns\n */\n private _getPolygonCenter(points: IPoint[]) {\n if (this._isHorizontal()) {\n const p0_x = (points[0].x + points[3].x) / 2;\n const p0_y = (points[0].y + points[3].y) / 2;\n const p1_x = (points[1].x + points[2].x) / 2;\n const p1_y = (points[1].y + points[2].y) / 2;\n return {\n x: (p0_x + p1_x) / 2,\n y: (p0_y + p1_y) / 2\n };\n }\n\n // 梯形中位线坐标\n const p0_x = (points[0].x + points[3].x) / 2;\n const p0_y = (points[0].y + points[3].y) / 2;\n const p1_x = (points[1].x + points[2].x) / 2;\n const p1_y = (points[1].y + points[2].y) / 2;\n return {\n x: (p0_x + p1_x) / 2,\n y: (p0_y + p1_y) / 2\n };\n }\n\n /**\n * 调整点的偏移量,满足align效果\n * @param points\n * @returns\n */\n private _adjustPoints(points: IPoint[]) {\n let upperOffset;\n let lowerOffset;\n let dirKey;\n if (this._isHorizontal()) {\n dirKey = 'y';\n if (this._funnelOrient === 'left') {\n upperOffset = this._funnelAlign === 'bottom' ? -points[1].y : points[1].y;\n lowerOffset = this._funnelAlign === 'bottom' ? -points[2].y : points[2].y;\n } else {\n upperOffset = this._funnelAlign === 'bottom' ? -points[0].y : points[0].y;\n lowerOffset = this._funnelAlign === 'bottom' ? -points[3].y : points[3].y;\n }\n } else {\n dirKey = 'x';\n if (this._funnelOrient === 'top') {\n upperOffset = this._funnelAlign === 'left' ? points[0].x : -points[0].x;\n lowerOffset = this._funnelAlign === 'left' ? points[3].x : -points[3].x;\n } else {\n upperOffset = this._funnelAlign === 'left' ? points[1].x : -points[1].x;\n lowerOffset = this._funnelAlign === 'left' ? points[2].x : -points[2].x;\n }\n }\n (points[0][dirKey] -= upperOffset), (points[1][dirKey] -= upperOffset);\n (points[2][dirKey] -= lowerOffset), (points[3][dirKey] -= lowerOffset);\n return points;\n }\n\n private _computeLabelPosition(datum: Datum) {\n const points = this.getPoints(datum);\n return this._getPolygonCenter(points);\n }\n\n // label 相关\n private _computeLabelLimit(datum: Datum, labelSpec: IFunnelSeriesSpec['label']) {\n const limit = labelSpec?.limit;\n\n if (isNumber(limit)) {\n return limit;\n }\n\n const points = this.getPoints(datum);\n\n if (limit === 'shapeSize') {\n if (this._isHorizontal()) {\n return Math.abs(points[3].x - points[0].x);\n }\n\n return (Math.abs(points[0].x - points[1].x) + Math.abs(points[2].x - points[3].x)) / 2;\n }\n\n if (this._isHorizontal()) {\n return Math.abs(points[3].x - points[0].x);\n }\n\n // return this._computeMaxSize();\n // FIXME: 待 vrender 修复 maxLineWidth 在 bound 计算的 bug 后可以恢复注释\n return undefined;\n }\n\n private _computeOuterLabelPosition(datum: Datum) {\n let x;\n let y;\n let position: IOrientType = this._spec.outerLabel?.position;\n let textAlign: TextAlign = 'center';\n let textBaseline: TextBaseLine = 'middle';\n if (this._isHorizontal()) {\n position = ['top', 'bottom'].includes(position) ? position : this._funnelAlign === 'bottom' ? 'top' : 'bottom';\n } else {\n position = ['left', 'right'].includes(position) ? position : this._funnelAlign === 'left' ? 'right' : 'left';\n }\n\n if (this._spec.outerLabel?.alignLabel !== false) {\n ({ x, y } = this._getPositionByData(datum));\n if (position === 'left') {\n (x = 0), (textAlign = 'left');\n } else if (position === 'right') {\n (x = this.getLayoutRect().width), (textAlign = 'right');\n } else if (position === 'top') {\n (y = 0), (textBaseline = 'top');\n } else if (position === 'bottom') {\n (y = this.getLayoutRect().height), (textBaseline = 'bottom');\n }\n } else {\n const { x2, y2 } = this._computeOuterLabelLinePosition(datum);\n (x = x2), (y = y2);\n if (position === 'left') {\n (x -= FUNNEL_LABEL_SPACE_WIDTH), (textAlign = 'right');\n } else if (position === 'right') {\n (x += FUNNEL_LABEL_SPACE_WIDTH), (textAlign = 'left');\n } else if (position === 'top') {\n (y -= FUNNEL_LABEL_SPACE_WIDTH), (textBaseline = 'bottom');\n } else if (position === 'bottom') {\n (y += FUNNEL_LABEL_SPACE_WIDTH), (textBaseline = 'top');\n }\n }\n return { x, y, align: textAlign, textBaseline };\n }\n\n private _computeOuterLabelLimit(datum: Datum) {\n if (this._isHorizontal()) {\n return this._getMainAxisLength(this.isTransformLevel(datum));\n }\n\n // 垂直方向上的limit计算逻辑\n const points = this.getPoints(datum);\n const shapeMiddleWidth = (Math.abs(points[0].x - points[1].x) + Math.abs(points[2].x - points[3].x)) / 2;\n const categoryField = this.getCategoryField();\n\n const funnelLabelBounds = this._labelMark\n ?.getComponent()\n ?.getProduct()\n .getGroupGraphicItem()\n .find(({ attribute, type }: { attribute: LabelItem; type: string }) => {\n return type === 'text' && attribute.data?.[categoryField] === datum[categoryField];\n }, true)?.AABBBounds;\n\n const funnelLabelWidth = funnelLabelBounds ? funnelLabelBounds.x2 - funnelLabelBounds.x1 : 0;\n const outerLineSpace = this._funnelOuterLabelMark.line ? FUNNEL_LABEL_LINE_LENGTH : 0;\n\n let space = this.getLayoutRect().width - Math.max(shapeMiddleWidth, funnelLabelWidth);\n if (this._funnelAlign === 'center') {\n space /= 2;\n }\n return space - outerLineSpace - (this._spec.outerLabel?.spaceWidth ?? FUNNEL_LABEL_SPACE_WIDTH);\n }\n\n private _computeOuterLabelLinePosition(datum: Datum) {\n const categoryField = this.getCategoryField();\n const outerLabelMarkBounds = this._funnelOuterLabelMark?.label\n ?.getProduct()\n ?.elements?.find((el: any) => el.data[0]?.[categoryField] === datum[categoryField])\n ?.getBounds();\n\n const labelMarkBounds = this._labelMark\n ?.getComponent()\n ?.getProduct()\n .getGroupGraphicItem()\n .find(({ attribute, type }: { attribute: LabelItem; type: string }) => {\n return type === 'text' && attribute.data?.[categoryField] === datum[categoryField];\n }, true)?.AABBBounds;\n const outerLabelSpec = this._spec.outerLabel ?? {};\n let x1;\n let x2;\n let y1;\n let y2;\n if (this._isHorizontal()) {\n const spaceWidth = outerLabelSpec.spaceWidth ?? FUNNEL_LABEL_SPACE_WIDTH;\n const points = this.getPoints(datum);\n const shapeMiddleHeight = (Math.abs(points[0].y - points[1].y) + Math.abs(points[2].y - points[3].y)) / 2;\n if (this._spec.outerLabel.position === 'top' || this._funnelAlign === 'bottom') {\n y1 = this._getPolygonCenter(points).y - shapeMiddleHeight / 2 - spaceWidth;\n y2 = outerLabelSpec.alignLabel !== false ? outerLabelMarkBounds?.y2 + spaceWidth : y1 - spaceWidth;\n x1 = this._getPolygonCenter(points).x;\n y1 - y2 < FUNNEL_LABEL_LINE_LENGTH && (y2 = y1 - FUNNEL_LABEL_LINE_LENGTH);\n x2 = x1;\n } else {\n y1 = this._getPolygonCenter(points).y + shapeMiddleHeight / 2 + spaceWidth;\n y2 = outerLabelSpec.alignLabel !== false ? outerLabelMarkBounds?.y1 - spaceWidth : y1 + spaceWidth;\n x1 = this._getPolygonCenter(points).x;\n y2 - y1 < FUNNEL_LABEL_LINE_LENGTH && (y2 = y1 + FUNNEL_LABEL_LINE_LENGTH);\n x2 = x1;\n }\n return { x1, x2, y1, y2 };\n }\n const points = this.getPoints(datum);\n const shapeMiddleWidth = (Math.abs(points[0].x - points[1].x) + Math.abs(points[2].x - points[3].x)) / 2;\n const labelWidth = labelMarkBounds?.x2 - labelMarkBounds?.x1 || 0;\n\n const spaceWidth = outerLabelSpec.spaceWidth ?? FUNNEL_LABEL_SPACE_WIDTH;\n if (this._spec.outerLabel.position === 'right' || this._funnelAlign === 'left') {\n x1 = this._getPolygonCenter(points).x + Math.max(labelWidth / 2, shapeMiddleWidth / 2) + spaceWidth;\n x2 = outerLabelSpec.alignLabel !== false ? outerLabelMarkBounds?.x1 - spaceWidth : x1 + spaceWidth;\n y1 = this._getPolygonCenter(points).y;\n x2 - x1 < FUNNEL_LABEL_LINE_LENGTH && (x2 = x1 + FUNNEL_LABEL_LINE_LENGTH);\n y2 = y1;\n } else {\n x1 = this._getPolygonCenter(points).x - Math.max(labelWidth / 2, shapeMiddleWidth / 2) - spaceWidth;\n x2 = outerLabelSpec.alignLabel !== false ? outerLabelMarkBounds?.x2 + spaceWidth : x1 - spaceWidth;\n y1 = this._getPolygonCenter(points).y;\n x1 - x2 < FUNNEL_LABEL_LINE_LENGTH && (x2 = x1 - FUNNEL_LABEL_LINE_LENGTH);\n y2 = y1;\n }\n return { x1, x2, y1, y2 };\n }\n\n protected _computeMaxSize() {\n const size = this._isHorizontal() ? this.getLayoutRect().height : this.getLayoutRect().width;\n const maxSize = this._spec.maxSize ?? FUNNEL_MAX_SIZE;\n return calcLayoutNumber(maxSize, size);\n }\n\n protected _computeMinSize() {\n const size = this._isHorizontal() ? this.getLayoutRect().height : this.getLayoutRect().width;\n const minSize = this._spec.minSize ?? FUNNEL_MIN_SIZE;\n return calcLayoutNumber(minSize, size);\n }\n\n protected _isHorizontal() {\n return this._funnelOrient === 'left' || this._funnelOrient === 'right';\n }\n\n private _isReverse() {\n return this._funnelOrient === 'bottom' || this._funnelOrient === 'right';\n }\n\n getDefaultShapeType(): string {\n return 'square';\n }\n\n getActiveMarks(): IMark[] {\n return [this._funnelMark];\n }\n}\n\nexport const registerFunnelSeries = () => {\n registerPolygonMark();\n registerTextMark();\n registerRuleMark();\n Factory.registerSeries(FunnelSeries.type, FunnelSeries);\n Factory.registerAnimation('funnel', (params: any, preset: FunnelAppearPreset) => ({\n appear: preset === 'clipIn' ? undefined : { type: 'fadeIn' },\n ...FadeInOutAnimation\n }));\n registerCartesianGroupClipAnimation();\n registerFadeInOutAnimation();\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/series/funnel/funnel.ts"],"names":[],"mappings":"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","file":"funnel.js","sourcesContent":["/* eslint-disable no-duplicate-imports */\nimport type { IFunnelSeries, SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum } from '../interface/type';\nimport type { IOrientType, IPoint, TextAlign, TextBaseLine, Datum, StringOrNumber } from '../../typings';\nimport { SeriesTypeEnum } from '../interface/type';\nimport type { IPolygonMark } from '../../mark/polygon/polygon';\nimport { BaseSeries } from '../base/base-series';\nimport { AttributeLevel, DEFAULT_DATA_KEY, PREFIX } from '../../constant';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { DataView } from '@visactor/vdataset';\nimport type { IMark } from '../../mark/interface';\nimport { MarkTypeEnum } from '../../mark/interface/type';\nimport type { IFunnelOpt } from '../../data/transforms/funnel';\nimport { funnel, funnelTransform } from '../../data/transforms/funnel';\nimport {\n FUNNEL_CURRENT_VALUE,\n FUNNEL_HEIGHT_RATIO,\n FUNNEL_LABEL_LINE_LENGTH,\n FUNNEL_LABEL_SPACE_WIDTH,\n FUNNEL_LAST_VALUE,\n FUNNEL_LAST_VALUE_RATIO,\n FUNNEL_MAX_SIZE,\n FUNNEL_MIN_SIZE,\n FUNNEL_NEXT_VALUE,\n FUNNEL_NEXT_VALUE_RATIO,\n FUNNEL_REACH_RATIO,\n FUNNEL_TRANSFORM_LEVEL,\n FUNNEL_TRANSFORM_RATIO,\n FUNNEL_VALUE_RATIO\n} from '../../constant/funnel';\nimport type { ITextMark } from '../../mark/text';\nimport { calcLayoutNumber } from '../../util/space';\nimport { field } from '../../util/object';\nimport type { FunnelAppearPreset, IFunnelSeriesSpec } from './interface';\nimport type { IRuleMark } from '../../mark/rule';\nimport { FunnelSeriesTooltipHelper } from './tooltip-helper';\nimport { isFunction, isValid, isNumber, isBoolean } from '@visactor/vutils';\nimport {\n FadeInOutAnimation,\n registerCartesianGroupClipAnimation,\n registerFadeInOutAnimation\n} from '../../animation/config';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport { SeriesData } from '../base/series-data';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { registerPolygonMark } from '../../mark/polygon/polygon';\nimport { registerTextMark } from '../../mark/text';\nimport { registerRuleMark } from '../../mark/rule';\nimport { funnelSeriesMark } from './constant';\nimport type { ILabelMark } from '../../mark/label';\nimport type { LabelItem } from '@visactor/vrender-components';\nimport { Factory } from '../../core/factory';\nimport { FunnelSeriesSpecTransformer } from './funnel-transformer';\n\nexport class FunnelSeries<T extends IFunnelSeriesSpec = IFunnelSeriesSpec>\n extends BaseSeries<T>\n implements IFunnelSeries\n{\n static readonly type: string = SeriesTypeEnum.funnel;\n type = SeriesTypeEnum.funnel;\n protected _funnelMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.funnel;\n protected _funnelMarkType: MarkTypeEnum = MarkTypeEnum.polygon;\n protected _transformMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.transform;\n protected _transformMarkType: MarkTypeEnum = MarkTypeEnum.polygon;\n\n static readonly mark: SeriesMarkMap = funnelSeriesMark;\n static readonly transformerConstructor = FunnelSeriesSpecTransformer as any;\n readonly transformerConstructor = FunnelSeriesSpecTransformer;\n\n protected _categoryField!: string;\n getCategoryField() {\n return this._categoryField;\n }\n setCategoryField(f: string): string {\n this._categoryField = f;\n return this._categoryField;\n }\n\n protected _valueField!: string;\n getValueField() {\n return this._valueField;\n }\n setValueField(f: string): string {\n this._valueField = f;\n return this._valueField;\n }\n\n protected _viewDataTransform!: SeriesData;\n\n protected _funnelAlign: 'left' | 'center' | 'right' | 'top' | 'bottom';\n protected _funnelOrient: IOrientType;\n protected _shape: 'rect' | 'trapezoid';\n\n protected _funnelMark: IPolygonMark | null = null;\n protected _funnelTransformMark: IPolygonMark | null = null;\n protected _labelMark: ILabelMark | null = null;\n protected _transformLabelMark: ILabelMark | null = null;\n protected _funnelOuterLabelMark: { label?: ITextMark; line?: IRuleMark } = {};\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n\n this.setCategoryField(this._spec.categoryField);\n this.setValueField(this._spec.valueField);\n\n this._funnelOrient = this._spec.funnelOrient ?? 'top';\n this._shape = this._spec.shape ?? 'trapezoid';\n\n if (this._isHorizontal()) {\n this._funnelAlign = ['top', 'bottom'].includes(this._spec.funnelAlign) ? this._spec.funnelAlign : 'center';\n } else {\n this._funnelAlign = ['left', 'right'].includes(this._spec.funnelAlign) ? this._spec.funnelAlign : 'center';\n }\n\n if (this._spec.categoryField) {\n this.setSeriesField(this._spec.categoryField);\n }\n }\n\n initData() {\n super.initData();\n if (!this._data) {\n return;\n }\n\n registerDataSetInstanceTransform(this._dataSet, 'funnel', funnel);\n registerDataSetInstanceTransform(this._dataSet, 'funnelTransform', funnelTransform);\n\n const viewDataTransform = new DataView(this._dataSet, { name: `${PREFIX}_series_${this.id}_viewDataTransform` });\n viewDataTransform.parse([this.getViewData()], {\n type: 'dataview'\n });\n\n this._viewDataTransform = new SeriesData(this._option, viewDataTransform);\n }\n\n getStatisticFields() {\n const fields: { key: string; operations: Array<'max' | 'min' | 'values'> }[] = [];\n fields.push({ key: this._categoryField, operations: ['values'] });\n fields.push({ key: this._valueField, operations: ['max', 'min'] });\n return fields;\n }\n\n protected _statisticViewData(): void {\n super._statisticViewData();\n this._data.getDataView().transform({\n type: 'funnel',\n options: {\n valueField: this.getValueField(),\n isCone: this._spec.isCone,\n // heightVisual: true,\n asCurrentValue: FUNNEL_CURRENT_VALUE,\n asTransformRatio: FUNNEL_TRANSFORM_RATIO,\n asReachRatio: FUNNEL_REACH_RATIO,\n asHeightRatio: FUNNEL_HEIGHT_RATIO,\n asValueRatio: FUNNEL_VALUE_RATIO,\n asNextValueRatio: FUNNEL_NEXT_VALUE_RATIO,\n asLastValueRatio: FUNNEL_LAST_VALUE_RATIO,\n asLastValue: FUNNEL_LAST_VALUE,\n asNextValue: FUNNEL_NEXT_VALUE,\n range: {\n min: this._spec.range?.min ?? this.getViewDataStatistics().latestData?.[this.getValueField()]?.min,\n max: this._spec.range?.max ?? this.getViewDataStatistics().latestData?.[this.getValueField()]?.max\n }\n } as IFunnelOpt\n });\n\n this._viewDataTransform.getDataView()?.transform({\n type: 'funnelTransform',\n options: { asIsTransformLevel: FUNNEL_TRANSFORM_LEVEL }\n });\n }\n\n initMark() {\n this._funnelMark = this._createMark(\n {\n ...FunnelSeries.mark.funnel,\n name: this._funnelMarkName,\n type: this._funnelMarkType\n },\n {\n themeSpec: this._theme?.funnel,\n morph: shouldMarkDoMorph(this._spec, this._funnelMarkName),\n defaultMorphElementKey: this._seriesField,\n groupKey: this._seriesField,\n isSeriesMark: true,\n customShape: this._spec.funnel?.customShape,\n stateSort: this._spec.funnel?.stateSort,\n noSeparateStyle: true\n }\n ) as IPolygonMark;\n\n if (this._spec.isTransform) {\n this._funnelTransformMark = this._createMark(\n {\n ...FunnelSeries.mark.transform,\n name: this._transformMarkName,\n type: this._transformMarkType\n },\n {\n themeSpec: this._theme?.transform,\n skipBeforeLayouted: false,\n dataView: this._viewDataTransform.getDataView(),\n dataProductId: this._viewDataTransform.getProductId(),\n customShape: this._spec.transform?.customShape,\n stateSort: this._spec.transform?.stateSort,\n noSeparateStyle: true\n }\n );\n }\n\n if (this._spec?.outerLabel?.visible) {\n const { line } = this._spec.outerLabel ?? {};\n const { line: lineTheme } = this._theme?.outerLabel ?? {};\n\n this._funnelOuterLabelMark.label = this._createMark(FunnelSeries.mark.outerLabel, {\n themeSpec: this._theme?.outerLabel,\n markSpec: this._spec.outerLabel,\n skipBeforeLayouted: true,\n noSeparateStyle: true\n }) as ITextMark;\n\n this._funnelOuterLabelMark.line = this._createMark(FunnelSeries.mark.outerLabelLine, {\n themeSpec: lineTheme,\n markSpec: line,\n depend: [this._funnelOuterLabelMark.label],\n noSeparateStyle: true\n }) as IRuleMark;\n }\n }\n\n protected initTooltip() {\n this._tooltipHelper = new FunnelSeriesTooltipHelper(this);\n this._funnelMark && this._tooltipHelper.activeTriggerSet.mark.add(this._funnelMark);\n this._funnelTransformMark && this._tooltipHelper.activeTriggerSet.mark.add(this._funnelTransformMark);\n }\n\n getDimensionField(): string[] {\n return this._seriesField ? [this._seriesField] : [];\n }\n getMeasureField(): string[] {\n return [this._valueField];\n }\n\n getGroupFields(): string[] {\n return null;\n }\n\n initMarkStyle() {\n const funnelMark = this._funnelMark;\n if (funnelMark) {\n this.setMarkStyle(\n funnelMark,\n {\n points: (datum: Datum) => this.getPoints(datum),\n visible: (datum: Datum) => isValid(datum[this._valueField]),\n fill: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n const funnelTransformMark = this._funnelTransformMark;\n if (funnelTransformMark) {\n this.setMarkStyle(\n funnelTransformMark,\n { points: (datum: Datum) => this.getPoints(datum) },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n const outerLabelMark = this._funnelOuterLabelMark.label;\n if (outerLabelMark) {\n this.setMarkStyle(\n outerLabelMark,\n {\n text: (datum: Datum) => {\n const text = `${datum[this.getCategoryField()]}`;\n if (isFunction(this._spec.outerLabel.formatMethod)) {\n return this._spec.outerLabel.formatMethod(text, datum) as unknown as any;\n }\n return text;\n },\n x: (datum: Datum) => this._computeOuterLabelPosition(datum).x,\n y: (datum: Datum) => this._computeOuterLabelPosition(datum).y,\n textAlign: (datum: Datum) => this._computeOuterLabelPosition(datum).align,\n textBaseline: (datum: Datum) => this._computeOuterLabelPosition(datum).textBaseline,\n maxLineWidth: (datum: Datum) => this._computeOuterLabelLimit(datum)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n const outerLabelLineMark = this._funnelOuterLabelMark.line;\n if (outerLabelLineMark && outerLabelMark) {\n this.setMarkStyle(\n outerLabelLineMark,\n {\n x: (datum: Datum) => this._computeOuterLabelLinePosition(datum).x1,\n y: (datum: Datum) => this._computeOuterLabelLinePosition(datum).y1,\n x1: (datum: Datum) => this._computeOuterLabelLinePosition(datum).x2,\n y1: (datum: Datum) => this._computeOuterLabelLinePosition(datum).y2\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initLabelMarkStyle(labelMark?: ILabelMark) {\n if (!labelMark) {\n return;\n }\n\n const target = labelMark.getTarget();\n const component = labelMark.getComponent();\n\n if (target === this._funnelMark) {\n this._labelMark = labelMark;\n this.setMarkStyle(\n labelMark,\n {\n text: (datum: Datum) => `${datum[this.getCategoryField()]} ${datum[this.getValueField()]}`,\n x: (datum: Datum) => this._computeLabelPosition(datum).x,\n y: (datum: Datum) => this._computeLabelPosition(datum).y,\n maxLineWidth: (datum: Datum) => this._computeLabelLimit(datum, this._spec.label),\n stroke: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n if (this._funnelOuterLabelMark?.label) {\n this._funnelOuterLabelMark.label.setDepend(component);\n }\n\n if (this._funnelOuterLabelMark?.line) {\n this._funnelOuterLabelMark.line.setDepend(...this._funnelOuterLabelMark.line.getDepend());\n }\n } else if (this._funnelTransformMark && target === this._funnelTransformMark) {\n this._transformLabelMark = labelMark;\n this.setMarkStyle(\n labelMark,\n {\n text: (datum: Datum) => {\n const ratio = field(FUNNEL_REACH_RATIO).bind(this)(datum) as number;\n return `${(ratio * 100).toFixed(1)}%`;\n },\n x: (datum: Datum) => this._computeLabelPosition(datum).x,\n y: (datum: Datum) => this._computeLabelPosition(datum).y,\n maxLineWidth: (datum: Datum) => this._computeLabelLimit(datum, this._spec.transformLabel)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initAnimation() {\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec<FunnelAppearPreset>)?.preset ?? 'clipIn';\n if (appearPreset === 'clipIn') {\n if (this._rootMark) {\n this._rootMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('cartesianGroupClip')?.(\n {\n direction: () => (this._isHorizontal() ? 'x' : 'y'),\n width: () => {\n const rootMark = this.getRootMark().getProduct();\n if (rootMark) {\n const { x1, x2 } = rootMark.getBounds();\n return Math.max(x1, x2); // rootMark.x === 0, so need to find largest bound x instead of bounds width\n }\n return this.getLayoutRect().width;\n },\n height: () => {\n const rootMark = this.getRootMark().getProduct();\n if (rootMark) {\n const { y1, y2 } = rootMark.getBounds();\n return Math.max(y1, y2);\n }\n return this.getLayoutRect().height;\n },\n orient: () => (this._isReverse() ? 'negative' : 'positive')\n },\n appearPreset\n ),\n userAnimationConfig(SeriesMarkNameEnum.group, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n [this._funnelOuterLabelMark?.label].forEach(m => {\n if (m) {\n m.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')(),\n userAnimationConfig(m.name, this._spec, this._markAttributeContext)\n )\n );\n }\n });\n\n [this._funnelMark, this._funnelTransformMark].forEach(m => {\n if (m) {\n m.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('funnel')({}, appearPreset),\n userAnimationConfig(m.name, this._spec, this._markAttributeContext)\n )\n );\n }\n });\n\n if (this._funnelOuterLabelMark?.line) {\n this._funnelOuterLabelMark.line.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.outerLabelLine, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n // hack group\n initGroups() {\n // do nothing\n }\n\n // handle stack\n getStackGroupFields(): string[] {\n return [];\n }\n\n getStackValueField(): string {\n // hack\n return null;\n }\n\n /** event */\n protected initEvent() {\n super.initEvent();\n // 同步更新转化层数据\n this._viewDataTransform.getDataView()?.target.addListener('change', (d: DataView) => {\n this._viewDataTransform.updateData();\n });\n }\n\n /**\n *\n * P0 ----------- P1 P2 ------ P3\n * \\ / / \\\n * P3 ------ P2 P1 ---------- P0\n *\n * P1 P0\n * |\\ P2 P3 /|\n * | | | |\n * |/ P3 P2 \\|\n * P0 P1\n */\n getPoints(datum: Datum) {\n // 对特殊数据层不进行绘制\n const isTransformLevel = this.isTransformLevel(datum);\n\n const heightHalf = this._getMainAxisLength(isTransformLevel) / 2;\n let upperLeft;\n let lowerLeft;\n if (isTransformLevel) {\n upperLeft =\n this._shape === 'rect'\n ? this._getSecondaryAxisLength(datum[FUNNEL_LAST_VALUE_RATIO]) / 2\n : this._getSecondaryAxisLength(datum[FUNNEL_VALUE_RATIO]) / 2;\n lowerLeft = this._getSecondaryAxisLength(datum[FUNNEL_VALUE_RATIO]) / 2;\n } else {\n upperLeft = this._getSecondaryAxisLength(datum[FUNNEL_VALUE_RATIO]) / 2;\n lowerLeft = this._shape === 'rect' ? upperLeft : this._getSecondaryAxisLength(datum[FUNNEL_NEXT_VALUE_RATIO]) / 2;\n }\n\n const { x, y } = this._getPositionByData(datum);\n\n const points = this._getPolygonPoints([x, y], upperLeft, lowerLeft, upperLeft, lowerLeft, heightHalf);\n\n if (this._funnelAlign !== 'center') {\n this._adjustPoints(points);\n }\n return points;\n }\n\n isTransformLevel(datum: Datum) {\n return !!datum?.[FUNNEL_TRANSFORM_LEVEL];\n }\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n this._markAttributeContext.valueToPosition = this.valueToPosition.bind(this);\n this._markAttributeContext.getPoints = this.getPoints.bind(this);\n this._markAttributeContext.isTransformLevel = this.isTransformLevel.bind(this);\n }\n\n valueToPosition(category: StringOrNumber) {\n const innerDatum = this.getViewData()?.latestData?.find?.((d: Datum) => d[this._categoryField] === category);\n if (!isValid(innerDatum)) {\n return null;\n }\n return this._getPolygonCenter(this.getPoints(innerDatum));\n }\n\n dataToPosition(datum: any, checkInViewData?: boolean) {\n if (checkInViewData && !this.isDatumInViewData(datum)) {\n return null;\n }\n return this.valueToPosition(datum[this._categoryField]);\n }\n\n dataToPositionX(datum: any) {\n return this.dataToPosition(datum)?.x;\n }\n\n dataToPositionY(datum: any) {\n return this.dataToPosition(datum)?.y;\n }\n\n dataToPositionZ(datum: any) {\n return 0;\n }\n\n private _getMainAxisLength(isTransform = false) {\n const funnelCount = this.getViewData().latestData.length;\n const viewHeight = this._isHorizontal() ? this.getLayoutRect().width : this.getLayoutRect().height;\n\n const hasTransform = !!this._spec.isTransform;\n const gap = hasTransform ? 0 : this._spec.gap ?? 0;\n const transformCount = hasTransform ? Math.max(0, funnelCount - 1) : 0;\n const heightRatio = this._spec.heightRatio || 0.5;\n const funnelHeight =\n (viewHeight - gap * Math.max(0, funnelCount - 1)) / (funnelCount + heightRatio * transformCount);\n if (isTransform) {\n return hasTransform ? funnelHeight * heightRatio : 0;\n }\n return funnelHeight;\n }\n\n private _getSecondaryAxisLength(ratio: number) {\n const validRatio = Number.isNaN(ratio) || !Number.isFinite(ratio) ? 0 : ratio;\n const maxSize = this._computeMaxSize();\n const minSize = this._computeMinSize();\n return minSize + (maxSize - minSize) * validRatio;\n }\n\n /**\n * 根据数据计算主轴中心点\n * @param datum\n * @returns\n */\n private _getPositionByData(datum: Datum) {\n const index = this.getViewData().latestData?.findIndex(\n (d: Datum) =>\n d[this._categoryField] === datum[this._categoryField] && d[DEFAULT_DATA_KEY] === datum[DEFAULT_DATA_KEY]\n );\n if (!isValid(index) || index < 0) {\n return {};\n }\n const isTransform = this.isTransformLevel(datum);\n const isHorizontal = this._isHorizontal();\n const viewWidth = isHorizontal ? this.getLayoutRect().height : this.getLayoutRect().width;\n const viewHeight = isHorizontal ? this.getLayoutRect().width : this.getLayoutRect().height;\n const centerX = viewWidth / 2;\n\n let centerY = 0;\n const funnelHeight = this._getMainAxisLength();\n const transformHeight = this._getMainAxisLength(true);\n const offset = funnelHeight + transformHeight;\n\n centerY += index * offset;\n centerY += isTransform ? -transformHeight / 2 : funnelHeight / 2;\n if (!this._spec.isTransform && this._spec.gap) {\n centerY += this._spec.gap * index;\n }\n\n this._isReverse() && (centerY = viewHeight - centerY);\n\n return this._isHorizontal() ? { x: centerY, y: centerX } : { x: centerX, y: centerY };\n }\n\n private _getPolygonPoints(\n center: [number, number],\n upperLeft: number,\n lowerLeft: number,\n upperRight: number,\n lowerRight: number,\n heightHalf: number\n ) {\n const x = center[0];\n const y = center[1];\n switch (this._funnelOrient) {\n case 'left':\n return [\n { x: x - heightHalf, y: y + upperLeft },\n { x: x - heightHalf, y: y - upperRight },\n { x: x + heightHalf, y: y - lowerRight },\n { x: x + heightHalf, y: y + lowerLeft }\n ];\n case 'right':\n return [\n { x: x + heightHalf, y: y - upperRight },\n { x: x + heightHalf, y: y + upperRight },\n { x: x - heightHalf, y: y + lowerLeft },\n { x: x - heightHalf, y: y - lowerLeft }\n ];\n case 'bottom':\n return [\n { x: x + upperLeft, y: y + heightHalf },\n { x: x - upperRight, y: y + heightHalf },\n { x: x - lowerRight, y: y - heightHalf },\n { x: x + lowerLeft, y: y - heightHalf }\n ];\n default:\n // top\n return [\n { x: x - upperLeft, y: y - heightHalf },\n { x: x + upperRight, y: y - heightHalf },\n { x: x + lowerRight, y: y + heightHalf },\n { x: x - lowerLeft, y: y + heightHalf }\n ];\n }\n }\n\n /** 计算梯形中位线的中点\n * @param points\n * @returns\n */\n private _getPolygonCenter(points: IPoint[]) {\n if (this._isHorizontal()) {\n const p0_x = (points[0].x + points[3].x) / 2;\n const p0_y = (points[0].y + points[3].y) / 2;\n const p1_x = (points[1].x + points[2].x) / 2;\n const p1_y = (points[1].y + points[2].y) / 2;\n return {\n x: (p0_x + p1_x) / 2,\n y: (p0_y + p1_y) / 2\n };\n }\n\n // 梯形中位线坐标\n const p0_x = (points[0].x + points[3].x) / 2;\n const p0_y = (points[0].y + points[3].y) / 2;\n const p1_x = (points[1].x + points[2].x) / 2;\n const p1_y = (points[1].y + points[2].y) / 2;\n return {\n x: (p0_x + p1_x) / 2,\n y: (p0_y + p1_y) / 2\n };\n }\n\n /**\n * 调整点的偏移量,满足align效果\n * @param points\n * @returns\n */\n private _adjustPoints(points: IPoint[]) {\n let upperOffset;\n let lowerOffset;\n let dirKey;\n if (this._isHorizontal()) {\n dirKey = 'y';\n if (this._funnelOrient === 'left') {\n upperOffset = this._funnelAlign === 'bottom' ? -points[1].y : points[1].y;\n lowerOffset = this._funnelAlign === 'bottom' ? -points[2].y : points[2].y;\n } else {\n upperOffset = this._funnelAlign === 'bottom' ? -points[0].y : points[0].y;\n lowerOffset = this._funnelAlign === 'bottom' ? -points[3].y : points[3].y;\n }\n } else {\n dirKey = 'x';\n if (this._funnelOrient === 'top') {\n upperOffset = this._funnelAlign === 'left' ? points[0].x : -points[0].x;\n lowerOffset = this._funnelAlign === 'left' ? points[3].x : -points[3].x;\n } else {\n upperOffset = this._funnelAlign === 'left' ? points[1].x : -points[1].x;\n lowerOffset = this._funnelAlign === 'left' ? points[2].x : -points[2].x;\n }\n }\n (points[0][dirKey] -= upperOffset), (points[1][dirKey] -= upperOffset);\n (points[2][dirKey] -= lowerOffset), (points[3][dirKey] -= lowerOffset);\n return points;\n }\n\n private _computeLabelPosition(datum: Datum) {\n const points = this.getPoints(datum);\n return this._getPolygonCenter(points);\n }\n\n // label 相关\n private _computeLabelLimit(datum: Datum, labelSpec: IFunnelSeriesSpec['label']) {\n const limit = labelSpec?.limit;\n\n if (isNumber(limit)) {\n return limit;\n }\n\n const points = this.getPoints(datum);\n\n if (limit === 'shapeSize') {\n if (this._isHorizontal()) {\n return Math.abs(points[3].x - points[0].x);\n }\n\n return (Math.abs(points[0].x - points[1].x) + Math.abs(points[2].x - points[3].x)) / 2;\n }\n\n if (this._isHorizontal()) {\n return Math.abs(points[3].x - points[0].x);\n }\n\n // return this._computeMaxSize();\n // FIXME: 待 vrender 修复 maxLineWidth 在 bound 计算的 bug 后可以恢复注释\n return undefined;\n }\n\n private _computeOuterLabelPosition(datum: Datum) {\n let x;\n let y;\n let position: IOrientType = this._spec.outerLabel?.position;\n let textAlign: TextAlign = 'center';\n let textBaseline: TextBaseLine = 'middle';\n if (this._isHorizontal()) {\n position = ['top', 'bottom'].includes(position) ? position : this._funnelAlign === 'bottom' ? 'top' : 'bottom';\n } else {\n position = ['left', 'right'].includes(position) ? position : this._funnelAlign === 'left' ? 'right' : 'left';\n }\n\n if (this._spec.outerLabel?.alignLabel !== false) {\n ({ x, y } = this._getPositionByData(datum));\n if (position === 'left') {\n (x = 0), (textAlign = 'left');\n } else if (position === 'right') {\n (x = this.getLayoutRect().width), (textAlign = 'right');\n } else if (position === 'top') {\n (y = 0), (textBaseline = 'top');\n } else if (position === 'bottom') {\n (y = this.getLayoutRect().height), (textBaseline = 'bottom');\n }\n } else {\n const { x2, y2 } = this._computeOuterLabelLinePosition(datum);\n (x = x2), (y = y2);\n if (position === 'left') {\n (x -= FUNNEL_LABEL_SPACE_WIDTH), (textAlign = 'right');\n } else if (position === 'right') {\n (x += FUNNEL_LABEL_SPACE_WIDTH), (textAlign = 'left');\n } else if (position === 'top') {\n (y -= FUNNEL_LABEL_SPACE_WIDTH), (textBaseline = 'bottom');\n } else if (position === 'bottom') {\n (y += FUNNEL_LABEL_SPACE_WIDTH), (textBaseline = 'top');\n }\n }\n return { x, y, align: textAlign, textBaseline };\n }\n\n private _computeOuterLabelLimit(datum: Datum) {\n if (this._isHorizontal()) {\n return this._getMainAxisLength(this.isTransformLevel(datum));\n }\n\n // 垂直方向上的limit计算逻辑\n const points = this.getPoints(datum);\n const shapeMiddleWidth = (Math.abs(points[0].x - points[1].x) + Math.abs(points[2].x - points[3].x)) / 2;\n const categoryField = this.getCategoryField();\n\n const funnelLabelBounds = this._labelMark\n ?.getComponent()\n ?.getProduct()\n .getGroupGraphicItem()\n .find(({ attribute, type }: { attribute: LabelItem; type: string }) => {\n return type === 'text' && attribute.data?.[categoryField] === datum[categoryField];\n }, true)?.AABBBounds;\n\n const funnelLabelWidth = funnelLabelBounds ? funnelLabelBounds.x2 - funnelLabelBounds.x1 : 0;\n const outerLineSpace = this._funnelOuterLabelMark.line ? FUNNEL_LABEL_LINE_LENGTH : 0;\n\n let space = this.getLayoutRect().width - Math.max(shapeMiddleWidth, funnelLabelWidth);\n if (this._funnelAlign === 'center') {\n space /= 2;\n }\n return space - outerLineSpace - (this._spec.outerLabel?.spaceWidth ?? FUNNEL_LABEL_SPACE_WIDTH);\n }\n\n private _computeOuterLabelLinePosition(datum: Datum) {\n const categoryField = this.getCategoryField();\n const outerLabelMarkBounds = this._funnelOuterLabelMark?.label\n ?.getProduct()\n ?.elements?.find((el: any) => el.data[0]?.[categoryField] === datum[categoryField])\n ?.getBounds();\n\n const labelMarkBounds = this._labelMark\n ?.getComponent()\n ?.getProduct()\n .getGroupGraphicItem()\n .find(({ attribute, type }: { attribute: LabelItem; type: string }) => {\n return type === 'text' && attribute.data?.[categoryField] === datum[categoryField];\n }, true)?.AABBBounds;\n const outerLabelSpec = this._spec.outerLabel ?? {};\n let x1;\n let x2;\n let y1;\n let y2;\n if (this._isHorizontal()) {\n const spaceWidth = outerLabelSpec.spaceWidth ?? FUNNEL_LABEL_SPACE_WIDTH;\n const points = this.getPoints(datum);\n const shapeMiddleHeight = (Math.abs(points[0].y - points[1].y) + Math.abs(points[2].y - points[3].y)) / 2;\n if (this._spec.outerLabel.position === 'top' || this._funnelAlign === 'bottom') {\n y1 = this._getPolygonCenter(points).y - shapeMiddleHeight / 2 - spaceWidth;\n y2 = outerLabelSpec.alignLabel !== false ? outerLabelMarkBounds?.y2 + spaceWidth : y1 - spaceWidth;\n x1 = this._getPolygonCenter(points).x;\n y1 - y2 < FUNNEL_LABEL_LINE_LENGTH && (y2 = y1 - FUNNEL_LABEL_LINE_LENGTH);\n x2 = x1;\n } else {\n y1 = this._getPolygonCenter(points).y + shapeMiddleHeight / 2 + spaceWidth;\n y2 = outerLabelSpec.alignLabel !== false ? outerLabelMarkBounds?.y1 - spaceWidth : y1 + spaceWidth;\n x1 = this._getPolygonCenter(points).x;\n y2 - y1 < FUNNEL_LABEL_LINE_LENGTH && (y2 = y1 + FUNNEL_LABEL_LINE_LENGTH);\n x2 = x1;\n }\n return { x1, x2, y1, y2 };\n }\n const points = this.getPoints(datum);\n const shapeMiddleWidth = (Math.abs(points[0].x - points[1].x) + Math.abs(points[2].x - points[3].x)) / 2;\n const labelWidth = labelMarkBounds?.x2 - labelMarkBounds?.x1 || 0;\n\n const spaceWidth = outerLabelSpec.spaceWidth ?? FUNNEL_LABEL_SPACE_WIDTH;\n if (this._spec.outerLabel.position === 'right' || this._funnelAlign === 'left') {\n x1 = this._getPolygonCenter(points).x + Math.max(labelWidth / 2, shapeMiddleWidth / 2) + spaceWidth;\n x2 = outerLabelSpec.alignLabel !== false ? outerLabelMarkBounds?.x1 - spaceWidth : x1 + spaceWidth;\n y1 = this._getPolygonCenter(points).y;\n x2 - x1 < FUNNEL_LABEL_LINE_LENGTH && (x2 = x1 + FUNNEL_LABEL_LINE_LENGTH);\n y2 = y1;\n } else {\n x1 = this._getPolygonCenter(points).x - Math.max(labelWidth / 2, shapeMiddleWidth / 2) - spaceWidth;\n x2 = outerLabelSpec.alignLabel !== false ? outerLabelMarkBounds?.x2 + spaceWidth : x1 - spaceWidth;\n y1 = this._getPolygonCenter(points).y;\n x1 - x2 < FUNNEL_LABEL_LINE_LENGTH && (x2 = x1 - FUNNEL_LABEL_LINE_LENGTH);\n y2 = y1;\n }\n return { x1, x2, y1, y2 };\n }\n\n protected _computeMaxSize() {\n const size = this._isHorizontal() ? this.getLayoutRect().height : this.getLayoutRect().width;\n const maxSize = this._spec.maxSize ?? FUNNEL_MAX_SIZE;\n return calcLayoutNumber(maxSize, size);\n }\n\n protected _computeMinSize() {\n const size = this._isHorizontal() ? this.getLayoutRect().height : this.getLayoutRect().width;\n const minSize = this._spec.minSize ?? FUNNEL_MIN_SIZE;\n return calcLayoutNumber(minSize, size);\n }\n\n protected _isHorizontal() {\n return this._funnelOrient === 'left' || this._funnelOrient === 'right';\n }\n\n private _isReverse() {\n return this._funnelOrient === 'bottom' || this._funnelOrient === 'right';\n }\n\n getDefaultShapeType(): string {\n return 'square';\n }\n\n getActiveMarks(): IMark[] {\n return [this._funnelMark];\n }\n}\n\nexport const registerFunnelSeries = () => {\n registerPolygonMark();\n registerTextMark();\n registerRuleMark();\n Factory.registerSeries(FunnelSeries.type, FunnelSeries);\n Factory.registerAnimation('funnel', (params: any, preset: FunnelAppearPreset) => ({\n appear: preset === 'clipIn' ? undefined : { type: 'fadeIn' },\n ...FadeInOutAnimation\n }));\n registerCartesianGroupClipAnimation();\n registerFadeInOutAnimation();\n};\n"]}
|
|
@@ -5,7 +5,7 @@ import type { IBaseModelSpecTransformerResult, IModelConstructor, IModelMarkInfo
|
|
|
5
5
|
import type { IRegion } from '../../region/interface';
|
|
6
6
|
import type { RenderMode } from '../../typings/spec/common';
|
|
7
7
|
import type { ISeries } from './series';
|
|
8
|
-
import type { IMarkProgressiveConfig } from '../../mark/interface';
|
|
8
|
+
import type { IMarkOption, IMarkProgressiveConfig } from '../../mark/interface';
|
|
9
9
|
import type { ISeriesSpec, StringOrNumber } from '../../typings';
|
|
10
10
|
import type { TransformedLabelSpec } from '../../component/label';
|
|
11
11
|
import type { SeriesMarkNameEnum, SeriesTypeEnum } from './type';
|
|
@@ -51,7 +51,7 @@ export type ISeriesStyleItem = {
|
|
|
51
51
|
style?: any;
|
|
52
52
|
};
|
|
53
53
|
};
|
|
54
|
-
export interface ISeriesMarkInitOption {
|
|
54
|
+
export interface ISeriesMarkInitOption extends Partial<IMarkOption> {
|
|
55
55
|
themeSpec?: any;
|
|
56
56
|
markSpec?: any;
|
|
57
57
|
skipBeforeLayouted?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/series/interface/common.ts"],"names":[],"mappings":"","file":"common.js","sourcesContent":["import type { DataView } from '@visactor/vdataset';\nimport type { IGrammarItem } from '../../compile/interface';\nimport type { IGroupMark } from '../../mark/group';\nimport type {\n IBaseModelSpecTransformerResult,\n IModelConstructor,\n IModelMarkInfo,\n IModelOption,\n IModelSpecInfo\n} from '../../model/interface';\nimport type { IRegion } from '../../region/interface';\nimport type { RenderMode } from '../../typings/spec/common';\nimport type { ISeries } from './series';\nimport type { IMarkProgressiveConfig } from '../../mark/interface';\nimport type { ISeriesSpec, StringOrNumber } from '../../typings';\nimport type { TransformedLabelSpec } from '../../component/label';\nimport type { SeriesMarkNameEnum, SeriesTypeEnum } from './type';\nimport type { ICustomPath2D } from '@visactor/vrender-core';\nimport type { MarkClip } from '../../compile/mark';\n\n// export type SeriesStyle = 'color' | 'size' | 'shape';\n\nexport interface ISeriesSeriesInfo {\n key: string;\n index?: number;\n // 样式的值类型可能是 StringOrNumber | number[] | xxxx\n style: (attribute: string) => any;\n /** series 对应的缩略图类型 */\n shapeType: string;\n}\n\nexport interface ISeriesOption extends IModelOption {\n mode: RenderMode;\n region: IRegion;\n sourceDataList: DataView[];\n getSeriesData: (id: StringOrNumber | undefined, index: number | undefined) => DataView | undefined;\n}\n\nexport interface ISeriesConstructor extends IModelConstructor {\n readonly type: string;\n mark?: SeriesMarkMap;\n new (spec: any, options: ISeriesOption): ISeries;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ISeriesInitOption {}\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ISeriesUpdateDataOption {}\n\nexport interface ISeriesStackDataNode {\n nodes: {\n [key: string]: ISeriesStackDataMeta;\n };\n}\nexport interface ISeriesStackDataLeaf {\n values: any[];\n total?: number;\n}\n\nexport type ISeriesStackDataMeta = ISeriesStackDataNode | ISeriesStackDataLeaf;\nexport type ISeriesStackData = ISeriesStackDataNode;\n\nexport type ISeriesStyle = ISeriesStyleItem[];\nexport type ISeriesStyleItem = {\n name: string;\n} & {\n [markName: string]: {\n style?: any;\n };\n};\n\nexport interface ISeriesMarkInitOption {\n /** theme spec */\n themeSpec?: any;\n\n /** mark spec */\n markSpec?: any;\n\n /** 是否在编译时更新实际数据 */\n skipBeforeLayouted?: boolean;\n\n /** 父级 mark(如果是 undefined 则默认是系列的 root mark,如果是 false 则不配置父级 mark) */\n parent?: IGroupMark | false;\n\n /** 是否是 series field 所作用的 mark(用于 tooltip shape 取色等) */\n isSeriesMark?: boolean;\n\n /** 该 mark 依赖于哪些语法元素 */\n depend?: IGrammarItem | IGrammarItem[];\n\n /** 数据 key 值 */\n key?: string | ((datum: any) => string);\n\n /** 分组 key 值 */\n groupKey?: string;\n\n /** morph 配置开关 */\n morph?: boolean;\n\n /** morph元素的唯一key */\n defaultMorphElementKey?: string;\n\n /** 绑定系列数据(如果是 undefined 则默认是系列的 data,如果是 false 则不配置数据) */\n dataView?: DataView | false;\n /** 系列数据编译产物的名称 */\n dataProductId?: string;\n /** mark scale 如果需要使用统计信息设置domain的话,使用的series对应的统计数据 */\n seriesId?: number;\n\n /** 渐进渲染相关配置 */\n progressive?: IMarkProgressiveConfig;\n\n /** 是否支持 3d */\n support3d?: boolean;\n /* customized shape of mark */\n customShape?: (datum: any[], attrs: any, path: ICustomPath2D) => ICustomPath2D;\n /**\n * 状态排序方法,默认状态都是按照添加的顺序处理的,如果有特殊的需求,需要指定状态顺序,可以通过这个方法实现\n * @since 1.9.0\n */\n stateSort?: (stateA: string, stateB: string) => number;\n /**\n * use component in extension mark\n * @since 1.9.0\n */\n componentType?: string;\n /**\n * 裁剪配置\n * @since 1.10.0\n */\n clip?: MarkClip;\n}\n\nexport interface ISeriesMarkInfo extends IModelMarkInfo {\n /** mark 名称 */\n name: SeriesMarkNameEnum | string;\n}\n\nexport type SeriesMarkMap = Partial<Record<SeriesMarkNameEnum, ISeriesMarkInfo>>;\n\nexport interface ISeriesSpecInfo<T extends ISeriesSpec = ISeriesSpec>\n extends IModelSpecInfo,\n ISeriesSpecTransformerResult<T, any> {\n /** model 具体类型 */\n type: string | SeriesTypeEnum;\n /** model spec */\n spec: T;\n /** model theme */\n theme: any;\n}\n\nexport interface ISeriesSpecTransformerResult<T, K> extends IBaseModelSpecTransformerResult<T, K> {\n /** 当前的 mark 标签 spec */\n markLabelSpec?: Partial<Record<SeriesMarkNameEnum, TransformedLabelSpec[]>>;\n /** 是否堆叠 */\n stack?: boolean;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/series/interface/common.ts"],"names":[],"mappings":"","file":"common.js","sourcesContent":["import type { DataView } from '@visactor/vdataset';\nimport type { IGrammarItem } from '../../compile/interface';\nimport type { IGroupMark } from '../../mark/group';\nimport type {\n IBaseModelSpecTransformerResult,\n IModelConstructor,\n IModelMarkInfo,\n IModelOption,\n IModelSpecInfo\n} from '../../model/interface';\nimport type { IRegion } from '../../region/interface';\nimport type { RenderMode } from '../../typings/spec/common';\nimport type { ISeries } from './series';\nimport type { IMarkOption, IMarkProgressiveConfig } from '../../mark/interface';\nimport type { ISeriesSpec, StringOrNumber } from '../../typings';\nimport type { TransformedLabelSpec } from '../../component/label';\nimport type { SeriesMarkNameEnum, SeriesTypeEnum } from './type';\nimport type { ICustomPath2D } from '@visactor/vrender-core';\nimport type { MarkClip } from '../../compile/mark';\n\n// export type SeriesStyle = 'color' | 'size' | 'shape';\n\nexport interface ISeriesSeriesInfo {\n key: string;\n index?: number;\n // 样式的值类型可能是 StringOrNumber | number[] | xxxx\n style: (attribute: string) => any;\n /** series 对应的缩略图类型 */\n shapeType: string;\n}\n\nexport interface ISeriesOption extends IModelOption {\n mode: RenderMode;\n region: IRegion;\n sourceDataList: DataView[];\n getSeriesData: (id: StringOrNumber | undefined, index: number | undefined) => DataView | undefined;\n}\n\nexport interface ISeriesConstructor extends IModelConstructor {\n readonly type: string;\n mark?: SeriesMarkMap;\n new (spec: any, options: ISeriesOption): ISeries;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ISeriesInitOption {}\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ISeriesUpdateDataOption {}\n\nexport interface ISeriesStackDataNode {\n nodes: {\n [key: string]: ISeriesStackDataMeta;\n };\n}\nexport interface ISeriesStackDataLeaf {\n values: any[];\n total?: number;\n}\n\nexport type ISeriesStackDataMeta = ISeriesStackDataNode | ISeriesStackDataLeaf;\nexport type ISeriesStackData = ISeriesStackDataNode;\n\nexport type ISeriesStyle = ISeriesStyleItem[];\nexport type ISeriesStyleItem = {\n name: string;\n} & {\n [markName: string]: {\n style?: any;\n };\n};\n\nexport interface ISeriesMarkInitOption extends Partial<IMarkOption> {\n /** theme spec */\n themeSpec?: any;\n\n /** mark spec */\n markSpec?: any;\n\n /** 是否在编译时更新实际数据 */\n skipBeforeLayouted?: boolean;\n\n /** 父级 mark(如果是 undefined 则默认是系列的 root mark,如果是 false 则不配置父级 mark) */\n parent?: IGroupMark | false;\n\n /** 是否是 series field 所作用的 mark(用于 tooltip shape 取色等) */\n isSeriesMark?: boolean;\n\n /** 该 mark 依赖于哪些语法元素 */\n depend?: IGrammarItem | IGrammarItem[];\n\n /** 数据 key 值 */\n key?: string | ((datum: any) => string);\n\n /** 分组 key 值 */\n groupKey?: string;\n\n /** morph 配置开关 */\n morph?: boolean;\n\n /** morph元素的唯一key */\n defaultMorphElementKey?: string;\n\n /** 绑定系列数据(如果是 undefined 则默认是系列的 data,如果是 false 则不配置数据) */\n dataView?: DataView | false;\n /** 系列数据编译产物的名称 */\n dataProductId?: string;\n /** mark scale 如果需要使用统计信息设置domain的话,使用的series对应的统计数据 */\n seriesId?: number;\n\n /** 渐进渲染相关配置 */\n progressive?: IMarkProgressiveConfig;\n\n /** 是否支持 3d */\n support3d?: boolean;\n /* customized shape of mark */\n customShape?: (datum: any[], attrs: any, path: ICustomPath2D) => ICustomPath2D;\n /**\n * 状态排序方法,默认状态都是按照添加的顺序处理的,如果有特殊的需求,需要指定状态顺序,可以通过这个方法实现\n * @since 1.9.0\n */\n stateSort?: (stateA: string, stateB: string) => number;\n /**\n * use component in extension mark\n * @since 1.9.0\n */\n componentType?: string;\n /**\n * 裁剪配置\n * @since 1.10.0\n */\n clip?: MarkClip;\n}\n\nexport interface ISeriesMarkInfo extends IModelMarkInfo {\n /** mark 名称 */\n name: SeriesMarkNameEnum | string;\n}\n\nexport type SeriesMarkMap = Partial<Record<SeriesMarkNameEnum, ISeriesMarkInfo>>;\n\nexport interface ISeriesSpecInfo<T extends ISeriesSpec = ISeriesSpec>\n extends IModelSpecInfo,\n ISeriesSpecTransformerResult<T, any> {\n /** model 具体类型 */\n type: string | SeriesTypeEnum;\n /** model spec */\n spec: T;\n /** model theme */\n theme: any;\n}\n\nexport interface ISeriesSpecTransformerResult<T, K> extends IBaseModelSpecTransformerResult<T, K> {\n /** 当前的 mark 标签 spec */\n markLabelSpec?: Partial<Record<SeriesMarkNameEnum, TransformedLabelSpec[]>>;\n /** 是否堆叠 */\n stack?: boolean;\n}\n"]}
|
|
@@ -34,6 +34,7 @@ export declare class WaterfallSeries<T extends IWaterfallSeriesSpec = IWaterfall
|
|
|
34
34
|
onEvaluateEnd(ctx: IModelEvaluateOption): void;
|
|
35
35
|
initMark(): void;
|
|
36
36
|
initLabelMarkStyle(labelMark: ILabelMark): void;
|
|
37
|
+
initTotalLabelMarkStyle(labelMark: ILabelMark): void;
|
|
37
38
|
getTotalLabelComponentStyle(info: Pick<ILabelInfo, 'baseMark' | 'labelMark'>): {
|
|
38
39
|
customLayoutFunc: (labels: import("@visactor/vrender-components").LabelItem[]) => import("@visactor/vrender-core").IText[];
|
|
39
40
|
dataFilter: (labels: import("@visactor/vrender-components").LabelItem[]) => import("@visactor/vrender-components").LabelItem[];
|
|
@@ -113,14 +113,22 @@ class WaterfallSeries extends bar_1.BarSeries {
|
|
|
113
113
|
});
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
|
+
initTotalLabelMarkStyle(labelMark) {
|
|
117
|
+
this.setMarkStyle(labelMark, {
|
|
118
|
+
text: datum => {
|
|
119
|
+
var _a;
|
|
120
|
+
return "end" in datum ? "absolute" === (null === (_a = this._spec.totalLabel) || void 0 === _a ? void 0 : _a.valueType) ? datum.end : (0,
|
|
121
|
+
vutils_1.precisionSub)(datum.end, datum.start) : "horizontal" === this.direction ? datum[this._fieldX[0]] : datum[this._fieldY[0]];
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
}
|
|
116
125
|
getTotalLabelComponentStyle(info) {
|
|
117
126
|
return (0, util_1.stackLabel)(Object.assign(Object.assign({}, info), {
|
|
118
127
|
series: this,
|
|
119
128
|
labelSpec: this._spec.totalLabel
|
|
120
|
-
}), (d =>
|
|
121
|
-
|
|
122
|
-
return
|
|
123
|
-
vutils_1.precisionSub)(datum.end, datum.start), attribute;
|
|
129
|
+
}), (d => {
|
|
130
|
+
const index = "vertical" === this.direction ? d[this._fieldX[0]] : d[this._fieldY[0]];
|
|
131
|
+
return this._totalData.getLatestData().find((_d => _d.index === index));
|
|
124
132
|
}));
|
|
125
133
|
}
|
|
126
134
|
totalPositionX(datum, field, pos = .5) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/series/waterfall/waterfall.ts"],"names":[],"mappings":"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","file":"waterfall.js","sourcesContent":["/* eslint-disable no-duplicate-imports */\nimport type { IRuleMark } from '../../mark/rule';\nimport { isNil, precisionSub } from '@visactor/vutils';\nimport {\n AttributeLevel,\n PREFIX,\n STACK_FIELD_END,\n STACK_FIELD_START,\n WaterfallDefaultSeriesField\n} from '../../constant/index';\nimport { waterfall, waterfallFillTotal } from '../../data/transforms/waterfall';\nimport { BarSeries } from '../bar/bar';\nimport { valueInScaleRange } from '../../util/scale';\nimport type { WaterfallAppearPreset } from './animation';\nimport { registerWaterfallAnimation } from './animation';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport type { IWaterfallSeriesSpec } from './interface';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { registerFadeInOutAnimation } from '../../animation/config';\nimport type { ITransformOptions, DataView } from '@visactor/vdataset';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { SeriesData } from '../base/series-data';\nimport { dataViewFromDataView } from '../../data/initialize';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport type { ITextMark } from '../../mark/text';\nimport type { IModelEvaluateOption } from '../../model/interface';\nimport type { Datum } from '../../typings';\nimport { Direction } from '../../typings/space';\nimport type { IBarAnimationParams } from '../bar/animation';\nimport { registerRuleMark } from '../../mark/rule';\nimport { waterfallSeriesMark } from './constant';\nimport { Group } from '../base/group';\nimport type { ILabelMark } from '../../mark/label';\nimport { Factory } from '../../core/factory';\nimport { registerRectMark } from '../../mark/rect';\nimport { getGroupAnimationParams } from '../util/utils';\nimport { WaterfallSeriesSpecTransformer } from './waterfall-transformer';\nimport { stackLabel } from '../../component/label/util';\nimport type { ILabelInfo } from '../../component/label/label';\n\nexport const DefaultBandWidth = 6; // 默认的bandWidth,避免连续轴没有bandWidth\n\nexport class WaterfallSeries<T extends IWaterfallSeriesSpec = IWaterfallSeriesSpec> extends BarSeries<any> {\n static readonly type: string = SeriesTypeEnum.waterfall;\n type = SeriesTypeEnum.waterfall;\n\n static readonly mark: SeriesMarkMap = waterfallSeriesMark;\n static readonly transformerConstructor = WaterfallSeriesSpecTransformer as any;\n readonly transformerConstructor = WaterfallSeriesSpecTransformer as any;\n\n protected _totalData?: SeriesData;\n getTotalData() {\n return this._totalData?.getLatestData();\n }\n\n protected declare _spec: T;\n\n protected _leaderLineMark: IRuleMark = null;\n protected _stackLabelMark: ITextMark = null;\n protected _labelMark: ITextMark = null;\n\n protected initGroups() {\n const groupFields = this.getGroupFields();\n if (groupFields && groupFields.length) {\n this._groups = new Group(groupFields);\n this._data && this._groups.initData(this._data.getDataView(), this._dataSet);\n }\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n // waterfall data stack data\n this.setValueFieldToStack();\n // 不支持多维度;\n this._fieldX = [this._fieldX[0]];\n this._fieldY = [this._fieldY[0]];\n if (isNil(this._seriesField)) {\n this._seriesField = WaterfallDefaultSeriesField;\n }\n }\n\n getSeriesKeys(): string[] {\n if (this._seriesField === WaterfallDefaultSeriesField) {\n return [\n this._theme.seriesFieldName.increase,\n this._theme.seriesFieldName.decrease,\n this._theme.seriesFieldName.total\n ];\n }\n return super.getSeriesKeys();\n }\n\n protected initData(): void {\n super.initData();\n registerDataSetInstanceTransform(this._dataSet, 'waterfallFillTotal', waterfallFillTotal);\n registerDataSetInstanceTransform(this._dataSet, 'waterfall', waterfall);\n // 如果要在最后添加总计\n if (isNil(this._spec.total) || this._spec.total.type === 'end') {\n this._rawData?.transform(\n {\n type: 'waterfallFillTotal',\n options: {\n indexField: this.getGroupFields()[0],\n valueField: this.getStackValueField(),\n seriesField: this.getSeriesField(),\n seriesFieldName: this._theme.seriesFieldName,\n total: this._spec.total\n }\n },\n false\n );\n }\n // 总计数据\n const totalData = dataViewFromDataView(this.getViewData(), this._dataSet, {\n name: `${PREFIX}_series_${this.id}_totalData`\n });\n this.getViewData().target.removeListener('change', totalData.reRunAllTransform);\n this._totalData = new SeriesData(this._option, totalData);\n totalData.transform(\n {\n type: 'waterfall',\n options: {\n indexField: this.getGroupFields()[0],\n valueField: this.getStackValueField(),\n seriesField: this.getSeriesField(),\n seriesFieldName: this._theme.seriesFieldName,\n startAs: STACK_FIELD_START,\n endAs: STACK_FIELD_END,\n total: this._spec.total,\n groupData: () => this.getGroups().groupData\n }\n },\n false\n );\n }\n\n initAnimation() {\n // 这个数据在这个时候拿不到,因为组件还没创建结束,统计和筛选也还没添加。\n // 而且这个值理论上是动态的,建议 监听 viewDataStatisticsUpdate 消息动态更新\n const waterfallAnimationParams: IBarAnimationParams = {\n yField: this.direction === 'horizontal' ? this._fieldY[0] : this.getStackValueField(),\n xField: this.direction === 'horizontal' ? this.getStackValueField() : this._fieldX[0],\n direction: this.direction,\n growFrom: () =>\n this.direction === 'horizontal'\n ? this._xAxisHelper?.getScale(0).scale(0)\n : this._yAxisHelper?.getScale(0).scale(0)\n };\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec<WaterfallAppearPreset>)?.preset;\n const animationParams = getGroupAnimationParams(this);\n\n this._barMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('waterfall')?.(waterfallAnimationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.bar, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n\n if (this._leaderLineMark) {\n this._leaderLineMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.leaderLine, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n\n viewDataUpdate(d: DataView): void {\n this._totalData.getDataView().reRunAllTransform();\n this._totalData.updateData();\n super.viewDataUpdate(d);\n }\n /**\n * data\n */\n // waterfall 不支持任何的 data filter\n addViewDataFilter(_option: ITransformOptions) {\n // do nothing\n }\n reFilterViewData() {\n // do nothing\n }\n\n onEvaluateEnd(ctx: IModelEvaluateOption): void {\n super.onEvaluateEnd(ctx);\n this._totalData.updateData();\n }\n\n initMark(): void {\n super.initMark();\n const leaderLine = this._createMark(WaterfallSeries.mark.leaderLine, {\n key: 'index',\n customShape: this._spec.leaderLine?.customShape,\n stateSort: this._spec.leaderLine?.stateSort\n }) as IRuleMark;\n if (leaderLine) {\n this._leaderLineMark = leaderLine;\n leaderLine.setDataView(this._totalData.getDataView(), this._totalData.getProductId());\n }\n }\n\n initLabelMarkStyle(labelMark: ILabelMark): void {\n if (!labelMark) {\n return;\n }\n\n if (!this._labelMark && this._spec.label?.visible) {\n super.initLabelMarkStyle(labelMark);\n this._labelMark = labelMark;\n return;\n }\n\n this._stackLabelMark = labelMark;\n // 瀑布图标签 encode 在自定义布局中计算\n labelMark.skipEncode = true;\n labelMark.setRule('stackLabel');\n labelMark.setDataView(this._totalData.getDataView(), this._totalData.getProductId());\n\n this.setMarkStyle(labelMark, {\n text: (datum: Datum) => {\n return this._spec.stackLabel?.valueType === 'absolute' ? datum.end : precisionSub(datum.end, datum.start);\n }\n });\n }\n\n getTotalLabelComponentStyle(info: Pick<ILabelInfo, 'baseMark' | 'labelMark'>) {\n return stackLabel(\n {\n ...info,\n series: this,\n // @ts-ignore\n labelSpec: this._spec.totalLabel\n },\n d => {\n return this._totalData.getLatestData().find((_d: Datum) => _d.index === d[this._fieldX[0]]);\n },\n (label, datum, attribute) => {\n attribute.text =\n this._spec.totalLabel?.valueType === 'absolute' ? datum.end : precisionSub(datum.end, datum.start);\n return attribute;\n }\n );\n }\n\n totalPositionX(datum: Datum, field: string, pos: number = 0.5) {\n const { dataToPosition, getBandwidth } = this._xAxisHelper;\n if (this._direction === Direction.horizontal) {\n return valueInScaleRange(\n dataToPosition([datum[field]], {\n bandPosition: this._bandPosition\n })\n );\n }\n return (\n dataToPosition([datum[field]], {\n bandPosition: this._bandPosition\n }) +\n getBandwidth(0) * 0.5 -\n (this._barMark.getAttribute('width', datum) as number) * (0.5 - pos)\n );\n }\n\n totalPositionY(datum: Datum, field: string, pos: number = 0.5) {\n const { dataToPosition, getBandwidth } = this._yAxisHelper;\n if (this._direction === Direction.horizontal) {\n return (\n dataToPosition([datum[field]], {\n bandPosition: this._bandPosition\n }) +\n getBandwidth(0) * 0.5 -\n (this._barMark.getAttribute('height', datum) as number) * (0.5 - pos)\n );\n }\n return valueInScaleRange(\n dataToPosition([datum[field]], {\n bandPosition: this._bandPosition\n })\n );\n }\n\n initMarkStyle(): void {\n super.initMarkStyle();\n if (this._leaderLineMark) {\n if (this._direction === Direction.horizontal) {\n this.setMarkStyle(\n this._leaderLineMark,\n {\n visible: (datum: Datum) => !isNil(datum.lastIndex),\n x: (datum: Datum) => this.totalPositionX(datum, 'lastEnd', 0),\n x1: (datum: Datum) => this.totalPositionX(datum, datum.isTotal ? 'end' : 'start', 0),\n y: (datum: Datum) => {\n if (!datum.lastIndex) {\n return 0;\n }\n return this.totalPositionY(datum, 'lastIndex', 1);\n },\n y1: (datum: Datum) => this.totalPositionY(datum, 'index', 0)\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n this._leaderLineMark,\n {\n visible: (datum: Datum) => !isNil(datum.lastIndex),\n x: (datum: Datum) => {\n if (!datum.lastIndex) {\n return 0;\n }\n return this.totalPositionX(datum, 'lastIndex', 1);\n },\n x1: (datum: Datum) => this.totalPositionX(datum, 'index', 0),\n y: (datum: Datum) => this.totalPositionY(datum, 'lastEnd', 0),\n y1: (datum: Datum) => this.totalPositionY(datum, datum.isTotal ? 'end' : 'start', 0)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n }\n}\n\nexport const registerWaterfallSeries = () => {\n registerRuleMark();\n registerRectMark();\n registerWaterfallAnimation();\n registerFadeInOutAnimation();\n Factory.registerSeries(WaterfallSeries.type, WaterfallSeries);\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/series/waterfall/waterfall.ts"],"names":[],"mappings":"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","file":"waterfall.js","sourcesContent":["/* eslint-disable no-duplicate-imports */\nimport type { IRuleMark } from '../../mark/rule';\nimport { isNil, precisionSub } from '@visactor/vutils';\nimport {\n AttributeLevel,\n PREFIX,\n STACK_FIELD_END,\n STACK_FIELD_START,\n WaterfallDefaultSeriesField\n} from '../../constant/index';\nimport { waterfall, waterfallFillTotal } from '../../data/transforms/waterfall';\nimport { BarSeries } from '../bar/bar';\nimport { valueInScaleRange } from '../../util/scale';\nimport type { WaterfallAppearPreset } from './animation';\nimport { registerWaterfallAnimation } from './animation';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport type { IWaterfallSeriesSpec } from './interface';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { registerFadeInOutAnimation } from '../../animation/config';\nimport type { ITransformOptions, DataView } from '@visactor/vdataset';\nimport { registerDataSetInstanceTransform } from '../../data/register';\nimport { SeriesData } from '../base/series-data';\nimport { dataViewFromDataView } from '../../data/initialize';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport type { ITextMark } from '../../mark/text';\nimport type { IModelEvaluateOption } from '../../model/interface';\nimport type { Datum } from '../../typings';\nimport { Direction } from '../../typings/space';\nimport type { IBarAnimationParams } from '../bar/animation';\nimport { registerRuleMark } from '../../mark/rule';\nimport { waterfallSeriesMark } from './constant';\nimport { Group } from '../base/group';\nimport type { ILabelMark } from '../../mark/label';\nimport { Factory } from '../../core/factory';\nimport { registerRectMark } from '../../mark/rect';\nimport { getGroupAnimationParams } from '../util/utils';\nimport { WaterfallSeriesSpecTransformer } from './waterfall-transformer';\nimport { stackLabel } from '../../component/label/util';\nimport type { ILabelInfo } from '../../component/label/label';\n\nexport const DefaultBandWidth = 6; // 默认的bandWidth,避免连续轴没有bandWidth\n\nexport class WaterfallSeries<T extends IWaterfallSeriesSpec = IWaterfallSeriesSpec> extends BarSeries<any> {\n static readonly type: string = SeriesTypeEnum.waterfall;\n type = SeriesTypeEnum.waterfall;\n\n static readonly mark: SeriesMarkMap = waterfallSeriesMark;\n static readonly transformerConstructor = WaterfallSeriesSpecTransformer as any;\n readonly transformerConstructor = WaterfallSeriesSpecTransformer as any;\n\n protected _totalData?: SeriesData;\n getTotalData() {\n return this._totalData?.getLatestData();\n }\n\n protected declare _spec: T;\n\n protected _leaderLineMark: IRuleMark = null;\n protected _stackLabelMark: ITextMark = null;\n protected _labelMark: ITextMark = null;\n\n protected initGroups() {\n const groupFields = this.getGroupFields();\n if (groupFields && groupFields.length) {\n this._groups = new Group(groupFields);\n this._data && this._groups.initData(this._data.getDataView(), this._dataSet);\n }\n }\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n // waterfall data stack data\n this.setValueFieldToStack();\n // 不支持多维度;\n this._fieldX = [this._fieldX[0]];\n this._fieldY = [this._fieldY[0]];\n if (isNil(this._seriesField)) {\n this._seriesField = WaterfallDefaultSeriesField;\n }\n }\n\n getSeriesKeys(): string[] {\n if (this._seriesField === WaterfallDefaultSeriesField) {\n return [\n this._theme.seriesFieldName.increase,\n this._theme.seriesFieldName.decrease,\n this._theme.seriesFieldName.total\n ];\n }\n return super.getSeriesKeys();\n }\n\n protected initData(): void {\n super.initData();\n registerDataSetInstanceTransform(this._dataSet, 'waterfallFillTotal', waterfallFillTotal);\n registerDataSetInstanceTransform(this._dataSet, 'waterfall', waterfall);\n // 如果要在最后添加总计\n if (isNil(this._spec.total) || this._spec.total.type === 'end') {\n this._rawData?.transform(\n {\n type: 'waterfallFillTotal',\n options: {\n indexField: this.getGroupFields()[0],\n valueField: this.getStackValueField(),\n seriesField: this.getSeriesField(),\n seriesFieldName: this._theme.seriesFieldName,\n total: this._spec.total\n }\n },\n false\n );\n }\n // 总计数据\n const totalData = dataViewFromDataView(this.getViewData(), this._dataSet, {\n name: `${PREFIX}_series_${this.id}_totalData`\n });\n this.getViewData().target.removeListener('change', totalData.reRunAllTransform);\n this._totalData = new SeriesData(this._option, totalData);\n totalData.transform(\n {\n type: 'waterfall',\n options: {\n indexField: this.getGroupFields()[0],\n valueField: this.getStackValueField(),\n seriesField: this.getSeriesField(),\n seriesFieldName: this._theme.seriesFieldName,\n startAs: STACK_FIELD_START,\n endAs: STACK_FIELD_END,\n total: this._spec.total,\n groupData: () => this.getGroups().groupData\n }\n },\n false\n );\n }\n\n initAnimation() {\n // 这个数据在这个时候拿不到,因为组件还没创建结束,统计和筛选也还没添加。\n // 而且这个值理论上是动态的,建议 监听 viewDataStatisticsUpdate 消息动态更新\n const waterfallAnimationParams: IBarAnimationParams = {\n yField: this.direction === 'horizontal' ? this._fieldY[0] : this.getStackValueField(),\n xField: this.direction === 'horizontal' ? this.getStackValueField() : this._fieldX[0],\n direction: this.direction,\n growFrom: () =>\n this.direction === 'horizontal'\n ? this._xAxisHelper?.getScale(0).scale(0)\n : this._yAxisHelper?.getScale(0).scale(0)\n };\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec<WaterfallAppearPreset>)?.preset;\n const animationParams = getGroupAnimationParams(this);\n\n this._barMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('waterfall')?.(waterfallAnimationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.bar, this._spec, this._markAttributeContext),\n animationParams\n )\n );\n\n if (this._leaderLineMark) {\n this._leaderLineMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('fadeInOut')?.(),\n userAnimationConfig(SeriesMarkNameEnum.leaderLine, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n\n viewDataUpdate(d: DataView): void {\n this._totalData.getDataView().reRunAllTransform();\n this._totalData.updateData();\n super.viewDataUpdate(d);\n }\n /**\n * data\n */\n // waterfall 不支持任何的 data filter\n addViewDataFilter(_option: ITransformOptions) {\n // do nothing\n }\n reFilterViewData() {\n // do nothing\n }\n\n onEvaluateEnd(ctx: IModelEvaluateOption): void {\n super.onEvaluateEnd(ctx);\n this._totalData.updateData();\n }\n\n initMark(): void {\n super.initMark();\n const leaderLine = this._createMark(WaterfallSeries.mark.leaderLine, {\n key: 'index',\n customShape: this._spec.leaderLine?.customShape,\n stateSort: this._spec.leaderLine?.stateSort\n }) as IRuleMark;\n if (leaderLine) {\n this._leaderLineMark = leaderLine;\n leaderLine.setDataView(this._totalData.getDataView(), this._totalData.getProductId());\n }\n }\n\n initLabelMarkStyle(labelMark: ILabelMark): void {\n if (!labelMark) {\n return;\n }\n\n if (!this._labelMark && this._spec.label?.visible) {\n super.initLabelMarkStyle(labelMark);\n this._labelMark = labelMark;\n return;\n }\n\n this._stackLabelMark = labelMark;\n // 瀑布图标签 encode 在自定义布局中计算\n labelMark.skipEncode = true;\n labelMark.setRule('stackLabel');\n labelMark.setDataView(this._totalData.getDataView(), this._totalData.getProductId());\n\n this.setMarkStyle(labelMark, {\n text: (datum: Datum) => {\n return this._spec.stackLabel?.valueType === 'absolute' ? datum.end : precisionSub(datum.end, datum.start);\n }\n });\n }\n\n // 样式设置在这里的原因是执行顺序的问题\n // 首先执行这里的 mark.style\n // 然后执行用户的 formatMethod\n // 最后执行下方的 getTotalLabelComponentStyle 。如果在下方实现值函数,就会导致用户format无法生效\n initTotalLabelMarkStyle(labelMark: ILabelMark) {\n this.setMarkStyle(labelMark, {\n text: (datum: Datum) => {\n if (!('end' in datum)) {\n return this.direction === Direction.horizontal ? datum[this._fieldX[0]] : datum[this._fieldY[0]];\n }\n return this._spec.totalLabel?.valueType === 'absolute' ? datum.end : precisionSub(datum.end, datum.start);\n }\n });\n }\n\n getTotalLabelComponentStyle(info: Pick<ILabelInfo, 'baseMark' | 'labelMark'>) {\n return stackLabel(\n {\n ...info,\n series: this,\n // @ts-ignore\n labelSpec: this._spec.totalLabel\n },\n d => {\n const index = this.direction === Direction.vertical ? d[this._fieldX[0]] : d[this._fieldY[0]];\n return this._totalData.getLatestData().find((_d: Datum) => _d.index === index);\n }\n );\n }\n\n totalPositionX(datum: Datum, field: string, pos: number = 0.5) {\n const { dataToPosition, getBandwidth } = this._xAxisHelper;\n if (this._direction === Direction.horizontal) {\n return valueInScaleRange(\n dataToPosition([datum[field]], {\n bandPosition: this._bandPosition\n })\n );\n }\n return (\n dataToPosition([datum[field]], {\n bandPosition: this._bandPosition\n }) +\n getBandwidth(0) * 0.5 -\n (this._barMark.getAttribute('width', datum) as number) * (0.5 - pos)\n );\n }\n\n totalPositionY(datum: Datum, field: string, pos: number = 0.5) {\n const { dataToPosition, getBandwidth } = this._yAxisHelper;\n if (this._direction === Direction.horizontal) {\n return (\n dataToPosition([datum[field]], {\n bandPosition: this._bandPosition\n }) +\n getBandwidth(0) * 0.5 -\n (this._barMark.getAttribute('height', datum) as number) * (0.5 - pos)\n );\n }\n return valueInScaleRange(\n dataToPosition([datum[field]], {\n bandPosition: this._bandPosition\n })\n );\n }\n\n initMarkStyle(): void {\n super.initMarkStyle();\n if (this._leaderLineMark) {\n if (this._direction === Direction.horizontal) {\n this.setMarkStyle(\n this._leaderLineMark,\n {\n visible: (datum: Datum) => !isNil(datum.lastIndex),\n x: (datum: Datum) => this.totalPositionX(datum, 'lastEnd', 0),\n x1: (datum: Datum) => this.totalPositionX(datum, datum.isTotal ? 'end' : 'start', 0),\n y: (datum: Datum) => {\n if (!datum.lastIndex) {\n return 0;\n }\n return this.totalPositionY(datum, 'lastIndex', 1);\n },\n y1: (datum: Datum) => this.totalPositionY(datum, 'index', 0)\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n this._leaderLineMark,\n {\n visible: (datum: Datum) => !isNil(datum.lastIndex),\n x: (datum: Datum) => {\n if (!datum.lastIndex) {\n return 0;\n }\n return this.totalPositionX(datum, 'lastIndex', 1);\n },\n x1: (datum: Datum) => this.totalPositionX(datum, 'index', 0),\n y: (datum: Datum) => this.totalPositionY(datum, 'lastEnd', 0),\n y1: (datum: Datum) => this.totalPositionY(datum, datum.isTotal ? 'end' : 'start', 0)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n }\n}\n\nexport const registerWaterfallSeries = () => {\n registerRuleMark();\n registerRectMark();\n registerWaterfallAnimation();\n registerFadeInOutAnimation();\n Factory.registerSeries(WaterfallSeries.type, WaterfallSeries);\n};\n"]}
|
|
@@ -36,7 +36,9 @@ export declare class BaseWordCloudSeries<T extends IBaseWordCloudSeriesSpec = IB
|
|
|
36
36
|
protected _defaultFontFamily: string;
|
|
37
37
|
protected _keyWordColorCallback: (datum: Datum) => string;
|
|
38
38
|
protected _fillingColorCallback: (datum: Datum) => string;
|
|
39
|
+
protected _dataChange: boolean;
|
|
39
40
|
setAttrFromSpec(): void;
|
|
41
|
+
protected initData(): void;
|
|
40
42
|
protected _wordMark: ITextMark;
|
|
41
43
|
initMark(): void;
|
|
42
44
|
initMarkStyle(): void;
|
|
@@ -9,8 +9,8 @@ const vutils_1 = require("@visactor/vutils"), vutils_2 = require("@visactor/vuti
|
|
|
9
9
|
class BaseWordCloudSeries extends base_series_1.BaseSeries {
|
|
10
10
|
constructor() {
|
|
11
11
|
super(...arguments), this._fontSizeRange = [ config_1.DEFAULT_MIN_FONT_SIZE, config_1.DEFAULT_MIN_FONT_SIZE ],
|
|
12
|
-
this._isWordCloudShape = !1, this.getWordColor = datum => datum.isFillingWord ? (this._fillingColorCallback || (this._fillingColorCallback = this._wordCloudShapeConfig.fillingColorHexField ? datum => datum[this._wordCloudShapeConfig.fillingColorHexField] : this.initColorCallback(this._wordCloudShapeConfig.fillingSeriesField, !0)),
|
|
13
|
-
this._fillingColorCallback(datum)) : (this._keyWordColorCallback || (this._keyWordColorCallback = this._colorHexField ? datum => datum[this._colorHexField] : this.initColorCallback(this._seriesField, !1)),
|
|
12
|
+
this._isWordCloudShape = !1, this._dataChange = !0, this.getWordColor = datum => datum.isFillingWord ? (this._fillingColorCallback && !this._dataChange || (this._fillingColorCallback = this._wordCloudShapeConfig.fillingColorHexField ? datum => datum[this._wordCloudShapeConfig.fillingColorHexField] : this.initColorCallback(this._wordCloudShapeConfig.fillingSeriesField, !0)),
|
|
13
|
+
this._fillingColorCallback(datum)) : (this._keyWordColorCallback && !this._dataChange || (this._keyWordColorCallback = this._colorHexField ? datum => datum[this._colorHexField] : this.initColorCallback(this._seriesField, !1)),
|
|
14
14
|
this._keyWordColorCallback(datum));
|
|
15
15
|
}
|
|
16
16
|
setValueField(field) {
|
|
@@ -43,6 +43,12 @@ class BaseWordCloudSeries extends base_series_1.BaseSeries {
|
|
|
43
43
|
}, this._spec.wordCloudShapeConfig), this._fillingFontPadding = null !== (_k = null === (_j = this._spec.fillingWord) || void 0 === _j ? void 0 : _j.padding) && void 0 !== _k ? _k : config_1.DEFAULT_FONT_PADDING,
|
|
44
44
|
this._isWordCloudShape = !config_1.SHAPE_TYPE.includes(this._maskShape), this._defaultFontFamily = this._option.getTheme().fontFamily;
|
|
45
45
|
}
|
|
46
|
+
initData() {
|
|
47
|
+
var _a, _b;
|
|
48
|
+
super.initData(), null === (_b = null === (_a = this.getViewData()) || void 0 === _a ? void 0 : _a.target) || void 0 === _b || _b.addListener("change", (() => {
|
|
49
|
+
this._dataChange = !0, this.compile();
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
46
52
|
initMark() {
|
|
47
53
|
this._wordMark = this._createMark(BaseWordCloudSeries.mark.word, {
|
|
48
54
|
key: constant_1.DEFAULT_DATA_KEY,
|
|
@@ -109,7 +115,6 @@ class BaseWordCloudSeries extends base_series_1.BaseSeries {
|
|
|
109
115
|
const {width: width, height: height} = this._region.getLayoutRect();
|
|
110
116
|
if (!(0, vutils_1.isValidNumber)(width) || !(0, vutils_1.isValidNumber)(height) || !(height > 0 && width > 0)) return;
|
|
111
117
|
const wordCloudTransforms = [], valueField = this._valueField, valueScale = new vscale_1.LinearScale, fontWeightRange = this._fontWeightRange;
|
|
112
|
-
this._rotateAngles, this._wordCloudShapeConfig.fillingRotateAngles;
|
|
113
118
|
if (valueField) {
|
|
114
119
|
const [minValue, maxValue] = (0, vgrammar_util_1.extent)(null === (_a = this.getViewData()) || void 0 === _a ? void 0 : _a.latestData.map((datum => +datum[valueField])));
|
|
115
120
|
valueScale.domain([ minValue, maxValue ], !0).range(fontWeightRange), wordCloudTransforms.push({
|
|
@@ -247,7 +252,7 @@ class BaseWordCloudSeries extends base_series_1.BaseSeries {
|
|
|
247
252
|
return "";
|
|
248
253
|
}
|
|
249
254
|
onLayoutEnd(ctx) {
|
|
250
|
-
super.onLayoutEnd(ctx), this.compile();
|
|
255
|
+
super.onLayoutEnd(ctx), this.compile(), this._dataChange = !1;
|
|
251
256
|
}
|
|
252
257
|
getActiveMarks() {
|
|
253
258
|
return [ this._wordMark ];
|