@visactor/vchart 1.13.13-alpha.2 → 1.13.13-alpha.3

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.
Files changed (38) hide show
  1. package/build/es5/index.js +1 -1
  2. package/build/index.es.js +101 -71
  3. package/build/index.js +165 -135
  4. package/build/index.min.js +1 -1
  5. package/build/tsconfig.tsbuildinfo +1 -1
  6. package/cjs/component/axis/cartesian/band-axis.d.ts +8 -0
  7. package/cjs/component/axis/cartesian/band-axis.js +9 -0
  8. package/cjs/component/axis/cartesian/band-axis.js.map +1 -1
  9. package/cjs/component/axis/mixin/band-axis-mixin.d.ts +2 -0
  10. package/cjs/component/axis/mixin/band-axis-mixin.js +15 -1
  11. package/cjs/component/axis/mixin/band-axis-mixin.js.map +1 -1
  12. package/cjs/core/index.d.ts +1 -2
  13. package/cjs/core/index.js +4 -5
  14. package/cjs/core/index.js.map +1 -1
  15. package/cjs/series/dot/dot.d.ts +1 -1
  16. package/cjs/series/link/link.d.ts +1 -1
  17. package/cjs/series/sankey/interface.d.ts +0 -2
  18. package/cjs/series/sankey/interface.js.map +1 -1
  19. package/cjs/series/sankey/sankey.d.ts +6 -7
  20. package/cjs/series/sankey/sankey.js +46 -43
  21. package/cjs/series/sankey/sankey.js.map +1 -1
  22. package/esm/component/axis/cartesian/band-axis.d.ts +8 -0
  23. package/esm/component/axis/cartesian/band-axis.js +9 -1
  24. package/esm/component/axis/cartesian/band-axis.js.map +1 -1
  25. package/esm/component/axis/mixin/band-axis-mixin.d.ts +2 -0
  26. package/esm/component/axis/mixin/band-axis-mixin.js +15 -1
  27. package/esm/component/axis/mixin/band-axis-mixin.js.map +1 -1
  28. package/esm/core/index.d.ts +1 -2
  29. package/esm/core/index.js +1 -3
  30. package/esm/core/index.js.map +1 -1
  31. package/esm/series/dot/dot.d.ts +1 -1
  32. package/esm/series/link/link.d.ts +1 -1
  33. package/esm/series/sankey/interface.d.ts +0 -2
  34. package/esm/series/sankey/interface.js.map +1 -1
  35. package/esm/series/sankey/sankey.d.ts +6 -7
  36. package/esm/series/sankey/sankey.js +40 -43
  37. package/esm/series/sankey/sankey.js.map +1 -1
  38. package/package.json +8 -8
@@ -37,5 +37,13 @@ export declare class CartesianBandAxis<T extends ICartesianBandAxisSpec = ICarte
37
37
  maxBandSize: number;
38
38
  minBandSize: number;
39
39
  };
40
+ _compareSpec(spec: T, prevSpec: T): {
41
+ change: boolean;
42
+ reMake: boolean;
43
+ reRender: boolean;
44
+ reSize: boolean;
45
+ reCompile: boolean;
46
+ };
47
+ reInit(spec?: T): void;
40
48
  }
41
49
  export declare const registerCartesianBandAxis: () => void;
@@ -73,6 +73,15 @@ class CartesianBandAxis extends axis_1.CartesianAxis {
73
73
  minBandSize: minBandSize
74
74
  };
75
75
  }
76
+ _compareSpec(spec, prevSpec) {
77
+ const result = super._compareSpec(spec, prevSpec);
78
+ return result.reMake || (null == prevSpec ? void 0 : prevSpec.showAllGroupLayers) === (null == spec ? void 0 : spec.showAllGroupLayers) && (0,
79
+ vutils_1.isEqual)(null == prevSpec ? void 0 : prevSpec.layers, null == spec ? void 0 : spec.layers) || (result.reMake = !0),
80
+ result;
81
+ }
82
+ reInit(spec) {
83
+ super.reInit(), null == this || this._updateData();
84
+ }
76
85
  }
77
86
 
78
87
  exports.CartesianBandAxis = CartesianBandAxis, CartesianBandAxis.type = interface_1.ComponentTypeEnum.cartesianBandAxis,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/component/axis/cartesian/band-axis.ts"],"names":[],"mappings":";;;AAAA,6CAAkE;AAClE,iCAAuC;AAEvC,+CAAoD;AACpD,6CAAmE;AACnE,8DAAyD;AAEzD,mDAAgD;AAChD,4CAA4C;AAC5C,2DAA6E;AAC7E,qEAAmE;AACnE,qDAA0E;AAS1E,MAAa,iBAA6E,SAAQ,oBAAgB;IAAlH;;QAEE,SAAI,GAAG,6BAAiB,CAAC,iBAAiB,CAAC;QAIjC,WAAM,GAAc,IAAI,kBAAS,EAAE,CAAC;IAuHhD,CAAC;IAnHW,aAAa,CAAC,IAAmD;QACzE,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAES,gBAAgB;QACxB,MAAM,SAAS,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAC3C,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE7B,OAAO,SAAS,CAAC;IACnB,CAAC;IAES,UAAU;QAClB,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAChF,CAAC;IAES,UAAU;QAClB,MAAM,QAAQ,GAAG,CAAC,QAAgB,CAAC,EAAE,EAAE;YACrC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC;QACF,MAAM,YAAY,GAAG,CAAC,QAAgB,CAAC,EAAE,EAAE;YACzC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;QACrC,CAAC,CAAC;QAEF,OAAO;YACL,YAAY,EAAE,KAAK;YACnB,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9C,QAAQ;YACR,YAAY;YACZ,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI;YAC5B,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;YACxB,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ;YAC9B,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK;SAC1B,CAAC;IACJ,CAAC;IAES,sBAAsB;QAC9B,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,QAAQ,CAAC;QAClC,IAAA,2CAAgC,EAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,wCAAmB,CAAC,CAAC;QAElF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,oBAAoB;QAClB,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAChC,CAAC;IAED,sBAAsB;QACpB,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAChF,IAAI,QAAQ,EAAE;gBACZ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;aACjC;YACD,IAAI,WAAW,EAAE;gBACf,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;aACvC;YACD,IAAI,WAAW,EAAE;gBACf,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;aACvC;YAED,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,QAAQ,IAAI,WAAW,CAAC,EAAE;gBAC5F,MAAM,SAAS,GAAG,IAAA,4BAAmB,EACnC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAC3B,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,WAAW,EACvB,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,EAC1B,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAC3B,CAAC;gBACF,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;oBAC5C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;iBAChE;qBAAM,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;oBACnD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;iBACjE;aACF;SACF;IACH,CAAC;IAGS,yBAAyB;;QACjC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC3E,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,MAAA,IAAI,CAAC,KAAK,CAAC,cAAc,mCAAI,EAAE,CAAC;QAC5D,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAGjE,KAAK,IAAI,CAAC,GAAG,aAAa,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;YAC1C,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;YAE1C,MAAM,gBAAgB,GAAG,CAAC,CAAS,EAAE,EAAE;gBACrC,MAAM,WAAW,GAAG,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrD,IAAI,IAAA,cAAK,EAAC,GAAG,CAAC,IAAI,CAAC,GAAG,aAAa,EAAE;oBACnC,OAAO,IAAA,4BAAmB,EAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,GAAG,WAAW,CAAC;iBACxF;gBACD,MAAM,QAAQ,GAAG,IAAA,iBAAQ,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBAE5F,OAAO,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC;YACnG,CAAC,CAAC;YAEF,IAAI,IAAA,gBAAO,EAAC,QAAQ,CAAC,EAAE;gBACrB,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;aACvC;YACD,IAAI,IAAA,gBAAO,EAAC,WAAW,CAAC,EAAE;gBACxB,WAAW,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;aAC7C;YACD,IAAI,IAAA,gBAAO,EAAC,WAAW,CAAC,EAAE;gBACxB,WAAW,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;aAC7C;SACF;QAED,OAAO;YACL,QAAQ;YACR,WAAW;YACX,WAAW;SACZ,CAAC;IACJ,CAAC;;AA5HH,8CA6HC;AA5HQ,sBAAI,GAAG,6BAAiB,CAAC,iBAAiB,CAAC;AAG3C,yBAAO,GAAG,MAAM,CAAC;AA2H1B,IAAA,cAAK,EAAC,iBAAiB,EAAE,+BAAa,CAAC,CAAC;AAEjC,MAAM,yBAAyB,GAAG,GAAG,EAAE;IAC5C,IAAA,gCAAgB,GAAE,CAAC;IACnB,IAAA,gCAAgB,GAAE,CAAC;IACnB,IAAA,wBAAY,GAAE,CAAC;IACf,iBAAO,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;AACvE,CAAC,CAAC;AALW,QAAA,yBAAyB,6BAKpC","file":"band-axis.js","sourcesContent":["import { BandScale, scaleWholeRangeSize } from '@visactor/vscale';\nimport { CartesianAxis } from './axis';\nimport type { ICartesianBandAxisSpec } from './interface';\nimport { ComponentTypeEnum } from '../../interface';\nimport { isNil, isString, isValid, mixin } from '@visactor/vutils';\nimport { BandAxisMixin } from '../mixin/band-axis-mixin';\nimport type { StringOrNumber } from '../../../typings';\nimport { Factory } from '../../../core/factory';\nimport { registerAxis } from '../base-axis';\nimport { registerLineAxis, registerLineGrid } from '@visactor/vgrammar-core';\nimport { linearDiscreteTicks } from '@visactor/vrender-components';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\n\nexport interface CartesianBandAxis<T extends ICartesianBandAxisSpec = ICartesianBandAxisSpec>\n extends Pick<\n BandAxisMixin,\n 'valueToPosition' | 'updateGroupScaleRange' | 'getPosition' | 'calcScales' | 'computeBandDomain'\n >,\n CartesianAxis<T> {}\n\nexport class CartesianBandAxis<T extends ICartesianBandAxisSpec = ICartesianBandAxisSpec> extends CartesianAxis<T> {\n static type = ComponentTypeEnum.cartesianBandAxis;\n type = ComponentTypeEnum.cartesianBandAxis;\n\n static specKey = 'axes';\n\n protected _scale: BandScale = new BandScale();\n\n protected declare _scales: BandScale[];\n\n protected computeDomain(data: { min: number; max: number; values: any[] }[]): StringOrNumber[] {\n return this.computeBandDomain(data);\n }\n\n protected updateScaleRange() {\n const isChanged = super.updateScaleRange();\n this.updateGroupScaleRange();\n\n return isChanged;\n }\n\n protected initScales() {\n super.initScales();\n this.calcScales(this._defaultBandInnerPadding, this._defaultBandOuterPadding);\n }\n\n protected axisHelper() {\n const getScale = (depth: number = 0) => {\n return this._scales[depth];\n };\n const getBandwidth = (depth: number = 0) => {\n return getScale(depth).bandwidth();\n };\n\n return {\n isContinuous: false,\n dataToPosition: this.dataToPosition.bind(this),\n getScale,\n getBandwidth,\n getAxisType: () => this.type,\n getAxisId: () => this.id,\n isInverse: () => this._inverse,\n getSpec: () => this._spec\n };\n }\n\n protected registerTicksTransform() {\n const name = `${this.type}-ticks`;\n registerDataSetInstanceTransform(this._option.dataSet, name, linearDiscreteTicks);\n\n return name;\n }\n transformScaleDomain() {\n this.updateFixedWholeLength();\n }\n\n updateFixedWholeLength() {\n if (this._scale) {\n const { bandSize, maxBandSize, minBandSize } = this._getOuterBandSizeFromSpec();\n if (bandSize) {\n this._scale.bandwidth(bandSize);\n }\n if (maxBandSize) {\n this._scale.maxBandwidth(maxBandSize);\n }\n if (minBandSize) {\n this._scale.minBandwidth(minBandSize);\n }\n // 更改 region 最大大小\n if (this._scale.isBandwidthFixed() && this._spec.autoRegionSize && (bandSize || maxBandSize)) {\n const rangeSize = scaleWholeRangeSize(\n this._scale.domain().length,\n bandSize ?? maxBandSize,\n this._scale.paddingInner(),\n this._scale.paddingOuter()\n );\n if (['bottom', 'top'].includes(this._orient)) {\n this._regions.forEach(region => region.setMaxWidth(rangeSize));\n } else if (['left', 'right'].includes(this._orient)) {\n this._regions.forEach(region => region.setMaxHeight(rangeSize));\n }\n }\n }\n }\n\n /** 获取最外层 scale 的实际 bandSize 配置 */\n protected _getOuterBandSizeFromSpec() {\n let { bandSize, maxBandSize, minBandSize, bandSizeLevel = 0 } = this._spec;\n const { gap, extend = 0 } = this._spec.bandSizeExtend ?? {};\n bandSizeLevel = Math.min(bandSizeLevel, this._scales.length - 1);\n\n // 由内而外计算最外层 scale 的 bandSize\n for (let i = bandSizeLevel; i > 0; i--) {\n const scale = this._scales[i];\n const domain = scale.domain();\n const paddingInner = scale.paddingInner();\n const paddingOuter = scale.paddingOuter();\n\n const getOuterBandSize = (b: number) => {\n const extendValue = i === bandSizeLevel ? extend : 0;\n if (isNil(gap) || i < bandSizeLevel) {\n return scaleWholeRangeSize(domain.length, b, paddingInner, paddingOuter) + extendValue;\n }\n const gapValue = isString(gap) ? b * (Number(gap.substring(0, gap.length - 1)) / 100) : gap;\n // 这里使组间距恰好等于柱间距\n return ((b + gapValue) * domain.length) / (this._scales[i - 1].paddingInner() + 1) + extendValue;\n };\n\n if (isValid(bandSize)) {\n bandSize = getOuterBandSize(bandSize);\n }\n if (isValid(maxBandSize)) {\n maxBandSize = getOuterBandSize(maxBandSize);\n }\n if (isValid(minBandSize)) {\n minBandSize = getOuterBandSize(minBandSize);\n }\n }\n\n return {\n bandSize,\n maxBandSize,\n minBandSize\n };\n }\n}\n\nmixin(CartesianBandAxis, BandAxisMixin);\n\nexport const registerCartesianBandAxis = () => {\n registerLineAxis();\n registerLineGrid();\n registerAxis();\n Factory.registerComponent(CartesianBandAxis.type, CartesianBandAxis);\n};\n"]}
1
+ {"version":3,"sources":["../src/component/axis/cartesian/band-axis.ts"],"names":[],"mappings":"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","file":"band-axis.js","sourcesContent":["import { BandScale, scaleWholeRangeSize } from '@visactor/vscale';\nimport { CartesianAxis } from './axis';\nimport type { ICartesianBandAxisSpec } from './interface';\nimport { ComponentTypeEnum } from '../../interface';\nimport { isEqual, isNil, isString, isValid, mixin } from '@visactor/vutils';\nimport { BandAxisMixin } from '../mixin/band-axis-mixin';\nimport type { StringOrNumber } from '../../../typings';\nimport { Factory } from '../../../core/factory';\nimport { registerAxis } from '../base-axis';\nimport { registerLineAxis, registerLineGrid } from '@visactor/vgrammar-core';\nimport { linearDiscreteTicks } from '@visactor/vrender-components';\nimport { registerDataSetInstanceTransform } from '../../../data/register';\n\nexport interface CartesianBandAxis<T extends ICartesianBandAxisSpec = ICartesianBandAxisSpec>\n extends Pick<\n BandAxisMixin,\n 'valueToPosition' | 'updateGroupScaleRange' | 'getPosition' | 'calcScales' | 'computeBandDomain'\n >,\n CartesianAxis<T> {}\n\nexport class CartesianBandAxis<T extends ICartesianBandAxisSpec = ICartesianBandAxisSpec> extends CartesianAxis<T> {\n static type = ComponentTypeEnum.cartesianBandAxis;\n type = ComponentTypeEnum.cartesianBandAxis;\n\n static specKey = 'axes';\n\n protected _scale: BandScale = new BandScale();\n\n protected declare _scales: BandScale[];\n\n protected computeDomain(data: { min: number; max: number; values: any[] }[]): StringOrNumber[] {\n return this.computeBandDomain(data);\n }\n\n protected updateScaleRange() {\n const isChanged = super.updateScaleRange();\n this.updateGroupScaleRange();\n\n return isChanged;\n }\n\n protected initScales() {\n super.initScales();\n this.calcScales(this._defaultBandInnerPadding, this._defaultBandOuterPadding);\n }\n\n protected axisHelper() {\n const getScale = (depth: number = 0) => {\n return this._scales[depth];\n };\n const getBandwidth = (depth: number = 0) => {\n return getScale(depth).bandwidth();\n };\n\n return {\n isContinuous: false,\n dataToPosition: this.dataToPosition.bind(this),\n getScale,\n getBandwidth,\n getAxisType: () => this.type,\n getAxisId: () => this.id,\n isInverse: () => this._inverse,\n getSpec: () => this._spec\n };\n }\n\n protected registerTicksTransform() {\n const name = `${this.type}-ticks`;\n registerDataSetInstanceTransform(this._option.dataSet, name, linearDiscreteTicks);\n\n return name;\n }\n transformScaleDomain() {\n this.updateFixedWholeLength();\n }\n\n updateFixedWholeLength() {\n if (this._scale) {\n const { bandSize, maxBandSize, minBandSize } = this._getOuterBandSizeFromSpec();\n if (bandSize) {\n this._scale.bandwidth(bandSize);\n }\n if (maxBandSize) {\n this._scale.maxBandwidth(maxBandSize);\n }\n if (minBandSize) {\n this._scale.minBandwidth(minBandSize);\n }\n // 更改 region 最大大小\n if (this._scale.isBandwidthFixed() && this._spec.autoRegionSize && (bandSize || maxBandSize)) {\n const rangeSize = scaleWholeRangeSize(\n this._scale.domain().length,\n bandSize ?? maxBandSize,\n this._scale.paddingInner(),\n this._scale.paddingOuter()\n );\n if (['bottom', 'top'].includes(this._orient)) {\n this._regions.forEach(region => region.setMaxWidth(rangeSize));\n } else if (['left', 'right'].includes(this._orient)) {\n this._regions.forEach(region => region.setMaxHeight(rangeSize));\n }\n }\n }\n }\n\n /** 获取最外层 scale 的实际 bandSize 配置 */\n protected _getOuterBandSizeFromSpec() {\n let { bandSize, maxBandSize, minBandSize, bandSizeLevel = 0 } = this._spec;\n const { gap, extend = 0 } = this._spec.bandSizeExtend ?? {};\n bandSizeLevel = Math.min(bandSizeLevel, this._scales.length - 1);\n\n // 由内而外计算最外层 scale 的 bandSize\n for (let i = bandSizeLevel; i > 0; i--) {\n const scale = this._scales[i];\n const domain = scale.domain();\n const paddingInner = scale.paddingInner();\n const paddingOuter = scale.paddingOuter();\n\n const getOuterBandSize = (b: number) => {\n const extendValue = i === bandSizeLevel ? extend : 0;\n if (isNil(gap) || i < bandSizeLevel) {\n return scaleWholeRangeSize(domain.length, b, paddingInner, paddingOuter) + extendValue;\n }\n const gapValue = isString(gap) ? b * (Number(gap.substring(0, gap.length - 1)) / 100) : gap;\n // 这里使组间距恰好等于柱间距\n return ((b + gapValue) * domain.length) / (this._scales[i - 1].paddingInner() + 1) + extendValue;\n };\n\n if (isValid(bandSize)) {\n bandSize = getOuterBandSize(bandSize);\n }\n if (isValid(maxBandSize)) {\n maxBandSize = getOuterBandSize(maxBandSize);\n }\n if (isValid(minBandSize)) {\n minBandSize = getOuterBandSize(minBandSize);\n }\n }\n\n return {\n bandSize,\n maxBandSize,\n minBandSize\n };\n }\n\n _compareSpec(spec: T, prevSpec: T) {\n const result = super._compareSpec(spec, prevSpec);\n if (result.reMake) {\n return result;\n }\n\n if (prevSpec?.showAllGroupLayers !== spec?.showAllGroupLayers || !isEqual(prevSpec?.layers, spec?.layers)) {\n result.reMake = true;\n }\n\n return result;\n }\n\n reInit(spec?: T): void {\n super.reInit();\n\n (this as any)?._updateData();\n }\n}\n\nmixin(CartesianBandAxis, BandAxisMixin);\n\nexport const registerCartesianBandAxis = () => {\n registerLineAxis();\n registerLineGrid();\n registerAxis();\n Factory.registerComponent(CartesianBandAxis.type, CartesianBandAxis);\n};\n"]}
@@ -32,10 +32,12 @@ export interface BandAxisMixin {
32
32
  _tickTransformOption: () => any;
33
33
  _forceLayout: () => void;
34
34
  _getNormalizedValue: (values: any[], length: number) => number;
35
+ registerTicksTransform: () => string;
35
36
  }
36
37
  export declare class BandAxisMixin {
37
38
  private _tickDataMap;
38
39
  protected _initData(): void;
40
+ protected _updateData(): void;
39
41
  protected _rawDomainIndex: {
40
42
  [key: string | number | symbol]: number;
41
43
  }[];
@@ -30,6 +30,20 @@ class BandAxisMixin {
30
30
  };
31
31
  }
32
32
  }
33
+ _updateData() {
34
+ var _a, _b, _c;
35
+ const tickTransformType = this.registerTicksTransform();
36
+ if (this._spec.showAllGroupLayers && this._scales.length > 1) {
37
+ const layers = null !== (_a = this._spec.layers) && void 0 !== _a ? _a : [];
38
+ Object.keys(this._tickDataMap).forEach((layer => {
39
+ const layerConfig = layers[this._scales.length - 1 - +layer] || {}, tickData = this._tickDataMap[layer], tickTransform = null == tickData ? void 0 : tickData.getDataView().transformsArr.find((t => t.type === tickTransformType));
40
+ tickTransform && (tickTransform.options = Object.assign(Object.assign({}, this._tickTransformOption()), layerConfig));
41
+ }));
42
+ } else {
43
+ const tickTransform = null === (_c = null === (_b = this._tickData) || void 0 === _b ? void 0 : _b[0]) || void 0 === _c ? void 0 : _c.getDataView().transformsArr.find((t => t.type === tickTransformType));
44
+ tickTransform && (tickTransform.options = this._tickTransformOption());
45
+ }
46
+ }
33
47
  dataToPosition(values, cfg = {}) {
34
48
  var _a, _b;
35
49
  if (0 === values.length || 0 === this._scales.length) return 0;
@@ -93,7 +107,7 @@ class BandAxisMixin {
93
107
  getLabelItems(length) {
94
108
  const labelItems = [];
95
109
  let preData = [];
96
- return this._scales.forEach(((scale, index) => {
110
+ return (this._spec.showAllGroupLayers ? this._scales : [ this._scales[0] ]).forEach(((scale, index) => {
97
111
  var _a;
98
112
  const tickData = this._tickDataMap[index], isTickDataHaveData = null === (_a = null == tickData ? void 0 : tickData.getLatestData()) || void 0 === _a ? void 0 : _a.length, ticks = isTickDataHaveData ? tickData.getLatestData().map((obj => obj.value)) : scale.domain();
99
113
  if (ticks && ticks.length) if (preData && preData.length) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/component/axis/mixin/band-axis-mixin.ts"],"names":[],"mappings":"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","file":"band-axis-mixin.js","sourcesContent":["import type { BandScale } from '@visactor/vscale';\nimport type { Dict } from '@visactor/vutils';\nimport { array, isArray } from '@visactor/vutils';\nimport type { Datum, IOrientType, IPolarOrientType, StringOrNumber } from '../../../typings';\nimport type { IEvent } from '../../../event/interface';\nimport { ChartEvent } from '../../../constant/event';\nimport type { IModel } from '../../../model/interface';\nimport type { IAxisLocationCfg } from '../interface';\nimport { CompilableData } from '../../../compile/data/compilable-data';\nimport type { AxisItem } from '@visactor/vrender-components';\nimport { getAxisItem } from '../util';\n\nexport interface BandAxisMixin {\n _orient: IOrientType | IPolarOrientType;\n _option: any;\n _scale: BandScale;\n _scales: BandScale[];\n _spec: any;\n _tick: any;\n _tickData: CompilableData[];\n _defaultBandPosition: number;\n _defaultBandInnerPadding: number;\n _defaultBandOuterPadding: number;\n event: IEvent;\n isSeriesDataEnable: () => boolean;\n collectData: (depth: number, rawData?: boolean) => { min: number; max: number; values: any[] }[];\n computeDomain: (data: { min: number; max: number; values: any[] }[]) => StringOrNumber[];\n transformScaleDomain: () => void;\n _initTickDataSet: (options: any, index?: number) => any;\n _tickTransformOption: () => any;\n _forceLayout: () => void;\n _getNormalizedValue: (values: any[], length: number) => number;\n}\n\nexport class BandAxisMixin {\n private _tickDataMap: Dict<any>;\n protected _initData() {\n if (this._spec.showAllGroupLayers && this._scales.length > 1) {\n // 显示所有分组层级\n for (let layer = 0; layer < this._scales.length; layer++) {\n const layers = this._spec.layers ?? [];\n const layerConfig = layers[this._scales.length - 1 - layer] || {};\n if (layerConfig.visible !== false && layerConfig.tickCount !== 0 && layerConfig.forceTickCount !== 0) {\n const tickData = this._initTickDataSet(\n {\n ...this._tickTransformOption(),\n ...layerConfig\n },\n layer\n );\n tickData.target.addListener('change', this._forceLayout.bind(this));\n const compilableData = new CompilableData(this._option, tickData);\n this._tickData.push(compilableData);\n\n if (!this._tickDataMap) {\n this._tickDataMap = {};\n }\n this._tickDataMap[layer] = compilableData;\n }\n }\n } else {\n const tickData = this._initTickDataSet(this._tickTransformOption());\n tickData.target.addListener('change', this._forceLayout.bind(this));\n const compilableData = new CompilableData(this._option, tickData);\n this._tickData = [compilableData];\n this._tickDataMap = {\n 0: compilableData\n };\n }\n }\n protected _rawDomainIndex: { [key: string | number | symbol]: number }[] = [];\n\n dataToPosition(values: any[], cfg: IAxisLocationCfg = {}): number {\n if (values.length === 0 || this._scales.length === 0) {\n return 0;\n }\n const { position, bandScale } = this.getPosition(values);\n return (\n position + bandScale.bandwidth() * (cfg.bandPosition ?? this._spec.bandPosition ?? this._defaultBandPosition)\n );\n }\n\n valueToPosition(value: any): number {\n const bandStart = this._scale.scale(value);\n return bandStart;\n }\n\n updateGroupScaleRange() {\n let parentScale = this._scale;\n this._scales.forEach((scale, i) => {\n if (i > 0) {\n scale.range([0, parentScale.bandwidth()]);\n parentScale = scale;\n }\n });\n }\n\n getPosition(values: any[]) {\n let position = 0;\n let bandScale = this._scale;\n // 要不要性能优化?\n // 优化有没有用?\n if (this._scales.length === 1 || values.length === 1) {\n position = this.valueToPosition(values[0]);\n } else {\n const max = Math.min(values.length, this._scales.length);\n for (let i = 0; i < max; i++) {\n position += this._scales[i].scale(values[i]);\n }\n bandScale = this._scales[max - 1];\n }\n return { position, bandScale };\n }\n\n calcScales(DEFAULT_BAND_INNER_PADDING: number, DEFAULT_BAND_OUTER_PADDING: number) {\n const { bandPadding, paddingInner, paddingOuter } = this._spec;\n const isBandPaddingArray = isArray(bandPadding);\n const isPaddingInnerArray = isArray(paddingInner);\n const isPaddingOuterArray = isArray(paddingOuter);\n\n for (let i = 0; i < this._scales.length; i++) {\n const _padding = isBandPaddingArray ? bandPadding[i] : bandPadding;\n const _paddingInner = isPaddingInnerArray ? paddingInner[i] : paddingInner;\n const _paddingOuter = isPaddingOuterArray ? paddingOuter[i] : paddingOuter;\n\n this._scales[i]\n .paddingInner(_paddingInner ?? _padding ?? DEFAULT_BAND_INNER_PADDING, true)\n .paddingOuter(_paddingOuter ?? _padding ?? DEFAULT_BAND_OUTER_PADDING, true);\n }\n }\n computeBandDomain(data: { min: number; max: number; values: any[] }[]): StringOrNumber[] {\n if (!data.length) {\n return [];\n }\n\n // 性能优化 9.13\n if (data.length === 1) {\n return data[0].values;\n }\n const tempSet = new Set();\n for (let i = 0; i < data.length; i++) {\n for (let j = 0; j < data[i].values.length; j++) {\n tempSet.add(data[i].values[j]);\n }\n }\n return Array.from(tempSet) as StringOrNumber[];\n }\n\n protected updateScaleDomain() {\n if (!this.isSeriesDataEnable()) {\n return;\n }\n if (!this._rawDomainIndex?.length && this._scales.length) {\n this._updateRawDomain();\n }\n const userDomain = this._spec.domain;\n for (let i = 0; i < this._scales.length; i++) {\n if (userDomain && userDomain.length && i === 0) {\n // 当数字映射字段存在分组时,只作用于第一个分组的domain,如 xField: ['x', 'type']\n this._scales[i].domain(userDomain);\n } else {\n const data = this.collectData(i);\n const domain = this.computeBandDomain(data);\n this._scales[i].domain(domain.sort((a, b) => this._rawDomainIndex[i][a] - this._rawDomainIndex[i][b]));\n }\n }\n this.transformScaleDomain();\n this.event.emit(ChartEvent.scaleDomainUpdate, { model: this as unknown as IModel });\n this.event.emit(ChartEvent.scaleUpdate, { model: this as unknown as IModel, value: 'domain' });\n }\n\n protected getLabelItems(length: number) {\n const labelItems: Dict<any>[][] = [];\n let preData: any[] = [];\n\n this._scales.forEach((scale, index) => {\n const tickData = this._tickDataMap[index];\n\n // 因为多层级标签会依赖上一层标签的分组值定位,所以如果上一层标签没有内容,那么就直接获取 bandScale 的 domain()\n const isTickDataHaveData = tickData?.getLatestData()?.length;\n const ticks: string[] = isTickDataHaveData\n ? tickData.getLatestData().map((obj: Datum) => obj.value)\n : scale.domain();\n if (ticks && ticks.length) {\n if (preData && preData.length) {\n const currentLabelItems: any[] = [];\n const curData: any[] = [];\n preData.forEach(value => {\n ticks.forEach(tick => {\n const values = array(value).concat(tick);\n curData.push(values);\n\n if (isTickDataHaveData) {\n const axisItem = getAxisItem(tick, this._getNormalizedValue(values, length));\n currentLabelItems.push(axisItem);\n }\n });\n });\n if (isTickDataHaveData) {\n labelItems.push(currentLabelItems.filter((entry: AxisItem) => entry.value >= 0 && entry.value <= 1));\n }\n preData = curData;\n } else {\n ticks.forEach(tick => {\n preData.push(tick);\n });\n if (isTickDataHaveData) {\n labelItems.push(\n tickData\n .getLatestData()\n .map((obj: Datum) => {\n return getAxisItem(obj.value, this._getNormalizedValue([obj.value], length));\n })\n .filter((entry: AxisItem) => entry.value >= 0 && entry.value <= 1)\n );\n }\n }\n }\n });\n\n return labelItems.reverse();\n }\n\n protected _updateRawDomain() {\n // 默认值设置了无效?\n this._rawDomainIndex = [];\n\n const userDomain = this._spec.domain;\n for (let i = 0; i < this._scales.length; i++) {\n if (userDomain && userDomain.length && i === 0) {\n // 当数字映射字段存在分组时,只作用于第一个分组的domain,如 xField: ['x', 'type']\n this._scales[i].domain(userDomain);\n } else {\n const data = this.collectData(i, true);\n const domain = this.computeBandDomain(data);\n this._rawDomainIndex[i] = {};\n domain.forEach((d, _i) => (this._rawDomainIndex[i][d] = _i));\n }\n }\n }\n\n protected _clearRawDomain() {\n this._rawDomainIndex = [];\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/component/axis/mixin/band-axis-mixin.ts"],"names":[],"mappings":"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","file":"band-axis-mixin.js","sourcesContent":["import type { BandScale } from '@visactor/vscale';\nimport type { Dict } from '@visactor/vutils';\nimport { array, isArray } from '@visactor/vutils';\nimport type { Datum, IOrientType, IPolarOrientType, StringOrNumber } from '../../../typings';\nimport type { IEvent } from '../../../event/interface';\nimport { ChartEvent } from '../../../constant/event';\nimport type { IModel } from '../../../model/interface';\nimport type { IAxisLocationCfg } from '../interface';\nimport { CompilableData } from '../../../compile/data/compilable-data';\nimport type { AxisItem } from '@visactor/vrender-components';\nimport { getAxisItem } from '../util';\n\nexport interface BandAxisMixin {\n _orient: IOrientType | IPolarOrientType;\n _option: any;\n _scale: BandScale;\n _scales: BandScale[];\n _spec: any;\n _tick: any;\n _tickData: CompilableData[];\n _defaultBandPosition: number;\n _defaultBandInnerPadding: number;\n _defaultBandOuterPadding: number;\n event: IEvent;\n isSeriesDataEnable: () => boolean;\n collectData: (depth: number, rawData?: boolean) => { min: number; max: number; values: any[] }[];\n computeDomain: (data: { min: number; max: number; values: any[] }[]) => StringOrNumber[];\n transformScaleDomain: () => void;\n _initTickDataSet: (options: any, index?: number) => any;\n _tickTransformOption: () => any;\n _forceLayout: () => void;\n _getNormalizedValue: (values: any[], length: number) => number;\n registerTicksTransform: () => string;\n}\n\nexport class BandAxisMixin {\n private _tickDataMap: Dict<any>;\n protected _initData() {\n if (this._spec.showAllGroupLayers && this._scales.length > 1) {\n // 显示所有分组层级\n for (let layer = 0; layer < this._scales.length; layer++) {\n const layers = this._spec.layers ?? [];\n const layerConfig = layers[this._scales.length - 1 - layer] || {};\n if (layerConfig.visible !== false && layerConfig.tickCount !== 0 && layerConfig.forceTickCount !== 0) {\n const tickData = this._initTickDataSet(\n {\n ...this._tickTransformOption(),\n ...layerConfig\n },\n layer\n );\n tickData.target.addListener('change', this._forceLayout.bind(this));\n const compilableData = new CompilableData(this._option, tickData);\n this._tickData.push(compilableData);\n\n if (!this._tickDataMap) {\n this._tickDataMap = {};\n }\n this._tickDataMap[layer] = compilableData;\n }\n }\n } else {\n const tickData = this._initTickDataSet(this._tickTransformOption());\n tickData.target.addListener('change', this._forceLayout.bind(this));\n const compilableData = new CompilableData(this._option, tickData);\n this._tickData = [compilableData];\n this._tickDataMap = {\n 0: compilableData\n };\n }\n }\n\n protected _updateData() {\n const tickTransformType = this.registerTicksTransform();\n\n if (this._spec.showAllGroupLayers && this._scales.length > 1) {\n const layers = this._spec.layers ?? [];\n Object.keys(this._tickDataMap).forEach(layer => {\n const layerConfig = layers[this._scales.length - 1 - +layer] || {};\n const tickData = this._tickDataMap[layer];\n const tickTransform = tickData?.getDataView().transformsArr.find((t: any) => t.type === tickTransformType);\n\n tickTransform &&\n (tickTransform.options = {\n ...this._tickTransformOption(),\n ...layerConfig\n });\n });\n } else {\n const tickTransform = this._tickData?.[0]?.getDataView().transformsArr.find(t => t.type === tickTransformType);\n\n tickTransform && (tickTransform.options = this._tickTransformOption());\n }\n }\n\n protected _rawDomainIndex: { [key: string | number | symbol]: number }[] = [];\n\n dataToPosition(values: any[], cfg: IAxisLocationCfg = {}): number {\n if (values.length === 0 || this._scales.length === 0) {\n return 0;\n }\n const { position, bandScale } = this.getPosition(values);\n return (\n position + bandScale.bandwidth() * (cfg.bandPosition ?? this._spec.bandPosition ?? this._defaultBandPosition)\n );\n }\n\n valueToPosition(value: any): number {\n const bandStart = this._scale.scale(value);\n return bandStart;\n }\n\n updateGroupScaleRange() {\n let parentScale = this._scale;\n this._scales.forEach((scale, i) => {\n if (i > 0) {\n scale.range([0, parentScale.bandwidth()]);\n parentScale = scale;\n }\n });\n }\n\n getPosition(values: any[]) {\n let position = 0;\n let bandScale = this._scale;\n // 要不要性能优化?\n // 优化有没有用?\n if (this._scales.length === 1 || values.length === 1) {\n position = this.valueToPosition(values[0]);\n } else {\n const max = Math.min(values.length, this._scales.length);\n for (let i = 0; i < max; i++) {\n position += this._scales[i].scale(values[i]);\n }\n bandScale = this._scales[max - 1];\n }\n return { position, bandScale };\n }\n\n calcScales(DEFAULT_BAND_INNER_PADDING: number, DEFAULT_BAND_OUTER_PADDING: number) {\n const { bandPadding, paddingInner, paddingOuter } = this._spec;\n const isBandPaddingArray = isArray(bandPadding);\n const isPaddingInnerArray = isArray(paddingInner);\n const isPaddingOuterArray = isArray(paddingOuter);\n\n for (let i = 0; i < this._scales.length; i++) {\n const _padding = isBandPaddingArray ? bandPadding[i] : bandPadding;\n const _paddingInner = isPaddingInnerArray ? paddingInner[i] : paddingInner;\n const _paddingOuter = isPaddingOuterArray ? paddingOuter[i] : paddingOuter;\n\n this._scales[i]\n .paddingInner(_paddingInner ?? _padding ?? DEFAULT_BAND_INNER_PADDING, true)\n .paddingOuter(_paddingOuter ?? _padding ?? DEFAULT_BAND_OUTER_PADDING, true);\n }\n }\n computeBandDomain(data: { min: number; max: number; values: any[] }[]): StringOrNumber[] {\n if (!data.length) {\n return [];\n }\n\n // 性能优化 9.13\n if (data.length === 1) {\n return data[0].values;\n }\n const tempSet = new Set();\n for (let i = 0; i < data.length; i++) {\n for (let j = 0; j < data[i].values.length; j++) {\n tempSet.add(data[i].values[j]);\n }\n }\n return Array.from(tempSet) as StringOrNumber[];\n }\n\n protected updateScaleDomain() {\n if (!this.isSeriesDataEnable()) {\n return;\n }\n if (!this._rawDomainIndex?.length && this._scales.length) {\n this._updateRawDomain();\n }\n const userDomain = this._spec.domain;\n for (let i = 0; i < this._scales.length; i++) {\n if (userDomain && userDomain.length && i === 0) {\n // 当数字映射字段存在分组时,只作用于第一个分组的domain,如 xField: ['x', 'type']\n this._scales[i].domain(userDomain);\n } else {\n const data = this.collectData(i);\n const domain = this.computeBandDomain(data);\n this._scales[i].domain(domain.sort((a, b) => this._rawDomainIndex[i][a] - this._rawDomainIndex[i][b]));\n }\n }\n this.transformScaleDomain();\n this.event.emit(ChartEvent.scaleDomainUpdate, { model: this as unknown as IModel });\n this.event.emit(ChartEvent.scaleUpdate, { model: this as unknown as IModel, value: 'domain' });\n }\n\n protected getLabelItems(length: number) {\n const labelItems: Dict<any>[][] = [];\n let preData: any[] = [];\n\n // 只有需要展示多层标签的时候,才需要计算,否则不需要计算\n (this._spec.showAllGroupLayers ? this._scales : [this._scales[0]]).forEach((scale, index) => {\n const tickData = this._tickDataMap[index];\n\n // 因为多层级标签会依赖上一层标签的分组值定位,所以如果上一层标签没有内容,那么就直接获取 bandScale 的 domain()\n const isTickDataHaveData = tickData?.getLatestData()?.length;\n const ticks: string[] = isTickDataHaveData\n ? tickData.getLatestData().map((obj: Datum) => obj.value)\n : scale.domain();\n if (ticks && ticks.length) {\n if (preData && preData.length) {\n const currentLabelItems: any[] = [];\n const curData: any[] = [];\n preData.forEach(value => {\n ticks.forEach(tick => {\n const values = array(value).concat(tick);\n curData.push(values);\n\n if (isTickDataHaveData) {\n const axisItem = getAxisItem(tick, this._getNormalizedValue(values, length));\n currentLabelItems.push(axisItem);\n }\n });\n });\n if (isTickDataHaveData) {\n labelItems.push(currentLabelItems.filter((entry: AxisItem) => entry.value >= 0 && entry.value <= 1));\n }\n preData = curData;\n } else {\n ticks.forEach(tick => {\n preData.push(tick);\n });\n if (isTickDataHaveData) {\n labelItems.push(\n tickData\n .getLatestData()\n .map((obj: Datum) => {\n return getAxisItem(obj.value, this._getNormalizedValue([obj.value], length));\n })\n .filter((entry: AxisItem) => entry.value >= 0 && entry.value <= 1)\n );\n }\n }\n }\n });\n\n return labelItems.reverse();\n }\n\n protected _updateRawDomain() {\n // 默认值设置了无效?\n this._rawDomainIndex = [];\n\n const userDomain = this._spec.domain;\n for (let i = 0; i < this._scales.length; i++) {\n if (userDomain && userDomain.length && i === 0) {\n // 当数字映射字段存在分组时,只作用于第一个分组的domain,如 xField: ['x', 'type']\n this._scales[i].domain(userDomain);\n } else {\n const data = this.collectData(i, true);\n const domain = this.computeBandDomain(data);\n this._rawDomainIndex[i] = {};\n domain.forEach((d, _i) => (this._rawDomainIndex[i][d] = _i));\n }\n }\n }\n\n protected _clearRawDomain() {\n this._rawDomainIndex = [];\n }\n}\n"]}
@@ -1,14 +1,13 @@
1
1
  import { VChart } from './vchart';
2
2
  import { Factory } from './factory';
3
3
  export { VChart, Factory };
4
- export declare const version = "1.13.13-alpha.2";
4
+ export declare const version = "1.13.13-alpha.3";
5
5
  export type { IVChart } from './interface';
6
6
  export type { IStateSpec, StateValueType } from '../compile/mark';
7
7
  export type { IRegion } from '../region/interface';
8
8
  export * from '../typings/spec/common';
9
9
  export * from '../event/interface';
10
10
  export * from '../theme/interface';
11
- export * from '../compile/mark/interface';
12
11
  export * from './interface';
13
12
  export * from '../constant/base';
14
13
  export * from '../constant/data';
package/cjs/core/index.js CHANGED
@@ -35,12 +35,11 @@ Object.defineProperty(exports, "Factory", {
35
35
  get: function() {
36
36
  return factory_1.Factory;
37
37
  }
38
- }), exports.version = "1.13.13-alpha.2", __exportStar(require("../typings/spec/common"), exports),
38
+ }), exports.version = "1.13.13-alpha.3", __exportStar(require("../typings/spec/common"), exports),
39
39
  __exportStar(require("../event/interface"), exports), __exportStar(require("../theme/interface"), exports),
40
- __exportStar(require("../compile/mark/interface"), exports), __exportStar(require("./interface"), exports),
41
- __exportStar(require("../constant/base"), exports), __exportStar(require("../constant/data"), exports),
42
- __exportStar(require("../typings/spec/index"), exports), __exportStar(require("../typings/tooltip"), exports),
43
- __exportStar(require("../theme/index"), exports);
40
+ __exportStar(require("./interface"), exports), __exportStar(require("../constant/base"), exports),
41
+ __exportStar(require("../constant/data"), exports), __exportStar(require("../typings/spec/index"), exports),
42
+ __exportStar(require("../typings/tooltip"), exports), __exportStar(require("../theme/index"), exports);
44
43
 
45
44
  var vrender_core_1 = require("@visactor/vrender-core");
46
45
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAIA,qCAAkC;AAGzB,uFAHA,eAAM,OAGA;AAFf,uCAAoC;AAEnB,wFAFR,iBAAO,OAEQ;AAGX,QAAA,OAAO,GAAG,iBAAiB,CAAC;AAOzC,yDAAuC;AACvC,qDAAmC;AACnC,qDAAmC;AACnC,4DAA0C;AAC1C,8CAA4B;AAG5B,mDAAiC;AACjC,mDAAiC;AAKjC,wDAAsC;AAGtC,qDAAmC;AAGnC,iDAA+B;AAG/B,uDAYgC;AAX9B,uGAAA,OAAO,OAAA;AACP,2GAAA,WAAW,OAAA;AACX,8GAAA,cAAc,OAAA;AACd,0GAAA,UAAU,OAAA;AACV,yGAAA,SAAS,OAAA;AACT,0GAAA,UAAU,OAAA;AACV,0GAAA,UAAU,OAAA;AACV,0GAAA,UAAU,OAAA;AACV,4GAAA,YAAY,OAAA;AACZ,4GAAA,YAAY,OAAA;AACZ,2GAAA,WAAW,OAAA","file":"index.js","sourcesContent":["/**\n * @description The core module of VChart, containing the necessary interfaces for using VChart.\n */\n\nimport { VChart } from './vchart';\nimport { Factory } from './factory';\n\nexport { VChart, Factory };\n\n// export the version\nexport const version = \"1.13.13-alpha.2\";\n\n// export necessary types\nexport type { IVChart } from './interface';\nexport type { IStateSpec, StateValueType } from '../compile/mark';\nexport type { IRegion } from '../region/interface';\n\nexport * from '../typings/spec/common';\nexport * from '../event/interface';\nexport * from '../theme/interface';\nexport * from '../compile/mark/interface';\nexport * from './interface';\n\n// some constants\nexport * from '../constant/base';\nexport * from '../constant/data';\n\n/**\n * spec\n */\nexport * from '../typings/spec/index';\n\n// tooltip\nexport * from '../typings/tooltip';\n\n// theme\nexport * from '../theme/index';\n\n// vrender\nexport {\n vglobal,\n createGroup,\n createRichText,\n createText,\n createArc,\n createArea,\n createRect,\n createLine,\n createSymbol,\n ManualTicker,\n StreamLight\n} from '@visactor/vrender-core';\n"]}
1
+ {"version":3,"sources":["../src/core/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAIA,qCAAkC;AAGzB,uFAHA,eAAM,OAGA;AAFf,uCAAoC;AAEnB,wFAFR,iBAAO,OAEQ;AAGX,QAAA,OAAO,GAAG,iBAAiB,CAAC;AAOzC,yDAAuC;AACvC,qDAAmC;AACnC,qDAAmC;AACnC,8CAA4B;AAG5B,mDAAiC;AACjC,mDAAiC;AAKjC,wDAAsC;AAGtC,qDAAmC;AAGnC,iDAA+B;AAG/B,uDAYgC;AAX9B,uGAAA,OAAO,OAAA;AACP,2GAAA,WAAW,OAAA;AACX,8GAAA,cAAc,OAAA;AACd,0GAAA,UAAU,OAAA;AACV,yGAAA,SAAS,OAAA;AACT,0GAAA,UAAU,OAAA;AACV,0GAAA,UAAU,OAAA;AACV,0GAAA,UAAU,OAAA;AACV,4GAAA,YAAY,OAAA;AACZ,4GAAA,YAAY,OAAA;AACZ,2GAAA,WAAW,OAAA","file":"index.js","sourcesContent":["/**\n * @description The core module of VChart, containing the necessary interfaces for using VChart.\n */\n\nimport { VChart } from './vchart';\nimport { Factory } from './factory';\n\nexport { VChart, Factory };\n\n// export the version\nexport const version = \"1.13.13-alpha.3\";\n\n// export necessary types\nexport type { IVChart } from './interface';\nexport type { IStateSpec, StateValueType } from '../compile/mark';\nexport type { IRegion } from '../region/interface';\n\nexport * from '../typings/spec/common';\nexport * from '../event/interface';\nexport * from '../theme/interface';\nexport * from './interface';\n\n// some constants\nexport * from '../constant/base';\nexport * from '../constant/data';\n\n/**\n * spec\n */\nexport * from '../typings/spec/index';\n\n// tooltip\nexport * from '../typings/tooltip';\n\n// theme\nexport * from '../theme/index';\n\n// vrender\nexport {\n vglobal,\n createGroup,\n createRichText,\n createText,\n createArc,\n createArea,\n createRect,\n createLine,\n createSymbol,\n ManualTicker,\n StreamLight\n} from '@visactor/vrender-core';\n"]}
@@ -63,7 +63,7 @@ export declare class DotSeries<T extends IDotSeriesSpec = IDotSeriesSpec> extend
63
63
  protected initTooltip(): void;
64
64
  onEvaluateEnd(ctx: IModelEvaluateOption): void;
65
65
  protected onMarkTreePositionUpdate(marks: IMark[]): void;
66
- getDotData(): import("../..").IMarkData;
66
+ getDotData(): import("../../compile/mark").IMarkData;
67
67
  protected _getDataIdKey(): any;
68
68
  getStackValueField(): string;
69
69
  getActiveMarks(): IMark[];
@@ -47,7 +47,7 @@ export declare class LinkSeries<T extends ILinkSeriesSpec = ILinkSeriesSpec> ext
47
47
  initInteraction(): void;
48
48
  protected initTooltip(): void;
49
49
  protected onMarkTreePositionUpdate(marks: IMark[]): void;
50
- getDotInfoData(): import("../..").IMarkData;
50
+ getDotInfoData(): import("../../compile/mark").IMarkData;
51
51
  getActiveMarks(): IMark[];
52
52
  }
53
53
  export declare const registerLinkSeries: () => void;
@@ -48,8 +48,6 @@ export interface ISankeySeriesSpec extends Omit<ISeriesSpec, 'data'>, IAnimation
48
48
  enable: boolean;
49
49
  trigger?: 'click' | 'hover';
50
50
  effect: 'self' | 'adjacency' | 'related';
51
- highlightState?: string;
52
- blurState?: string;
53
51
  };
54
52
  [SeriesMarkNameEnum.label]?: ISankeyLabelSpec | ISankeyLabelSpec[];
55
53
  overflow?: 'scroll' | 'hidden' | 'scroll-x' | 'scroll-y';
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/series/sankey/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { ISeriesSpec, DirectionType, IMarkTheme } from '../../typings';\nimport type { IMarkSpec } from '../../typings/spec/common';\nimport type { IRectMarkSpec, ILinkPathMarkSpec } from '../../typings/visual';\nimport type { IAnimationSpec } from '../../animation/spec';\nimport type { SeriesMarkNameEnum } from '../interface/type';\nimport type { ILabelSpec } from '../../component/label/interface';\n\nexport type SankeyMark = 'node' | 'link' | 'label';\n\nexport type SankeyAppearPreset = 'growIn' | 'fadeIn';\nexport interface ISankeyAnimationParams {\n direction: DirectionType;\n growFrom: () => number;\n}\n\nexport type ISankeyLabelSpec = ILabelSpec & {\n /**\n * 标签布局方式\n * @default 'outside'\n */\n position?: 'outside' | 'inside-start' | 'inside-middle' | 'inside-end' | 'left' | 'right';\n /** 标签文字缩略 */\n limit?: number;\n};\n\nexport interface ISankeySeriesSpec extends Omit<ISeriesSpec, 'data'>, IAnimationSpec<SankeyMark, SankeyAppearPreset> {\n type: 'sankey';\n\n /**\n * 数据字段配置\n */\n /** 节点名称字段配置 */\n categoryField: string;\n /** 节点之间关系的权重字段 */\n valueField: string;\n /** 来源节点数据字段\n * 层级数据不提供\n */\n sourceField?: string;\n /** 目标节点数据字段\n * 层级数据不提供\n */\n targetField?: string;\n\n /**\n * 图表布局方向\n */\n direction?: DirectionType;\n /**\n * 节点的对齐类型,所有深度相同的节点,采用什么对齐方式,决定了节点在第几层:\n * - 横向布局的桑基图,用于计算节点x坐标\n * - 纵向布局的桑基图,用于计算节点y坐标\n */\n nodeAlign?: 'left' | 'right' | 'center' | 'justify' | 'start' | 'end';\n /**\n * 横向布局的桑基图,设置节点Y坐标的对齐方式:\n * 'start' - '顶部对齐'\n * 'end' - '底部对齐'\n * 'middle' - '居中对齐'\n *\n * 纵向布局的桑基图,设置节点X坐标的对齐方式:\n * 'start' - '左对齐'\n * 'end' - '右对齐'\n * 'middle' - '居中对齐'\n * 'parent' - '父节点',从1.12.14版本开始支持\n *\n * @since 1.12.4\n */\n crossNodeAlign?: 'start' | 'end' | 'middle' | 'parent';\n /**\n * 是否反向\n * @since 1.12.2\n */\n inverse?: boolean;\n /**\n * 同一层中两个节点之间的间隙大小\n */\n nodeGap?: number;\n /**\n * 每个节点的宽度,支持三种取值\n * 1. 百分比字符串,例如:{ nodeWidth: '12%' }\n * 2. 以'px'为单位的简单数字,eg: { nodeWidth: 20 }\n * 3. function,通过自定义计算指定nodeWidth\n */\n nodeWidth?: string | number | ((node: SankeyNodeElement) => number);\n /**\n * link宽度,单位px\n */\n linkWidth?: number | ((link: SankeyLinkElement) => number);\n /**\n * link + node 的最小宽度\n */\n minStepWidth?: number;\n /**\n * 数据不为零或空时节点的最小大小\n * - 这个配置可以用来避免数据太小时看不到太细的节点\n * - 建议小于5px\n */\n minNodeHeight?: number;\n /**\n * 数据不为零或空时边的最小大小\n * - 这个配置可以用来避免数据太小的时候看不到太细的链接\n * - 建议小于5px\n * - 当同时指定 `minNodeHeight` 和 `minLinkHeight` 两个选项时,此选项应小于 `minNodeHeight`\n */\n minLinkHeight?: number;\n /**\n * 数据不为零或空时节点的最大大小\n * @since 1.12.14\n */\n maxNodeHeight?: number;\n /**\n * 数据不为零或空时边的最大大小\n * - 当同时指定 `maxNodeHeight` 和 `maxLinkHeight` 两个选项时,此选项应小于 `maxNodeHeight`\n * @since 1.12.14\n */\n maxLinkHeight?: number;\n /** 布局的迭代次数 */\n iterations?: number;\n /** 解析node的key,defaultValue */\n nodeKey?: string | number | ((datum: SankeyNodeDatum) => string | number);\n /** 按此funtion排序link */\n linkSortBy?: (a: SankeyLinkElement, b: SankeyLinkElement) => number;\n /** 按此funtion排序node */\n nodeSortBy?: (a: SankeyNodeElement, b: SankeyNodeElement) => number;\n /** 自定义指定节点层 */\n setNodeLayer?: (datum: SankeyNodeDatum) => number;\n /**\n * 是否丢弃孤立的节点\n * @since 1.11.0\n */\n dropIsolatedNode?: boolean;\n /**\n * set the height of node\n * @since 1.11.0\n */\n nodeHeight?: number | ((node: SankeyNodeElement) => number);\n /**\n * set the height of link\n * @since 1.11.0\n */\n linkHeight?: number | ((link: SankeyLinkElement, sourceNode: SankeyNodeElement, sourceNodeHeight: number) => number);\n /**\n * each node has same height\n * @since 1.11.0\n */\n equalNodeHeight?: boolean;\n /**\n * the layout type of link\n * @since 1.11.0\n */\n linkOverlap?: 'start' | 'center' | 'end';\n\n /** 节点配置 */\n [SeriesMarkNameEnum.node]?: IMarkSpec<IRectMarkSpec>;\n\n /** 边配置 */\n [SeriesMarkNameEnum.link]?: IMarkSpec<ILinkPathMarkSpec>;\n\n /** 联动交互配置 */\n emphasis?: {\n /** 是否开启交互 */\n enable: boolean;\n /**\n * 交互触发类型\n * 默认为‘click'\n */\n trigger?: 'click' | 'hover';\n /**桑基图提供3种在节点上的交互联动效果\n * self: 仅高亮当前节点。\n * adjacency: 高亮当前节点上下游节点和关联的边,淡化其它图形元素。\n * related: 高亮与当前节点相关的整条路径上的节点和边,淡化其它图形元素。 */\n effect: 'self' | 'adjacency' | 'related';\n /**\n * 高亮状态\n * @default 'selected'\n * @since 1.13.13\n */\n highlightState?: string;\n /**\n * 失焦状态\n * @default 'blur'\n * @since 1.13.13\n */\n blurState?: string;\n };\n\n /** 标签配置 */\n [SeriesMarkNameEnum.label]?: ISankeyLabelSpec | ISankeyLabelSpec[];\n\n /**\n * 当制定了节点、边的宽度的时候,可以配置这个属性\n * 当宽度大于图表region的宽度、高度大于图表resion高度的时候是否自动产生滚动条\n * @since 1.13.0\n */\n overflow?: 'scroll' | 'hidden' | 'scroll-x' | 'scroll-y';\n\n /** 进度条配置 */\n // scroll?: IScrollSpec & {\n // /** 是否开启进度条 */\n // enable: boolean;\n // };\n}\n\nexport interface SankeyLinkDatum {\n source: string | number;\n target: string | number;\n value?: number;\n}\n\nexport interface SankeyNodeDatum {\n value?: number;\n}\n\nexport interface HierarchyNodeDatum {\n value?: number;\n children?: HierarchyNodeDatum[];\n}\n\nexport type SankeyData =\n | {\n nodes?: SankeyNodeDatum[];\n links: SankeyLinkDatum[];\n }\n | {\n nodes: HierarchyNodeDatum[];\n };\n\n/**\n * The node element after sankey layout\n */\nexport interface SankeyNodeElement {\n key: string | number;\n index: number;\n /** the depth of node, from source to target */\n depth: number;\n\n /** the depth of node, from target to source */\n endDepth?: number;\n /** the final layer index after layout */\n layer?: number;\n isLastLayer?: boolean;\n value: number;\n datum: SankeyNodeDatum;\n sourceLinks: SankeyLinkElement[];\n targetLinks: SankeyLinkElement[];\n x0?: number;\n y0?: number;\n x1?: number;\n y1?: number;\n}\n/**\n * the link element after sankey layout\n */\nexport interface SankeyLinkElement {\n vertical?: boolean;\n index: number;\n source: string | number;\n target: string | number;\n value: number;\n datum: SankeyLinkDatum | SankeyLinkDatum[];\n thickness?: number;\n sourceRect?: { x0: number; x1: number; y0: number; y1: number };\n targetRect?: { x0: number; x1: number; y0: number; y1: number };\n /** this will only be generate in hierarchy node data*/\n parents?: (string | number)[];\n y0?: number;\n y1?: number;\n x0?: number;\n x1?: number;\n}\n\nexport type SankeyLayoutResult = {\n nodes: SankeyNodeElement[];\n links: SankeyLinkElement[];\n columns: SankeyNodeElement[][];\n}[];\n\nexport interface ISankeySeriesTheme {\n [SeriesMarkNameEnum.node]?: IMarkTheme<IRectMarkSpec>;\n [SeriesMarkNameEnum.link]?: IMarkTheme<ILinkPathMarkSpec>;\n}\n"]}
1
+ {"version":3,"sources":["../src/series/sankey/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { ISeriesSpec, DirectionType, IMarkTheme } from '../../typings';\nimport type { IMarkSpec } from '../../typings/spec/common';\nimport type { IRectMarkSpec, ILinkPathMarkSpec } from '../../typings/visual';\nimport type { IAnimationSpec } from '../../animation/spec';\nimport type { SeriesMarkNameEnum } from '../interface/type';\nimport type { ILabelSpec } from '../../component/label/interface';\n\nexport type SankeyMark = 'node' | 'link' | 'label';\n\nexport type SankeyAppearPreset = 'growIn' | 'fadeIn';\nexport interface ISankeyAnimationParams {\n direction: DirectionType;\n growFrom: () => number;\n}\n\nexport type ISankeyLabelSpec = ILabelSpec & {\n /**\n * 标签布局方式\n * @default 'outside'\n */\n position?: 'outside' | 'inside-start' | 'inside-middle' | 'inside-end' | 'left' | 'right';\n /** 标签文字缩略 */\n limit?: number;\n};\n\nexport interface ISankeySeriesSpec extends Omit<ISeriesSpec, 'data'>, IAnimationSpec<SankeyMark, SankeyAppearPreset> {\n type: 'sankey';\n\n /**\n * 数据字段配置\n */\n /** 节点名称字段配置 */\n categoryField: string;\n /** 节点之间关系的权重字段 */\n valueField: string;\n /** 来源节点数据字段\n * 层级数据不提供\n */\n sourceField?: string;\n /** 目标节点数据字段\n * 层级数据不提供\n */\n targetField?: string;\n\n /**\n * 图表布局方向\n */\n direction?: DirectionType;\n /**\n * 节点的对齐类型,所有深度相同的节点,采用什么对齐方式,决定了节点在第几层:\n * - 横向布局的桑基图,用于计算节点x坐标\n * - 纵向布局的桑基图,用于计算节点y坐标\n */\n nodeAlign?: 'left' | 'right' | 'center' | 'justify' | 'start' | 'end';\n /**\n * 横向布局的桑基图,设置节点Y坐标的对齐方式:\n * 'start' - '顶部对齐'\n * 'end' - '底部对齐'\n * 'middle' - '居中对齐'\n *\n * 纵向布局的桑基图,设置节点X坐标的对齐方式:\n * 'start' - '左对齐'\n * 'end' - '右对齐'\n * 'middle' - '居中对齐'\n * 'parent' - '父节点',从1.12.14版本开始支持\n *\n * @since 1.12.4\n */\n crossNodeAlign?: 'start' | 'end' | 'middle' | 'parent';\n /**\n * 是否反向\n * @since 1.12.2\n */\n inverse?: boolean;\n /**\n * 同一层中两个节点之间的间隙大小\n */\n nodeGap?: number;\n /**\n * 每个节点的宽度,支持三种取值\n * 1. 百分比字符串,例如:{ nodeWidth: '12%' }\n * 2. 以'px'为单位的简单数字,eg: { nodeWidth: 20 }\n * 3. function,通过自定义计算指定nodeWidth\n */\n nodeWidth?: string | number | ((node: SankeyNodeElement) => number);\n /**\n * link宽度,单位px\n */\n linkWidth?: number | ((link: SankeyLinkElement) => number);\n /**\n * link + node 的最小宽度\n */\n minStepWidth?: number;\n /**\n * 数据不为零或空时节点的最小大小\n * - 这个配置可以用来避免数据太小时看不到太细的节点\n * - 建议小于5px\n */\n minNodeHeight?: number;\n /**\n * 数据不为零或空时边的最小大小\n * - 这个配置可以用来避免数据太小的时候看不到太细的链接\n * - 建议小于5px\n * - 当同时指定 `minNodeHeight` 和 `minLinkHeight` 两个选项时,此选项应小于 `minNodeHeight`\n */\n minLinkHeight?: number;\n /**\n * 数据不为零或空时节点的最大大小\n * @since 1.12.14\n */\n maxNodeHeight?: number;\n /**\n * 数据不为零或空时边的最大大小\n * - 当同时指定 `maxNodeHeight` 和 `maxLinkHeight` 两个选项时,此选项应小于 `maxNodeHeight`\n * @since 1.12.14\n */\n maxLinkHeight?: number;\n /** 布局的迭代次数 */\n iterations?: number;\n /** 解析node的key,defaultValue */\n nodeKey?: string | number | ((datum: SankeyNodeDatum) => string | number);\n /** 按此funtion排序link */\n linkSortBy?: (a: SankeyLinkElement, b: SankeyLinkElement) => number;\n /** 按此funtion排序node */\n nodeSortBy?: (a: SankeyNodeElement, b: SankeyNodeElement) => number;\n /** 自定义指定节点层 */\n setNodeLayer?: (datum: SankeyNodeDatum) => number;\n /**\n * 是否丢弃孤立的节点\n * @since 1.11.0\n */\n dropIsolatedNode?: boolean;\n /**\n * set the height of node\n * @since 1.11.0\n */\n nodeHeight?: number | ((node: SankeyNodeElement) => number);\n /**\n * set the height of link\n * @since 1.11.0\n */\n linkHeight?: number | ((link: SankeyLinkElement, sourceNode: SankeyNodeElement, sourceNodeHeight: number) => number);\n /**\n * each node has same height\n * @since 1.11.0\n */\n equalNodeHeight?: boolean;\n /**\n * the layout type of link\n * @since 1.11.0\n */\n linkOverlap?: 'start' | 'center' | 'end';\n\n /** 节点配置 */\n [SeriesMarkNameEnum.node]?: IMarkSpec<IRectMarkSpec>;\n\n /** 边配置 */\n [SeriesMarkNameEnum.link]?: IMarkSpec<ILinkPathMarkSpec>;\n\n /** 联动交互配置 */\n emphasis?: {\n /** 是否开启交互 */\n enable: boolean;\n /**\n * 交互触发类型\n * 默认为‘click'\n */\n trigger?: 'click' | 'hover';\n /**桑基图提供3种在节点上的交互联动效果\n * self: 仅高亮当前节点。\n * adjacency: 高亮当前节点上下游节点和关联的边,淡化其它图形元素。\n * related: 高亮与当前节点相关的整条路径上的节点和边,淡化其它图形元素。 */\n effect: 'self' | 'adjacency' | 'related';\n };\n\n /** 标签配置 */\n [SeriesMarkNameEnum.label]?: ISankeyLabelSpec | ISankeyLabelSpec[];\n\n /**\n * 当制定了节点、边的宽度的时候,可以配置这个属性\n * 当宽度大于图表region的宽度、高度大于图表resion高度的时候是否自动产生滚动条\n * @since 1.13.0\n */\n overflow?: 'scroll' | 'hidden' | 'scroll-x' | 'scroll-y';\n\n /** 进度条配置 */\n // scroll?: IScrollSpec & {\n // /** 是否开启进度条 */\n // enable: boolean;\n // };\n}\n\nexport interface SankeyLinkDatum {\n source: string | number;\n target: string | number;\n value?: number;\n}\n\nexport interface SankeyNodeDatum {\n value?: number;\n}\n\nexport interface HierarchyNodeDatum {\n value?: number;\n children?: HierarchyNodeDatum[];\n}\n\nexport type SankeyData =\n | {\n nodes?: SankeyNodeDatum[];\n links: SankeyLinkDatum[];\n }\n | {\n nodes: HierarchyNodeDatum[];\n };\n\n/**\n * The node element after sankey layout\n */\nexport interface SankeyNodeElement {\n key: string | number;\n index: number;\n /** the depth of node, from source to target */\n depth: number;\n\n /** the depth of node, from target to source */\n endDepth?: number;\n /** the final layer index after layout */\n layer?: number;\n isLastLayer?: boolean;\n value: number;\n datum: SankeyNodeDatum;\n sourceLinks: SankeyLinkElement[];\n targetLinks: SankeyLinkElement[];\n x0?: number;\n y0?: number;\n x1?: number;\n y1?: number;\n}\n/**\n * the link element after sankey layout\n */\nexport interface SankeyLinkElement {\n vertical?: boolean;\n index: number;\n source: string | number;\n target: string | number;\n value: number;\n datum: SankeyLinkDatum | SankeyLinkDatum[];\n thickness?: number;\n sourceRect?: { x0: number; x1: number; y0: number; y1: number };\n targetRect?: { x0: number; x1: number; y0: number; y1: number };\n /** this will only be generate in hierarchy node data*/\n parents?: (string | number)[];\n y0?: number;\n y1?: number;\n x0?: number;\n x1?: number;\n}\n\nexport type SankeyLayoutResult = {\n nodes: SankeyNodeElement[];\n links: SankeyLinkElement[];\n columns: SankeyNodeElement[][];\n}[];\n\nexport interface ISankeySeriesTheme {\n [SeriesMarkNameEnum.node]?: IMarkTheme<IRectMarkSpec>;\n [SeriesMarkNameEnum.link]?: IMarkTheme<ILinkPathMarkSpec>;\n}\n"]}
@@ -50,16 +50,15 @@ export declare class SankeySeries<T extends ISankeySeriesSpec = ISankeySeriesSpe
50
50
  private _createText;
51
51
  initAnimation(): void;
52
52
  protected initEvent(): void;
53
- protected _initEmphasisEvent(): void;
54
53
  private nodesSeriesDataUpdate;
55
54
  private linksSeriesDataUpdate;
56
55
  protected _handleEmphasisElement: (params: ExtendEventParam) => void;
57
- protected _handleClearEmpty: (highlightState: string, blurState: string) => void;
58
- protected _handleNodeAdjacencyClick: (element: IElement, highlightState: string, blurState: string) => void;
59
- protected _handleLinkAdjacencyClick: (element: IGlyphElement, highlightState: string, blurState: string) => void;
60
- protected _handleNodeRelatedClick: (element: IElement, highlightState: string, blurState: string) => void;
61
- protected _handleLinkRelatedClick: (element: IGlyphElement, highlightState: string, blurState: string) => void;
62
- protected _highLightElements(vGrammarElements: IVgrammarMark['elements'], highlightNodes: string[], highlightState: string, blurState: string): void;
56
+ protected _handleClearEmpty: () => void;
57
+ protected _handleNodeAdjacencyClick: (element: IElement) => void;
58
+ protected _handleLinkAdjacencyClick: (element: IGlyphElement) => void;
59
+ protected _handleNodeRelatedClick: (element: IElement) => void;
60
+ protected _handleLinkRelatedClick: (element: IGlyphElement) => void;
61
+ protected _highLightElements(vGrammarElements: IVgrammarMark['elements'], highlightNodes: string[]): void;
63
62
  protected initTooltip(): void;
64
63
  _setNodeOrdinalColorScale(): void;
65
64
  getNodeList(): any;
@@ -31,23 +31,23 @@ class SankeySeries extends cartesian_1.CartesianSeries {
31
31
  const sourceName = (0, vutils_1.isNumber)(datum.source) ? this.getNodeList()[datum.source] : datum.source;
32
32
  return null === (_g = this._colorScale) || void 0 === _g ? void 0 : _g.scale(sourceName);
33
33
  }, this._handleEmphasisElement = params => {
34
- var _a, _b, _c, _d, _e, _f, _g;
35
- const emphasisSpec = null !== (_a = this._spec.emphasis) && void 0 !== _a ? _a : {}, highlightState = null !== (_b = emphasisSpec.highlightState) && void 0 !== _b ? _b : interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, blurState = null !== (_c = emphasisSpec.blurState) && void 0 !== _c ? _c : interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE, element = params.item;
36
- "adjacency" === emphasisSpec.effect ? element && element.mark === (null === (_d = this._nodeMark) || void 0 === _d ? void 0 : _d.getProduct()) ? this._handleNodeAdjacencyClick(element, highlightState, blurState) : element && element.mark === (null === (_e = this._linkMark) || void 0 === _e ? void 0 : _e.getProduct()) ? this._handleLinkAdjacencyClick(element, highlightState, blurState) : this._handleClearEmpty(highlightState, blurState) : "related" === emphasisSpec.effect && (element && element.mark === (null === (_f = this._nodeMark) || void 0 === _f ? void 0 : _f.getProduct()) ? this._handleNodeRelatedClick(element, highlightState, blurState) : element && element.mark === (null === (_g = this._linkMark) || void 0 === _g ? void 0 : _g.getProduct()) ? this._handleLinkRelatedClick(element, highlightState, blurState) : this._handleClearEmpty(highlightState, blurState));
37
- }, this._handleClearEmpty = (highlightState, blurState) => {
34
+ var _a, _b, _c, _d, _e;
35
+ const emphasisSpec = null !== (_a = this._spec.emphasis) && void 0 !== _a ? _a : {}, element = params.item;
36
+ "adjacency" === emphasisSpec.effect ? element && element.mark === (null === (_b = this._nodeMark) || void 0 === _b ? void 0 : _b.getProduct()) ? this._handleNodeAdjacencyClick(element) : element && element.mark === (null === (_c = this._linkMark) || void 0 === _c ? void 0 : _c.getProduct()) ? this._handleLinkAdjacencyClick(element) : this._handleClearEmpty() : "related" === emphasisSpec.effect && (element && element.mark === (null === (_d = this._nodeMark) || void 0 === _d ? void 0 : _d.getProduct()) ? this._handleNodeRelatedClick(element) : element && element.mark === (null === (_e = this._linkMark) || void 0 === _e ? void 0 : _e.getProduct()) ? this._handleLinkRelatedClick(element) : this._handleClearEmpty());
37
+ }, this._handleClearEmpty = () => {
38
38
  var _a, _b;
39
39
  if (!this._needClear) return;
40
40
  const allNodeElements = null === (_a = this._nodeMark) || void 0 === _a ? void 0 : _a.getProductElements();
41
41
  if (!allNodeElements || !allNodeElements.length) return;
42
42
  const allLinkElements = null === (_b = this._linkMark) || void 0 === _b ? void 0 : _b.getProductElements();
43
43
  if (!allLinkElements || !allLinkElements.length) return;
44
- const states = [ highlightState, blurState ];
44
+ const states = [ interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE ];
45
45
  allNodeElements.forEach((el => {
46
46
  el.removeState(states);
47
47
  })), allLinkElements.forEach((el => {
48
48
  el.removeState(states);
49
49
  })), this._needClear = !1;
50
- }, this._handleNodeAdjacencyClick = (element, highlightState, blurState) => {
50
+ }, this._handleNodeAdjacencyClick = element => {
51
51
  const nodeDatum = element.getDatum(), highlightNodes = [ nodeDatum.key ];
52
52
  if (this._linkMark) {
53
53
  const allLinkElements = this._linkMark.getProductElements();
@@ -55,29 +55,30 @@ class SankeySeries extends cartesian_1.CartesianSeries {
55
55
  allLinkElements.forEach(((linkEl, i) => {
56
56
  const linkDatum = linkEl.getDatum();
57
57
  linkDatum.source === nodeDatum.key ? (highlightNodes.includes(linkDatum.target) || highlightNodes.push(linkDatum.target),
58
- linkEl.removeState(blurState), linkEl.addState(highlightState)) : linkDatum.target === nodeDatum.key ? (highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
59
- linkEl.removeState(blurState), linkEl.addState(highlightState)) : (linkEl.removeState(highlightState),
60
- linkEl.addState(blurState));
58
+ linkEl.removeState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE),
59
+ linkEl.addState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS)) : linkDatum.target === nodeDatum.key ? (highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
60
+ linkEl.removeState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE),
61
+ linkEl.addState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS)) : (linkEl.removeState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS),
62
+ linkEl.addState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE));
61
63
  }));
62
64
  }
63
- this._nodeMark && this._highLightElements(this._nodeMark.getProductElements(), highlightNodes, highlightState, blurState),
65
+ this._nodeMark && this._highLightElements(this._nodeMark.getProductElements(), highlightNodes),
64
66
  this._needClear = !0;
65
- }, this._handleLinkAdjacencyClick = (element, highlightState, blurState) => {
67
+ }, this._handleLinkAdjacencyClick = element => {
66
68
  const curLinkDatum = element.getDatum(), highlightNodes = [ curLinkDatum.source, curLinkDatum.target ];
67
69
  if (this._linkMark) {
68
70
  const allLinkElements = this._linkMark.getProductElements();
69
71
  if (!allLinkElements || !allLinkElements.length) return;
70
72
  allLinkElements.forEach((linkEl => {
71
- linkEl === element ? (linkEl.removeState(blurState), linkEl.addState(highlightState, {
72
- ratio: 1
73
- })) : (linkEl.removeState(highlightState), linkEl.addState(blurState, {
73
+ linkEl === element ? (linkEl.removeState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE),
74
+ linkEl.addState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, {
74
75
  ratio: 1
75
- }));
76
+ })) : (linkEl.removeState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS), linkEl.addState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE));
76
77
  }));
77
78
  }
78
- this._nodeMark && this._highLightElements(this._nodeMark.getProductElements(), highlightNodes, highlightState, blurState),
79
+ this._nodeMark && this._highLightElements(this._nodeMark.getProductElements(), highlightNodes),
79
80
  this._needClear = !0;
80
- }, this._handleNodeRelatedClick = (element, highlightState, blurState) => {
81
+ }, this._handleNodeRelatedClick = element => {
81
82
  var _a;
82
83
  const nodeDatum = element.getDatum(), allNodeElements = this._nodeMark.getProductElements();
83
84
  if (!allNodeElements || !allNodeElements.length) return;
@@ -130,11 +131,12 @@ class SankeySeries extends cartesian_1.CartesianSeries {
130
131
  if (!allLinkElements || !allLinkElements.length) return;
131
132
  allLinkElements.forEach(((linkEl, i) => {
132
133
  var _a;
133
- highlightLinks.includes(null !== (_a = linkEl.getDatum().key) && void 0 !== _a ? _a : linkEl.getDatum().index) ? (linkEl.removeState(blurState),
134
- linkEl.addState(highlightState)) : (linkEl.removeState(highlightState), linkEl.addState(blurState));
134
+ highlightLinks.includes(null !== (_a = linkEl.getDatum().key) && void 0 !== _a ? _a : linkEl.getDatum().index) ? (linkEl.removeState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE),
135
+ linkEl.addState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS)) : (linkEl.removeState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS),
136
+ linkEl.addState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE));
135
137
  }));
136
138
  }
137
- this._nodeMark && this._highLightElements(this._nodeMark.getProductElements(), highlightNodes, highlightState, blurState);
139
+ this._nodeMark && this._highLightElements(this._nodeMark.getProductElements(), highlightNodes);
138
140
  } else {
139
141
  const highlightNodes = [ nodeDatum.key ], upstreamLinks = nodeDatum.targetLinks.reduce(((res, link) => ((0,
140
142
  vutils_1.array)(link.datum).forEach((dividedLink => {
@@ -154,27 +156,29 @@ class SankeySeries extends cartesian_1.CartesianSeries {
154
156
  highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
155
157
  highlightNodes.includes(linkDatum.target) || highlightNodes.push(linkDatum.target);
156
158
  const ratio = selectedDatum.reduce(((sum, d) => sum + d.value), 0) / linkDatum.value;
157
- return linkEl.removeState(blurState), void linkEl.addState(highlightState, {
159
+ return linkEl.removeState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE),
160
+ void linkEl.addState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, {
158
161
  ratio: ratio
159
162
  });
160
163
  }
161
164
  if (upSelectedLink) return highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
162
165
  highlightNodes.includes(linkDatum.target) || highlightNodes.push(linkDatum.target),
163
- linkEl.removeState(blurState), void linkEl.addState(highlightState, {
166
+ linkEl.removeState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE),
167
+ void linkEl.addState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, {
164
168
  ratio: upSelectedLink.value / linkDatum.value
165
169
  });
166
- linkEl.removeState(highlightState), linkEl.addState(blurState);
167
- })), this._nodeMark && this._highLightElements(this._nodeMark.getProductElements(), highlightNodes, highlightState, blurState);
170
+ linkEl.removeState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS), linkEl.addState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);
171
+ })), this._nodeMark && this._highLightElements(this._nodeMark.getProductElements(), highlightNodes);
168
172
  }
169
173
  this._needClear = !0;
170
- }, this._handleLinkRelatedClick = (element, highlightState, blurState) => {
174
+ }, this._handleLinkRelatedClick = element => {
171
175
  var _a;
172
176
  const allNodeElements = this._nodeMark.getProductElements();
173
177
  if (!allNodeElements || !allNodeElements.length) return;
174
178
  const allLinkElements = this._linkMark.getProductElements();
175
179
  if (!allLinkElements || !allLinkElements.length) return;
176
180
  if ("source" === ((null === (_a = element.getDatum()) || void 0 === _a ? void 0 : _a.parents) ? "parents" : "source")) {
177
- const states = [ highlightState, blurState ];
181
+ const states = [ interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE ];
178
182
  this._linkMark && allLinkElements.forEach((linkEl => {
179
183
  linkEl.removeState(states);
180
184
  })), this._nodeMark && allNodeElements.forEach((el => {
@@ -198,8 +202,8 @@ class SankeySeries extends cartesian_1.CartesianSeries {
198
202
  }
199
203
  })), allLinkElements.forEach((linkEl => {
200
204
  const linkDatum = linkEl.getDatum(), originalDatum = linkDatum.datum;
201
- if (linkDatum.source === curLinkDatum.source && linkDatum.target === curLinkDatum.target) return linkEl.removeState(blurState),
202
- void linkEl.addState(highlightState, {
205
+ if (linkDatum.source === curLinkDatum.source && linkDatum.target === curLinkDatum.target) return linkEl.removeState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE),
206
+ void linkEl.addState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, {
203
207
  ratio: 1
204
208
  });
205
209
  const selectedDatum = originalDatum ? originalDatum.filter((entry => {
@@ -213,25 +217,27 @@ class SankeySeries extends cartesian_1.CartesianSeries {
213
217
  var _a;
214
218
  return par.key === curLinkDatum.source && (null === (_a = entry.parents[index + 1]) || void 0 === _a ? void 0 : _a.key) === curLinkDatum.target;
215
219
  })))).reduce(((sum, d) => sum + d.value), 0), ratio = val / linkDatum.value;
216
- return linkEl.removeState(blurState), void linkEl.addState(highlightState, {
220
+ return linkEl.removeState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE),
221
+ void linkEl.addState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, {
217
222
  ratio: ratio
218
223
  });
219
224
  }
220
225
  const upSelectedLink = upstreamLinks.find((upLink => upLink.source === linkDatum.source && upLink.target === linkDatum.target));
221
226
  if (upSelectedLink) return highlightNodes.includes(linkDatum.source) || highlightNodes.push(linkDatum.source),
222
227
  highlightNodes.includes(linkDatum.target) || highlightNodes.push(linkDatum.target),
223
- linkEl.removeState(blurState), void linkEl.addState(highlightState, {
228
+ linkEl.removeState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE),
229
+ void linkEl.addState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS, {
224
230
  ratio: upSelectedLink.value / linkDatum.value
225
231
  });
226
- linkEl.removeState(highlightState), linkEl.addState(blurState);
227
- })), this._highLightElements(allNodeElements, highlightNodes, highlightState, blurState);
232
+ linkEl.removeState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS), linkEl.addState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);
233
+ })), this._highLightElements(allNodeElements, highlightNodes);
228
234
  }
229
235
  this._needClear = !0;
230
236
  };
231
237
  }
232
238
  get direction() {
233
- var _a, _b;
234
- return null !== (_b = null === (_a = this._spec) || void 0 === _a ? void 0 : _a.direction) && void 0 !== _b ? _b : "horizontal";
239
+ var _a;
240
+ return null !== (_a = this._spec.direction) && void 0 !== _a ? _a : "horizontal";
235
241
  }
236
242
  getCategoryField() {
237
243
  return this._categoryField;
@@ -465,14 +471,10 @@ class SankeySeries extends cartesian_1.CartesianSeries {
465
471
  utils_1.userAnimationConfig)("link", this._spec, this._markAttributeContext)));
466
472
  }
467
473
  initEvent() {
468
- var _a, _b;
474
+ var _a, _b, _c;
469
475
  super.initEvent(), null === (_a = this._nodesSeriesData.getDataView()) || void 0 === _a || _a.target.addListener("change", this.nodesSeriesDataUpdate.bind(this)),
470
- null === (_b = this._linksSeriesData.getDataView()) || void 0 === _b || _b.target.addListener("change", this.linksSeriesDataUpdate.bind(this)),
471
- this._initEmphasisEvent();
472
- }
473
- _initEmphasisEvent() {
474
- var _a;
475
- const emphasisSpec = null !== (_a = this._spec.emphasis) && void 0 !== _a ? _a : {};
476
+ null === (_b = this._linksSeriesData.getDataView()) || void 0 === _b || _b.target.addListener("change", this.linksSeriesDataUpdate.bind(this));
477
+ const emphasisSpec = null !== (_c = this._spec.emphasis) && void 0 !== _c ? _c : {};
476
478
  if (!0 !== this._option.disableTriggerEvent && emphasisSpec.enable && ("adjacency" === emphasisSpec.effect || "related" === emphasisSpec.effect)) {
477
479
  const event = "hover" === emphasisSpec.trigger ? "pointerover" : "pointerdown";
478
480
  this.event.on(event, {
@@ -486,9 +488,10 @@ class SankeySeries extends cartesian_1.CartesianSeries {
486
488
  linksSeriesDataUpdate() {
487
489
  this._linksSeriesData.updateData();
488
490
  }
489
- _highLightElements(vGrammarElements, highlightNodes, highlightState, blurState) {
491
+ _highLightElements(vGrammarElements, highlightNodes) {
490
492
  vGrammarElements && vGrammarElements.length && vGrammarElements.forEach((el => {
491
- el.removeState([ blurState, highlightState ]), highlightNodes.includes(el.getDatum().key) ? el.addState(highlightState) : el.addState(blurState);
493
+ el.removeState([ interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE, interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS ]),
494
+ highlightNodes.includes(el.getDatum().key) ? el.addState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS) : el.addState(interface_1.STATE_VALUE_ENUM.STATE_SANKEY_EMPHASIS_REVERSE);
492
495
  }));
493
496
  }
494
497
  initTooltip() {