@visactor/vchart 2.0.23-alpha.6 → 2.0.23-alpha.8

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 +57 -28
  3. package/build/index.js +57 -28
  4. package/build/index.min.js +2 -2
  5. package/build/tsconfig.tsbuildinfo +1 -1
  6. package/cjs/compile/compiler.d.ts +2 -0
  7. package/cjs/compile/compiler.js +14 -2
  8. package/cjs/compile/compiler.js.map +1 -1
  9. package/cjs/component/legend/base-legend.js +1 -1
  10. package/cjs/component/legend/base-legend.js.map +1 -1
  11. package/cjs/component/marker/mark-line/cartesian-mark-line.js +7 -18
  12. package/cjs/component/marker/mark-line/cartesian-mark-line.js.map +1 -1
  13. package/cjs/component/marker/mark-line/interface/spec.d.ts +2 -9
  14. package/cjs/component/marker/mark-line/interface/spec.js.map +1 -1
  15. package/cjs/mark/base/base-line.js +2 -2
  16. package/cjs/mark/base/base-line.js.map +1 -1
  17. package/cjs/series/rose/rose.js +3 -7
  18. package/cjs/series/rose/rose.js.map +1 -1
  19. package/cjs/series/waterfall/waterfall.d.ts +2 -0
  20. package/cjs/series/waterfall/waterfall.js +12 -4
  21. package/cjs/series/waterfall/waterfall.js.map +1 -1
  22. package/esm/compile/compiler.d.ts +2 -0
  23. package/esm/compile/compiler.js +14 -2
  24. package/esm/compile/compiler.js.map +1 -1
  25. package/esm/component/legend/base-legend.js +1 -1
  26. package/esm/component/legend/base-legend.js.map +1 -1
  27. package/esm/component/marker/mark-line/cartesian-mark-line.js +8 -18
  28. package/esm/component/marker/mark-line/cartesian-mark-line.js.map +1 -1
  29. package/esm/component/marker/mark-line/interface/spec.d.ts +2 -9
  30. package/esm/component/marker/mark-line/interface/spec.js.map +1 -1
  31. package/esm/mark/base/base-line.js +2 -2
  32. package/esm/mark/base/base-line.js.map +1 -1
  33. package/esm/series/rose/rose.js +3 -7
  34. package/esm/series/rose/rose.js.map +1 -1
  35. package/esm/series/waterfall/waterfall.d.ts +2 -0
  36. package/esm/series/waterfall/waterfall.js +12 -4
  37. package/esm/series/waterfall/waterfall.js.map +1 -1
  38. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/component/marker/mark-line/interface/spec.ts"],"names":[],"mappings":"","file":"spec.js","sourcesContent":["import type { DataView } from '@visactor/vdataset';\nimport type { IComponent } from '../../../interface';\nimport type {\n IAggrType,\n IMarkerAttributeContext,\n IMarkerPositionsSpec,\n IDataPointSpec,\n IMarkerSpec,\n IDataPos,\n IDataPosCallback,\n IMarkerLabelSpec,\n IMarkerCrossSeriesSpec,\n OffsetPoint,\n MarkerStateValue,\n MarkerStateCallback,\n IMarkerSupportSeries\n} from '../../interface';\nimport type { IRegressType } from '../../mark-area/interface';\nimport type { IMarkLineTheme } from './theme';\nimport type { Datum, ILineMarkSpec, IPoint } from '../../../../typings';\nimport type { BaseMarkerAnimation, MarkCommonLineAnimationType } from '@visactor/vrender-components';\nimport type { IRegion } from '../../../../region/interface';\n\nexport type IMarkLine = IComponent;\n\n/**\n * 辅助线配置,一般用于展示图表的趋势线、平均线等\n */\nexport type IMarkLineSpec =\n | (IMarkerSpec &\n /**\n * 标注目标:笛卡尔坐标系坐标空间\n */\n (| IMarkLineXSpec\n | IMarkLineYSpec\n | IMarkLineXYSpec\n | IMarkLineXYY1Spec\n | IMarkLineYXX1Spec\n /**\n * 标注目标: 极坐标系\n * @since 1.11.0\n */\n | IMarkLineAngleSpec\n | IMarkLineRadiusSpec\n | IMarkLineAngRadRad1Spec\n | IMarkLineRadAngAng1Spec\n | IMarkLineAngRadSpec\n // 标注目标:数据元素\n | IMarkLineCoordinateSpec\n // 标注目标: 任意位置\n | IMarkerPositionsSpec\n ) &\n IMarkLineTheme &\n /**\n * 动画配置\n * @since 1.11.0\n */\n BaseMarkerAnimation<MarkCommonLineAnimationType>)\n | (IStepMarkLineSpec & BaseMarkerAnimation<MarkCommonLineAnimationType>); // 标注目标:任意位置\n\nexport interface IMarkLineXSpec extends IMarkerCrossSeriesSpec {\n /**\n * 单独声明 x 属性,可以绘制一条贯穿 y 轴的标注线\n * x 轴上的参考线。可以配置参考线在 x 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * 可以将 x 配置为 '15%' 百分比的形式,用于表示将 x 绘制在 marker 所在 region 横轴(从左往右)的百分之 15 位置处。\n */\n x: IDataPos | IDataPosCallback;\n}\n\nexport interface IMarkLineXYY1Spec extends IMarkerCrossSeriesSpec {\n /**\n * 参考线在 x 轴上位置,可以配置参考线在 x 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * 可以将 x 配置为 '15%' 百分比的形式,表示该位置位于 region 横轴(从左往右)的百分之 15 位置处。\n */\n x: IDataPos | IDataPosCallback;\n /**\n * 该参考线在 y 轴的起点位置,可以配置 y 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * 可以将 y 配置为 '15%' 百分比的形式,表示该位置位于 region 纵轴(从上到下)的百分之 15 位置处。\n */\n y: IDataPos | IDataPosCallback;\n /**\n * 该参考线在 y 轴的终点位置,可以配置 y 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * 可以将 y 配置为 '15%' 百分比的形式,表示该位置位于 region 纵轴(从上到下)的百分之 15 位置处。\n * @since 1.7.3\n */\n y1: IDataPos | IDataPosCallback;\n}\n\nexport interface IMarkLineYSpec extends IMarkerCrossSeriesSpec {\n /**\n * 单独声明 y 属性,可以绘制一条贯穿 x 轴的标注线\n * y轴上的参考线。可以配置参考线在y轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算\n * 可以将 y 配置为 '15%' 百分比的形式,用于表示将 x 绘制在 marker 所在 region 纵轴(从上到下)的百分之 15 位置处\n */\n y: IDataPos | IDataPosCallback;\n}\n\nexport interface IMarkLineYXX1Spec extends IMarkerCrossSeriesSpec {\n /**\n * 参考线在 y 轴上位置,可以配置参考线在 y 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * 可以将 y 配置为 '15%' 百分比的形式,表示该位置位于 region 纵轴(从上到下)的百分之 15 位置处。\n */\n y: IDataPos | IDataPosCallback;\n /**\n * 该参考线在 x 轴的起点位置,可以配置 x 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * 可以将 x 配置为 '15%' 百分比的形式,表示该位置位于 region 横轴(从左往右)的百分之 15 位置处。\n */\n x: IDataPos | IDataPosCallback;\n /**\n * 该参考线在 x 轴的终点位置,可以配置 x 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * 可以将 x 配置为 '15%' 百分比的形式,表示该位置位于 region 横轴(从左往右)的百分之 15 位置处。\n * @since 1.7.3\n */\n x1: IDataPos | IDataPosCallback;\n}\n\nexport interface IMarkLineXYSpec extends IMarkerCrossSeriesSpec {\n /**\n * 参考线起始点在 x 轴上位置,可以配置参考线在 x 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * 可以将 x 配置为 '15%' 百分比的形式,表示该位置位于 region 横轴(从左往右)的百分之 15 位置处。\n */\n x: IDataPos | IDataPosCallback;\n /**\n * 该参考线起始点在 y 轴的起点位置,可以配置 y 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * 可以将 y 配置为 '15%' 百分比的形式,表示该位置位于 region 纵轴(从上到下)的百分之 15 位置处。\n */\n y: IDataPos | IDataPosCallback;\n /**\n * 该参考线终点在 x 轴的终点位置,可以配置 x 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * 可以将 x 配置为 '15%' 百分比的形式,表示该位置位于 region 横轴(从左往右)的百分之 15 位置处。\n * @since 1.7.3\n */\n x1: IDataPos | IDataPosCallback;\n /**\n * 该参考线终点在 y 轴的终点位置,可以配置 y 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * 可以将 y 配置为 '15%' 百分比的形式,表示该位置位于 region 纵轴(从上到下)的百分之 15 位置处。\n * @since 1.7.3\n */\n y1: IDataPos | IDataPosCallback;\n}\n\nexport interface IMarkLineAngleSpec extends IMarkerCrossSeriesSpec {\n /**\n * 极坐标系下, 参考线在 angle 轴上位置,可以配置参考线在 angle 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * @since 1.11.0\n */\n angle: IDataPos | IDataPosCallback;\n}\n\nexport interface IMarkLineRadiusSpec extends IMarkerCrossSeriesSpec {\n /**\n * 极坐标系下, 参考线在 radius 轴上位置,可以配置参考线在 angle 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * @since 1.11.0\n */\n radius: IDataPos | IDataPosCallback;\n}\n\nexport interface IMarkLineAngRadRad1Spec extends IMarkerCrossSeriesSpec {\n /**\n * 极坐标系下, 参考线在 angle 轴上位置,可以配置参考线在 angle 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * @since 1.11.0\n */\n angle: IDataPos | IDataPosCallback;\n /**\n * 极坐标系下, 参考线在 radius 轴上位置,可以配置参考线在 angle 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * @since 1.11.0\n */\n radius: IDataPos | IDataPosCallback;\n /**\n * 极坐标系下, 参考线在 radius 轴上位置,可以配置参考线在 angle 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * @since 1.11.0\n */\n radius1: IDataPos | IDataPosCallback;\n}\n\nexport interface IMarkLineRadAngAng1Spec extends IMarkerCrossSeriesSpec {\n /**\n * 极坐标系下, 参考线在 angle 轴上位置,可以配置参考线在 angle 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * @since 1.11.0\n */\n angle: IDataPos | IDataPosCallback;\n /**\n * 极坐标系下, 参考线在 angle 轴上位置,可以配置参考线在 angle 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * @since 1.11.0\n */\n angle1: IDataPos | IDataPosCallback;\n /**\n * 极坐标系下, 参考线在 radius 轴上位置,可以配置参考线在 angle 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * @since 1.11.0\n */\n radius: IDataPos | IDataPosCallback;\n}\n\nexport interface IMarkLineAngRadSpec extends IMarkerCrossSeriesSpec {\n /**\n * 极坐标系下, 参考线在 angle 轴上位置,可以配置参考线在 angle 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * @since 1.11.0\n */\n angle: IDataPos | IDataPosCallback;\n /**\n * 极坐标系下, 参考线在 angle 轴上位置,可以配置参考线在 angle 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * @since 1.11.0\n */\n angle1: IDataPos | IDataPosCallback;\n /**\n * 极坐标系下, 参考线在 radius 轴上位置,可以配置参考线在 angle 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * @since 1.11.0\n */\n radius: IDataPos | IDataPosCallback;\n /**\n * 极坐标系下, 参考线在 radius 轴上位置,可以配置参考线在 angle 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * @since 1.11.0\n */\n radius1: IDataPos | IDataPosCallback;\n}\n\nexport type IMarkLineCoordinateSpec = {\n /**\n * 指定数据点的参考线。基于指定数据点进行参考线的绘制,可以对数据点进行数据处理\n * `coordinates` 自 1.12.0 版本开始支持回调函数\n */\n coordinates: IDataPointSpec[] | ((seriesData: Datum[], relativeSeries: IMarkerSupportSeries) => IDataPointSpec[]);\n /**\n * 对每个数据点转化后的画布坐标点进行偏移,该偏移值可以是像素值,也可以是 string 类型,如 '20%' 代表百分比\n * 每个元素对应一个坐标点的偏移量\n * @since 1.7.3\n */\n coordinatesOffset?: OffsetPoint[];\n /**\n * 数据点的处理方法。 如果不配置则按照coordinate数组直接连接成line。\n */\n process?:\n | {\n x: IAggrType;\n }\n | {\n y: IAggrType;\n }\n | {\n xy: IRegressType; // FIXME: xy属性名称不太合理,可能需调整\n };\n};\n\nexport type IStepMarkLineSpec = IMarkerSpec & {\n /**\n * 指定辅助线的连接类型,step 的连接方式为由交替的水平线和处置线组成的\n */\n type: 'type-step';\n /**\n * 线的链接方向\n */\n connectDirection: 'top' | 'bottom' | 'left' | 'right';\n /**\n * 在连接方向的扩展距离。\n * number 类型为像素值\n * string 类型为百分比,相对于 region 区域宽度/高度的百分比,如 '30%'\n * 回调函数参数同 marker 其他回调,支持拿到 markerData 与上下文,\n * 并额外补充了 region/startRegion/endRegion 便于跨 region 计算,以及当前差异标注的坐标点。\n */\n expandDistance?:\n | number\n | string\n | ((\n markerData: DataView,\n context: IMarkerAttributeContext & {\n region: IRegion;\n startRegion: IRegion;\n endRegion: IRegion;\n coordinatePoints: IPoint[];\n }\n ) => number | string);\n /**\n * 标注线的标签样式\n */\n label?: IMarkerLabelSpec;\n /**\n * 标注线的线配置\n */\n line?: {\n /**\n * 是否对 points 进行多段处理,默认为 false,即直接将所有的点连接成线。\n * 如果需要进行多段处理,需要将 points 属性配置为 Point[][] 类型\n * @default false\n */\n multiSegment?: boolean;\n /**\n * 在 `multiSegment` 属性开启的前提下,用于声明那一段线段用来作为主线段,如果不声明,默认全段为主线段\n */\n mainSegmentIndex?: number;\n /**\n * 当进行多段配置时,可以通过数组的方式传入\n */\n style?: ILineMarkSpec | ILineMarkSpec[];\n state?: Record<\n MarkerStateValue,\n ILineMarkSpec | ILineMarkSpec[] | MarkerStateCallback<ILineMarkSpec | ILineMarkSpec[]>\n >;\n };\n} & Omit<IMarkLineTheme, 'label' | 'line'> &\n (\n | {\n /**\n * 指定数据点的参考线。基于指定数据点进行参考线的绘制,可以对数据点进行数据处理\n * `coordinates` 自 1.12.0 版本开始支持回调函数\n */\n coordinates:\n | [IDataPointSpec, IDataPointSpec]\n | ((seriesData: Datum[], relativeSeries: IMarkerSupportSeries) => [IDataPointSpec, IDataPointSpec]);\n /**\n * 数据点的处理方法。 如果不配置则按照coordinate数组直接连接成line。\n */\n process?:\n | {\n x: IAggrType;\n }\n | {\n y: IAggrType;\n }\n | {\n xy: IRegressType; // FIXME: xy属性名称不太合理,可能需调整\n };\n }\n | {\n /**\n * 画布坐标\n * `positions` 自 1.12.0 版本开始支持回调函数\n */\n positions: [IPoint, IPoint] | ((seriesData: Datum[], relativeSeries: IMarkerSupportSeries) => [IPoint, IPoint]);\n /**\n * 是否为相对 region 的坐标,默认为 false,即相对画布的坐标\n * @default false\n * @since 1.7.0\n */\n regionRelative?: boolean;\n }\n );\n"]}
1
+ {"version":3,"sources":["../src/component/marker/mark-line/interface/spec.ts"],"names":[],"mappings":"","file":"spec.js","sourcesContent":["import type { IComponent } from '../../../interface';\nimport type {\n IAggrType,\n IMarkerPositionsSpec,\n IDataPointSpec,\n IMarkerSpec,\n IDataPos,\n IDataPosCallback,\n IMarkerLabelSpec,\n IMarkerCrossSeriesSpec,\n OffsetPoint,\n MarkerStateValue,\n MarkerStateCallback,\n IMarkerSupportSeries\n} from '../../interface';\nimport type { IRegressType } from '../../mark-area/interface';\nimport type { IMarkLineTheme } from './theme';\nimport type { Datum, ILineMarkSpec, IPoint } from '../../../../typings';\nimport type { BaseMarkerAnimation, MarkCommonLineAnimationType } from '@visactor/vrender-components';\n\nexport type IMarkLine = IComponent;\n\n/**\n * 辅助线配置,一般用于展示图表的趋势线、平均线等\n */\nexport type IMarkLineSpec =\n | (IMarkerSpec &\n /**\n * 标注目标:笛卡尔坐标系坐标空间\n */\n (| IMarkLineXSpec\n | IMarkLineYSpec\n | IMarkLineXYSpec\n | IMarkLineXYY1Spec\n | IMarkLineYXX1Spec\n /**\n * 标注目标: 极坐标系\n * @since 1.11.0\n */\n | IMarkLineAngleSpec\n | IMarkLineRadiusSpec\n | IMarkLineAngRadRad1Spec\n | IMarkLineRadAngAng1Spec\n | IMarkLineAngRadSpec\n // 标注目标:数据元素\n | IMarkLineCoordinateSpec\n // 标注目标: 任意位置\n | IMarkerPositionsSpec\n ) &\n IMarkLineTheme &\n /**\n * 动画配置\n * @since 1.11.0\n */\n BaseMarkerAnimation<MarkCommonLineAnimationType>)\n | (IStepMarkLineSpec & BaseMarkerAnimation<MarkCommonLineAnimationType>); // 标注目标:任意位置\n\nexport interface IMarkLineXSpec extends IMarkerCrossSeriesSpec {\n /**\n * 单独声明 x 属性,可以绘制一条贯穿 y 轴的标注线\n * x 轴上的参考线。可以配置参考线在 x 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * 可以将 x 配置为 '15%' 百分比的形式,用于表示将 x 绘制在 marker 所在 region 横轴(从左往右)的百分之 15 位置处。\n */\n x: IDataPos | IDataPosCallback;\n}\n\nexport interface IMarkLineXYY1Spec extends IMarkerCrossSeriesSpec {\n /**\n * 参考线在 x 轴上位置,可以配置参考线在 x 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * 可以将 x 配置为 '15%' 百分比的形式,表示该位置位于 region 横轴(从左往右)的百分之 15 位置处。\n */\n x: IDataPos | IDataPosCallback;\n /**\n * 该参考线在 y 轴的起点位置,可以配置 y 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * 可以将 y 配置为 '15%' 百分比的形式,表示该位置位于 region 纵轴(从上到下)的百分之 15 位置处。\n */\n y: IDataPos | IDataPosCallback;\n /**\n * 该参考线在 y 轴的终点位置,可以配置 y 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * 可以将 y 配置为 '15%' 百分比的形式,表示该位置位于 region 纵轴(从上到下)的百分之 15 位置处。\n * @since 1.7.3\n */\n y1: IDataPos | IDataPosCallback;\n}\n\nexport interface IMarkLineYSpec extends IMarkerCrossSeriesSpec {\n /**\n * 单独声明 y 属性,可以绘制一条贯穿 x 轴的标注线\n * y轴上的参考线。可以配置参考线在y轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算\n * 可以将 y 配置为 '15%' 百分比的形式,用于表示将 x 绘制在 marker 所在 region 纵轴(从上到下)的百分之 15 位置处\n */\n y: IDataPos | IDataPosCallback;\n}\n\nexport interface IMarkLineYXX1Spec extends IMarkerCrossSeriesSpec {\n /**\n * 参考线在 y 轴上位置,可以配置参考线在 y 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * 可以将 y 配置为 '15%' 百分比的形式,表示该位置位于 region 纵轴(从上到下)的百分之 15 位置处。\n */\n y: IDataPos | IDataPosCallback;\n /**\n * 该参考线在 x 轴的起点位置,可以配置 x 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * 可以将 x 配置为 '15%' 百分比的形式,表示该位置位于 region 横轴(从左往右)的百分之 15 位置处。\n */\n x: IDataPos | IDataPosCallback;\n /**\n * 该参考线在 x 轴的终点位置,可以配置 x 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * 可以将 x 配置为 '15%' 百分比的形式,表示该位置位于 region 横轴(从左往右)的百分之 15 位置处。\n * @since 1.7.3\n */\n x1: IDataPos | IDataPosCallback;\n}\n\nexport interface IMarkLineXYSpec extends IMarkerCrossSeriesSpec {\n /**\n * 参考线起始点在 x 轴上位置,可以配置参考线在 x 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * 可以将 x 配置为 '15%' 百分比的形式,表示该位置位于 region 横轴(从左往右)的百分之 15 位置处。\n */\n x: IDataPos | IDataPosCallback;\n /**\n * 该参考线起始点在 y 轴的起点位置,可以配置 y 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * 可以将 y 配置为 '15%' 百分比的形式,表示该位置位于 region 纵轴(从上到下)的百分之 15 位置处。\n */\n y: IDataPos | IDataPosCallback;\n /**\n * 该参考线终点在 x 轴的终点位置,可以配置 x 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * 可以将 x 配置为 '15%' 百分比的形式,表示该位置位于 region 横轴(从左往右)的百分之 15 位置处。\n * @since 1.7.3\n */\n x1: IDataPos | IDataPosCallback;\n /**\n * 该参考线终点在 y 轴的终点位置,可以配置 y 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * 可以将 y 配置为 '15%' 百分比的形式,表示该位置位于 region 纵轴(从上到下)的百分之 15 位置处。\n * @since 1.7.3\n */\n y1: IDataPos | IDataPosCallback;\n}\n\nexport interface IMarkLineAngleSpec extends IMarkerCrossSeriesSpec {\n /**\n * 极坐标系下, 参考线在 angle 轴上位置,可以配置参考线在 angle 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * @since 1.11.0\n */\n angle: IDataPos | IDataPosCallback;\n}\n\nexport interface IMarkLineRadiusSpec extends IMarkerCrossSeriesSpec {\n /**\n * 极坐标系下, 参考线在 radius 轴上位置,可以配置参考线在 angle 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * @since 1.11.0\n */\n radius: IDataPos | IDataPosCallback;\n}\n\nexport interface IMarkLineAngRadRad1Spec extends IMarkerCrossSeriesSpec {\n /**\n * 极坐标系下, 参考线在 angle 轴上位置,可以配置参考线在 angle 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * @since 1.11.0\n */\n angle: IDataPos | IDataPosCallback;\n /**\n * 极坐标系下, 参考线在 radius 轴上位置,可以配置参考线在 angle 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * @since 1.11.0\n */\n radius: IDataPos | IDataPosCallback;\n /**\n * 极坐标系下, 参考线在 radius 轴上位置,可以配置参考线在 angle 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * @since 1.11.0\n */\n radius1: IDataPos | IDataPosCallback;\n}\n\nexport interface IMarkLineRadAngAng1Spec extends IMarkerCrossSeriesSpec {\n /**\n * 极坐标系下, 参考线在 angle 轴上位置,可以配置参考线在 angle 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * @since 1.11.0\n */\n angle: IDataPos | IDataPosCallback;\n /**\n * 极坐标系下, 参考线在 angle 轴上位置,可以配置参考线在 angle 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * @since 1.11.0\n */\n angle1: IDataPos | IDataPosCallback;\n /**\n * 极坐标系下, 参考线在 radius 轴上位置,可以配置参考线在 angle 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * @since 1.11.0\n */\n radius: IDataPos | IDataPosCallback;\n}\n\nexport interface IMarkLineAngRadSpec extends IMarkerCrossSeriesSpec {\n /**\n * 极坐标系下, 参考线在 angle 轴上位置,可以配置参考线在 angle 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * @since 1.11.0\n */\n angle: IDataPos | IDataPosCallback;\n /**\n * 极坐标系下, 参考线在 angle 轴上位置,可以配置参考线在 angle 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * @since 1.11.0\n */\n angle1: IDataPos | IDataPosCallback;\n /**\n * 极坐标系下, 参考线在 radius 轴上位置,可以配置参考线在 angle 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * @since 1.11.0\n */\n radius: IDataPos | IDataPosCallback;\n /**\n * 极坐标系下, 参考线在 radius 轴上位置,可以配置参考线在 angle 轴上的值,或者聚合计算类型,或者以回调的形式通过数据自行计算。\n * @since 1.11.0\n */\n radius1: IDataPos | IDataPosCallback;\n}\n\nexport type IMarkLineCoordinateSpec = {\n /**\n * 指定数据点的参考线。基于指定数据点进行参考线的绘制,可以对数据点进行数据处理\n * `coordinates` 自 1.12.0 版本开始支持回调函数\n */\n coordinates: IDataPointSpec[] | ((seriesData: Datum[], relativeSeries: IMarkerSupportSeries) => IDataPointSpec[]);\n /**\n * 对每个数据点转化后的画布坐标点进行偏移,该偏移值可以是像素值,也可以是 string 类型,如 '20%' 代表百分比\n * 每个元素对应一个坐标点的偏移量\n * @since 1.7.3\n */\n coordinatesOffset?: OffsetPoint[];\n /**\n * 数据点的处理方法。 如果不配置则按照coordinate数组直接连接成line。\n */\n process?:\n | {\n x: IAggrType;\n }\n | {\n y: IAggrType;\n }\n | {\n xy: IRegressType; // FIXME: xy属性名称不太合理,可能需调整\n };\n};\n\nexport type IStepMarkLineSpec = IMarkerSpec & {\n /**\n * 指定辅助线的连接类型,step 的连接方式为由交替的水平线和处置线组成的\n */\n type: 'type-step';\n /**\n * 线的链接方向\n */\n connectDirection: 'top' | 'bottom' | 'left' | 'right';\n /**\n * 在连接方向的扩展距离。\n * number 类型为像素值\n * string 类型为百分比,相对于 region 区域宽度/高度的百分比,如 '30%'\n */\n expandDistance?: number | string;\n /**\n * 标注线的标签样式\n */\n label?: IMarkerLabelSpec;\n /**\n * 标注线的线配置\n */\n line?: {\n /**\n * 是否对 points 进行多段处理,默认为 false,即直接将所有的点连接成线。\n * 如果需要进行多段处理,需要将 points 属性配置为 Point[][] 类型\n * @default false\n */\n multiSegment?: boolean;\n /**\n * 在 `multiSegment` 属性开启的前提下,用于声明那一段线段用来作为主线段,如果不声明,默认全段为主线段\n */\n mainSegmentIndex?: number;\n /**\n * 当进行多段配置时,可以通过数组的方式传入\n */\n style?: ILineMarkSpec | ILineMarkSpec[];\n state?: Record<\n MarkerStateValue,\n ILineMarkSpec | ILineMarkSpec[] | MarkerStateCallback<ILineMarkSpec | ILineMarkSpec[]>\n >;\n };\n} & Omit<IMarkLineTheme, 'label' | 'line'> &\n (\n | {\n /**\n * 指定数据点的参考线。基于指定数据点进行参考线的绘制,可以对数据点进行数据处理\n * `coordinates` 自 1.12.0 版本开始支持回调函数\n */\n coordinates:\n | [IDataPointSpec, IDataPointSpec]\n | ((seriesData: Datum[], relativeSeries: IMarkerSupportSeries) => [IDataPointSpec, IDataPointSpec]);\n /**\n * 数据点的处理方法。 如果不配置则按照coordinate数组直接连接成line。\n */\n process?:\n | {\n x: IAggrType;\n }\n | {\n y: IAggrType;\n }\n | {\n xy: IRegressType; // FIXME: xy属性名称不太合理,可能需调整\n };\n }\n | {\n /**\n * 画布坐标\n * `positions` 自 1.12.0 版本开始支持回调函数\n */\n positions: [IPoint, IPoint] | ((seriesData: Datum[], relativeSeries: IMarkerSupportSeries) => [IPoint, IPoint]);\n /**\n * 是否为相对 region 的坐标,默认为 false,即相对画布的坐标\n * @default false\n * @since 1.7.0\n */\n regionRelative?: boolean;\n }\n );\n"]}
@@ -52,7 +52,7 @@ class BaseLineMark extends base_mark_1.BaseMark {
52
52
  })), res)), []) : null;
53
53
  }
54
54
  _runPointsEncoder(newStyles, g, attrs = {}) {
55
- var _a, _b, _c;
55
+ var _a, _b;
56
56
  const data = g.context.data, lineAttrs = [], points = [], commonAttrs = {}, progressive = null === (_a = this.renderContext) || void 0 === _a ? void 0 : _a.progressive, isFirstFrame = progressive && 0 === progressive.currentIndex;
57
57
  if (data.forEach(((datum, index) => {
58
58
  var _a;
@@ -60,7 +60,7 @@ class BaseLineMark extends base_mark_1.BaseMark {
60
60
  this._isValidPointChannel(attrName) ? points[index][attrName] = newStyles[attrName](datum) : this._segmentStyleKeys.includes(attrName) && !progressive ? lineAttrs[index][attrName] = newStyles[attrName](datum) : 0 !== index || progressive && !isFirstFrame || (commonAttrs[attrName] = newStyles[attrName](datum));
61
61
  })), points[index].context = null !== (_a = this._keyGetter(datum)) && void 0 !== _a ? _a : index;
62
62
  })), progressive) {
63
- const segments = null !== (_c = null === (_b = g.attribute) || void 0 === _b ? void 0 : _b.segments) && void 0 !== _c ? _c : [];
63
+ const segments = (null === (_b = g.attribute) || void 0 === _b ? void 0 : _b.segments) ? [ ...g.attribute.segments ] : [];
64
64
  return segments.push({
65
65
  points: points
66
66
  }), isFirstFrame ? Object.assign(Object.assign({}, commonAttrs), {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/mark/base/base-line.ts"],"names":[],"mappings":"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","file":"base-line.js","sourcesContent":["import { isValidScaleType } from '@visactor/vscale';\nimport type { StateValueType } from '../../compile/mark';\nimport type { ConvertToMarkStyleSpec, ILineLikeMarkSpec } from '../../typings/visual';\nimport type { IPointLike } from '@visactor/vutils';\nimport { isFunction, isNil } from '@visactor/vutils';\nimport { BaseMark } from './base-mark';\nimport { DiffState, type IMarkGraphic, type IMarkStyle } from '../interface';\nimport type { Datum } from '../../typings/common';\nimport type { IGroup, ILine, ILineGraphicAttribute } from '@visactor/vrender-core';\nimport { isSegmentAttrEqual } from '../utils/line';\nimport type { IMarkSpec } from '../../typings/spec/common';\nimport { DEFAULT_DATA_KEY } from '../../constant/data';\n\nexport const LINE_SEGMENT_ATTRIBUTES = [\n 'stroke',\n 'strokeOpacity',\n 'lineDash',\n 'lineDashOffset',\n 'lineCap',\n 'lineJoin',\n 'lineWidth',\n 'miterLimit'\n];\n\nexport abstract class BaseLineMark<T extends ILineLikeMarkSpec = ILineLikeMarkSpec> extends BaseMark<T> {\n protected abstract _getIgnoreAttributes(): string[];\n\n protected _getSegmentAttributes() {\n return LINE_SEGMENT_ATTRIBUTES;\n }\n\n protected _segmentStyleKeys: string[] = [];\n\n initStyleWithSpec(spec: IMarkSpec<T>) {\n this._segmentStyleKeys = [];\n\n super.initStyleWithSpec(spec);\n }\n /**\n * @override\n * 之所以覆写是因为 vgrammar 侧默认都会处理 lineSegments,非常耗性能,所以需要 VChart 给一个标志位用于是否执行。\n * 由外部series调用,设置markStyle的接口。\n * @param style\n * @param level\n * @param state\n */\n setStyle<T>(\n style: Partial<ConvertToMarkStyleSpec<T>> | Partial<IMarkStyle<T>>,\n state: StateValueType = 'normal',\n level: number = 0\n ): void {\n if (isNil(style)) {\n return;\n }\n\n if (this.stateStyle[state] === undefined) {\n this.stateStyle[state] = {};\n }\n\n const ignoreAttributes = this._getIgnoreAttributes();\n const segmentAttributes = this._getSegmentAttributes();\n const isUserLevel = this.isUserLevel(level);\n\n Object.keys(style).forEach(attr => {\n const attrStyle = (style as any)[attr];\n if (isNil(attrStyle) || ignoreAttributes.includes(attr)) {\n return;\n }\n if (\n isUserLevel &&\n segmentAttributes.includes(attr) &&\n (isValidScaleType(attrStyle?.type) || attrStyle?.scale || isFunction(attrStyle))\n ) {\n if (!this._segmentStyleKeys.includes(attr)) {\n this._segmentStyleKeys.push(attr);\n }\n }\n\n const styleConverter = this._filterAttribute(attr as any, attrStyle, state, level, isUserLevel);\n\n this.setAttribute(attr as any, styleConverter, state, level);\n });\n }\n\n _isValidPointChannel = (channel: string) => {\n return ['x', 'y', 'defined'].includes(channel);\n };\n\n _getLineSegments(items: any[], points: IPointLike[]) {\n if (!this._segmentStyleKeys || !this._segmentStyleKeys.length) {\n return null;\n }\n\n const segments: { attrs: any; startIndex: number; endIndex?: number }[] = [];\n let prevSegmentAttrs: any = null;\n\n items.forEach((item, index) => {\n if (\n !prevSegmentAttrs ||\n !this._segmentStyleKeys.every(key => {\n return isSegmentAttrEqual(prevSegmentAttrs[key], item[key], key);\n })\n ) {\n if (segments.length) {\n segments[segments.length - 1].endIndex = index;\n }\n\n prevSegmentAttrs = item;\n segments.push({\n attrs: prevSegmentAttrs,\n startIndex: index\n });\n }\n });\n\n if (segments.length >= 2) {\n return segments.map(entry => {\n return {\n ...entry.attrs,\n points: points.slice(entry.startIndex, isNil(entry.endIndex) ? points.length : entry.endIndex)\n };\n });\n }\n\n return null;\n }\n\n _getPrevPoints(g: ILine): IPointLike[] | null {\n const { points, segments } = g.attribute;\n\n return (\n points ??\n (segments\n ? segments.reduce((res: IPointLike[], seg: ILineGraphicAttribute) => {\n if (seg.points) {\n seg.points.forEach((point: IPointLike) => {\n res.push(point);\n });\n }\n\n return res;\n }, [])\n : null)\n );\n }\n\n _runPointsEncoder(newStyles: Record<string, (datum: Datum) => any>, g: IMarkGraphic, attrs: any = {}) {\n const data = g.context.data;\n const lineAttrs: any[] = [];\n const points: IPointLike[] = [];\n const commonAttrs: any = {};\n const progressive = this.renderContext?.progressive;\n const isFirstFrame = progressive && progressive.currentIndex === 0;\n\n data.forEach((datum: Datum, index: number) => {\n points[index] = {} as IPointLike;\n lineAttrs[index] = {};\n\n Object.keys(newStyles).forEach(attrName => {\n if (this._isValidPointChannel(attrName)) {\n (points[index] as any)[attrName] = newStyles[attrName](datum);\n } else if (this._segmentStyleKeys.includes(attrName) && !progressive) {\n lineAttrs[index][attrName] = newStyles[attrName](datum);\n } else if (index === 0 && (!progressive || isFirstFrame)) {\n commonAttrs[attrName] = newStyles[attrName](datum);\n }\n });\n\n // todo 上下文,似乎是动画相关的\n (points[index] as any).context = this._keyGetter(datum) ?? index;\n });\n\n if (progressive) {\n const segments = (g as any).attribute?.segments ?? [];\n\n segments.push({\n points\n });\n return isFirstFrame\n ? {\n ...commonAttrs,\n segments\n }\n : { segments };\n } else if (this._segmentStyleKeys && this._segmentStyleKeys.length) {\n const segments = this._getLineSegments(lineAttrs, points);\n\n if (segments) {\n return {\n ...commonAttrs,\n ...lineAttrs[0],\n segments,\n points: null as IPointLike[]\n };\n }\n }\n\n return {\n ...commonAttrs,\n ...lineAttrs[0],\n points,\n segments: null as any[]\n };\n }\n\n _runEncoderOfGraphic(newStyles: Record<string, (datum: Datum) => any>, g: IMarkGraphic, attrs: any = {}) {\n const data = g.context.data;\n if (newStyles && Object.keys(newStyles).some(this._isValidPointChannel) && data && data.length) {\n return this._runPointsEncoder(newStyles, g, attrs);\n }\n\n return super._runEncoderOfGraphic(newStyles, g, attrs);\n }\n\n protected _getDataByKey(data: Datum[]) {\n return this._dataByGroup;\n }\n\n protected _runProgressiveJoin() {\n const currentIndex = this.renderContext.progressive.currentIndex;\n const graphics: IMarkGraphic[] = [];\n\n this._dataByGroup.keys.forEach((groupKey, index) => {\n const data = this.renderContext.progressive.groupedData.get(groupKey as string);\n const groupStep = this.renderContext.progressive.step;\n const dataSlice = data.slice(currentIndex * groupStep, (currentIndex + 1) * groupStep);\n\n if (currentIndex === 0) {\n const g = {\n context: {\n ...this._getCommonContext(),\n diffState: DiffState.enter,\n data: dataSlice,\n uniqueKey: groupKey,\n key: groupKey,\n groupKey: groupKey\n }\n };\n\n graphics.push(g as IMarkGraphic);\n } else {\n const g = this._graphics[index];\n g.context.data = dataSlice;\n }\n });\n const res = currentIndex === 0 ? graphics : this._graphics;\n\n return {\n graphicsByGroup: { [DEFAULT_DATA_KEY]: res },\n graphics: res,\n needUpdate: false\n };\n }\n\n protected _setCommonAttributesToTheme(g: IMarkGraphic) {\n // do nothing in line/area\n }\n protected _addProgressiveGraphic(parent: IGroup, g: IMarkGraphic) {\n g.incremental = 1;\n (parent as IGroup).appendChild(g);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/mark/base/base-line.ts"],"names":[],"mappings":"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","file":"base-line.js","sourcesContent":["import { isValidScaleType } from '@visactor/vscale';\nimport type { StateValueType } from '../../compile/mark';\nimport type { ConvertToMarkStyleSpec, ILineLikeMarkSpec } from '../../typings/visual';\nimport type { IPointLike } from '@visactor/vutils';\nimport { isFunction, isNil } from '@visactor/vutils';\nimport { BaseMark } from './base-mark';\nimport { DiffState, type IMarkGraphic, type IMarkStyle } from '../interface';\nimport type { Datum } from '../../typings/common';\nimport type { IGroup, ILine, ILineGraphicAttribute } from '@visactor/vrender-core';\nimport { isSegmentAttrEqual } from '../utils/line';\nimport type { IMarkSpec } from '../../typings/spec/common';\nimport { DEFAULT_DATA_KEY } from '../../constant/data';\n\nexport const LINE_SEGMENT_ATTRIBUTES = [\n 'stroke',\n 'strokeOpacity',\n 'lineDash',\n 'lineDashOffset',\n 'lineCap',\n 'lineJoin',\n 'lineWidth',\n 'miterLimit'\n];\n\nexport abstract class BaseLineMark<T extends ILineLikeMarkSpec = ILineLikeMarkSpec> extends BaseMark<T> {\n protected abstract _getIgnoreAttributes(): string[];\n\n protected _getSegmentAttributes() {\n return LINE_SEGMENT_ATTRIBUTES;\n }\n\n protected _segmentStyleKeys: string[] = [];\n\n initStyleWithSpec(spec: IMarkSpec<T>) {\n this._segmentStyleKeys = [];\n\n super.initStyleWithSpec(spec);\n }\n /**\n * @override\n * 之所以覆写是因为 vgrammar 侧默认都会处理 lineSegments,非常耗性能,所以需要 VChart 给一个标志位用于是否执行。\n * 由外部series调用,设置markStyle的接口。\n * @param style\n * @param level\n * @param state\n */\n setStyle<T>(\n style: Partial<ConvertToMarkStyleSpec<T>> | Partial<IMarkStyle<T>>,\n state: StateValueType = 'normal',\n level: number = 0\n ): void {\n if (isNil(style)) {\n return;\n }\n\n if (this.stateStyle[state] === undefined) {\n this.stateStyle[state] = {};\n }\n\n const ignoreAttributes = this._getIgnoreAttributes();\n const segmentAttributes = this._getSegmentAttributes();\n const isUserLevel = this.isUserLevel(level);\n\n Object.keys(style).forEach(attr => {\n const attrStyle = (style as any)[attr];\n if (isNil(attrStyle) || ignoreAttributes.includes(attr)) {\n return;\n }\n if (\n isUserLevel &&\n segmentAttributes.includes(attr) &&\n (isValidScaleType(attrStyle?.type) || attrStyle?.scale || isFunction(attrStyle))\n ) {\n if (!this._segmentStyleKeys.includes(attr)) {\n this._segmentStyleKeys.push(attr);\n }\n }\n\n const styleConverter = this._filterAttribute(attr as any, attrStyle, state, level, isUserLevel);\n\n this.setAttribute(attr as any, styleConverter, state, level);\n });\n }\n\n _isValidPointChannel = (channel: string) => {\n return ['x', 'y', 'defined'].includes(channel);\n };\n\n _getLineSegments(items: any[], points: IPointLike[]) {\n if (!this._segmentStyleKeys || !this._segmentStyleKeys.length) {\n return null;\n }\n\n const segments: { attrs: any; startIndex: number; endIndex?: number }[] = [];\n let prevSegmentAttrs: any = null;\n\n items.forEach((item, index) => {\n if (\n !prevSegmentAttrs ||\n !this._segmentStyleKeys.every(key => {\n return isSegmentAttrEqual(prevSegmentAttrs[key], item[key], key);\n })\n ) {\n if (segments.length) {\n segments[segments.length - 1].endIndex = index;\n }\n\n prevSegmentAttrs = item;\n segments.push({\n attrs: prevSegmentAttrs,\n startIndex: index\n });\n }\n });\n\n if (segments.length >= 2) {\n return segments.map(entry => {\n return {\n ...entry.attrs,\n points: points.slice(entry.startIndex, isNil(entry.endIndex) ? points.length : entry.endIndex)\n };\n });\n }\n\n return null;\n }\n\n _getPrevPoints(g: ILine): IPointLike[] | null {\n const { points, segments } = g.attribute;\n\n return (\n points ??\n (segments\n ? segments.reduce((res: IPointLike[], seg: ILineGraphicAttribute) => {\n if (seg.points) {\n seg.points.forEach((point: IPointLike) => {\n res.push(point);\n });\n }\n\n return res;\n }, [])\n : null)\n );\n }\n\n _runPointsEncoder(newStyles: Record<string, (datum: Datum) => any>, g: IMarkGraphic, attrs: any = {}) {\n const data = g.context.data;\n const lineAttrs: any[] = [];\n const points: IPointLike[] = [];\n const commonAttrs: any = {};\n const progressive = this.renderContext?.progressive;\n const isFirstFrame = progressive && progressive.currentIndex === 0;\n\n data.forEach((datum: Datum, index: number) => {\n points[index] = {} as IPointLike;\n lineAttrs[index] = {};\n\n Object.keys(newStyles).forEach(attrName => {\n if (this._isValidPointChannel(attrName)) {\n (points[index] as any)[attrName] = newStyles[attrName](datum);\n } else if (this._segmentStyleKeys.includes(attrName) && !progressive) {\n lineAttrs[index][attrName] = newStyles[attrName](datum);\n } else if (index === 0 && (!progressive || isFirstFrame)) {\n commonAttrs[attrName] = newStyles[attrName](datum);\n }\n });\n\n // todo 上下文,似乎是动画相关的\n (points[index] as any).context = this._keyGetter(datum) ?? index;\n });\n\n if (progressive) {\n const segments = (g as any).attribute?.segments ? [...(g as any).attribute.segments] : [];\n\n segments.push({\n points\n });\n return isFirstFrame\n ? {\n ...commonAttrs,\n segments\n }\n : { segments };\n } else if (this._segmentStyleKeys && this._segmentStyleKeys.length) {\n const segments = this._getLineSegments(lineAttrs, points);\n\n if (segments) {\n return {\n ...commonAttrs,\n ...lineAttrs[0],\n segments,\n points: null as IPointLike[]\n };\n }\n }\n\n return {\n ...commonAttrs,\n ...lineAttrs[0],\n points,\n segments: null as any[]\n };\n }\n\n _runEncoderOfGraphic(newStyles: Record<string, (datum: Datum) => any>, g: IMarkGraphic, attrs: any = {}) {\n const data = g.context.data;\n if (newStyles && Object.keys(newStyles).some(this._isValidPointChannel) && data && data.length) {\n return this._runPointsEncoder(newStyles, g, attrs);\n }\n\n return super._runEncoderOfGraphic(newStyles, g, attrs);\n }\n\n protected _getDataByKey(data: Datum[]) {\n return this._dataByGroup;\n }\n\n protected _runProgressiveJoin() {\n const currentIndex = this.renderContext.progressive.currentIndex;\n const graphics: IMarkGraphic[] = [];\n\n this._dataByGroup.keys.forEach((groupKey, index) => {\n const data = this.renderContext.progressive.groupedData.get(groupKey as string);\n const groupStep = this.renderContext.progressive.step;\n const dataSlice = data.slice(currentIndex * groupStep, (currentIndex + 1) * groupStep);\n\n if (currentIndex === 0) {\n const g = {\n context: {\n ...this._getCommonContext(),\n diffState: DiffState.enter,\n data: dataSlice,\n uniqueKey: groupKey,\n key: groupKey,\n groupKey: groupKey\n }\n };\n\n graphics.push(g as IMarkGraphic);\n } else {\n const g = this._graphics[index];\n g.context.data = dataSlice;\n }\n });\n const res = currentIndex === 0 ? graphics : this._graphics;\n\n return {\n graphicsByGroup: { [DEFAULT_DATA_KEY]: res },\n graphics: res,\n needUpdate: false\n };\n }\n\n protected _setCommonAttributesToTheme(g: IMarkGraphic) {\n // do nothing in line/area\n }\n protected _addProgressiveGraphic(parent: IGroup, g: IMarkGraphic) {\n g.incremental = 1;\n (parent as IGroup).appendChild(g);\n }\n}\n"]}
@@ -55,10 +55,9 @@ class RoseSeries extends rose_like_1.RoseLikeSeries {
55
55
  fill: this.getColorAttribute(),
56
56
  outerRadius: datum => (0, scale_1.valueInScaleRange)(this.radiusAxisHelper.dataToPosition([ datum[this._radiusField[0]] ]), this.radiusAxisHelper.getScale(0)),
57
57
  innerRadius: datum => {
58
- var _a;
59
- if (!this.getStack()) return 0;
58
+ if (!this.getStack()) return this._computeLayoutRadius() * this._innerRadius;
60
59
  const stackStart = (0, scale_1.valueInScaleRange)(this.radiusAxisHelper.dataToPosition([ datum[this._innerRadiusField[0]] ]), this.radiusAxisHelper.getScale(0));
61
- return stackStart <= Number.MIN_VALUE ? this._computeLayoutRadius() * (null !== (_a = this._spec.innerRadius) && void 0 !== _a ? _a : 0) : stackStart;
60
+ return stackStart <= Number.MIN_VALUE ? this._computeLayoutRadius() * this._innerRadius : stackStart;
62
61
  }
63
62
  });
64
63
  }
@@ -77,10 +76,7 @@ class RoseSeries extends rose_like_1.RoseLikeSeries {
77
76
  const appearPreset = null === (_b = null === (_a = this._spec) || void 0 === _a ? void 0 : _a.animationAppear) || void 0 === _b ? void 0 : _b.preset;
78
77
  if (this._roseMark) {
79
78
  const animationParams = {
80
- innerRadius: () => {
81
- var _a;
82
- return this._computeLayoutRadius() * (null !== (_a = this._spec.innerRadius) && void 0 !== _a ? _a : 0);
83
- }
79
+ innerRadius: () => this._computeLayoutRadius() * this._innerRadius
84
80
  };
85
81
  this._roseMark.setAnimationConfig((0, utils_1.animationConfig)(null === (_c = factory_1.Factory.getAnimationInKey("rose")) || void 0 === _c ? void 0 : _c(animationParams, appearPreset), (0,
86
82
  utils_1.userAnimationConfig)("rose", this._spec, this._markAttributeContext)));
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/series/rose/rose.ts"],"names":[],"mappings":";;;AAEA,4CAAqD;AACrD,iDAAgG;AAEhG,4CAAuE;AACvE,2CAAoD;AAEpD,kDAAoD;AAEpD,wCAAiD;AACjD,yCAA4C;AAC5C,gDAA6C;AAE7C,yDAA+D;AAC/D,sDAA4F;AAC5F,iEAA8D;AAEjD,QAAA,gBAAgB,GAAG,GAAG,CAAC;AAEpC,MAAa,UAAwD,SAAQ,0BAAiB;IAA9F;;QAEE,SAAI,GAAG,qBAAc,CAAC,IAAI,CAAC;QAKlB,2BAAsB,GAAG,4CAAyB,CAAC;QAEpD,cAAS,GAAoB,IAAI,CAAC;QAChC,eAAU,GAAqB,IAAI,CAAC;IAmIhD,CAAC;IAjIC,QAAQ;QACN,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,aAAa;QACX,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAES,0BAA0B;QAClC,KAAK,CAAC,0BAA0B,EAAE,CAAC;QAEnC,IAAI,CAAC,qBAAqB,CAAC,SAAS,GAAG,GAAG,EAAE;YAC1C,OAAO;gBACL,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;gBACxC,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;aACzC,CAAC;QACJ,CAAC,CAAC;QAEF,IAAI,CAAC,qBAAqB,CAAC,eAAe,GAAG,CAAC,KAAY,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC3F,IAAI,CAAC,qBAAqB,CAAC,aAAa,GAAG,CAAC,KAAY,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACzF,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAC/B,UAAU,CAAC,IAAI,CAAC,IAAI,EACpB;YACE,QAAQ,EAAE,IAAI,CAAC,YAAY;YAC3B,YAAY,EAAE,IAAI;SACnB,EACD;YACE,KAAK,EAAE,IAAA,yBAAiB,EAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YAC/D,eAAe,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;SAC7C,CACU,CAAC;IAChB,CAAC;IAEO,YAAY;;QAClB,MAAM,cAAc,GAClB,MAAA,MAAA,MAAA,IAAI,CAAC,eAAe,EAAC,YAAY,mDAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mCAAI,wBAAgB,CAAC;QAC7G,OAAO,cAAc,CAAC;IACxB,CAAC;IAEO,eAAe,CAAC,KAAY;QAClC,OAAO,CACL,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;YAC9F,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAC1E,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,KAAY;QAChC,OAAO,CACL,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;YAC9F,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAC1E,CAAC;IACJ,CAAC;IAEO,iBAAiB;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;gBAC1B,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;gBACxC,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;gBACxC,UAAU,EAAE,CAAC,KAAY,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;gBACzD,QAAQ,EAAE,CAAC,KAAY,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;gBACrD,IAAI,EAAE,IAAI,CAAC,iBAAiB,EAAE;gBAC9B,WAAW,EAAE,CAAC,KAAY,EAAE,EAAE,CAC5B,IAAA,yBAAiB,EACf,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACnE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAClC;gBACH,WAAW,EAAE,CAAC,KAAY,EAAE,EAAE;;oBAC5B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;wBACpB,OAAO,CAAC,CAAC;qBACV;oBACD,MAAM,UAAU,GAAG,IAAA,yBAAiB,EAClC,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACxE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAClC,CAAC;oBACF,OAAO,UAAU,IAAI,MAAM,CAAC,SAAS;wBACnC,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,CAAC,MAAA,IAAI,CAAC,KAAK,CAAC,WAAW,mCAAI,CAAC,CAAC;wBAC7D,CAAC,CAAC,UAAU,CAAC;gBACjB,CAAC;aACF,CAAC,CAAC;SACJ;IACH,CAAC;IAES,WAAW;QACnB,KAAK,CAAC,WAAW,EAAE,CAAC;QAEpB,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClF,CAAC;IAED,kBAAkB,CAAC,QAAoB;QACrC,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO;SACR;QACD,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;YAC1B,IAAI,EAAE,CAAC,KAAY,EAAE,EAAE;gBACrB,OAAO,KAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,CAAC;YACD,IAAI,EAAE,IAAI,CAAC,iBAAiB,EAAE;YAC9B,CAAC,EAAE,CAAC;SACL,CAAC,CAAC;IACL,CAAC;IAED,aAAa;;QACX,MAAM,YAAY,GAAG,MAAC,MAAA,IAAI,CAAC,KAAK,0CAAE,eAAuD,0CAAE,MAAM,CAAC;QAElG,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,MAAM,eAAe,GAAyB;gBAC5C,WAAW,EAAE,GAAG,EAAE,WAAC,OAAA,IAAI,CAAC,oBAAoB,EAAE,GAAG,CAAC,MAAA,IAAI,CAAC,KAAK,CAAC,WAAW,mCAAI,CAAC,CAAC,CAAA,EAAA;aAC/E,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAC/B,IAAA,uBAAe,EACb,MAAA,iBAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,0CAAG,eAAe,EAAE,YAAY,CAAC,EAClE,IAAA,2BAAmB,UAA0B,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC,CACrF,CACF,CAAC;SACH;IACH,CAAC;IAED,mBAAmB;QACjB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,cAAc;QACZ,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1B,CAAC;;AA5IH,gCA6IC;AA5IiB,eAAI,GAAW,qBAAc,CAAC,IAAI,CAAC;AAGnC,eAAI,GAAkB,yBAAc,CAAC;AACrC,uBAAY,GAAG,EAAE,IAAI,EAAJ,WAAI,EAAE,CAAC;AACxB,iCAAsB,GAAG,4CAAgC,CAAC;AAyIrE,MAAM,kBAAkB,GAAG,GAAG,EAAE;IACrC,iBAAO,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACpD,IAAA,qBAAe,GAAE,CAAC;IAClB,IAAA,iCAAqB,GAAE,CAAC;IACxB,IAAA,6BAAqB,GAAE,CAAC;IACxB,IAAA,+BAAuB,GAAE,CAAC;AAC5B,CAAC,CAAC;AANW,QAAA,kBAAkB,sBAM7B","file":"rose.js","sourcesContent":["/* eslint-disable no-duplicate-imports */\nimport type { Datum } from '../../typings';\nimport { valueInScaleRange } from '../../util/scale';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { registerRoseAnimation } from './animation';\nimport type { IRoseAnimationParams, IRoseSeriesSpec, RoseAppearPreset } from './interface';\nimport { RoseLikeSeries } from '../polar/rose-like';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { registerArcMark } from '../../mark/arc';\nimport { roseSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport type { IArcMark, ILabelMark, IMark, ITextMark } from '../../mark/interface';\nimport { RoseSeriesSpecTransformer } from './rose-transformer';\nimport { registerPolarBandAxis, registerPolarLinearAxis } from '../../component/axis/polar';\nimport { rose } from '../../theme/builtin/common/series/rose';\n\nexport const DefaultBandWidth = 0.5;\n\nexport class RoseSeries<T extends IRoseSeriesSpec = IRoseSeriesSpec> extends RoseLikeSeries<T> {\n static readonly type: string = SeriesTypeEnum.rose;\n type = SeriesTypeEnum.rose;\n\n static readonly mark: SeriesMarkMap = roseSeriesMark;\n static readonly builtInTheme = { rose };\n static readonly transformerConstructor = RoseSeriesSpecTransformer as any;\n readonly transformerConstructor = RoseSeriesSpecTransformer;\n\n private _roseMark: IArcMark | null = null;\n protected _labelMark: ITextMark | null = null;\n\n initMark(): void {\n this.initRoseMark();\n }\n\n initMarkStyle(): void {\n this.initRoseMarkStyle();\n }\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n // center\n this._markAttributeContext.getCenter = () => {\n return {\n x: () => this.angleAxisHelper.center().x,\n y: () => this.angleAxisHelper.center().y\n };\n };\n // angle scale\n this._markAttributeContext.startAngleScale = (datum: Datum) => this.startAngleScale(datum);\n this._markAttributeContext.endAngleScale = (datum: Datum) => this.endAngleScale(datum);\n }\n\n private initRoseMark() {\n this._roseMark = this._createMark(\n RoseSeries.mark.rose,\n {\n groupKey: this._seriesField,\n isSeriesMark: true\n },\n {\n morph: shouldMarkDoMorph(this._spec, RoseSeries.mark.rose.name),\n morphElementKey: this.getDimensionField()[0]\n }\n ) as IArcMark;\n }\n\n private getRoseAngle() {\n const angleBandWidth =\n this.angleAxisHelper.getBandwidth?.(this._groups ? this._groups.fields.length - 1 : 0) ?? DefaultBandWidth;\n return angleBandWidth;\n }\n\n private startAngleScale(datum: Datum) {\n return (\n this.angleAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this.getGroupFields())) -\n this.angleAxisHelper.getBandwidth(this.getGroupFields().length - 1) * 0.5\n );\n }\n\n private endAngleScale(datum: Datum) {\n return (\n this.angleAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this.getGroupFields())) +\n this.getRoseAngle() -\n this.angleAxisHelper.getBandwidth(this.getGroupFields().length - 1) * 0.5\n );\n }\n\n private initRoseMarkStyle() {\n const roseMark = this._roseMark;\n if (roseMark) {\n this.setMarkStyle(roseMark, {\n x: () => this.angleAxisHelper.center().x,\n y: () => this.angleAxisHelper.center().y,\n startAngle: (datum: Datum) => this.startAngleScale(datum),\n endAngle: (datum: Datum) => this.endAngleScale(datum),\n fill: this.getColorAttribute(),\n outerRadius: (datum: Datum) =>\n valueInScaleRange(\n this.radiusAxisHelper.dataToPosition([datum[this._radiusField[0]]]),\n this.radiusAxisHelper.getScale(0)\n ),\n innerRadius: (datum: Datum) => {\n if (!this.getStack()) {\n return 0;\n }\n const stackStart = valueInScaleRange(\n this.radiusAxisHelper.dataToPosition([datum[this._innerRadiusField[0]]]),\n this.radiusAxisHelper.getScale(0)\n );\n return stackStart <= Number.MIN_VALUE\n ? this._computeLayoutRadius() * (this._spec.innerRadius ?? 0)\n : stackStart;\n }\n });\n }\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n this._roseMark && this._tooltipHelper.activeTriggerSet.mark.add(this._roseMark);\n }\n\n initLabelMarkStyle(textMark: ILabelMark) {\n if (!textMark) {\n return;\n }\n this.setMarkStyle(textMark, {\n text: (datum: Datum) => {\n return datum[this.getDimensionField()[0]];\n },\n fill: this.getColorAttribute(),\n z: 0\n });\n }\n\n initAnimation() {\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec<RoseAppearPreset>)?.preset;\n\n if (this._roseMark) {\n const animationParams: IRoseAnimationParams = {\n innerRadius: () => this._computeLayoutRadius() * (this._spec.innerRadius ?? 0)\n };\n this._roseMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('rose')?.(animationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.rose, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n\n getDefaultShapeType() {\n return 'circle';\n }\n\n getActiveMarks(): IMark[] {\n return [this._roseMark];\n }\n}\n\nexport const registerRoseSeries = () => {\n Factory.registerSeries(RoseSeries.type, RoseSeries);\n registerArcMark();\n registerRoseAnimation();\n registerPolarBandAxis();\n registerPolarLinearAxis();\n};\n"]}
1
+ {"version":3,"sources":["../src/series/rose/rose.ts"],"names":[],"mappings":"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","file":"rose.js","sourcesContent":["/* eslint-disable no-duplicate-imports */\nimport type { Datum } from '../../typings';\nimport { valueInScaleRange } from '../../util/scale';\nimport { animationConfig, shouldMarkDoMorph, userAnimationConfig } from '../../animation/utils';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum, SeriesTypeEnum } from '../interface/type';\nimport { registerRoseAnimation } from './animation';\nimport type { IRoseAnimationParams, IRoseSeriesSpec, RoseAppearPreset } from './interface';\nimport { RoseLikeSeries } from '../polar/rose-like';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { registerArcMark } from '../../mark/arc';\nimport { roseSeriesMark } from './constant';\nimport { Factory } from '../../core/factory';\nimport type { IArcMark, ILabelMark, IMark, ITextMark } from '../../mark/interface';\nimport { RoseSeriesSpecTransformer } from './rose-transformer';\nimport { registerPolarBandAxis, registerPolarLinearAxis } from '../../component/axis/polar';\nimport { rose } from '../../theme/builtin/common/series/rose';\n\nexport const DefaultBandWidth = 0.5;\n\nexport class RoseSeries<T extends IRoseSeriesSpec = IRoseSeriesSpec> extends RoseLikeSeries<T> {\n static readonly type: string = SeriesTypeEnum.rose;\n type = SeriesTypeEnum.rose;\n\n static readonly mark: SeriesMarkMap = roseSeriesMark;\n static readonly builtInTheme = { rose };\n static readonly transformerConstructor = RoseSeriesSpecTransformer as any;\n readonly transformerConstructor = RoseSeriesSpecTransformer;\n\n private _roseMark: IArcMark | null = null;\n protected _labelMark: ITextMark | null = null;\n\n initMark(): void {\n this.initRoseMark();\n }\n\n initMarkStyle(): void {\n this.initRoseMarkStyle();\n }\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n // center\n this._markAttributeContext.getCenter = () => {\n return {\n x: () => this.angleAxisHelper.center().x,\n y: () => this.angleAxisHelper.center().y\n };\n };\n // angle scale\n this._markAttributeContext.startAngleScale = (datum: Datum) => this.startAngleScale(datum);\n this._markAttributeContext.endAngleScale = (datum: Datum) => this.endAngleScale(datum);\n }\n\n private initRoseMark() {\n this._roseMark = this._createMark(\n RoseSeries.mark.rose,\n {\n groupKey: this._seriesField,\n isSeriesMark: true\n },\n {\n morph: shouldMarkDoMorph(this._spec, RoseSeries.mark.rose.name),\n morphElementKey: this.getDimensionField()[0]\n }\n ) as IArcMark;\n }\n\n private getRoseAngle() {\n const angleBandWidth =\n this.angleAxisHelper.getBandwidth?.(this._groups ? this._groups.fields.length - 1 : 0) ?? DefaultBandWidth;\n return angleBandWidth;\n }\n\n private startAngleScale(datum: Datum) {\n return (\n this.angleAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this.getGroupFields())) -\n this.angleAxisHelper.getBandwidth(this.getGroupFields().length - 1) * 0.5\n );\n }\n\n private endAngleScale(datum: Datum) {\n return (\n this.angleAxisHelper.dataToPosition(this.getDatumPositionValues(datum, this.getGroupFields())) +\n this.getRoseAngle() -\n this.angleAxisHelper.getBandwidth(this.getGroupFields().length - 1) * 0.5\n );\n }\n\n private initRoseMarkStyle() {\n const roseMark = this._roseMark;\n if (roseMark) {\n this.setMarkStyle(roseMark, {\n x: () => this.angleAxisHelper.center().x,\n y: () => this.angleAxisHelper.center().y,\n startAngle: (datum: Datum) => this.startAngleScale(datum),\n endAngle: (datum: Datum) => this.endAngleScale(datum),\n fill: this.getColorAttribute(),\n outerRadius: (datum: Datum) =>\n valueInScaleRange(\n this.radiusAxisHelper.dataToPosition([datum[this._radiusField[0]]]),\n this.radiusAxisHelper.getScale(0)\n ),\n innerRadius: (datum: Datum) => {\n if (!this.getStack()) {\n return this._computeLayoutRadius() * this._innerRadius;\n }\n const stackStart = valueInScaleRange(\n this.radiusAxisHelper.dataToPosition([datum[this._innerRadiusField[0]]]),\n this.radiusAxisHelper.getScale(0)\n );\n return stackStart <= Number.MIN_VALUE ? this._computeLayoutRadius() * this._innerRadius : stackStart;\n }\n });\n }\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n this._roseMark && this._tooltipHelper.activeTriggerSet.mark.add(this._roseMark);\n }\n\n initLabelMarkStyle(textMark: ILabelMark) {\n if (!textMark) {\n return;\n }\n this.setMarkStyle(textMark, {\n text: (datum: Datum) => {\n return datum[this.getDimensionField()[0]];\n },\n fill: this.getColorAttribute(),\n z: 0\n });\n }\n\n initAnimation() {\n const appearPreset = (this._spec?.animationAppear as IStateAnimateSpec<RoseAppearPreset>)?.preset;\n\n if (this._roseMark) {\n const animationParams: IRoseAnimationParams = {\n innerRadius: () => this._computeLayoutRadius() * this._innerRadius\n };\n this._roseMark.setAnimationConfig(\n animationConfig(\n Factory.getAnimationInKey('rose')?.(animationParams, appearPreset),\n userAnimationConfig(SeriesMarkNameEnum.rose, this._spec, this._markAttributeContext)\n )\n );\n }\n }\n\n getDefaultShapeType() {\n return 'circle';\n }\n\n getActiveMarks(): IMark[] {\n return [this._roseMark];\n }\n}\n\nexport const registerRoseSeries = () => {\n Factory.registerSeries(RoseSeries.type, RoseSeries);\n registerArcMark();\n registerRoseAnimation();\n registerPolarBandAxis();\n registerPolarLinearAxis();\n};\n"]}
@@ -48,6 +48,8 @@ export declare class WaterfallSeries<T extends IWaterfallSeriesSpec = IWaterfall
48
48
  };
49
49
  totalPositionX(datum: Datum, field: string, pos?: number): number;
50
50
  totalPositionY(datum: Datum, field: string, pos?: number): number;
51
+ protected _isCategoryAxisInverse(): boolean;
52
+ protected _getLeaderLineCategoryPos(isStart: boolean, isDecrease: boolean): number;
51
53
  initMarkStyle(): void;
52
54
  protected isVisibleLeaderLine(datum: Datum): boolean;
53
55
  }
@@ -156,6 +156,14 @@ class WaterfallSeries extends bar_1.BarSeries {
156
156
  bandPosition: this._bandPosition
157
157
  }));
158
158
  }
159
+ _isCategoryAxisInverse() {
160
+ var _a, _b, _c, _e;
161
+ return "horizontal" === this._direction ? null === (_b = null === (_a = this._yAxisHelper) || void 0 === _a ? void 0 : _a.isInverse) || void 0 === _b ? void 0 : _b.call(_a) : null === (_e = null === (_c = this._xAxisHelper) || void 0 === _c ? void 0 : _c.isInverse) || void 0 === _e ? void 0 : _e.call(_c);
162
+ }
163
+ _getLeaderLineCategoryPos(isStart, isDecrease) {
164
+ const normalPos = isStart ? isDecrease ? 0 : 1 : isDecrease ? 1 : 0;
165
+ return !!this._isCategoryAxisInverse() ? 1 - normalPos : normalPos;
166
+ }
159
167
  initMarkStyle() {
160
168
  super.initMarkStyle();
161
169
  const isDecrease = "decrease" === this._spec.calculationMode;
@@ -163,12 +171,12 @@ class WaterfallSeries extends bar_1.BarSeries {
163
171
  visible: datum => this.isVisibleLeaderLine(datum),
164
172
  x: datum => this.totalPositionX(datum, "lastEnd", 0),
165
173
  x1: datum => this.totalPositionX(datum, datum.isTotal ? "end" : "start", 0),
166
- y: datum => datum.lastIndex ? this.totalPositionY(datum, "lastIndex", isDecrease ? 0 : 1) : 0,
167
- y1: datum => this.totalPositionY(datum, "index", isDecrease ? 1 : 0)
174
+ y: datum => datum.lastIndex ? this.totalPositionY(datum, "lastIndex", this._getLeaderLineCategoryPos(!0, isDecrease)) : 0,
175
+ y1: datum => this.totalPositionY(datum, "index", this._getLeaderLineCategoryPos(!1, isDecrease))
168
176
  }, "normal", attribute_1.AttributeLevel.Series) : this.setMarkStyle(this._leaderLineMark, {
169
177
  visible: datum => this.isVisibleLeaderLine(datum),
170
- x: datum => datum.lastIndex ? this.totalPositionX(datum, "lastIndex", isDecrease ? 0 : 1) : 0,
171
- x1: datum => this.totalPositionX(datum, "index", isDecrease ? 1 : 0),
178
+ x: datum => datum.lastIndex ? this.totalPositionX(datum, "lastIndex", this._getLeaderLineCategoryPos(!0, isDecrease)) : 0,
179
+ x1: datum => this.totalPositionX(datum, "index", this._getLeaderLineCategoryPos(!1, isDecrease)),
172
180
  y: datum => this.totalPositionY(datum, "lastEnd", 0),
173
181
  y1: datum => this.totalPositionY(datum, datum.isTotal ? "end" : "start", 0)
174
182
  }, "normal", attribute_1.AttributeLevel.Series));
@@ -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 { isNil, precisionSub } from '@visactor/vutils';\nimport { STACK_FIELD_END, STACK_FIELD_START } from '../../constant/data';\nimport { waterfall, waterfallFillTotal } from '../../data/transforms/waterfall';\nimport { BarSeries } from '../bar/bar';\nimport { isValueInScaleDomain, valueInScaleRange } from '../../util/scale';\nimport { registerWaterfallAnimation } from './animation';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport type { IWaterfallSeriesSpec, WaterfallAppearPreset } 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 { dataViewFromDataView } from '../../data/initialize';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport type { IModelEvaluateOption } from '../../model/interface';\nimport type { Datum } from '../../typings';\nimport { Direction } from '../../typings/space';\nimport { registerRuleMark } from '../../mark/rule';\nimport { waterfallSeriesMark } from './constant';\nimport { Group } from '../base/group';\nimport { Factory } from '../../core/factory';\nimport { registerRectMark } from '../../mark/rect';\nimport { getGroupAnimationParams } from '../util/utils';\nimport { WaterfallSeriesSpecTransformer } from './waterfall-transformer';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../component/axis/cartesian';\nimport { stackLabel } from '../../component/label/util';\nimport { WaterfallDefaultSeriesField } from '../../constant/waterfall';\nimport { PREFIX } from '../../constant/base';\nimport { AttributeLevel } from '../../constant/attribute';\nimport type { ILabelMark, IRuleMark, ITextMark } from '../../mark/interface';\nimport type { IBarAnimationParams } from '../bar/interface';\nimport type { ILabelInfo } from '../../component/label/interface';\nimport { CompilableData, type ICompilableData } from '../../compile/data';\nimport { waterfall as waterfallTheme } from '../../theme/builtin/common/series/waterfall';\nimport type { IStackCacheNode } from '../../util';\nimport { getRegionStackGroup, stackTotal } from '../../util';\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 builtInTheme = { waterfall: waterfallTheme };\n static readonly transformerConstructor = WaterfallSeriesSpecTransformer as any;\n readonly transformerConstructor = WaterfallSeriesSpecTransformer as any;\n\n protected _totalData?: ICompilableData;\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 calculationMode: this._spec.calculationMode ?? 'increase',\n stackInverse: this.getRegion().getStackInverse()\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 CompilableData(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 calculationMode: this._spec.calculationMode ?? 'increase',\n groupData: () => this.getGroups().groupData,\n stackInverse: this.getRegion().getStackInverse()\n }\n },\n false\n );\n totalData.target.addListener('change', this._reStackTotal);\n }\n\n protected _reStackTotal = () => {\n const stackData = this.getStackData();\n const stackValueField = this.getStackValueField();\n if (stackData) {\n stackTotal(stackData as IStackCacheNode, stackValueField);\n }\n };\n\n compileData() {\n super.compileData();\n this._totalData?.compile();\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 }) as IRuleMark;\n if (leaderLine) {\n this._leaderLineMark = leaderLine;\n leaderLine.setData(this._totalData);\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\n initStackLabelMarkStyle(labelMark: ILabelMark): void {\n if (!labelMark) {\n return;\n }\n this._stackLabelMark = labelMark;\n // 瀑布图标签 encode 在自定义布局中计算\n labelMark.skipEncode = true;\n labelMark.setRule('stackLabel');\n labelMark.setData(this._totalData);\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 const isDecrease = this._spec.calculationMode === 'decrease';\n if (this._leaderLineMark) {\n if (this._direction === Direction.horizontal) {\n this.setMarkStyle(\n this._leaderLineMark,\n {\n visible: (datum: Datum) => this.isVisibleLeaderLine(datum),\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', isDecrease ? 0 : 1);\n },\n y1: (datum: Datum) => this.totalPositionY(datum, 'index', isDecrease ? 1 : 0)\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n this._leaderLineMark,\n {\n visible: (datum: Datum) => this.isVisibleLeaderLine(datum),\n x: (datum: Datum) => {\n if (!datum.lastIndex) {\n return 0;\n }\n return this.totalPositionX(datum, 'lastIndex', isDecrease ? 0 : 1);\n },\n x1: (datum: Datum) => this.totalPositionX(datum, 'index', isDecrease ? 1 : 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 protected isVisibleLeaderLine(datum: Datum): boolean {\n if (isNil(datum.lastIndex)) {\n return false;\n }\n return isValueInScaleDomain(\n [datum.lastEnd, datum[datum.isTotal ? 'end' : 'start']],\n this.direction === Direction.horizontal ? this._xAxisHelper.getScale(0) : this._yAxisHelper.getScale(0)\n );\n }\n}\n\nexport const registerWaterfallSeries = () => {\n registerRuleMark();\n registerRectMark();\n registerWaterfallAnimation();\n registerFadeInOutAnimation();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerSeries(WaterfallSeries.type, WaterfallSeries);\n};\n"]}
1
+ {"version":3,"sources":["../src/series/waterfall/waterfall.ts"],"names":[],"mappings":";;;AACA,6CAAuD;AACvD,8CAAyE;AACzE,+DAAgF;AAChF,oCAAuC;AACvC,4CAA2E;AAC3E,2CAAyD;AACzD,iDAA6E;AAG7E,4CAAuE;AACvE,mDAAoE;AAEpE,kDAAuE;AACvE,sDAA6D;AAK7D,0CAAmD;AACnD,yCAAiD;AACjD,yCAAsC;AACtC,gDAA6C;AAC7C,0CAAmD;AACnD,yCAAwD;AACxD,mEAAyE;AACzE,8DAAwG;AACxG,qDAAwD;AACxD,wDAAuE;AACvE,8CAA6C;AAC7C,wDAA0D;AAI1D,6CAA0E;AAC1E,2EAA0F;AAE1F,qCAA6D;AAEhD,QAAA,gBAAgB,GAAG,CAAC,CAAC;AAElC,MAAa,eAAuE,SAAQ,eAAc;IAA1G;;QAEE,SAAI,GAAG,qBAAc,CAAC,SAAS,CAAC;QAKvB,2BAAsB,GAAG,sDAAqC,CAAC;QAS9D,oBAAe,GAAc,IAAI,CAAC;QAClC,oBAAe,GAAc,IAAI,CAAC;QAClC,eAAU,GAAc,IAAI,CAAC;QAkF7B,kBAAa,GAAG,GAAG,EAAE;YAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACtC,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAClD,IAAI,SAAS,EAAE;gBACb,IAAA,iBAAU,EAAC,SAA4B,EAAE,eAAe,CAAC,CAAC;aAC3D;QACH,CAAC,CAAC;IAyOJ,CAAC;IAzUC,YAAY;;QACV,OAAO,MAAA,IAAI,CAAC,UAAU,0CAAE,aAAa,EAAE,CAAC;IAC1C,CAAC;IAQS,UAAU;QAClB,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,EAAE;YACrC,IAAI,CAAC,OAAO,GAAG,IAAI,aAAK,CAAC,WAAW,CAAC,CAAC;YACtC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC9E;IACH,CAAC;IAED,eAAe;QACb,KAAK,CAAC,eAAe,EAAE,CAAC;QAExB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,IAAA,cAAK,EAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YAC5B,IAAI,CAAC,YAAY,GAAG,uCAA2B,CAAC;SACjD;IACH,CAAC;IAED,aAAa;QACX,IAAI,IAAI,CAAC,YAAY,KAAK,uCAA2B,EAAE;YACrD,OAAO;gBACL,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ;gBACpC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ;gBACpC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK;aAClC,CAAC;SACH;QACD,OAAO,KAAK,CAAC,aAAa,EAAE,CAAC;IAC/B,CAAC;IAES,QAAQ;;QAChB,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAA,2CAAgC,EAAC,IAAI,CAAC,QAAQ,EAAE,oBAAoB,EAAE,8BAAkB,CAAC,CAAC;QAC1F,IAAA,2CAAgC,EAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,qBAAS,CAAC,CAAC;QAExE,IAAI,IAAA,cAAK,EAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE;YAC9D,MAAA,IAAI,CAAC,QAAQ,0CAAE,SAAS,CACtB;gBACE,IAAI,EAAE,oBAAoB;gBAC1B,OAAO,EAAE;oBACP,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;oBACpC,UAAU,EAAE,IAAI,CAAC,kBAAkB,EAAE;oBACrC,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE;oBAClC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe;oBAC5C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;oBACvB,eAAe,EAAE,MAAA,IAAI,CAAC,KAAK,CAAC,eAAe,mCAAI,UAAU;oBACzD,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,eAAe,EAAE;iBACjD;aACF,EACD,KAAK,CACN,CAAC;SACH;QAED,MAAM,SAAS,GAAG,IAAA,iCAAoB,EAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE;YACxE,IAAI,EAAE,GAAG,aAAM,WAAW,IAAI,CAAC,EAAE,YAAY;SAC9C,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAChF,IAAI,CAAC,UAAU,GAAG,IAAI,qBAAc,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC9D,SAAS,CAAC,SAAS,CACjB;YACE,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE;gBACP,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;gBACpC,UAAU,EAAE,IAAI,CAAC,kBAAkB,EAAE;gBACrC,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE;gBAClC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe;gBAC5C,OAAO,EAAE,wBAAiB;gBAC1B,KAAK,EAAE,sBAAe;gBACtB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;gBACvB,eAAe,EAAE,MAAA,IAAI,CAAC,KAAK,CAAC,eAAe,mCAAI,UAAU;gBACzD,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS;gBAC3C,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,eAAe,EAAE;aACjD;SACF,EACD,KAAK,CACN,CAAC;QACF,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC7D,CAAC;IAUD,WAAW;;QACT,KAAK,CAAC,WAAW,EAAE,CAAC;QACpB,MAAA,IAAI,CAAC,UAAU,0CAAE,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED,aAAa;;QAGX,MAAM,wBAAwB,GAAwB;YACpD,MAAM,EAAE,IAAI,CAAC,SAAS,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE;YACrF,MAAM,EAAE,IAAI,CAAC,SAAS,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YACrF,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,GAAG,EAAE;;gBACb,OAAA,IAAI,CAAC,SAAS,KAAK,YAAY;oBAC7B,CAAC,CAAC,MAAA,IAAI,CAAC,YAAY,0CAAE,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;oBACzC,CAAC,CAAC,MAAA,IAAI,CAAC,YAAY,0CAAE,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;aAAA;SAC9C,CAAC;QACF,MAAM,YAAY,GAAG,MAAC,MAAA,IAAI,CAAC,KAAK,0CAAE,eAA4D,0CAAE,MAAM,CAAC;QACvG,MAAM,eAAe,GAAG,IAAA,+BAAuB,EAAC,IAAI,CAAC,CAAC;QAEtD,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAC9B,IAAA,uBAAe,EACb,MAAA,iBAAO,CAAC,iBAAiB,CAAC,WAAW,CAAC,0CAAG,wBAAwB,EAAE,YAAY,CAAC,EAChF,IAAA,2BAAmB,SAAyB,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC,EACnF,eAAe,CAChB,CACF,CAAC;QAEF,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,eAAe,CAAC,kBAAkB,CACrC,IAAA,uBAAe,EACb,MAAA,iBAAO,CAAC,iBAAiB,CAAC,WAAW,CAAC,2CAAI,EAC1C,IAAA,2BAAmB,gBAAgC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAC3F,CACF,CAAC;SACH;IACH,CAAC;IAED,cAAc,CAAC,CAAW;QACxB,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,iBAAiB,EAAE,CAAC;QAClD,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QAC7B,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAKD,iBAAiB,CAAC,OAA0B;IAE5C,CAAC;IACD,gBAAgB;IAEhB,CAAC;IAED,aAAa,CAAC,GAAyB;QACrC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;IAC/B,CAAC;IAED,QAAQ;QACN,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE;YACnE,GAAG,EAAE,OAAO;SACb,CAAc,CAAC;QAChB,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC;YAClC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SACrC;IACH,CAAC;IAED,kBAAkB,CAAC,SAAqB;;QACtC,IAAI,CAAC,SAAS,EAAE;YACd,OAAO;SACR;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,KAAI,MAAA,IAAI,CAAC,KAAK,CAAC,KAAK,0CAAE,OAAO,CAAA,EAAE;YACjD,KAAK,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;YACpC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAC5B,OAAO;SACR;IACH,CAAC;IAED,uBAAuB,CAAC,SAAqB;QAC3C,IAAI,CAAC,SAAS,EAAE;YACd,OAAO;SACR;QACD,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QAEjC,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC;QAC5B,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAChC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEnC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;YAC3B,IAAI,EAAE,CAAC,KAAY,EAAE,EAAE;;gBACrB,OAAO,CAAA,MAAA,IAAI,CAAC,KAAK,CAAC,UAAU,0CAAE,SAAS,MAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAA,qBAAY,EAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAC5G,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAMD,uBAAuB,CAAC,SAAqB;QAC3C,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;YAC3B,IAAI,EAAE,CAAC,KAAY,EAAE,EAAE;;gBACrB,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE;oBACrB,OAAO,IAAI,CAAC,SAAS,iBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;iBAClG;gBACD,OAAO,CAAA,MAAA,IAAI,CAAC,KAAK,CAAC,UAAU,0CAAE,SAAS,MAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAA,qBAAY,EAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAC5G,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,2BAA2B,CAAC,IAAgD;QAC1E,OAAO,IAAA,iBAAU,kCAEV,IAAI,KACP,MAAM,EAAE,IAAI,EAEZ,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,KAElC,CAAC,CAAC,EAAE;YACF,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,eAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9F,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,EAAS,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;QACjF,CAAC,CACF,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,KAAY,EAAE,KAAa,EAAE,MAAc,GAAG;QAC3D,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;QAC3D,IAAI,IAAI,CAAC,UAAU,iBAAyB,EAAE;YAC5C,OAAO,IAAA,yBAAiB,EACtB,cAAc,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;gBAC7B,YAAY,EAAE,IAAI,CAAC,aAAa;aACjC,CAAC,CACH,CAAC;SACH;QACD,OAAO,CACL,cAAc,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;YAC7B,YAAY,EAAE,IAAI,CAAC,aAAa;SACjC,CAAC;YACF,YAAY,CAAC,CAAC,CAAC,GAAG,GAAG;YACpB,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAY,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CACrE,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,KAAY,EAAE,KAAa,EAAE,MAAc,GAAG;QAC3D,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;QAC3D,IAAI,IAAI,CAAC,UAAU,iBAAyB,EAAE;YAC5C,OAAO,CACL,cAAc,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;gBAC7B,YAAY,EAAE,IAAI,CAAC,aAAa;aACjC,CAAC;gBACF,YAAY,CAAC,CAAC,CAAC,GAAG,GAAG;gBACpB,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAY,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CACtE,CAAC;SACH;QACD,OAAO,IAAA,yBAAiB,EACtB,cAAc,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;YAC7B,YAAY,EAAE,IAAI,CAAC,aAAa;SACjC,CAAC,CACH,CAAC;IACJ,CAAC;IAES,sBAAsB;;QAC9B,OAAO,IAAI,CAAC,UAAU,iBAAyB;YAC7C,CAAC,CAAC,MAAA,MAAA,IAAI,CAAC,YAAY,0CAAE,SAAS,kDAAI;YAClC,CAAC,CAAC,MAAA,MAAA,IAAI,CAAC,YAAY,0CAAE,SAAS,kDAAI,CAAC;IACvC,CAAC;IAES,yBAAyB,CAAC,OAAgB,EAAE,UAAmB;QACvE,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAChD,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7C,CAAC;IAED,aAAa;QACX,KAAK,CAAC,aAAa,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,KAAK,UAAU,CAAC;QAC7D,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,IAAI,CAAC,UAAU,iBAAyB,EAAE;gBAC5C,IAAI,CAAC,YAAY,CACf,IAAI,CAAC,eAAe,EACpB;oBACE,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;oBAC1D,CAAC,EAAE,CAAC,KAAY,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC7D,EAAE,EAAE,CAAC,KAAY,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;oBACpF,CAAC,EAAE,CAAC,KAAY,EAAE,EAAE;wBAClB,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;4BACpB,OAAO,CAAC,CAAC;yBACV;wBACD,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;oBACnG,CAAC;oBACD,EAAE,EAAE,CAAC,KAAY,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;iBAC7G,EACD,QAAQ,EACR,0BAAc,CAAC,MAAM,CACtB,CAAC;aACH;iBAAM;gBACL,IAAI,CAAC,YAAY,CACf,IAAI,CAAC,eAAe,EACpB;oBACE,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;oBAC1D,CAAC,EAAE,CAAC,KAAY,EAAE,EAAE;wBAClB,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;4BACpB,OAAO,CAAC,CAAC;yBACV;wBACD,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;oBACnG,CAAC;oBACD,EAAE,EAAE,CAAC,KAAY,EAAE,EAAE,CACnB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;oBACxF,CAAC,EAAE,CAAC,KAAY,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC7D,EAAE,EAAE,CAAC,KAAY,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;iBACrF,EACD,QAAQ,EACR,0BAAc,CAAC,MAAM,CACtB,CAAC;aACH;SACF;IACH,CAAC;IAES,mBAAmB,CAAC,KAAY;QACxC,IAAI,IAAA,cAAK,EAAC,KAAK,CAAC,SAAS,CAAC,EAAE;YAC1B,OAAO,KAAK,CAAC;SACd;QACD,OAAO,IAAA,4BAAoB,EACzB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EACvD,IAAI,CAAC,SAAS,iBAAyB,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CACxG,CAAC;IACJ,CAAC;;AAlVH,0CAmVC;AAlViB,oBAAI,GAAW,qBAAc,CAAC,SAAS,CAAC;AAGxC,oBAAI,GAAkB,8BAAmB,CAAC;AAC1C,4BAAY,GAAG,EAAE,SAAS,EAAE,qBAAc,EAAE,CAAC;AAC7C,sCAAsB,GAAG,sDAAqC,CAAC;AA+U1E,MAAM,uBAAuB,GAAG,GAAG,EAAE;IAC1C,IAAA,uBAAgB,GAAE,CAAC;IACnB,IAAA,uBAAgB,GAAE,CAAC;IACnB,IAAA,sCAA0B,GAAE,CAAC;IAC7B,IAAA,mCAA0B,GAAE,CAAC;IAC7B,IAAA,qCAAyB,GAAE,CAAC;IAC5B,IAAA,uCAA2B,GAAE,CAAC;IAC9B,iBAAO,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;AAChE,CAAC,CAAC;AARW,QAAA,uBAAuB,2BAQlC","file":"waterfall.js","sourcesContent":["/* eslint-disable no-duplicate-imports */\nimport { isNil, precisionSub } from '@visactor/vutils';\nimport { STACK_FIELD_END, STACK_FIELD_START } from '../../constant/data';\nimport { waterfall, waterfallFillTotal } from '../../data/transforms/waterfall';\nimport { BarSeries } from '../bar/bar';\nimport { isValueInScaleDomain, valueInScaleRange } from '../../util/scale';\nimport { registerWaterfallAnimation } from './animation';\nimport { animationConfig, userAnimationConfig } from '../../animation/utils';\nimport type { IWaterfallSeriesSpec, WaterfallAppearPreset } 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 { dataViewFromDataView } from '../../data/initialize';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport type { IModelEvaluateOption } from '../../model/interface';\nimport type { Datum } from '../../typings';\nimport { Direction } from '../../typings/space';\nimport { registerRuleMark } from '../../mark/rule';\nimport { waterfallSeriesMark } from './constant';\nimport { Group } from '../base/group';\nimport { Factory } from '../../core/factory';\nimport { registerRectMark } from '../../mark/rect';\nimport { getGroupAnimationParams } from '../util/utils';\nimport { WaterfallSeriesSpecTransformer } from './waterfall-transformer';\nimport { registerCartesianLinearAxis, registerCartesianBandAxis } from '../../component/axis/cartesian';\nimport { stackLabel } from '../../component/label/util';\nimport { WaterfallDefaultSeriesField } from '../../constant/waterfall';\nimport { PREFIX } from '../../constant/base';\nimport { AttributeLevel } from '../../constant/attribute';\nimport type { ILabelMark, IRuleMark, ITextMark } from '../../mark/interface';\nimport type { IBarAnimationParams } from '../bar/interface';\nimport type { ILabelInfo } from '../../component/label/interface';\nimport { CompilableData, type ICompilableData } from '../../compile/data';\nimport { waterfall as waterfallTheme } from '../../theme/builtin/common/series/waterfall';\nimport type { IStackCacheNode } from '../../util';\nimport { getRegionStackGroup, stackTotal } from '../../util';\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 builtInTheme = { waterfall: waterfallTheme };\n static readonly transformerConstructor = WaterfallSeriesSpecTransformer as any;\n readonly transformerConstructor = WaterfallSeriesSpecTransformer as any;\n\n protected _totalData?: ICompilableData;\n getTotalData() {\n return this._totalData?.getLatestData();\n }\n\n declare protected _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 calculationMode: this._spec.calculationMode ?? 'increase',\n stackInverse: this.getRegion().getStackInverse()\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 CompilableData(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 calculationMode: this._spec.calculationMode ?? 'increase',\n groupData: () => this.getGroups().groupData,\n stackInverse: this.getRegion().getStackInverse()\n }\n },\n false\n );\n totalData.target.addListener('change', this._reStackTotal);\n }\n\n protected _reStackTotal = () => {\n const stackData = this.getStackData();\n const stackValueField = this.getStackValueField();\n if (stackData) {\n stackTotal(stackData as IStackCacheNode, stackValueField);\n }\n };\n\n compileData() {\n super.compileData();\n this._totalData?.compile();\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 }) as IRuleMark;\n if (leaderLine) {\n this._leaderLineMark = leaderLine;\n leaderLine.setData(this._totalData);\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\n initStackLabelMarkStyle(labelMark: ILabelMark): void {\n if (!labelMark) {\n return;\n }\n this._stackLabelMark = labelMark;\n // 瀑布图标签 encode 在自定义布局中计算\n labelMark.skipEncode = true;\n labelMark.setRule('stackLabel');\n labelMark.setData(this._totalData);\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 protected _isCategoryAxisInverse() {\n return this._direction === Direction.horizontal\n ? this._yAxisHelper?.isInverse?.()\n : this._xAxisHelper?.isInverse?.();\n }\n\n protected _getLeaderLineCategoryPos(isStart: boolean, isDecrease: boolean) {\n const inverse = !!this._isCategoryAxisInverse();\n const normalPos = isStart ? (isDecrease ? 0 : 1) : isDecrease ? 1 : 0;\n return inverse ? 1 - normalPos : normalPos;\n }\n\n initMarkStyle(): void {\n super.initMarkStyle();\n const isDecrease = this._spec.calculationMode === 'decrease';\n if (this._leaderLineMark) {\n if (this._direction === Direction.horizontal) {\n this.setMarkStyle(\n this._leaderLineMark,\n {\n visible: (datum: Datum) => this.isVisibleLeaderLine(datum),\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', this._getLeaderLineCategoryPos(true, isDecrease));\n },\n y1: (datum: Datum) => this.totalPositionY(datum, 'index', this._getLeaderLineCategoryPos(false, isDecrease))\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n this._leaderLineMark,\n {\n visible: (datum: Datum) => this.isVisibleLeaderLine(datum),\n x: (datum: Datum) => {\n if (!datum.lastIndex) {\n return 0;\n }\n return this.totalPositionX(datum, 'lastIndex', this._getLeaderLineCategoryPos(true, isDecrease));\n },\n x1: (datum: Datum) =>\n this.totalPositionX(datum, 'index', this._getLeaderLineCategoryPos(false, isDecrease)),\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 protected isVisibleLeaderLine(datum: Datum): boolean {\n if (isNil(datum.lastIndex)) {\n return false;\n }\n return isValueInScaleDomain(\n [datum.lastEnd, datum[datum.isTotal ? 'end' : 'start']],\n this.direction === Direction.horizontal ? this._xAxisHelper.getScale(0) : this._yAxisHelper.getScale(0)\n );\n }\n}\n\nexport const registerWaterfallSeries = () => {\n registerRuleMark();\n registerRectMark();\n registerWaterfallAnimation();\n registerFadeInOutAnimation();\n registerCartesianBandAxis();\n registerCartesianLinearAxis();\n Factory.registerSeries(WaterfallSeries.type, WaterfallSeries);\n};\n"]}
@@ -47,6 +47,8 @@ export declare class Compiler implements ICompiler {
47
47
  updateLayoutTag(): void;
48
48
  protected handleLayoutEnd: () => void;
49
49
  protected handleStageRender: () => void;
50
+ private _isGeoRegionRoamDragEnabled;
51
+ private _shouldDisableCanvasTouchAction;
50
52
  private _setCanvasStyle;
51
53
  compile(ctx: {
52
54
  chart: IChart;
@@ -130,18 +130,30 @@ export class Compiler {
130
130
  updateLayoutTag() {
131
131
  this._layoutState = LayoutState.before;
132
132
  }
133
+ _isGeoRegionRoamDragEnabled() {
134
+ var _a, _b;
135
+ const chartSpec = null === (_b = null === (_a = this._compileChart) || void 0 === _a ? void 0 : _a.getSpec) || void 0 === _b ? void 0 : _b.call(_a), regions = null == chartSpec ? void 0 : chartSpec.region;
136
+ return !!isArray(regions) && regions.some((region => {
137
+ var _a;
138
+ return !("geo" !== (null == region ? void 0 : region.coordinate) || !region.roam) && (!0 === region.roam || (null === (_a = region.roam.drag) || void 0 === _a || _a));
139
+ }));
140
+ }
141
+ _shouldDisableCanvasTouchAction() {
142
+ if (!isTrueBrowser(this._option.mode)) return !1;
143
+ return !1 === (isValid(this._option.supportsTouchEvents) ? this._option.supportsTouchEvents : vglobal.supportsTouchEvents) && this._isGeoRegionRoamDragEnabled();
144
+ }
133
145
  _setCanvasStyle() {
134
146
  if (this._stage && this._container.dom && !isString(this._container.dom)) {
135
147
  this._container.dom.style.display = "block", this._container.dom.style.position = "relative";
136
148
  const canvas = this.getCanvas();
137
- canvas && (canvas.style.display = "block");
149
+ canvas && (canvas.style.display = "block", canvas.style.touchAction = this._shouldDisableCanvasTouchAction() ? "none" : "");
138
150
  }
139
151
  }
140
152
  compile(ctx, option) {
141
153
  if (this._released) return;
142
154
  const {chart: chart} = ctx;
143
155
  this._compileChart = chart, this.initView(), this._stage && ("render" !== (null == option ? void 0 : option.actionSource) && this._cachedMarks && (this.reuseOrMorphing(option.morphConfig),
144
- this._cachedMarks = null), chart.compile(), chart.afterCompile());
156
+ this._cachedMarks = null), chart.compile(), this._setCanvasStyle(), chart.afterCompile());
145
157
  }
146
158
  clearNextRender() {
147
159
  return !!this._nextRafId && (vglobal.getSpecifiedCancelAnimationFrame(10)(this._nextRafId),