@visactor/vchart 1.1.2 → 1.2.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/index.js +420 -163
- package/build/index.min.js +1 -1
- package/cjs/chart/area/area.js +3 -1
- package/cjs/chart/area/area.js.map +1 -1
- package/cjs/chart/base-chart.d.ts +7 -2
- package/cjs/chart/base-chart.js +51 -23
- package/cjs/chart/base-chart.js.map +1 -1
- package/cjs/chart/interface/chart.d.ts +1 -0
- package/cjs/chart/interface/chart.js.map +1 -1
- package/cjs/chart/line/line.js +3 -1
- package/cjs/chart/line/line.js.map +1 -1
- package/cjs/chart/radar/radar.js +3 -1
- package/cjs/chart/radar/radar.js.map +1 -1
- package/cjs/chart/sequence/sequence.js +5 -3
- package/cjs/chart/sequence/sequence.js.map +1 -1
- package/cjs/chart/stack.js +3 -3
- package/cjs/chart/stack.js.map +1 -1
- package/cjs/compile/compiler.js +9 -5
- package/cjs/compile/compiler.js.map +1 -1
- package/cjs/compile/interface/compiler.d.ts +1 -0
- package/cjs/compile/interface/compiler.js.map +1 -1
- package/cjs/component/axis/cartesian/axis.js +1 -1
- package/cjs/component/axis/cartesian/axis.js.map +1 -1
- package/cjs/component/axis/interface.d.ts +25 -27
- package/cjs/component/axis/interface.js.map +1 -1
- package/cjs/component/axis/polar/axis.js +2 -2
- package/cjs/component/axis/polar/axis.js.map +1 -1
- package/cjs/component/geo/geo-coordinate.js +1 -1
- package/cjs/component/geo/geo-coordinate.js.map +1 -1
- package/cjs/component/geo/projection.js +1 -2
- package/cjs/component/geo/projection.js.map +1 -1
- package/cjs/component/indicator/indicator.js +1 -1
- package/cjs/component/indicator/indicator.js.map +1 -1
- package/cjs/component/marker/base-marker.js +1 -1
- package/cjs/component/marker/base-marker.js.map +1 -1
- package/cjs/component/marker/interface.d.ts +2 -2
- package/cjs/component/marker/interface.js.map +1 -1
- package/cjs/component/tooltip/processor/dimension-tooltip.js +3 -2
- package/cjs/component/tooltip/processor/dimension-tooltip.js.map +1 -1
- package/cjs/constant/event.d.ts +2 -0
- package/cjs/constant/event.js +2 -1
- package/cjs/constant/event.js.map +1 -1
- package/cjs/core/index.d.ts +1 -1
- package/cjs/core/index.js +1 -1
- package/cjs/core/index.js.map +1 -1
- package/cjs/core/vchart.d.ts +6 -0
- package/cjs/core/vchart.js +72 -27
- package/cjs/core/vchart.js.map +1 -1
- package/cjs/data/initialize.d.ts +2 -1
- package/cjs/data/initialize.js +8 -5
- package/cjs/data/initialize.js.map +1 -1
- package/cjs/data/transforms/legend-data/discrete/discrete.js +3 -2
- package/cjs/data/transforms/legend-data/discrete/discrete.js.map +1 -1
- package/cjs/data/transforms/sankey.d.ts +2 -0
- package/cjs/data/transforms/sankey.js +9 -1
- package/cjs/data/transforms/sankey.js.map +1 -1
- package/cjs/event/events/dimension/base.js +6 -4
- package/cjs/event/events/dimension/base.js.map +1 -1
- package/cjs/event/events/dimension/interface.js.map +1 -1
- package/cjs/event/events/dimension/util/cartesian.d.ts +2 -2
- package/cjs/event/events/dimension/util/cartesian.js +12 -11
- package/cjs/event/events/dimension/util/cartesian.js.map +1 -1
- package/cjs/event/events/dimension/util/common.d.ts +1 -1
- package/cjs/event/events/dimension/util/common.js +13 -6
- package/cjs/event/events/dimension/util/common.js.map +1 -1
- package/cjs/layout/base-layout.d.ts +3 -0
- package/cjs/layout/base-layout.js +8 -4
- package/cjs/layout/base-layout.js.map +1 -1
- package/cjs/layout/grid-layout/grid-layout.d.ts +3 -1
- package/cjs/layout/grid-layout/grid-layout.js +3 -2
- package/cjs/layout/grid-layout/grid-layout.js.map +1 -1
- package/cjs/layout/interface.d.ts +2 -1
- package/cjs/layout/interface.js.map +1 -1
- package/cjs/model/interface.d.ts +1 -4
- package/cjs/model/interface.js.map +1 -1
- package/cjs/model/layout-item.d.ts +0 -3
- package/cjs/model/layout-item.js +1 -8
- package/cjs/model/layout-item.js.map +1 -1
- package/cjs/series/area/area.js +5 -4
- package/cjs/series/area/area.js.map +1 -1
- package/cjs/series/area/interface.d.ts +1 -0
- package/cjs/series/area/interface.js.map +1 -1
- package/cjs/series/base/base-series.js +2 -4
- package/cjs/series/base/base-series.js.map +1 -1
- package/cjs/series/geo/geo.js +3 -3
- package/cjs/series/geo/geo.js.map +1 -1
- package/cjs/series/line/interface.d.ts +4 -2
- package/cjs/series/line/interface.js.map +1 -1
- package/cjs/series/line/line.js +5 -3
- package/cjs/series/line/line.js.map +1 -1
- package/cjs/series/map/map.js +6 -6
- package/cjs/series/map/map.js.map +1 -1
- package/cjs/series/mixin/line-mixin.d.ts +1 -1
- package/cjs/series/mixin/line-mixin.js +3 -2
- package/cjs/series/mixin/line-mixin.js.map +1 -1
- package/cjs/series/radar/interface.d.ts +1 -0
- package/cjs/series/radar/interface.js.map +1 -1
- package/cjs/series/radar/radar.js +4 -4
- package/cjs/series/radar/radar.js.map +1 -1
- package/cjs/series/sankey/sankey.js +7 -4
- package/cjs/series/sankey/sankey.js.map +1 -1
- package/cjs/series/scatter/scatter.js +7 -4
- package/cjs/series/scatter/scatter.js.map +1 -1
- package/cjs/series/sunburst/sunburst.d.ts +1 -1
- package/cjs/series/word-cloud/base.d.ts +7 -0
- package/cjs/series/word-cloud/base.js +8 -3
- package/cjs/series/word-cloud/base.js.map +1 -1
- package/cjs/theme/buildin-theme/light/series/area.js +5 -0
- package/cjs/theme/buildin-theme/light/series/area.js.map +1 -1
- package/cjs/theme/buildin-theme/light/series/line.js +5 -0
- package/cjs/theme/buildin-theme/light/series/line.js.map +1 -1
- package/cjs/theme/buildin-theme/light/series/radar.js +5 -0
- package/cjs/theme/buildin-theme/light/series/radar.js.map +1 -1
- package/cjs/typings/params.d.ts +5 -0
- package/cjs/typings/params.js.map +1 -1
- package/cjs/typings/spec/common.d.ts +8 -2
- package/cjs/typings/spec/common.js.map +1 -1
- package/cjs/typings/visual.d.ts +1 -1
- package/cjs/typings/visual.js.map +1 -1
- package/cjs/util/debug.d.ts +2 -2
- package/cjs/util/debug.js +4 -3
- package/cjs/util/debug.js.map +1 -1
- package/cjs/util/image.d.ts +2 -1
- package/cjs/util/image.js +10 -6
- package/cjs/util/image.js.map +1 -1
- package/cjs/util/math.js +5 -3
- package/cjs/util/math.js.map +1 -1
- package/cjs/util/spec.d.ts +4 -0
- package/cjs/util/spec.js +24 -2
- package/cjs/util/spec.js.map +1 -1
- package/esm/chart/area/area.js +3 -1
- package/esm/chart/area/area.js.map +1 -1
- package/esm/chart/base-chart.d.ts +7 -2
- package/esm/chart/base-chart.js +51 -21
- package/esm/chart/base-chart.js.map +1 -1
- package/esm/chart/interface/chart.d.ts +1 -0
- package/esm/chart/interface/chart.js.map +1 -1
- package/esm/chart/line/line.js +3 -1
- package/esm/chart/line/line.js.map +1 -1
- package/esm/chart/radar/radar.js +3 -1
- package/esm/chart/radar/radar.js.map +1 -1
- package/esm/chart/sequence/sequence.js +5 -3
- package/esm/chart/sequence/sequence.js.map +1 -1
- package/esm/chart/stack.js +3 -3
- package/esm/chart/stack.js.map +1 -1
- package/esm/compile/compiler.js +10 -6
- package/esm/compile/compiler.js.map +1 -1
- package/esm/compile/interface/compiler.d.ts +1 -0
- package/esm/compile/interface/compiler.js.map +1 -1
- package/esm/component/axis/cartesian/axis.js +1 -1
- package/esm/component/axis/cartesian/axis.js.map +1 -1
- package/esm/component/axis/interface.d.ts +25 -27
- package/esm/component/axis/interface.js.map +1 -1
- package/esm/component/axis/polar/axis.js +2 -2
- package/esm/component/axis/polar/axis.js.map +1 -1
- package/esm/component/geo/geo-coordinate.js +1 -1
- package/esm/component/geo/geo-coordinate.js.map +1 -1
- package/esm/component/geo/projection.js +1 -1
- package/esm/component/geo/projection.js.map +1 -1
- package/esm/component/indicator/indicator.js +1 -1
- package/esm/component/indicator/indicator.js.map +1 -1
- package/esm/component/marker/base-marker.js +1 -1
- package/esm/component/marker/base-marker.js.map +1 -1
- package/esm/component/marker/interface.d.ts +2 -2
- package/esm/component/marker/interface.js.map +1 -1
- package/esm/component/tooltip/processor/dimension-tooltip.js +4 -1
- package/esm/component/tooltip/processor/dimension-tooltip.js.map +1 -1
- package/esm/constant/event.d.ts +2 -0
- package/esm/constant/event.js +2 -1
- package/esm/constant/event.js.map +1 -1
- package/esm/core/index.d.ts +1 -1
- package/esm/core/index.js +1 -1
- package/esm/core/index.js.map +1 -1
- package/esm/core/vchart.d.ts +6 -0
- package/esm/core/vchart.js +74 -27
- package/esm/core/vchart.js.map +1 -1
- package/esm/data/initialize.d.ts +2 -1
- package/esm/data/initialize.js +9 -4
- package/esm/data/initialize.js.map +1 -1
- package/esm/data/transforms/legend-data/discrete/discrete.js +4 -1
- package/esm/data/transforms/legend-data/discrete/discrete.js.map +1 -1
- package/esm/data/transforms/sankey.d.ts +2 -0
- package/esm/data/transforms/sankey.js +9 -1
- package/esm/data/transforms/sankey.js.map +1 -1
- package/esm/event/events/dimension/base.js +8 -4
- package/esm/event/events/dimension/base.js.map +1 -1
- package/esm/event/events/dimension/interface.js.map +1 -1
- package/esm/event/events/dimension/util/cartesian.d.ts +2 -2
- package/esm/event/events/dimension/util/cartesian.js +7 -8
- package/esm/event/events/dimension/util/cartesian.js.map +1 -1
- package/esm/event/events/dimension/util/common.d.ts +1 -1
- package/esm/event/events/dimension/util/common.js +14 -6
- package/esm/event/events/dimension/util/common.js.map +1 -1
- package/esm/layout/base-layout.d.ts +3 -0
- package/esm/layout/base-layout.js +8 -4
- package/esm/layout/base-layout.js.map +1 -1
- package/esm/layout/grid-layout/grid-layout.d.ts +3 -1
- package/esm/layout/grid-layout/grid-layout.js +3 -2
- package/esm/layout/grid-layout/grid-layout.js.map +1 -1
- package/esm/layout/interface.d.ts +2 -1
- package/esm/layout/interface.js.map +1 -1
- package/esm/model/interface.d.ts +1 -4
- package/esm/model/interface.js.map +1 -1
- package/esm/model/layout-item.d.ts +0 -3
- package/esm/model/layout-item.js +1 -8
- package/esm/model/layout-item.js.map +1 -1
- package/esm/series/area/area.js +5 -4
- package/esm/series/area/area.js.map +1 -1
- package/esm/series/area/interface.d.ts +1 -0
- package/esm/series/area/interface.js.map +1 -1
- package/esm/series/base/base-series.js +1 -4
- package/esm/series/base/base-series.js.map +1 -1
- package/esm/series/geo/geo.js +3 -3
- package/esm/series/geo/geo.js.map +1 -1
- package/esm/series/line/interface.d.ts +4 -2
- package/esm/series/line/interface.js.map +1 -1
- package/esm/series/line/line.js +5 -3
- package/esm/series/line/line.js.map +1 -1
- package/esm/series/map/map.js +6 -6
- package/esm/series/map/map.js.map +1 -1
- package/esm/series/mixin/line-mixin.d.ts +1 -1
- package/esm/series/mixin/line-mixin.js +3 -2
- package/esm/series/mixin/line-mixin.js.map +1 -1
- package/esm/series/radar/interface.d.ts +1 -0
- package/esm/series/radar/interface.js.map +1 -1
- package/esm/series/radar/radar.js +4 -4
- package/esm/series/radar/radar.js.map +1 -1
- package/esm/series/sankey/sankey.js +7 -4
- package/esm/series/sankey/sankey.js.map +1 -1
- package/esm/series/scatter/scatter.js +5 -4
- package/esm/series/scatter/scatter.js.map +1 -1
- package/esm/series/sunburst/sunburst.d.ts +1 -1
- package/esm/series/word-cloud/base.d.ts +7 -0
- package/esm/series/word-cloud/base.js +7 -0
- package/esm/series/word-cloud/base.js.map +1 -1
- package/esm/theme/buildin-theme/light/series/area.js +5 -0
- package/esm/theme/buildin-theme/light/series/area.js.map +1 -1
- package/esm/theme/buildin-theme/light/series/line.js +5 -0
- package/esm/theme/buildin-theme/light/series/line.js.map +1 -1
- package/esm/theme/buildin-theme/light/series/radar.js +5 -0
- package/esm/theme/buildin-theme/light/series/radar.js.map +1 -1
- package/esm/typings/params.d.ts +5 -0
- package/esm/typings/params.js.map +1 -1
- package/esm/typings/spec/common.d.ts +8 -2
- package/esm/typings/spec/common.js.map +1 -1
- package/esm/typings/visual.d.ts +1 -1
- package/esm/typings/visual.js.map +1 -1
- package/esm/util/debug.d.ts +2 -2
- package/esm/util/debug.js +4 -3
- package/esm/util/debug.js.map +1 -1
- package/esm/util/image.d.ts +2 -1
- package/esm/util/image.js +6 -3
- package/esm/util/image.js.map +1 -1
- package/esm/util/math.js +4 -2
- package/esm/util/math.js.map +1 -1
- package/esm/util/spec.d.ts +4 -0
- package/esm/util/spec.js +21 -0
- package/esm/util/spec.js.map +1 -1
- package/package.json +7 -17
- package/chart.d.ts +0 -1
- package/chart.js +0 -1
- package/component.d.ts +0 -1
- package/component.js +0 -1
- package/core.d.ts +0 -1
- package/core.js +0 -1
- package/layout.d.ts +0 -1
- package/layout.js +0 -1
- package/mark.d.ts +0 -1
- package/mark.js +0 -1
- package/series.d.ts +0 -1
- package/series.js +0 -1
package/cjs/util/math.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/util/math.ts"],"names":[],"mappings":"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","file":"math.js","sourcesContent":["import {\n isNumberClose,\n isGreater,\n isLess,\n degreeToRadian,\n radianToDegree,\n isValid,\n PointService,\n median as visMedian\n} from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IBoundsLike } from '@visactor/vutils';\nimport type { IPoint, IPolarPoint, Quadrant, TextAlign, TextBaseLine } from '../typings';\nimport { isValidNumber } from './type';\nimport { regressionLinear } from '@visactor/vgrammar-util';\nimport type { Datum } from '@visactor/vgrammar';\n\nexport const isClose = isNumberClose;\nexport { isGreater, isLess };\n\n/**\n * 角度标准化处理\n * @param angle 弧度角\n */\nexport function normalizeAngle(angle: number): number {\n while (angle < 0) {\n angle += Math.PI * 2;\n }\n while (angle >= Math.PI * 2) {\n angle -= Math.PI * 2;\n }\n return angle;\n}\n\nexport const radians = (angle?: number) => {\n if (!isValidNumber(angle)) {\n return null;\n }\n return degreeToRadian(angle);\n};\nexport const degrees = (angle?: number) => {\n if (!isValidNumber(angle)) {\n return null;\n }\n return radianToDegree(angle);\n};\n\n/**\n * 极坐标系 -> 直角坐标系\n * @param point\n * @returns\n */\nexport function polarToCartesian(point: IPolarPoint): IPoint {\n if (!point.radius) {\n return { x: 0, y: 0 };\n }\n return {\n x: Math.cos(point.angle) * point.radius,\n y: Math.sin(point.angle) * point.radius\n };\n}\n\n/**\n * 计算圆弧上的点坐标\n * @param x0 圆心 x 坐标\n * @param y0 圆心 y 坐标\n * @param radius 圆弧半径\n * @param radian 点所在弧度\n */\nexport function circlePoint(x0: number, y0: number, radius: number, radian: number): IPoint {\n const offset = polarToCartesian({\n radius,\n angle: radian\n });\n return {\n x: x0 + offset.x,\n y: y0 + offset.y\n };\n}\n\n/**\n * 计算圆弧两点之间连接线的长度\n * @param radius 圆弧半径\n * @param radian 圆弧弧度\n */\nexport function arcConnectLength(radius: number, radian: number) {\n const x0 = 0;\n const y0 = radius;\n const { x: x1, y: y1 } = circlePoint(0, 0, radius, radian);\n return Math.sqrt((x0 - x1) ** 2 + (y0 - y1) ** 2);\n}\n\n/**\n * 计算直线与圆交点\n * 直线方程:ax + by + c = 0\n * 圆方程:(x - x0)^2 + (y - y0)^2 = r^2\n */\nexport function lineCirclePoints(a: number, b: number, c: number, x0: number, y0: number, r: number): IPoint[] {\n if ((a === 0 && b === 0) || r <= 0) {\n return [];\n }\n if (a === 0) {\n const y1 = -c / b;\n const fy = (y1 - y0) ** 2;\n const fd = r ** 2 - fy;\n if (fd < 0) {\n return [];\n } else if (fd === 0) {\n return [{ x: x0, y: y1 }];\n }\n const x1 = Math.sqrt(fd) + x0;\n const x2 = -Math.sqrt(fd) + x0;\n return [\n { x: x1, y: y1 },\n { x: x2, y: y1 }\n ];\n } else if (b === 0) {\n const x1 = -c / a;\n const fx = (x1 - x0) ** 2;\n const fd = r ** 2 - fx;\n if (fd < 0) {\n return [];\n } else if (fd === 0) {\n return [{ x: x1, y: y0 }];\n }\n const y1 = Math.sqrt(fd) + y0;\n const y2 = -Math.sqrt(fd) + y0;\n return [\n { x: x1, y: y1 },\n { x: x1, y: y2 }\n ];\n }\n const fa = (b / a) ** 2 + 1;\n const fb = 2 * ((c / a + x0) * (b / a) - y0);\n const fc = (c / a + x0) ** 2 + y0 ** 2 - r ** 2;\n const fd = fb ** 2 - 4 * fa * fc;\n if (fd < 0) {\n return [];\n }\n const y1 = (-fb + Math.sqrt(fd)) / (2 * fa);\n const y2 = (-fb - Math.sqrt(fd)) / (2 * fa);\n const x1 = -(b * y1 + c) / a;\n const x2 = -(b * y2 + c) / a;\n if (fd === 0) {\n return [{ x: x1, y: y1 }];\n }\n return [\n { x: x1, y: y1 },\n { x: x2, y: y2 }\n ];\n}\n\n/**\n * 根据圆弧两点连接线长度计算弧度\n * @param radius 圆弧半径\n * @param length 连接线长度\n */\nexport function connectLineRadian(radius: number, length: number) {\n if (length > radius * 2) {\n return NaN;\n }\n return Math.asin(length / 2 / radius) * 2;\n}\n\n/**\n * 根据角度计算象限\n * 计算角度所在象限\n * @param angle\n * @returns\n */\nexport function computeQuadrant(angle: number): Quadrant {\n angle = normalizeAngle(angle);\n if (angle > 0 && angle <= Math.PI / 2) {\n return 2;\n } else if (angle > Math.PI / 2 && angle <= Math.PI) {\n return 3;\n } else if (angle > Math.PI && angle <= (3 * Math.PI) / 2) {\n return 4;\n }\n return 1;\n}\n\n/**\n * 将角度轴起始角度 & 终结角度标准化\n * @param start\n * @param end\n * @returns\n */\nexport function normalizeStartEndAngle(\n start: number | null,\n end: number | null\n): { startAngle: number; endAngle: number } {\n let startAngle: number = 0;\n let endAngle: number = Math.PI * 2;\n const isStartValid = isValid(start);\n const isEndValid = isValid(end);\n if (!isStartValid && !isEndValid) {\n startAngle = 0;\n endAngle = Math.PI * 2;\n } else if (!isEndValid) {\n startAngle = start as number;\n endAngle = (start as number) + Math.PI * 2;\n } else if (!isStartValid) {\n startAngle = (end as number) - Math.PI * 2;\n endAngle = end as number;\n } else {\n startAngle = start as number;\n endAngle = end as number;\n }\n\n while (endAngle <= startAngle) {\n endAngle += Math.PI * 2;\n }\n while (startAngle > Math.PI * 2) {\n startAngle -= Math.PI * 2;\n endAngle -= Math.PI * 2;\n }\n while (endAngle < 0) {\n startAngle += Math.PI * 2;\n endAngle += Math.PI * 2;\n }\n return { startAngle, endAngle };\n}\n\nexport function isQuadrantLeft(quadrant: Quadrant): boolean {\n return quadrant === 3 || quadrant === 4;\n}\n\nexport function isQuadrantRight(quadrant: Quadrant): boolean {\n return quadrant === 1 || quadrant === 2;\n}\n\nexport function checkBoundsOverlap(boundsA: IBoundsLike, boundsB: IBoundsLike): boolean {\n const { x1: ax1, y1: ay1, x2: ax2, y2: ay2 } = boundsA;\n const { x1: bx1, y1: by1, x2: bx2, y2: by2 } = boundsB;\n return !(\n (ax1 <= bx1 && ax2 <= bx1) ||\n (ax1 >= bx2 && ax2 >= bx2) ||\n (ay1 <= by1 && ay2 <= by1) ||\n (ay1 >= by2 && ay2 >= by2)\n );\n}\n\nexport function outOfBounds(bounds: IBoundsLike, x: number, y: number) {\n return bounds.x1 > x || bounds.x2 < x || bounds.y1 > y || bounds.y2 < y;\n}\n\nexport function insideBounds(bounds: IBoundsLike, x: number, y: number) {\n return !outOfBounds(bounds, x, y);\n}\n\nexport function min(data: any[], field?: string): number {\n const initialData = field ? +data[0][field] : +data[0];\n\n if (!isValidNumber(initialData)) {\n throw new Error('invalid data');\n }\n const min = data.reduce((pre, _cur) => {\n const cur = field ? +_cur[field] : +_cur;\n if (isValidNumber(cur) && cur < pre) {\n pre = cur;\n }\n return pre;\n }, initialData);\n return min;\n}\n\nexport function max(data: any[], field?: string): number {\n const initialData = field ? +data[0][field] : +data[0];\n if (!isValidNumber(initialData)) {\n throw new Error('invalid data');\n }\n const max = data.reduce((pre, _cur) => {\n const cur = field ? +_cur[field] : +_cur;\n if (isValidNumber(cur) && cur > pre) {\n pre = cur;\n }\n return pre;\n }, initialData);\n return max;\n}\n\nexport function sum(data: any[], field?: string): number {\n return data.reduce((pre, _cur) => {\n const cur = field ? +_cur[field] : +_cur;\n if (isValidNumber(cur)) {\n pre += cur;\n }\n return pre;\n }, 0);\n}\n\nexport function average(data: any[], field?: string): number {\n let sum = 0;\n let count = 0;\n data.forEach((x: any) => {\n const v = field ? +x[field] : +x;\n if (isValidNumber(v)) {\n sum += v;\n count++;\n }\n });\n\n const average = sum / count;\n return average;\n}\n\nexport function variance(data: any[], field?: string): number {\n const averageNumber = average(data, field);\n\n if (data.length <= 1) {\n return 0;\n }\n\n const total = data.reduce((sum, cur) => sum + (field ? +cur[field] : +cur - averageNumber) ** 2, 0);\n const value = total / (data.length - 1);\n return value;\n}\n\nexport function standardDeviation(data: any[], field?: string): number {\n const value = Math.sqrt(variance(data, field));\n return value;\n}\n\nexport function median(data: any[], field?: string): number {\n const value = visMedian(data.map((datum: Datum) => datum[field]));\n return value;\n}\n\nexport function regression(data: any[], fieldX?: string, fieldY?: string): any[] {\n const { predict } = regressionLinear(\n data,\n datum => datum[fieldX],\n datum => datum[fieldY]\n );\n // 计算回归线起点和终点\n const x1 = min(data, fieldX);\n const x2 = max(data, fieldX);\n\n const predict1 = predict(x1);\n const predict2 = predict(x2);\n return [\n {\n [fieldX]: x1,\n [fieldY]: predict1\n },\n {\n [fieldX]: x2,\n [fieldY]: predict2\n }\n ];\n}\n\n/**\n * 计算对应角度下的角度轴标签定位属性\n * @param angle 弧度角,需要注意是逆时针计算的\n * @returns\n */\nexport function angleLabelOrientAttribute(angle: number) {\n let align: TextAlign = 'center';\n let baseline: TextBaseLine = 'middle';\n\n angle = normalizeAngle(angle);\n\n // left: 5/3 - 1/3; right: 2/3 - 4/3; center: 5/3 - 1/3 & 2/3 - 4/3\n if (angle >= Math.PI * (5 / 3) || angle <= Math.PI * (1 / 3)) {\n align = 'left';\n } else if (angle >= Math.PI * (2 / 3) && angle <= Math.PI * (4 / 3)) {\n align = 'right';\n } else {\n align = 'center';\n }\n\n // bottom: 7/6 - 11/6; top: 1/6 - 5/6; middle: 11/6 - 1/6 & 5/6 - 7/6\n if (angle >= Math.PI * (7 / 6) && angle <= Math.PI * (11 / 6)) {\n baseline = 'bottom';\n } else if (angle >= Math.PI * (1 / 6) && angle <= Math.PI * (5 / 6)) {\n baseline = 'top';\n } else {\n baseline = 'middle';\n }\n\n return { align, baseline };\n}\n\n/**\n * 计算对应角度下的半径轴标签定位属性\n * @param angle 弧度角,需要注意是逆时针计算的\n * @returns\n */\nexport function radiusLabelOrientAttribute(angle: number) {\n let align: TextAlign = 'center';\n let baseline: TextBaseLine = 'middle';\n\n angle = normalizeAngle(angle);\n\n // right: 7/6 - 11/6; left: 1/6 - 5/6; center: 11/6 - 1/6 & 5/6 - 7/6\n if (angle >= Math.PI * (7 / 6) && angle <= Math.PI * (11 / 6)) {\n align = 'right';\n } else if (angle >= Math.PI * (1 / 6) && angle <= Math.PI * (5 / 6)) {\n align = 'left';\n } else {\n align = 'center';\n }\n\n // bottom: 5/3 - 1/3; top: 2/3 - 4/3; middle: 5/3 - 1/3 & 2/3 - 4/3\n if (angle >= Math.PI * (5 / 3) || angle <= Math.PI * (1 / 3)) {\n baseline = 'bottom';\n } else if (angle >= Math.PI * (2 / 3) && angle <= Math.PI * (4 / 3)) {\n baseline = 'top';\n } else {\n baseline = 'middle';\n }\n\n return { align, baseline };\n}\n\n/** 求一个向量顺时针旋转到另一个向量的角度,带正负号 */\nexport function vectorAngle(v1: IPoint, v2: IPoint) {\n const v1Length = distance(v1);\n const v2Length = distance(v2);\n // 叉乘\n const rho = Math.asin((v1.x * v2.y - v2.x * v1.y) / v1Length / v2Length);\n // 点乘\n const theta = Math.acos((v1.x * v2.x + v1.y * v2.y) / v1Length / v2Length);\n if (rho < 0) {\n return -theta;\n }\n return theta;\n}\n\n/** 求两个点的距离 */\nexport function distance(p1: IPoint, p2: IPoint = { x: 0, y: 0 }) {\n return PointService.distancePP(p1, p2);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/util/math.ts"],"names":[],"mappings":"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","file":"math.js","sourcesContent":["import {\n isNumberClose,\n isGreater,\n isLess,\n degreeToRadian,\n radianToDegree,\n isValid,\n PointService,\n median as visMedian\n} from '@visactor/vutils';\n// eslint-disable-next-line no-duplicate-imports\nimport type { IBoundsLike } from '@visactor/vutils';\nimport type { IPoint, IPolarPoint, Quadrant, TextAlign, TextBaseLine } from '../typings';\nimport { isValidNumber } from './type';\nimport { regressionLinear } from '@visactor/vgrammar-util';\nimport type { Datum } from '@visactor/vgrammar';\nimport { warn } from './debug';\n\nexport const isClose = isNumberClose;\nexport { isGreater, isLess };\n\n/**\n * 角度标准化处理\n * @param angle 弧度角\n */\nexport function normalizeAngle(angle: number): number {\n while (angle < 0) {\n angle += Math.PI * 2;\n }\n while (angle >= Math.PI * 2) {\n angle -= Math.PI * 2;\n }\n return angle;\n}\n\nexport const radians = (angle?: number) => {\n if (!isValidNumber(angle)) {\n return null;\n }\n return degreeToRadian(angle);\n};\nexport const degrees = (angle?: number) => {\n if (!isValidNumber(angle)) {\n return null;\n }\n return radianToDegree(angle);\n};\n\n/**\n * 极坐标系 -> 直角坐标系\n * @param point\n * @returns\n */\nexport function polarToCartesian(point: IPolarPoint): IPoint {\n if (!point.radius) {\n return { x: 0, y: 0 };\n }\n return {\n x: Math.cos(point.angle) * point.radius,\n y: Math.sin(point.angle) * point.radius\n };\n}\n\n/**\n * 计算圆弧上的点坐标\n * @param x0 圆心 x 坐标\n * @param y0 圆心 y 坐标\n * @param radius 圆弧半径\n * @param radian 点所在弧度\n */\nexport function circlePoint(x0: number, y0: number, radius: number, radian: number): IPoint {\n const offset = polarToCartesian({\n radius,\n angle: radian\n });\n return {\n x: x0 + offset.x,\n y: y0 + offset.y\n };\n}\n\n/**\n * 计算圆弧两点之间连接线的长度\n * @param radius 圆弧半径\n * @param radian 圆弧弧度\n */\nexport function arcConnectLength(radius: number, radian: number) {\n const x0 = 0;\n const y0 = radius;\n const { x: x1, y: y1 } = circlePoint(0, 0, radius, radian);\n return Math.sqrt((x0 - x1) ** 2 + (y0 - y1) ** 2);\n}\n\n/**\n * 计算直线与圆交点\n * 直线方程:ax + by + c = 0\n * 圆方程:(x - x0)^2 + (y - y0)^2 = r^2\n */\nexport function lineCirclePoints(a: number, b: number, c: number, x0: number, y0: number, r: number): IPoint[] {\n if ((a === 0 && b === 0) || r <= 0) {\n return [];\n }\n if (a === 0) {\n const y1 = -c / b;\n const fy = (y1 - y0) ** 2;\n const fd = r ** 2 - fy;\n if (fd < 0) {\n return [];\n } else if (fd === 0) {\n return [{ x: x0, y: y1 }];\n }\n const x1 = Math.sqrt(fd) + x0;\n const x2 = -Math.sqrt(fd) + x0;\n return [\n { x: x1, y: y1 },\n { x: x2, y: y1 }\n ];\n } else if (b === 0) {\n const x1 = -c / a;\n const fx = (x1 - x0) ** 2;\n const fd = r ** 2 - fx;\n if (fd < 0) {\n return [];\n } else if (fd === 0) {\n return [{ x: x1, y: y0 }];\n }\n const y1 = Math.sqrt(fd) + y0;\n const y2 = -Math.sqrt(fd) + y0;\n return [\n { x: x1, y: y1 },\n { x: x1, y: y2 }\n ];\n }\n const fa = (b / a) ** 2 + 1;\n const fb = 2 * ((c / a + x0) * (b / a) - y0);\n const fc = (c / a + x0) ** 2 + y0 ** 2 - r ** 2;\n const fd = fb ** 2 - 4 * fa * fc;\n if (fd < 0) {\n return [];\n }\n const y1 = (-fb + Math.sqrt(fd)) / (2 * fa);\n const y2 = (-fb - Math.sqrt(fd)) / (2 * fa);\n const x1 = -(b * y1 + c) / a;\n const x2 = -(b * y2 + c) / a;\n if (fd === 0) {\n return [{ x: x1, y: y1 }];\n }\n return [\n { x: x1, y: y1 },\n { x: x2, y: y2 }\n ];\n}\n\n/**\n * 根据圆弧两点连接线长度计算弧度\n * @param radius 圆弧半径\n * @param length 连接线长度\n */\nexport function connectLineRadian(radius: number, length: number) {\n if (length > radius * 2) {\n return NaN;\n }\n return Math.asin(length / 2 / radius) * 2;\n}\n\n/**\n * 根据角度计算象限\n * 计算角度所在象限\n * @param angle\n * @returns\n */\nexport function computeQuadrant(angle: number): Quadrant {\n angle = normalizeAngle(angle);\n if (angle > 0 && angle <= Math.PI / 2) {\n return 2;\n } else if (angle > Math.PI / 2 && angle <= Math.PI) {\n return 3;\n } else if (angle > Math.PI && angle <= (3 * Math.PI) / 2) {\n return 4;\n }\n return 1;\n}\n\n/**\n * 将角度轴起始角度 & 终结角度标准化\n * @param start\n * @param end\n * @returns\n */\nexport function normalizeStartEndAngle(\n start: number | null,\n end: number | null\n): { startAngle: number; endAngle: number } {\n let startAngle: number = 0;\n let endAngle: number = Math.PI * 2;\n const isStartValid = isValid(start);\n const isEndValid = isValid(end);\n if (!isStartValid && !isEndValid) {\n startAngle = 0;\n endAngle = Math.PI * 2;\n } else if (!isEndValid) {\n startAngle = start as number;\n endAngle = (start as number) + Math.PI * 2;\n } else if (!isStartValid) {\n startAngle = (end as number) - Math.PI * 2;\n endAngle = end as number;\n } else {\n startAngle = start as number;\n endAngle = end as number;\n }\n\n while (endAngle <= startAngle) {\n endAngle += Math.PI * 2;\n }\n while (startAngle > Math.PI * 2) {\n startAngle -= Math.PI * 2;\n endAngle -= Math.PI * 2;\n }\n while (endAngle < 0) {\n startAngle += Math.PI * 2;\n endAngle += Math.PI * 2;\n }\n return { startAngle, endAngle };\n}\n\nexport function isQuadrantLeft(quadrant: Quadrant): boolean {\n return quadrant === 3 || quadrant === 4;\n}\n\nexport function isQuadrantRight(quadrant: Quadrant): boolean {\n return quadrant === 1 || quadrant === 2;\n}\n\nexport function checkBoundsOverlap(boundsA: IBoundsLike, boundsB: IBoundsLike): boolean {\n const { x1: ax1, y1: ay1, x2: ax2, y2: ay2 } = boundsA;\n const { x1: bx1, y1: by1, x2: bx2, y2: by2 } = boundsB;\n return !(\n (ax1 <= bx1 && ax2 <= bx1) ||\n (ax1 >= bx2 && ax2 >= bx2) ||\n (ay1 <= by1 && ay2 <= by1) ||\n (ay1 >= by2 && ay2 >= by2)\n );\n}\n\nexport function outOfBounds(bounds: IBoundsLike, x: number, y: number) {\n return bounds.x1 > x || bounds.x2 < x || bounds.y1 > y || bounds.y2 < y;\n}\n\nexport function insideBounds(bounds: IBoundsLike, x: number, y: number) {\n return !outOfBounds(bounds, x, y);\n}\n\nexport function min(data: any[], field?: string): number {\n const initialData = field ? +data[0][field] : +data[0];\n\n if (!isValidNumber(initialData)) {\n warn('invalid data');\n return 0;\n }\n const min = data.reduce((pre, _cur) => {\n const cur = field ? +_cur[field] : +_cur;\n if (isValidNumber(cur) && cur < pre) {\n pre = cur;\n }\n return pre;\n }, initialData);\n return min;\n}\n\nexport function max(data: any[], field?: string): number {\n const initialData = field ? +data[0][field] : +data[0];\n if (!isValidNumber(initialData)) {\n warn('invalid data');\n return 0;\n }\n const max = data.reduce((pre, _cur) => {\n const cur = field ? +_cur[field] : +_cur;\n if (isValidNumber(cur) && cur > pre) {\n pre = cur;\n }\n return pre;\n }, initialData);\n return max;\n}\n\nexport function sum(data: any[], field?: string): number {\n return data.reduce((pre, _cur) => {\n const cur = field ? +_cur[field] : +_cur;\n if (isValidNumber(cur)) {\n pre += cur;\n }\n return pre;\n }, 0);\n}\n\nexport function average(data: any[], field?: string): number {\n let sum = 0;\n let count = 0;\n data.forEach((x: any) => {\n const v = field ? +x[field] : +x;\n if (isValidNumber(v)) {\n sum += v;\n count++;\n }\n });\n\n const average = sum / count;\n return average;\n}\n\nexport function variance(data: any[], field?: string): number {\n const averageNumber = average(data, field);\n\n if (data.length <= 1) {\n return 0;\n }\n\n const total = data.reduce((sum, cur) => sum + (field ? +cur[field] : +cur - averageNumber) ** 2, 0);\n const value = total / (data.length - 1);\n return value;\n}\n\nexport function standardDeviation(data: any[], field?: string): number {\n const value = Math.sqrt(variance(data, field));\n return value;\n}\n\nexport function median(data: any[], field?: string): number {\n const value = visMedian(data.map((datum: Datum) => datum[field]));\n return value;\n}\n\nexport function regression(data: any[], fieldX?: string, fieldY?: string): any[] {\n const { predict } = regressionLinear(\n data,\n datum => datum[fieldX],\n datum => datum[fieldY]\n );\n // 计算回归线起点和终点\n const x1 = min(data, fieldX);\n const x2 = max(data, fieldX);\n\n const predict1 = predict(x1);\n const predict2 = predict(x2);\n return [\n {\n [fieldX]: x1,\n [fieldY]: predict1\n },\n {\n [fieldX]: x2,\n [fieldY]: predict2\n }\n ];\n}\n\n/**\n * 计算对应角度下的角度轴标签定位属性\n * @param angle 弧度角,需要注意是逆时针计算的\n * @returns\n */\nexport function angleLabelOrientAttribute(angle: number) {\n let align: TextAlign = 'center';\n let baseline: TextBaseLine = 'middle';\n\n angle = normalizeAngle(angle);\n\n // left: 5/3 - 1/3; right: 2/3 - 4/3; center: 5/3 - 1/3 & 2/3 - 4/3\n if (angle >= Math.PI * (5 / 3) || angle <= Math.PI * (1 / 3)) {\n align = 'left';\n } else if (angle >= Math.PI * (2 / 3) && angle <= Math.PI * (4 / 3)) {\n align = 'right';\n } else {\n align = 'center';\n }\n\n // bottom: 7/6 - 11/6; top: 1/6 - 5/6; middle: 11/6 - 1/6 & 5/6 - 7/6\n if (angle >= Math.PI * (7 / 6) && angle <= Math.PI * (11 / 6)) {\n baseline = 'bottom';\n } else if (angle >= Math.PI * (1 / 6) && angle <= Math.PI * (5 / 6)) {\n baseline = 'top';\n } else {\n baseline = 'middle';\n }\n\n return { align, baseline };\n}\n\n/**\n * 计算对应角度下的半径轴标签定位属性\n * @param angle 弧度角,需要注意是逆时针计算的\n * @returns\n */\nexport function radiusLabelOrientAttribute(angle: number) {\n let align: TextAlign = 'center';\n let baseline: TextBaseLine = 'middle';\n\n angle = normalizeAngle(angle);\n\n // right: 7/6 - 11/6; left: 1/6 - 5/6; center: 11/6 - 1/6 & 5/6 - 7/6\n if (angle >= Math.PI * (7 / 6) && angle <= Math.PI * (11 / 6)) {\n align = 'right';\n } else if (angle >= Math.PI * (1 / 6) && angle <= Math.PI * (5 / 6)) {\n align = 'left';\n } else {\n align = 'center';\n }\n\n // bottom: 5/3 - 1/3; top: 2/3 - 4/3; middle: 5/3 - 1/3 & 2/3 - 4/3\n if (angle >= Math.PI * (5 / 3) || angle <= Math.PI * (1 / 3)) {\n baseline = 'bottom';\n } else if (angle >= Math.PI * (2 / 3) && angle <= Math.PI * (4 / 3)) {\n baseline = 'top';\n } else {\n baseline = 'middle';\n }\n\n return { align, baseline };\n}\n\n/** 求一个向量顺时针旋转到另一个向量的角度,带正负号 */\nexport function vectorAngle(v1: IPoint, v2: IPoint) {\n const v1Length = distance(v1);\n const v2Length = distance(v2);\n // 叉乘\n const rho = Math.asin((v1.x * v2.y - v2.x * v1.y) / v1Length / v2Length);\n // 点乘\n const theta = Math.acos((v1.x * v2.x + v1.y * v2.y) / v1Length / v2Length);\n if (rho < 0) {\n return -theta;\n }\n return theta;\n}\n\n/** 求两个点的距离 */\nexport function distance(p1: IPoint, p2: IPoint = { x: 0, y: 0 }) {\n return PointService.distancePP(p1, p2);\n}\n"]}
|
package/cjs/util/spec.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
import type { IBackgroundSpec, IBackgroundStyleSpec } from './../typings/spec/common';
|
|
1
2
|
import { DataView } from '@visactor/vdataset';
|
|
2
3
|
export declare function specTransform(spec: unknown, special?: {
|
|
3
4
|
[key: string]: (v: unknown) => unknown;
|
|
4
5
|
}): unknown;
|
|
5
6
|
export declare function cloneDeepSpec(spec: any): any;
|
|
6
7
|
export declare function isDataView(obj: any): obj is DataView;
|
|
8
|
+
export declare function convertBackgroundSpec(bg: IBackgroundSpec): Omit<IBackgroundStyleSpec, 'image'> & {
|
|
9
|
+
background?: IBackgroundStyleSpec['image'];
|
|
10
|
+
};
|
package/cjs/util/spec.js
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var __rest = this && this.__rest || function(s, e) {
|
|
4
|
+
var t = {};
|
|
5
|
+
for (var p in s) Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0 && (t[p] = s[p]);
|
|
6
|
+
if (null != s && "function" == typeof Object.getOwnPropertySymbols) {
|
|
7
|
+
var i = 0;
|
|
8
|
+
for (p = Object.getOwnPropertySymbols(s); i < p.length; i++) e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]) && (t[p[i]] = s[p[i]]);
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
|
|
3
13
|
Object.defineProperty(exports, "__esModule", {
|
|
4
14
|
value: !0
|
|
5
|
-
}), exports.isDataView = exports.cloneDeepSpec = exports.specTransform = void 0;
|
|
15
|
+
}), exports.convertBackgroundSpec = exports.isDataView = exports.cloneDeepSpec = exports.specTransform = void 0;
|
|
6
16
|
|
|
7
17
|
const vutils_1 = require("@visactor/vutils"), vdataset_1 = require("@visactor/vdataset");
|
|
8
18
|
|
|
@@ -46,5 +56,17 @@ function isDataView(obj) {
|
|
|
46
56
|
return obj instanceof vdataset_1.DataView || [ "dataSet", "latestData", "rawData", "parserData", "isDataView", "history" ].every((key => keys.includes(key)));
|
|
47
57
|
}
|
|
48
58
|
|
|
49
|
-
|
|
59
|
+
function convertBackgroundSpec(bg) {
|
|
60
|
+
if (!bg) return null;
|
|
61
|
+
if ("string" == typeof bg) return {
|
|
62
|
+
fill: bg,
|
|
63
|
+
fillOpacity: 1
|
|
64
|
+
};
|
|
65
|
+
if ("object" != typeof bg) return null;
|
|
66
|
+
const {x: x, y: y, width: width, height: height, x1: x1, y1: y1, image: image} = bg, rest = __rest(bg, [ "x", "y", "width", "height", "x1", "y1", "image" ]);
|
|
67
|
+
return rest.background = image, rest;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
exports.specTransform = specTransform, exports.cloneDeepSpec = cloneDeepSpec, exports.isDataView = isDataView,
|
|
71
|
+
exports.convertBackgroundSpec = convertBackgroundSpec;
|
|
50
72
|
//# sourceMappingURL=spec.js.map
|
package/cjs/util/spec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/util/spec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/util/spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AACA,6CAA2F;AAC3F,iDAA8C;AAI9C,SAAgB,aAAa,CAC3B,IAAa,EACb,UAEI;IACF,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;CACb;IAED,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,IAAI,CAAC;KACb;IAED,IAAI,IAAI,CAAC,WAAW,KAAK,MAAM,EAAE;QAC/B,MAAM,MAAM,GAAQ,EAAE,CAAC;QACvB,KAAK,MAAM,GAAG,IAAI,IAAW,EAAE;YAC7B,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;gBAEnD,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;oBAChB,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBACtC,SAAS;iBACV;gBACD,MAAM,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;aACjD;SACF;QACD,OAAO,MAAM,CAAC;KACf;IAED,IAAI,IAAA,gBAAO,EAAC,IAAI,CAAC,EAAE;QACjB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;KACjD;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AA/BD,sCA+BC;AAMD,SAAgB,aAAa,CAAC,IAAS;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC;IAEnB,IAAI,MAAM,CAAC;IACX,IAAI,CAAC,IAAA,gBAAO,EAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAChD,OAAO,KAAK,CAAC;KACd;IAGD,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE;QACrB,OAAO,KAAK,CAAC;KACd;IAED,MAAM,KAAK,GAAG,IAAA,gBAAO,EAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAE5B,IAAI,KAAK,EAAE;QACT,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;KAC5B;SAEI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAClC,MAAM,GAAG,EAAE,CAAC;KACb;SAEI,IAAI,IAAA,kBAAS,EAAC,KAAK,CAAC,IAAI,IAAA,iBAAQ,EAAC,KAAK,CAAC,IAAI,IAAA,iBAAQ,EAAC,KAAK,CAAC,EAAE;QAC/D,MAAM,GAAG,KAAK,CAAC;KAChB;SAAM,IAAI,IAAA,eAAM,EAAC,KAAK,CAAC,EAAE;QACxB,MAAM,GAAG,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;KAC3B;SAEI;QACH,MAAM,GAAG,SAAS,CAAC;KACpB;IAKD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAE7D,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IACf,IAAI,MAAM,EAAE;QACV,OAAO,EAAE,KAAK,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE;YACxC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;SACvC;KACF;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAhDD,sCAgDC;AAED,SAAgB,UAAU,CAAC,GAAQ;IACjC,MAAM,YAAY,GAAuB,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IACrH,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,OAAO,GAAG,YAAY,mBAAQ,IAAI,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAClF,CAAC;AAJD,gCAIC;AAED,SAAgB,qBAAqB,CACnC,EAAmB;IAEnB,IAAI,CAAC,EAAE,EAAE;QACP,OAAO,IAAI,CAAC;KACb;IACD,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;QAC1B,OAAO;YACL,IAAI,EAAE,EAAE;YACR,WAAW,EAAE,CAAC;SACf,CAAC;KACH;IACD,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;QAC1B,OAAO,IAAI,CAAC;KACb;IACD,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,KAAc,EAAE,EAAX,IAAI,UAAK,EAAE,EAApD,kDAA+C,CAAK,CAAC;IAC3D,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IACxB,OAAO,IAAI,CAAC;AACd,CAAC;AAlBD,sDAkBC","file":"spec.js","sourcesContent":["import type { IBackgroundSpec, IBackgroundStyleSpec } from './../typings/spec/common';\nimport { isArray, isBoolean, isDate, isNumber, isString, isValid } from '@visactor/vutils';\nimport { DataView } from '@visactor/vdataset';\n\n// todo 以目前的场景来看,并没有递归的需要。\n// 考虑到不确定性,还是递归处理spec对象,时间消耗很少\nexport function specTransform(\n spec: unknown,\n special: {\n [key: string]: (v: unknown) => unknown;\n } = {\n data: v => v\n }\n): unknown {\n if (!spec) {\n return spec;\n }\n // 如果是普通对象\n if (spec.constructor === Object) {\n const result: any = {};\n for (const key in spec as any) {\n if (Object.prototype.hasOwnProperty.call(spec, key)) {\n // todo 特殊处理怎样更合理?\n if (special[key]) {\n result[key] = special[key](spec[key]);\n continue;\n }\n result[key] = specTransform(spec[key], special);\n }\n }\n return result;\n }\n // 如果是数组\n if (isArray(spec)) {\n return spec.map(s => specTransform(s, special));\n }\n return spec;\n}\n\n/**\n * 深拷贝 spec,为避免循环引用,DataView 维持原有引用\n * @param spec 原spec\n */\nexport function cloneDeepSpec(spec: any) {\n const value = spec;\n\n let result;\n if (!isValid(value) || typeof value !== 'object') {\n return value;\n }\n\n // 判断是不是 DataView 对象\n if (isDataView(value)) {\n return value;\n }\n\n const isArr = isArray(value);\n const length = value.length;\n // 不考虑特殊数组的额外处理\n if (isArr) {\n result = new Array(length);\n }\n // 不考虑 buffer / arguments 类型的处理以及 prototype 的额外处理\n else if (typeof value === 'object') {\n result = {};\n }\n // 不建议使用作为 Boolean / Number / String 作为构造器\n else if (isBoolean(value) || isNumber(value) || isString(value)) {\n result = value;\n } else if (isDate(value)) {\n result = new Date(+value);\n }\n // 不考虑 ArrayBuffer / DataView / TypedArray / map / set / regexp / symbol 类型\n else {\n result = undefined;\n }\n\n // 不考虑 map / set / TypedArray 类型的赋值\n\n // 不考虑对象的 symbol 属性\n const props = isArr ? undefined : Object.keys(Object(value));\n\n let index = -1;\n if (result) {\n while (++index < (props || value).length) {\n const key = props ? props[index] : index;\n const subValue = value[key];\n result[key] = cloneDeepSpec(subValue);\n }\n }\n return result;\n}\n\nexport function isDataView(obj: any): obj is DataView {\n const dataViewKeys: (keyof DataView)[] = ['dataSet', 'latestData', 'rawData', 'parserData', 'isDataView', 'history'];\n const keys = Object.keys(obj);\n return obj instanceof DataView || dataViewKeys.every(key => keys.includes(key));\n}\n\nexport function convertBackgroundSpec(\n bg: IBackgroundSpec\n): Omit<IBackgroundStyleSpec, 'image'> & { background?: IBackgroundStyleSpec['image'] } {\n if (!bg) {\n return null;\n }\n if (typeof bg === 'string') {\n return {\n fill: bg,\n fillOpacity: 1\n };\n }\n if (typeof bg !== 'object') {\n return null;\n }\n const { x, y, width, height, x1, y1, image, ...rest } = bg;\n rest.background = image;\n return rest;\n}\n"]}
|
package/esm/chart/area/area.js
CHANGED
|
@@ -17,11 +17,13 @@ export class AreaChart extends CartesianChart {
|
|
|
17
17
|
super(...arguments), this.type = ChartTypeEnum.area, this.seriesType = SeriesTypeEnum.area;
|
|
18
18
|
}
|
|
19
19
|
_getDefaultSeriesSpec(spec) {
|
|
20
|
+
var _a;
|
|
20
21
|
return Object.assign(Object.assign({}, super._getDefaultSeriesSpec(spec)), {
|
|
21
22
|
invalidType: spec.invalidType || "break",
|
|
22
23
|
point: spec.point,
|
|
23
24
|
line: spec.line,
|
|
24
|
-
area: spec.area
|
|
25
|
+
area: spec.area,
|
|
26
|
+
seriesMark: null !== (_a = spec.seriesMark) && void 0 !== _a ? _a : "area"
|
|
25
27
|
});
|
|
26
28
|
}
|
|
27
29
|
transformSpec(spec) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/chart/area/area.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,oCAAoC,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAE/B,MAAM,OAAO,SAAU,SAAQ,cAAc;IAA7C;;QAGW,SAAI,GAAW,aAAa,CAAC,IAAI,CAAC;QAClC,eAAU,GAAW,cAAc,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"sources":["../src/chart/area/area.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,oCAAoC,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAE/B,MAAM,OAAO,SAAU,SAAQ,cAAc;IAA7C;;QAGW,SAAI,GAAW,aAAa,CAAC,IAAI,CAAC;QAClC,eAAU,GAAW,cAAc,CAAC,IAAI,CAAC;IAiBpD,CAAC;IAfW,qBAAqB,CAAC,IAAoB;;QAClD,uCACK,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,KACpC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,OAAO,EACxC,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,UAAU,EAAE,MAAA,IAAI,CAAC,UAAU,mCAAI,MAAM,IACrC;IACJ,CAAC;IAED,aAAa,CAAC,IAAS;QACrB,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1B,oCAAoC,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;;AAnBe,cAAI,GAAW,aAAa,CAAC,IAAI,CAAC;AAClC,cAAI,GAAW,eAAe,CAAC","file":"area.js","sourcesContent":["import { SeriesTypeEnum } from '../../series/interface';\nimport { CartesianChart } from '../cartesian/cartesian';\nimport { ChartTypeEnum } from '../interface';\nimport type { IAreaChartSpec } from './interface';\nimport { setDefaultCrosshairForCartesianChart } from '../util';\nimport { VChart } from '../../core/vchart';\nimport { AreaSeries } from '../../series';\nVChart.useSeries([AreaSeries]);\n\nexport class AreaChart extends CartesianChart {\n static readonly type: string = ChartTypeEnum.area;\n static readonly view: string = 'singleDefault';\n readonly type: string = ChartTypeEnum.area;\n readonly seriesType: string = SeriesTypeEnum.area;\n\n protected _getDefaultSeriesSpec(spec: IAreaChartSpec): any {\n return {\n ...super._getDefaultSeriesSpec(spec),\n invalidType: spec.invalidType || 'break',\n point: spec.point,\n line: spec.line,\n area: spec.area,\n seriesMark: spec.seriesMark ?? 'area'\n };\n }\n\n transformSpec(spec: any): void {\n super.transformSpec(spec);\n setDefaultCrosshairForCartesianChart(spec);\n }\n}\n"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type { ISeriesSpec, Datum, IMarkStateSpec, IRegionQuerier, MaybeArray, IPadding, IRect, StringOrNumber } from '../typings';
|
|
1
|
+
import type { ISeriesSpec, Datum, IMarkStateSpec, IRegionQuerier, MaybeArray, IPadding, IRect, StringOrNumber, IChartSpec } from '../typings';
|
|
2
2
|
import type { LayoutCallBack } from '../layout/interface';
|
|
3
3
|
import type { ILayoutModelState, ILayoutOrientPadding, ILayoutRect, IModel, IModelOption, IUpdateSpecResult } from '../model/interface';
|
|
4
4
|
import type { IChart, IChartLayoutOption, IChartRenderOption, IChartOption, IChartEvaluateOption, ILayoutParams, DimensionIndexOption } from './interface';
|
|
5
5
|
import type { ISeries } from '../series/interface';
|
|
6
6
|
import type { IRegion } from '../region/interface';
|
|
7
7
|
import type { IComponent } from '../component/interface';
|
|
8
|
-
import type
|
|
8
|
+
import { type IMark } from '../mark/interface';
|
|
9
9
|
import type { IEvent } from '../event/interface';
|
|
10
10
|
import type { DataView } from '@visactor/vdataset';
|
|
11
11
|
import type { DataSet } from '@visactor/vdataset/es/data-set';
|
|
@@ -16,12 +16,14 @@ import type { IBoundsLike } from '@visactor/vutils';
|
|
|
16
16
|
import type { IMorphConfig, IMark as IVGrammarMark, IView } from '@visactor/vgrammar';
|
|
17
17
|
import { CompilableBase } from '../compile/compilable-base';
|
|
18
18
|
import type { IGlobalScale } from '../scale/interface';
|
|
19
|
+
import type { IRectMark } from '../mark/rect';
|
|
19
20
|
export declare class BaseChart extends CompilableBase implements IChart {
|
|
20
21
|
readonly type: string;
|
|
21
22
|
readonly id: number;
|
|
22
23
|
protected _spec: any;
|
|
23
24
|
getSpec(): any;
|
|
24
25
|
setSpec(s: any): void;
|
|
26
|
+
getOption(): IChartOption;
|
|
25
27
|
protected _theme: ITheme;
|
|
26
28
|
protected _regions: IRegion[];
|
|
27
29
|
protected _series: ISeries[];
|
|
@@ -47,12 +49,14 @@ export declare class BaseChart extends CompilableBase implements IChart {
|
|
|
47
49
|
padding: IPadding;
|
|
48
50
|
protected _paddingSpec: ILayoutOrientPadding;
|
|
49
51
|
protected _canvasRect: ILayoutRect;
|
|
52
|
+
protected _backgroundMark: IRectMark;
|
|
50
53
|
constructor(spec: any, option: IChartOption);
|
|
51
54
|
created(): void;
|
|
52
55
|
transformSpec(spec: any): void;
|
|
53
56
|
init(options?: any): void;
|
|
54
57
|
onResize(width: number, height: number): void;
|
|
55
58
|
updateViewBox(viewBox: IBoundsLike): void;
|
|
59
|
+
createBackground(bg: IChartSpec['background']): void;
|
|
56
60
|
createRegion(regionSpec: any[]): void;
|
|
57
61
|
initRegion(): void;
|
|
58
62
|
createSeries(seriesSpec: ISeriesSpec[]): void;
|
|
@@ -124,6 +128,7 @@ export declare class BaseChart extends CompilableBase implements IChart {
|
|
|
124
128
|
compile(): void;
|
|
125
129
|
afterCompile(): void;
|
|
126
130
|
compileLayout(): void;
|
|
131
|
+
compileBackground(): void;
|
|
127
132
|
compileRegions(): void;
|
|
128
133
|
compileSeries(): void;
|
|
129
134
|
compileComponents(): void;
|
package/esm/chart/base-chart.js
CHANGED
|
@@ -28,11 +28,13 @@ import { GlobalScale } from "../scale/global-scale";
|
|
|
28
28
|
|
|
29
29
|
import { ComponentTypeEnum } from "../component/interface";
|
|
30
30
|
|
|
31
|
+
import { MarkTypeEnum } from "../mark/interface";
|
|
32
|
+
|
|
31
33
|
import { Factory } from "../core/factory";
|
|
32
34
|
|
|
33
35
|
import { Event } from "../event/event";
|
|
34
36
|
|
|
35
|
-
import { isArray, isValid, createID, calcPadding, normalizeLayoutPaddingSpec, array, isTrueBrowser, isString } from "../util";
|
|
37
|
+
import { isArray, isValid, createID, calcPadding, normalizeLayoutPaddingSpec, array, isTrueBrowser, isString, convertBackgroundSpec } from "../util";
|
|
36
38
|
|
|
37
39
|
import { Stack } from "./stack";
|
|
38
40
|
|
|
@@ -63,6 +65,9 @@ export class BaseChart extends CompilableBase {
|
|
|
63
65
|
setSpec(s) {
|
|
64
66
|
this.transformSpec(s), this._spec = s;
|
|
65
67
|
}
|
|
68
|
+
getOption() {
|
|
69
|
+
return this._option;
|
|
70
|
+
}
|
|
66
71
|
getLayoutRect() {
|
|
67
72
|
return this._layoutRect;
|
|
68
73
|
}
|
|
@@ -132,12 +137,14 @@ export class BaseChart extends CompilableBase {
|
|
|
132
137
|
getChartLayoutRect: () => this._layoutRect,
|
|
133
138
|
getChartViewRect: () => this._viewRect,
|
|
134
139
|
getChart: () => this,
|
|
135
|
-
globalScale: this._globalScale
|
|
140
|
+
globalScale: this._globalScale,
|
|
141
|
+
onError: this._option.onError
|
|
136
142
|
}), this._stack = new Stack(this), this._spec = spec;
|
|
137
143
|
}
|
|
138
144
|
created() {
|
|
139
|
-
this.transformSpec(this._spec), this.createGlobalScale(), this.
|
|
140
|
-
this.
|
|
145
|
+
this.transformSpec(this._spec), this.createGlobalScale(), this.createBackground(this._spec.background),
|
|
146
|
+
this.createLayout(), this.createRegion(this._spec.region), this.createSeries(this._spec.series),
|
|
147
|
+
this.createComponent(this._spec);
|
|
141
148
|
}
|
|
142
149
|
transformSpec(spec) {
|
|
143
150
|
spec.region && 0 !== spec.region.length || (spec.region = [ {} ]), has(spec, "tooltip") || (spec.tooltip = {});
|
|
@@ -159,6 +166,20 @@ export class BaseChart extends CompilableBase {
|
|
|
159
166
|
updateViewBox(viewBox) {
|
|
160
167
|
this._updateLayoutRect(viewBox), this.setLayoutTag(!0);
|
|
161
168
|
}
|
|
169
|
+
createBackground(bg) {
|
|
170
|
+
bg && "object" == typeof bg && (this._backgroundMark = Factory.createMark(MarkTypeEnum.group, "chart-background", {
|
|
171
|
+
model: this,
|
|
172
|
+
map: this._option.map,
|
|
173
|
+
getCompiler: this.getCompiler,
|
|
174
|
+
globalScale: this._globalScale
|
|
175
|
+
}), this._backgroundMark.created(), this._backgroundMark.setStyle(convertBackgroundSpec(bg)),
|
|
176
|
+
this._backgroundMark.setStyle({
|
|
177
|
+
x: () => this._viewBox.x1,
|
|
178
|
+
y: () => this._viewBox.y1,
|
|
179
|
+
width: () => this._viewBox.x2 - this._viewBox.x1,
|
|
180
|
+
height: () => this._viewBox.y2 - this._viewBox.y1
|
|
181
|
+
}));
|
|
182
|
+
}
|
|
162
183
|
createRegion(regionSpec) {
|
|
163
184
|
regionSpec && regionSpec.forEach(((s, i) => {
|
|
164
185
|
const region = Factory.createRegion("region", s, Object.assign(Object.assign({}, this._modelOption), {
|
|
@@ -174,8 +195,10 @@ export class BaseChart extends CompilableBase {
|
|
|
174
195
|
createSeries(seriesSpec) {
|
|
175
196
|
seriesSpec.forEach(((spec, index) => {
|
|
176
197
|
let region;
|
|
177
|
-
if (spec.data ? spec.data = dataToDataView(spec.data, this._dataSet, this._spec.data
|
|
178
|
-
|
|
198
|
+
if (spec.data ? spec.data = dataToDataView(spec.data, this._dataSet, this._spec.data, {
|
|
199
|
+
onError: this._option.onError
|
|
200
|
+
}) : spec.data = this.getSeriesData(spec.dataId, spec.dataIndex), !1 === this._option.animation && (spec.animation = !1),
|
|
201
|
+
isValid(spec.regionId) ? region = this.getRegionsInUserId(spec.regionId) : isValid(spec.regionIndex) && (region = this.getRegionsInIndex([ spec.regionIndex ])[0]),
|
|
179
202
|
region || (region = this._regions[0]), !region) return;
|
|
180
203
|
const series = Factory.createSeries(spec.type, spec, Object.assign(Object.assign({}, this._modelOption), {
|
|
181
204
|
region: region,
|
|
@@ -249,7 +272,9 @@ export class BaseChart extends CompilableBase {
|
|
|
249
272
|
if (this._layoutFunc = this._option.layout, !this._layoutFunc) {
|
|
250
273
|
let use3dLayout = !1;
|
|
251
274
|
(this._spec.zField || this._spec.series && this._spec.series.some((s => s.zField))) && (use3dLayout = !0);
|
|
252
|
-
const layout = new (Factory.getLayout(null !== (_b = null === (_a = this._spec.layout) || void 0 === _a ? void 0 : _a.type) && void 0 !== _b ? _b : use3dLayout ? "layout3d" : "base"))(this._spec.layout
|
|
275
|
+
const layout = new (Factory.getLayout(null !== (_b = null === (_a = this._spec.layout) || void 0 === _a ? void 0 : _a.type) && void 0 !== _b ? _b : use3dLayout ? "layout3d" : "base"))(this._spec.layout, {
|
|
276
|
+
onError: this._option.onError
|
|
277
|
+
});
|
|
253
278
|
this._layoutFunc = layout.layoutItems.bind(layout);
|
|
254
279
|
}
|
|
255
280
|
}
|
|
@@ -336,17 +361,14 @@ export class BaseChart extends CompilableBase {
|
|
|
336
361
|
return this._canvasRect;
|
|
337
362
|
}
|
|
338
363
|
getSeriesData(id, index) {
|
|
339
|
-
if (!this._spec.data)
|
|
364
|
+
if (!this._spec.data) return this._option.onError("no data in spec!"), null;
|
|
340
365
|
if ("string" == typeof id) {
|
|
341
366
|
const metchData = this._spec.data.filter((data => data.name === id));
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
}
|
|
345
|
-
if ("number" == typeof index) {
|
|
346
|
-
if (this._spec.data[index]) return this._spec.data[index];
|
|
347
|
-
throw new Error(`no data matches dataIndex ${index}!`);
|
|
367
|
+
return metchData[0] ? metchData[0] : (this._option.onError(`no data matches dataId ${id}!`),
|
|
368
|
+
null);
|
|
348
369
|
}
|
|
349
|
-
return this._spec.data[
|
|
370
|
+
return "number" == typeof index ? this._spec.data[index] ? this._spec.data[index] : (this._option.onError(`no data matches dataIndex ${index}!`),
|
|
371
|
+
null) : this._spec.data[0];
|
|
350
372
|
}
|
|
351
373
|
_transformSpecScale() {
|
|
352
374
|
var _a, _b, _c;
|
|
@@ -474,7 +496,8 @@ export class BaseChart extends CompilableBase {
|
|
|
474
496
|
large: spec.large,
|
|
475
497
|
largeThreshold: spec.largeThreshold,
|
|
476
498
|
progressiveStep: spec.progressiveStep,
|
|
477
|
-
progressiveThreshold: spec.progressiveThreshold
|
|
499
|
+
progressiveThreshold: spec.progressiveThreshold,
|
|
500
|
+
background: spec.seriesBackground
|
|
478
501
|
};
|
|
479
502
|
}
|
|
480
503
|
_mergeUpdateResult(resultA, resultB) {
|
|
@@ -525,7 +548,8 @@ export class BaseChart extends CompilableBase {
|
|
|
525
548
|
}))));
|
|
526
549
|
}
|
|
527
550
|
compile() {
|
|
528
|
-
this.
|
|
551
|
+
this.compileBackground(), this.compileLayout(), this.compileRegions(), this.compileSeries(),
|
|
552
|
+
this.compileComponents();
|
|
529
553
|
}
|
|
530
554
|
afterCompile() {
|
|
531
555
|
this.getAllRegions().forEach((r => {
|
|
@@ -543,6 +567,14 @@ export class BaseChart extends CompilableBase {
|
|
|
543
567
|
const {width: width, height: height} = this.getCanvasRect();
|
|
544
568
|
this.getCompiler().setSize(width, height);
|
|
545
569
|
}
|
|
570
|
+
compileBackground() {
|
|
571
|
+
var _a;
|
|
572
|
+
this._backgroundMark && (this._backgroundMark.compile(), null === (_a = this._backgroundMark.getProduct()) || void 0 === _a || _a.configure({
|
|
573
|
+
context: {
|
|
574
|
+
model: this
|
|
575
|
+
}
|
|
576
|
+
}).layout((() => {})));
|
|
577
|
+
}
|
|
546
578
|
compileRegions() {
|
|
547
579
|
var _a, _b, _c, _d;
|
|
548
580
|
null === (_b = null === (_a = this._option.performanceHook) || void 0 === _a ? void 0 : _a.beforeRegionCompile) || void 0 === _b || _b.call(_a),
|
|
@@ -579,10 +611,8 @@ export class BaseChart extends CompilableBase {
|
|
|
579
611
|
}
|
|
580
612
|
checkUpdate(mark, model, sceneRoot) {
|
|
581
613
|
var _a, _b;
|
|
582
|
-
|
|
583
|
-
model = mark.context.model), model && mark.isUpdated
|
|
584
|
-
void model.setAttributeTag(!0);
|
|
585
|
-
"group" === mark.markType && mark.children.forEach((child => {
|
|
614
|
+
(null === (_a = mark.context) || void 0 === _a ? void 0 : _a.model) && (sceneRoot = mark,
|
|
615
|
+
model = mark.context.model), model && mark.isUpdated ? null === (_b = model.bindSceneNode) || void 0 === _b || _b.call(model, sceneRoot.elements[0]) : "group" === mark.markType && mark.children.forEach((child => {
|
|
586
616
|
this.checkUpdate(child, model, sceneRoot);
|
|
587
617
|
}));
|
|
588
618
|
}
|