@visactor/vchart 1.2.0-beta.4 → 1.2.0-beta.5
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 +321 -133
- package/build/index.min.js +1 -1
- package/cjs/chart/bar/bar-3d.d.ts +1 -0
- package/cjs/chart/bar/bar-3d.js +8 -0
- package/cjs/chart/bar/bar-3d.js.map +1 -1
- package/cjs/chart/bar/bar.js +2 -1
- package/cjs/chart/bar/bar.js.map +1 -1
- package/cjs/chart/base-chart.js +5 -4
- package/cjs/chart/base-chart.js.map +1 -1
- package/cjs/chart/range-column/range-column-3d.js +3 -1
- package/cjs/chart/range-column/range-column-3d.js.map +1 -1
- package/cjs/chart/range-column/range-column.js +3 -1
- package/cjs/chart/range-column/range-column.js.map +1 -1
- package/cjs/component/axis/cartesian/axis.js +4 -3
- package/cjs/component/axis/cartesian/axis.js.map +1 -1
- package/cjs/component/axis/cartesian/band-axis.d.ts +1 -0
- package/cjs/component/axis/cartesian/band-axis.js +2 -1
- package/cjs/component/axis/cartesian/band-axis.js.map +1 -1
- package/cjs/component/axis/cartesian/interface/common.d.ts +1 -0
- package/cjs/component/axis/cartesian/interface/common.js.map +1 -1
- package/cjs/component/axis/interface.js.map +1 -1
- package/cjs/component/axis/mixin/band-axis-mixin.js.map +1 -1
- package/cjs/component/geo/geo-coordinate.js +4 -2
- package/cjs/component/geo/geo-coordinate.js.map +1 -1
- package/cjs/component/label/bar.js +13 -5
- package/cjs/component/label/bar.js.map +1 -1
- package/cjs/component/marker/base-marker.d.ts +3 -3
- package/cjs/component/marker/base-marker.js +4 -2
- package/cjs/component/marker/base-marker.js.map +1 -1
- package/cjs/component/marker/interface.d.ts +3 -2
- package/cjs/component/marker/interface.js.map +1 -1
- package/cjs/component/marker/mark-area/interface/spec.d.ts +9 -9
- package/cjs/component/marker/mark-area/interface/spec.js.map +1 -1
- package/cjs/component/marker/mark-area/mark-area.js +7 -3
- package/cjs/component/marker/mark-area/mark-area.js.map +1 -1
- package/cjs/component/marker/mark-line/interface/spec.d.ts +5 -5
- package/cjs/component/marker/mark-line/interface/spec.js.map +1 -1
- package/cjs/component/marker/mark-line/mark-line.js +7 -3
- package/cjs/component/marker/mark-line/mark-line.js.map +1 -1
- package/cjs/component/marker/mark-point/mark-point.js +9 -3
- package/cjs/component/marker/mark-point/mark-point.js.map +1 -1
- package/cjs/component/title/interface/theme.d.ts +1 -1
- package/cjs/component/title/interface/theme.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/data/transforms/tick-data/continuous.js +2 -0
- package/cjs/data/transforms/tick-data/continuous.js.map +1 -1
- package/cjs/data/transforms/tick-data/discrete/linear.js +26 -2
- package/cjs/data/transforms/tick-data/discrete/linear.js.map +1 -1
- package/cjs/series/bar/bar.d.ts +3 -2
- package/cjs/series/bar/bar.js +29 -16
- package/cjs/series/bar/bar.js.map +1 -1
- package/cjs/series/bar/interface.d.ts +5 -3
- package/cjs/series/bar/interface.js.map +1 -1
- package/cjs/series/base/base-series.d.ts +1 -0
- package/cjs/series/base/base-series.js +28 -18
- package/cjs/series/base/base-series.js.map +1 -1
- package/cjs/series/circle-packing/circle-packing.d.ts +2 -0
- package/cjs/series/circle-packing/circle-packing.js +1 -0
- package/cjs/series/circle-packing/circle-packing.js.map +1 -1
- package/cjs/series/geo/geo.js +2 -2
- package/cjs/series/geo/geo.js.map +1 -1
- package/cjs/series/pie/pie.d.ts +3 -0
- package/cjs/series/pie/pie.js +28 -23
- package/cjs/series/pie/pie.js.map +1 -1
- package/cjs/series/radar/radar.js +2 -2
- package/cjs/series/radar/radar.js.map +1 -1
- package/cjs/series/range-column/range-column.js +15 -29
- package/cjs/series/range-column/range-column.js.map +1 -1
- package/cjs/series/sankey/sankey.d.ts +2 -0
- package/cjs/series/sankey/sankey.js +1 -0
- package/cjs/series/sankey/sankey.js.map +1 -1
- package/cjs/series/sunburst/sunburst.d.ts +2 -0
- package/cjs/series/sunburst/sunburst.js +1 -0
- package/cjs/series/sunburst/sunburst.js.map +1 -1
- package/cjs/theme/buildin-theme/light/component/title.js +2 -2
- package/cjs/theme/buildin-theme/light/component/title.js.map +1 -1
- package/cjs/theme/buildin-theme/light/index.js +2 -1
- package/cjs/theme/buildin-theme/light/index.js.map +1 -1
- package/cjs/theme/interface.d.ts +1 -0
- package/cjs/theme/interface.js.map +1 -1
- package/cjs/typings/spec/common.d.ts +2 -0
- package/cjs/typings/spec/common.js.map +1 -1
- package/esm/chart/bar/bar-3d.d.ts +1 -0
- package/esm/chart/bar/bar-3d.js +8 -0
- package/esm/chart/bar/bar-3d.js.map +1 -1
- package/esm/chart/bar/bar.js +2 -1
- package/esm/chart/bar/bar.js.map +1 -1
- package/esm/chart/base-chart.js +5 -4
- package/esm/chart/base-chart.js.map +1 -1
- package/esm/chart/range-column/range-column-3d.js +3 -1
- package/esm/chart/range-column/range-column-3d.js.map +1 -1
- package/esm/chart/range-column/range-column.js +3 -1
- package/esm/chart/range-column/range-column.js.map +1 -1
- package/esm/component/axis/cartesian/axis.js +4 -3
- package/esm/component/axis/cartesian/axis.js.map +1 -1
- package/esm/component/axis/cartesian/band-axis.d.ts +1 -0
- package/esm/component/axis/cartesian/band-axis.js +2 -1
- package/esm/component/axis/cartesian/band-axis.js.map +1 -1
- package/esm/component/axis/cartesian/interface/common.d.ts +1 -0
- package/esm/component/axis/cartesian/interface/common.js.map +1 -1
- package/esm/component/axis/interface.js.map +1 -1
- package/esm/component/axis/mixin/band-axis-mixin.js.map +1 -1
- package/esm/component/geo/geo-coordinate.js +4 -2
- package/esm/component/geo/geo-coordinate.js.map +1 -1
- package/esm/component/label/bar.js +13 -5
- package/esm/component/label/bar.js.map +1 -1
- package/esm/component/marker/base-marker.d.ts +3 -3
- package/esm/component/marker/base-marker.js +5 -3
- package/esm/component/marker/base-marker.js.map +1 -1
- package/esm/component/marker/interface.d.ts +3 -2
- package/esm/component/marker/interface.js.map +1 -1
- package/esm/component/marker/mark-area/interface/spec.d.ts +9 -9
- package/esm/component/marker/mark-area/interface/spec.js.map +1 -1
- package/esm/component/marker/mark-area/mark-area.js +7 -3
- package/esm/component/marker/mark-area/mark-area.js.map +1 -1
- package/esm/component/marker/mark-line/interface/spec.d.ts +5 -5
- package/esm/component/marker/mark-line/interface/spec.js.map +1 -1
- package/esm/component/marker/mark-line/mark-line.js +7 -3
- package/esm/component/marker/mark-line/mark-line.js.map +1 -1
- package/esm/component/marker/mark-point/mark-point.js +9 -3
- package/esm/component/marker/mark-point/mark-point.js.map +1 -1
- package/esm/component/title/interface/theme.d.ts +1 -1
- package/esm/component/title/interface/theme.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/data/transforms/tick-data/continuous.js +2 -0
- package/esm/data/transforms/tick-data/continuous.js.map +1 -1
- package/esm/data/transforms/tick-data/discrete/linear.js +24 -2
- package/esm/data/transforms/tick-data/discrete/linear.js.map +1 -1
- package/esm/series/bar/bar.d.ts +3 -2
- package/esm/series/bar/bar.js +27 -13
- package/esm/series/bar/bar.js.map +1 -1
- package/esm/series/bar/interface.d.ts +5 -3
- package/esm/series/bar/interface.js.map +1 -1
- package/esm/series/base/base-series.d.ts +1 -0
- package/esm/series/base/base-series.js +28 -18
- package/esm/series/base/base-series.js.map +1 -1
- package/esm/series/circle-packing/circle-packing.d.ts +2 -0
- package/esm/series/circle-packing/circle-packing.js +1 -0
- package/esm/series/circle-packing/circle-packing.js.map +1 -1
- package/esm/series/geo/geo.js +2 -2
- package/esm/series/geo/geo.js.map +1 -1
- package/esm/series/pie/pie.d.ts +3 -0
- package/esm/series/pie/pie.js +27 -23
- package/esm/series/pie/pie.js.map +1 -1
- package/esm/series/radar/radar.js +2 -2
- package/esm/series/radar/radar.js.map +1 -1
- package/esm/series/range-column/range-column.js +14 -27
- package/esm/series/range-column/range-column.js.map +1 -1
- package/esm/series/sankey/sankey.d.ts +2 -0
- package/esm/series/sankey/sankey.js +1 -0
- package/esm/series/sankey/sankey.js.map +1 -1
- package/esm/series/sunburst/sunburst.d.ts +2 -0
- package/esm/series/sunburst/sunburst.js +1 -0
- package/esm/series/sunburst/sunburst.js.map +1 -1
- package/esm/theme/buildin-theme/light/component/title.js +2 -2
- package/esm/theme/buildin-theme/light/component/title.js.map +1 -1
- package/esm/theme/buildin-theme/light/index.js +2 -1
- package/esm/theme/buildin-theme/light/index.js.map +1 -1
- package/esm/theme/interface.d.ts +1 -0
- package/esm/theme/interface.js.map +1 -1
- package/esm/typings/spec/common.d.ts +2 -0
- package/esm/typings/spec/common.js.map +1 -1
- package/package.json +2 -2
package/esm/core/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { VChart } from './vchart';
|
|
2
2
|
import { Factory } from './factory';
|
|
3
3
|
export { VChart, Factory };
|
|
4
|
-
export declare const version = "1.2.0-beta.
|
|
4
|
+
export declare const version = "1.2.0-beta.5";
|
|
5
5
|
export type { IVChart } from './interface';
|
|
6
6
|
export * from '../event/interface';
|
|
7
7
|
export * from '../typings/spec/common';
|
package/esm/core/index.js
CHANGED
package/esm/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAKvD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAGtD,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAa,CAAC,CAAC;AAGhD,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,MAAa,CAAC,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAG3B,MAAM,CAAC,MAAM,OAAO,GAAG,cAAc,CAAC;AAKtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,oBAAoB,CAAC;AAGnC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC","file":"index.js","sourcesContent":["import { Logger, LoggerLevel } from '@visactor/vutils';\n/**\n * @description The core module of VChart, containing the necessary interfaces for using VChart.\n */\n\nimport { VChart } from './vchart';\nimport { Factory } from './factory';\nimport { Region } from '../region/region';\nimport { Layout } from '../layout/base-layout';\nimport { GroupMark } from '../mark/group';\nimport { ComponentMark } from '../mark/component';\nimport { ImageMark } from './../mark/image';\n\n// register groupMark and componentMark\nVChart.useMark([ComponentMark, GroupMark, ImageMark]);\n\n// install region module\nFactory.registerRegion('region', Region as any);\n\n// install layout module\nFactory.registerLayout('base', Layout as any);\n\nexport { VChart, Factory };\n\n// export the version\nexport const version = \"1.2.0-beta.
|
|
1
|
+
{"version":3,"sources":["../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAKvD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAGtD,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAa,CAAC,CAAC;AAGhD,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,MAAa,CAAC,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAG3B,MAAM,CAAC,MAAM,OAAO,GAAG,cAAc,CAAC;AAKtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,oBAAoB,CAAC;AAGnC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC","file":"index.js","sourcesContent":["import { Logger, LoggerLevel } from '@visactor/vutils';\n/**\n * @description The core module of VChart, containing the necessary interfaces for using VChart.\n */\n\nimport { VChart } from './vchart';\nimport { Factory } from './factory';\nimport { Region } from '../region/region';\nimport { Layout } from '../layout/base-layout';\nimport { GroupMark } from '../mark/group';\nimport { ComponentMark } from '../mark/component';\nimport { ImageMark } from './../mark/image';\n\n// register groupMark and componentMark\nVChart.useMark([ComponentMark, GroupMark, ImageMark]);\n\n// install region module\nFactory.registerRegion('region', Region as any);\n\n// install layout module\nFactory.registerLayout('base', Layout as any);\n\nexport { VChart, Factory };\n\n// export the version\nexport const version = \"1.2.0-beta.5\";\n\n// export necessary types\nexport type { IVChart } from './interface';\n// the event types\nexport * from '../event/interface';\nexport * from '../typings/spec/common';\nexport type { IStateSpec, StateValueType } from '../compile/mark';\nexport * from '../theme/interface';\n\n// set default logger level to Level.error\nLogger.getInstance(LoggerLevel.Error);\n"]}
|
|
@@ -8,6 +8,8 @@ import { convertDomainToTickData, getCartesianLabelBounds, hasOverlap, intersect
|
|
|
8
8
|
|
|
9
9
|
export const continuousTicks = (scale, op) => {
|
|
10
10
|
if (!isContinuous(scale.type)) return convertDomainToTickData(scale.domain(), op);
|
|
11
|
+
const range = scale.range();
|
|
12
|
+
if (Math.abs(range[range.length - 1] - range[0]) < 2) return convertDomainToTickData([ scale.domain()[0] ], op);
|
|
11
13
|
const {tickCount: tickCount, forceTickCount: forceTickCount, tickStep: tickStep} = op;
|
|
12
14
|
let scaleTicks;
|
|
13
15
|
if (scaleTicks = isValid(tickStep) ? scale.stepTicks(tickStep) : isValid(forceTickCount) ? scale.forceTicks(forceTickCount) : scale.ticks(null != tickCount ? tickCount : DEFAULT_CONTINUOUS_TICK_COUNT),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/transforms/tick-data/continuous.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,6BAA6B,EAAE,MAAM,UAAU,CAAC;AAIzD,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAWjG,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAsB,EAAE,EAAgB,EAAe,EAAE;IACvF,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;QAC7B,OAAO,uBAAuB,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;KACpD;
|
|
1
|
+
{"version":3,"sources":["../src/data/transforms/tick-data/continuous.ts"],"names":[],"mappings":"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","file":"continuous.js","sourcesContent":["import type { LinearScale, ContinuousScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous } from '@visactor/vscale';\nimport { isValid, peek } from '../../../util';\nimport { DEFAULT_CONTINUOUS_TICK_COUNT } from './config';\nimport type { ICartesianTickDataOpt, ITickData, ITickDataOpt } from './interface';\nimport type { ILabelItem } from './util';\n// eslint-disable-next-line no-duplicate-imports\nimport { convertDomainToTickData, getCartesianLabelBounds, hasOverlap, intersect } from './util';\n\n/**\n * 对于连续轴:\n * - 如果spec配了tickCount、forceTickCount、tickStep,则直接输出LinearScale的ticks()、forceTicks()、stepTicks()结果;\n * - 默认输出tickCount为10的ticks()结果。\n *\n * @param scale\n * @param op\n * @returns\n */\nexport const continuousTicks = (scale: ContinuousScale, op: ITickDataOpt): ITickData[] => {\n if (!isContinuous(scale.type)) {\n return convertDomainToTickData(scale.domain(), op);\n }\n // if range is so small\n const range = scale.range();\n const rangeSize = Math.abs(range[range.length - 1] - range[0]);\n if (rangeSize < 2) {\n return convertDomainToTickData([scale.domain()[0]], op);\n }\n\n const { tickCount, forceTickCount, tickStep } = op;\n\n let scaleTicks: number[];\n if (isValid(tickStep)) {\n scaleTicks = (scale as LinearScale).stepTicks(tickStep);\n } else if (isValid(forceTickCount)) {\n scaleTicks = (scale as LinearScale).forceTicks(forceTickCount);\n } else {\n scaleTicks = (scale as LinearScale).ticks(tickCount ?? DEFAULT_CONTINUOUS_TICK_COUNT);\n }\n\n if (op.sampling) {\n // 判断重叠\n if (op.coordinateType === 'cartesian' || (op.coordinateType === 'polar' && op.axisOrientType === 'radius')) {\n const { labelGap = 4, labelFlush } = op as ICartesianTickDataOpt;\n let items = getCartesianLabelBounds(scale, scaleTicks, op as ICartesianTickDataOpt).map(\n (bounds, i) =>\n ({\n AABBBounds: bounds,\n value: scaleTicks[i]\n } as ILabelItem<number>)\n );\n while (items.length >= 3 && hasOverlap(items, labelGap)) {\n items = methods.parity(items);\n }\n const ticks = items.map(item => item.value);\n\n if (ticks.length < 3 && labelFlush) {\n if (ticks.length > 1) {\n ticks.pop();\n }\n if (peek(ticks) !== peek(scaleTicks)) {\n ticks.push(peek(scaleTicks));\n }\n }\n\n scaleTicks = ticks;\n }\n }\n\n return convertDomainToTickData(scaleTicks, op);\n};\n\nconst methods = {\n parity: function <T>(items: ILabelItem<T>[]) {\n return items.filter((item, i) => i % 2 === 0);\n },\n greedy: function <T>(items: ILabelItem<T>[], sep: number) {\n let a: ILabelItem<T>;\n return items.filter((b, i) => {\n if (!i || !intersect(a.AABBBounds, b.AABBBounds, sep)) {\n a = b;\n return true;\n }\n return false;\n });\n }\n};\n"]}
|
|
@@ -3,10 +3,32 @@ import { isValid } from "../../../../util";
|
|
|
3
3
|
import { convertDomainToTickData, getCartesianLabelBounds, labelDistance, labelOverlap } from "../util";
|
|
4
4
|
|
|
5
5
|
export const linearDiscreteTicks = (scale, op) => {
|
|
6
|
-
|
|
6
|
+
var _a;
|
|
7
|
+
const domain = scale.domain();
|
|
8
|
+
if (!domain.length) return [];
|
|
9
|
+
const {tickCount: tickCount, forceTickCount: forceTickCount, tickStep: tickStep, labelGap: labelGap = 4, axisOrientType: axisOrientType} = op, isHorizontal = [ "bottom", "top" ].includes(axisOrientType), range = scale.range(), rangeSize = Math.abs(range[range.length - 1] - range[0]);
|
|
10
|
+
if (rangeSize < 2) return op.labelLastVisible ? convertDomainToTickData([ domain[domain.length - 1] ], op) : convertDomainToTickData([ domain[0] ], op);
|
|
7
11
|
let scaleTicks;
|
|
8
12
|
if (isValid(tickStep)) scaleTicks = scale.stepTicks(tickStep); else if (isValid(forceTickCount)) scaleTicks = scale.forceTicks(forceTickCount); else if (isValid(tickCount)) scaleTicks = scale.ticks(tickCount); else if (op.sampling) {
|
|
9
|
-
|
|
13
|
+
let labelBoundsList;
|
|
14
|
+
const fontSize = (null !== (_a = op.labelStyle.fontSize) && void 0 !== _a ? _a : 12) + 2;
|
|
15
|
+
if (domain.length <= rangeSize / fontSize) labelBoundsList = getCartesianLabelBounds(scale, domain, op); else {
|
|
16
|
+
const tempDomain = [ domain[0], domain[Math.floor(domain.length / 2)], domain[domain.length - 1] ], tempList = getCartesianLabelBounds(scale, tempDomain, op);
|
|
17
|
+
let maxBounds = null, maxBoundsIndex = 0;
|
|
18
|
+
tempList.forEach(((current, index) => {
|
|
19
|
+
if (!maxBounds) return maxBounds = current, void (maxBoundsIndex = index);
|
|
20
|
+
isHorizontal ? maxBounds.width() < current.width() && (maxBounds = current, maxBoundsIndex = index) : maxBounds.height() < current.height() && (maxBounds = current,
|
|
21
|
+
maxBoundsIndex = index);
|
|
22
|
+
}));
|
|
23
|
+
const maxBoundsDomainIndex = 0 === maxBoundsIndex ? 0 : 2 === maxBoundsIndex ? domain.length - 1 : Math.floor(domain.length / 2), maxBoundsPos = scale.scale(domain[maxBoundsDomainIndex]);
|
|
24
|
+
labelBoundsList = new Array(domain.length);
|
|
25
|
+
for (let i = 0; i < labelBoundsList.length; i++) {
|
|
26
|
+
labelBoundsList[i] = maxBounds.clone();
|
|
27
|
+
const currentPos = scale.scale(domain[i]);
|
|
28
|
+
isHorizontal ? labelBoundsList[i].translate(currentPos - maxBoundsPos, 0) : labelBoundsList[i].translate(0, currentPos - maxBoundsPos);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const domainLengthList = labelBoundsList.map((b => isHorizontal ? b.width() : b.height())), rangeStart = Math.min(...range), incrementUnit = (Math.max(...range) - rangeStart) / domain.length, result = getStep(domain, labelBoundsList, labelGap, op.labelLastVisible, isHorizontal, Math.floor(Math.min(...domainLengthList) / incrementUnit));
|
|
10
32
|
scaleTicks = scale.stepTicks(result.step), op.labelLastVisible && (scaleTicks = scaleTicks.slice(0, scaleTicks.length - result.delCount),
|
|
11
33
|
scaleTicks.push(domain[domain.length - 1]));
|
|
12
34
|
} else scaleTicks = scale.domain();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/transforms/tick-data/discrete/linear.ts"],"names":[],"mappings":"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","file":"linear.js","sourcesContent":["import type { BandScale } from '@visactor/vscale';\nimport { isValid } from '../../../../util';\nimport type { ICartesianTickDataOpt, ITickData } from '../interface';\nimport { convertDomainToTickData, getCartesianLabelBounds, labelDistance, labelOverlap } from '../util';\nimport type { AABBBounds } from '@visactor/vutils';\n\n/**\n * 对于离散轴:\n * - 如果spec配了tickCount、forceTickCount、tickStep,则直接输出BandScale的ticks()、forceTicks()、stepTicks()结果;\n * - 估算所有轴label的宽度(或高度,在竖轴的情况下)并存为数组domainLengthList;\n * - 通过循环来寻找最小的step,使:如果在这个step下采样,轴标签互不遮挡(此处用到domainLengthList和scale.range());\n * - 如果用户配置了spec.label.lastVisible,则处理右边界:强制采样最后一个tick数据,并删掉这个tick的label所覆盖的那些tick数据。\n *\n * @param scale\n * @param op\n * @returns\n */\nexport const linearDiscreteTicks = (scale: BandScale, op: ICartesianTickDataOpt): ITickData[] => {\n const { tickCount, forceTickCount, tickStep, labelGap = 4, axisOrientType } = op;\n const isHorizontal = ['bottom', 'top'].includes(axisOrientType);\n\n let scaleTicks;\n if (isValid(tickStep)) {\n scaleTicks = scale.stepTicks(tickStep);\n } else if (isValid(forceTickCount)) {\n scaleTicks = scale.forceTicks(forceTickCount);\n } else if (isValid(tickCount)) {\n scaleTicks = scale.ticks(tickCount);\n } else if (op.sampling) {\n const domain = scale.domain();\n const range = scale.range();\n\n const labelBoundsList = getCartesianLabelBounds(scale, domain, op);\n\n const domainLengthList = labelBoundsList.map(b => {\n return isHorizontal ? b.width() : b.height();\n });\n\n const rangeStart = Math.min(...range);\n const rangeEnd = Math.max(...range);\n const incrementUnit = (rangeEnd - rangeStart) / domain.length;\n const result = getStep(\n domain,\n labelBoundsList,\n labelGap,\n op.labelLastVisible,\n isHorizontal,\n Math.floor(Math.min(...domainLengthList) / incrementUnit) // 给step赋上合适的初值,有效改善外层循环次数\n );\n\n scaleTicks = (scale as BandScale).stepTicks(result.step);\n if (op.labelLastVisible) {\n scaleTicks = scaleTicks.slice(0, scaleTicks.length - result.delCount);\n scaleTicks.push(domain[domain.length - 1]);\n }\n } else {\n scaleTicks = scale.domain();\n }\n\n return convertDomainToTickData(scaleTicks, op);\n};\n\n/** 计算合适的step */\nconst getStep = (\n domain: any[],\n labelBoundsList: AABBBounds[],\n labelGap: number,\n labelLastVisible: boolean,\n isHorizontal: boolean,\n defaultStep: number\n) => {\n let step = defaultStep;\n let delCount = 0;\n let resultDelCount = 0;\n let resultStep = 0;\n let resultTickCount = -1;\n let minDiff = Number.MAX_VALUE;\n // 通过循环来寻找最小的step,使:如果在这个step下采样,轴标签互不遮挡\n do {\n let success = true;\n step++;\n let ptr = 0;\n do {\n if (ptr + step < domain.length && labelOverlap(labelBoundsList[ptr], labelBoundsList[ptr + step], labelGap)) {\n success = false;\n }\n ptr += step;\n } while (success && ptr < domain.length);\n\n if (success) {\n if (labelLastVisible) {\n const lastIndex = domain.length - 1;\n delCount = 0;\n do {\n ptr -= step; // 获取最后一个label位置\n if (ptr === lastIndex || labelOverlap(labelBoundsList[ptr], labelBoundsList[lastIndex], labelGap)) {\n delCount++;\n } else {\n break;\n }\n } while (ptr > 0);\n if (ptr === lastIndex) {\n // 采到的最后的一个 label 刚好是最后一项,直接退出\n resultStep = step;\n resultDelCount = delCount;\n break;\n } else {\n // 尝试获取最均匀的结果,防止倒数第二项和最后一项有大的空档\n const tickCount = Math.floor(domain.length / step) - delCount + 1;\n if (tickCount < resultTickCount) {\n break;\n } else {\n resultTickCount = tickCount;\n const distanceIndex = isHorizontal ? 0 : 1;\n const distance1 = labelDistance(labelBoundsList[ptr], labelBoundsList[lastIndex])[distanceIndex]; // 倒数第2项和最后一项的距离\n const distance2 =\n ptr - step >= 0\n ? labelDistance(labelBoundsList[ptr - step], labelBoundsList[ptr])[distanceIndex]\n : distance1; // 倒数第3项和倒数第2项的距离\n const diff = Math.abs(distance1 - distance2);\n if (diff < minDiff) {\n minDiff = diff;\n resultStep = step; // 记录最均匀的 step\n resultDelCount = delCount;\n }\n }\n }\n } else {\n resultStep = step;\n break;\n }\n }\n } while (step <= domain.length);\n\n return {\n step: resultStep,\n delCount: resultDelCount\n };\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/data/transforms/tick-data/discrete/linear.ts"],"names":[],"mappings":"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","file":"linear.js","sourcesContent":["import type { BandScale } from '@visactor/vscale';\nimport { isValid } from '../../../../util';\nimport type { ICartesianTickDataOpt, ITickData } from '../interface';\nimport { convertDomainToTickData, getCartesianLabelBounds, labelDistance, labelOverlap } from '../util';\nimport type { AABBBounds } from '@visactor/vutils';\n\n/**\n * 对于离散轴:\n * - 如果spec配了tickCount、forceTickCount、tickStep,则直接输出BandScale的ticks()、forceTicks()、stepTicks()结果;\n * - 估算所有轴label的宽度(或高度,在竖轴的情况下)并存为数组domainLengthList;\n * - 通过循环来寻找最小的step,使:如果在这个step下采样,轴标签互不遮挡(此处用到domainLengthList和scale.range());\n * - 如果用户配置了spec.label.lastVisible,则处理右边界:强制采样最后一个tick数据,并删掉这个tick的label所覆盖的那些tick数据。\n *\n * @param scale\n * @param op\n * @returns\n */\nexport const linearDiscreteTicks = (scale: BandScale, op: ICartesianTickDataOpt): ITickData[] => {\n const domain = scale.domain();\n if (!domain.length) {\n return [];\n }\n const { tickCount, forceTickCount, tickStep, labelGap = 4, axisOrientType } = op;\n const isHorizontal = ['bottom', 'top'].includes(axisOrientType);\n const range = scale.range();\n\n // if range is so small\n const rangeSize = Math.abs(range[range.length - 1] - range[0]);\n if (rangeSize < 2) {\n if (op.labelLastVisible) {\n return convertDomainToTickData([domain[domain.length - 1]], op);\n }\n return convertDomainToTickData([domain[0]], op);\n }\n\n let scaleTicks;\n if (isValid(tickStep)) {\n scaleTicks = scale.stepTicks(tickStep);\n } else if (isValid(forceTickCount)) {\n scaleTicks = scale.forceTicks(forceTickCount);\n } else if (isValid(tickCount)) {\n scaleTicks = scale.ticks(tickCount);\n } else if (op.sampling) {\n let labelBoundsList: AABBBounds[];\n const fontSize = (op.labelStyle.fontSize ?? 12) + 2;\n if (domain.length <= rangeSize / fontSize) {\n labelBoundsList = getCartesianLabelBounds(scale, domain, op);\n } else {\n // only check first middle last, use the max size to sampling\n const tempDomain = [domain[0], domain[Math.floor(domain.length / 2)], domain[domain.length - 1]];\n const tempList = getCartesianLabelBounds(scale, tempDomain, op);\n let maxBounds: AABBBounds = null;\n let maxBoundsIndex = 0;\n tempList.forEach((current, index) => {\n if (!maxBounds) {\n maxBounds = current;\n maxBoundsIndex = index;\n return;\n }\n if (isHorizontal) {\n if (maxBounds.width() < current.width()) {\n maxBounds = current;\n maxBoundsIndex = index;\n }\n } else if (maxBounds.height() < current.height()) {\n maxBounds = current;\n maxBoundsIndex = index;\n }\n });\n const maxBoundsDomainIndex =\n maxBoundsIndex === 0 ? 0 : maxBoundsIndex === 2 ? domain.length - 1 : Math.floor(domain.length / 2);\n const maxBoundsPos = scale.scale(domain[maxBoundsDomainIndex]);\n labelBoundsList = new Array(domain.length);\n // set bounds to each pos\n for (let i = 0; i < labelBoundsList.length; i++) {\n labelBoundsList[i] = maxBounds.clone();\n const currentPos = scale.scale(domain[i]);\n if (isHorizontal) {\n labelBoundsList[i].translate(currentPos - maxBoundsPos, 0);\n } else {\n labelBoundsList[i].translate(0, currentPos - maxBoundsPos);\n }\n }\n }\n\n const domainLengthList = labelBoundsList.map(b => {\n return isHorizontal ? b.width() : b.height();\n });\n\n const rangeStart = Math.min(...range);\n const rangeEnd = Math.max(...range);\n const incrementUnit = (rangeEnd - rangeStart) / domain.length;\n const result = getStep(\n domain,\n labelBoundsList,\n labelGap,\n op.labelLastVisible,\n isHorizontal,\n Math.floor(Math.min(...domainLengthList) / incrementUnit) // 给step赋上合适的初值,有效改善外层循环次数\n );\n\n scaleTicks = (scale as BandScale).stepTicks(result.step);\n if (op.labelLastVisible) {\n scaleTicks = scaleTicks.slice(0, scaleTicks.length - result.delCount);\n scaleTicks.push(domain[domain.length - 1]);\n }\n } else {\n scaleTicks = scale.domain();\n }\n\n return convertDomainToTickData(scaleTicks, op);\n};\n\n/** 计算合适的step */\nconst getStep = (\n domain: any[],\n labelBoundsList: AABBBounds[],\n labelGap: number,\n labelLastVisible: boolean,\n isHorizontal: boolean,\n defaultStep: number\n) => {\n let step = defaultStep;\n let delCount = 0;\n let resultDelCount = 0;\n let resultStep = 0;\n let resultTickCount = -1;\n let minDiff = Number.MAX_VALUE;\n // 通过循环来寻找最小的step,使:如果在这个step下采样,轴标签互不遮挡\n do {\n let success = true;\n step++;\n let ptr = 0;\n do {\n if (ptr + step < domain.length && labelOverlap(labelBoundsList[ptr], labelBoundsList[ptr + step], labelGap)) {\n success = false;\n }\n ptr += step;\n } while (success && ptr < domain.length);\n\n if (success) {\n if (labelLastVisible) {\n const lastIndex = domain.length - 1;\n delCount = 0;\n do {\n ptr -= step; // 获取最后一个label位置\n if (ptr === lastIndex || labelOverlap(labelBoundsList[ptr], labelBoundsList[lastIndex], labelGap)) {\n delCount++;\n } else {\n break;\n }\n } while (ptr > 0);\n if (ptr === lastIndex) {\n // 采到的最后的一个 label 刚好是最后一项,直接退出\n resultStep = step;\n resultDelCount = delCount;\n break;\n } else {\n // 尝试获取最均匀的结果,防止倒数第二项和最后一项有大的空档\n const tickCount = Math.floor(domain.length / step) - delCount + 1;\n if (tickCount < resultTickCount) {\n break;\n } else {\n resultTickCount = tickCount;\n const distanceIndex = isHorizontal ? 0 : 1;\n const distance1 = labelDistance(labelBoundsList[ptr], labelBoundsList[lastIndex])[distanceIndex]; // 倒数第2项和最后一项的距离\n const distance2 =\n ptr - step >= 0\n ? labelDistance(labelBoundsList[ptr - step], labelBoundsList[ptr])[distanceIndex]\n : distance1; // 倒数第3项和倒数第2项的距离\n const diff = Math.abs(distance1 - distance2);\n if (diff < minDiff) {\n minDiff = diff;\n resultStep = step; // 记录最均匀的 step\n resultDelCount = delCount;\n }\n }\n }\n } else {\n resultStep = step;\n break;\n }\n }\n } while (step <= domain.length);\n\n return {\n step: resultStep,\n delCount: resultDelCount\n };\n};\n"]}
|
package/esm/series/bar/bar.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CartesianSeries } from '../cartesian/cartesian';
|
|
2
2
|
import { MarkTypeEnum } from '../../mark/interface';
|
|
3
|
-
import type { Maybe } from '../../typings';
|
|
3
|
+
import type { Maybe, Datum, DirectionType } from '../../typings';
|
|
4
4
|
import type { IBarSeriesSpec, IBarSeriesTheme } from './interface';
|
|
5
5
|
import type { IAxisHelper } from '../../component/axis/cartesian/interface';
|
|
6
6
|
import type { IRectMark } from '../../mark/rect';
|
|
@@ -27,7 +27,8 @@ export declare class BarSeries<T extends IBarSeriesSpec = IBarSeriesSpec> extend
|
|
|
27
27
|
initBandRectMarkStyle(): void;
|
|
28
28
|
initLinearRectMarkStyle(): void;
|
|
29
29
|
initAnimation(): void;
|
|
30
|
-
protected
|
|
30
|
+
protected _getBarWidth(axisHelper: IAxisHelper): number;
|
|
31
|
+
protected _getPosition(direction: DirectionType, datum: Datum): number;
|
|
31
32
|
updateSpec(spec: IBarSeriesSpec): {
|
|
32
33
|
change: boolean;
|
|
33
34
|
reMake: boolean;
|
package/esm/series/bar/bar.js
CHANGED
|
@@ -28,6 +28,8 @@ import { RectMark } from "../../mark/rect";
|
|
|
28
28
|
|
|
29
29
|
import { TextMark } from "../../mark/text";
|
|
30
30
|
|
|
31
|
+
import { array, isValid, last } from "@visactor/vutils";
|
|
32
|
+
|
|
31
33
|
VChart.useMark([ RectMark, TextMark ]);
|
|
32
34
|
|
|
33
35
|
export const DefaultBandWidth = 6;
|
|
@@ -82,21 +84,13 @@ export class BarSeries extends CartesianSeries {
|
|
|
82
84
|
this.direction === Direction.horizontal ? this.setMarkStyle(this._rectMark, {
|
|
83
85
|
x: datum => valueInScaleRange(this.dataToPositionX(datum), xScale),
|
|
84
86
|
x1: datum => valueInScaleRange(this.dataToPositionX1(datum), xScale),
|
|
85
|
-
y: datum =>
|
|
86
|
-
|
|
87
|
-
const bandWidth = null !== (_c = null === (_b = (_a = this.getYAxisHelper()).getBandwidth) || void 0 === _b ? void 0 : _b.call(_a, this._groups ? this._groups.fields.length - 1 : 0)) && void 0 !== _c ? _c : 6, continuous = isContinuous(yScale.type || "band");
|
|
88
|
-
return this.dataToPositionY(datum) + .5 * (bandWidth - this._rectMark.getAttribute("height", datum)) + (continuous ? -bandWidth / 2 : 0);
|
|
89
|
-
},
|
|
90
|
-
height: () => this.getBarWidth(this._yAxisHelper)
|
|
87
|
+
y: datum => this._getPosition(this.direction, datum),
|
|
88
|
+
height: () => this._getBarWidth(this._yAxisHelper)
|
|
91
89
|
}, "normal", AttributeLevel.Series) : this.setMarkStyle(this._rectMark, {
|
|
92
|
-
x: datum =>
|
|
93
|
-
var _a, _b, _c, _d, _e;
|
|
94
|
-
const bandWidth = null !== (_c = null === (_b = (_a = this.getXAxisHelper()).getBandwidth) || void 0 === _b ? void 0 : _b.call(_a, this._groups ? this._groups.fields.length - 1 : 0)) && void 0 !== _c ? _c : 6, width = this._rectMark.getAttribute("width", datum), continuous = isContinuous((null === (_e = (_d = this.getXAxisHelper()).getScale) || void 0 === _e ? void 0 : _e.call(_d, 0).type) || "band");
|
|
95
|
-
return this.dataToPositionX(datum) + (bandWidth - width) / 2 + (continuous ? -bandWidth / 2 : 0);
|
|
96
|
-
},
|
|
90
|
+
x: datum => this._getPosition(this.direction, datum),
|
|
97
91
|
y: datum => valueInScaleRange(this.dataToPositionY(datum), yScale),
|
|
98
92
|
y1: datum => valueInScaleRange(this.dataToPositionY1(datum), yScale),
|
|
99
|
-
width: () => this.
|
|
93
|
+
width: () => this._getBarWidth(this._xAxisHelper)
|
|
100
94
|
}, "normal", AttributeLevel.Series);
|
|
101
95
|
}
|
|
102
96
|
initLinearRectMarkStyle() {
|
|
@@ -128,7 +122,7 @@ export class BarSeries extends CartesianSeries {
|
|
|
128
122
|
}
|
|
129
123
|
}));
|
|
130
124
|
}
|
|
131
|
-
|
|
125
|
+
_getBarWidth(axisHelper) {
|
|
132
126
|
var _a, _b;
|
|
133
127
|
const hasBarWidth = void 0 !== this._spec.barWidth, bandWidth = null !== (_b = null === (_a = axisHelper.getBandwidth) || void 0 === _a ? void 0 : _a.call(axisHelper, this._groups ? this._groups.fields.length - 1 : 0)) && void 0 !== _b ? _b : 6;
|
|
134
128
|
if (hasBarWidth) return getActualNumValue(this._spec.barWidth, bandWidth);
|
|
@@ -138,6 +132,26 @@ export class BarSeries extends CartesianSeries {
|
|
|
138
132
|
hasBarMaxWidth && (width = Math.min(width, getActualNumValue(this._spec.barMaxWidth, bandWidth))),
|
|
139
133
|
width;
|
|
140
134
|
}
|
|
135
|
+
_getPosition(direction, datum) {
|
|
136
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
137
|
+
let axisHelper, sizeAttribute, dataToPosition;
|
|
138
|
+
direction === Direction.horizontal ? (axisHelper = this.getYAxisHelper(), sizeAttribute = "height",
|
|
139
|
+
dataToPosition = this.dataToPositionY.bind(this)) : (axisHelper = this.getXAxisHelper(),
|
|
140
|
+
sizeAttribute = "width", dataToPosition = this.dataToPositionX.bind(this));
|
|
141
|
+
const scale = axisHelper.getScale(0), size = this._rectMark.getAttribute(sizeAttribute, datum), bandWidth = null !== (_b = null === (_a = axisHelper.getBandwidth) || void 0 === _a ? void 0 : _a.call(axisHelper, this._groups ? this._groups.fields.length - 1 : 0)) && void 0 !== _b ? _b : 6;
|
|
142
|
+
if ((null === (_d = null === (_c = this._groups) || void 0 === _c ? void 0 : _c.fields) || void 0 === _d ? void 0 : _d.length) > 1 && isValid(this._spec.barGapInGroup)) {
|
|
143
|
+
const groupFields = this._groups.fields, barInGroup = array(this._spec.barGapInGroup);
|
|
144
|
+
let totalWidth = 0, offSet = 0;
|
|
145
|
+
for (let index = groupFields.length - 1; index >= 1; index--) {
|
|
146
|
+
const groupField = groupFields[index], groupValues = null !== (_h = null === (_g = null === (_f = null === (_e = this.getViewDataStatistics()) || void 0 === _e ? void 0 : _e.latestData) || void 0 === _f ? void 0 : _f[groupField]) || void 0 === _g ? void 0 : _g.values) && void 0 !== _h ? _h : [], groupCount = groupValues.length, gap = getActualNumValue(null !== (_j = barInGroup[index - 1]) && void 0 !== _j ? _j : last(barInGroup), bandWidth), i = groupValues.indexOf(datum[groupField]);
|
|
147
|
+
index === groupFields.length - 1 ? (totalWidth += groupCount * size + (groupCount - 1) * gap,
|
|
148
|
+
offSet += i * (size + gap)) : (offSet += i * (totalWidth + gap), totalWidth += totalWidth + (groupCount - 1) * gap);
|
|
149
|
+
}
|
|
150
|
+
return scale.scale(datum[groupFields[0]]) + axisHelper.getBandwidth(0) / 2 - totalWidth / 2 + offSet;
|
|
151
|
+
}
|
|
152
|
+
const continuous = isContinuous(scale.type || "band");
|
|
153
|
+
return dataToPosition(datum) + .5 * (bandWidth - size) + (continuous ? -bandWidth / 2 : 0);
|
|
154
|
+
}
|
|
141
155
|
updateSpec(spec) {
|
|
142
156
|
const {direction: direction} = this._spec, result = super.updateSpec(spec);
|
|
143
157
|
return spec.direction !== direction && (result.change = !0, result.reRender = !0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/series/bar/bar.ts"],"names":[],"mappings":"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","file":"bar.js","sourcesContent":["/* eslint-disable no-duplicate-imports */\nimport { isContinuous } from '@visactor/vscale';\nimport { Direction } from '../../typings/space';\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport { MarkTypeEnum } from '../../mark/interface';\nimport { AttributeLevel } from '../../constant';\nimport { getActualNumValue } from '../util/utils';\nimport type { Maybe, Datum } from '../../typings';\nimport { merge, valueInScaleRange } from '../../util';\nimport type { BarAppearPreset, IBarAnimationParams } from './animation';\nimport { animationConfig, shouldDoMorph, userAnimationConfig } from '../../animation/utils';\nimport type { IBarSeriesSpec, IBarSeriesTheme } from './interface';\nimport type { IAxisHelper } from '../../component/axis/cartesian/interface';\nimport type { IRectMark } from '../../mark/rect';\nimport type { IModelInitOption } from '../../model/interface';\nimport type { ITextMark } from '../../mark/text';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum } from '../interface';\nimport { SeriesTypeEnum } from '../interface';\nimport { DEFAULT_MARK_ANIMATION } from '../../animation/config';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { BaseSeries } from '../base/base-series';\nimport { VChart } from '../../core/vchart';\nimport { RectMark } from '../../mark/rect';\nimport { TextMark } from '../../mark/text';\n\nVChart.useMark([RectMark, TextMark]);\n\nexport const DefaultBandWidth = 6; // 默认的bandWidth,避免连续轴没有bandWidth\n\nexport class BarSeries<T extends IBarSeriesSpec = IBarSeriesSpec> extends CartesianSeries<T> {\n static readonly type: string = SeriesTypeEnum.bar;\n type = SeriesTypeEnum.bar;\n protected _barMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.bar;\n protected _barMarkType: MarkTypeEnum = MarkTypeEnum.rect;\n\n static readonly mark: SeriesMarkMap = {\n ...BaseSeries.mark,\n [SeriesMarkNameEnum.bar]: { name: SeriesMarkNameEnum.bar, type: MarkTypeEnum.rect }\n };\n\n protected declare _theme: Maybe<IBarSeriesTheme>;\n\n protected _stack: boolean = true;\n protected _bandPosition = 0;\n protected _rectMark!: IRectMark;\n\n initMark(): void {\n const progressive = {\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold\n };\n\n this._rectMark = this._createMark(\n {\n ...BarSeries.mark.bar,\n name: this._barMarkName,\n type: this._barMarkType\n },\n {\n morph: shouldDoMorph(this._spec.animation, this._spec.morph, userAnimationConfig(this.type, this._spec)),\n defaultMorphElementKey: this.getDimensionField()[0],\n groupKey: this._seriesField,\n isSeriesMark: true,\n label: merge({ animation: this._spec.animation }, this._spec.label),\n progressive\n }\n ) as IRectMark;\n }\n\n initMarkStyle(): void {\n const rectMark = this._rectMark;\n if (rectMark) {\n this.setMarkStyle(\n rectMark,\n {\n fill: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n\n this._trigger.registerMark(rectMark);\n this._tooltipHelper?.activeTriggerSet.mark.add(rectMark);\n }\n }\n\n initLabelMarkStyle(textMark: ITextMark) {\n if (!textMark) {\n return;\n }\n this.setMarkStyle(textMark, {\n fill: this.getColorAttribute(),\n text: (datum: Datum) => {\n return datum[this.getStackValueField()];\n },\n z: this.dataToPositionZ.bind(this)\n });\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n if (this.direction === 'vertical') {\n this._xAxisHelper?.getScale(0).type === 'band' ? this.initBandRectMarkStyle() : this.initLinearRectMarkStyle();\n } else {\n this._yAxisHelper?.getScale(0).type === 'band' ? this.initBandRectMarkStyle() : this.initLinearRectMarkStyle();\n }\n }\n\n initBandRectMarkStyle() {\n const xScale = this._xAxisHelper?.getScale?.(0);\n const yScale = this._yAxisHelper?.getScale?.(0);\n // TODO: 这里要考虑更多 条件因素\n // TODO: 这里要补充堆积\n // guess the direction which the user want\n if (this.direction === Direction.horizontal) {\n this.setMarkStyle(\n this._rectMark,\n {\n x: (datum: Datum) => valueInScaleRange(this.dataToPositionX(datum), xScale),\n x1: (datum: Datum) => valueInScaleRange(this.dataToPositionX1(datum), xScale),\n y: (datum: Datum) => {\n const bandWidth =\n this.getYAxisHelper().getBandwidth?.(this._groups ? this._groups.fields.length - 1 : 0) ??\n DefaultBandWidth;\n const continuous = isContinuous(yScale.type || 'band');\n const pos = this.dataToPositionY(datum);\n const width = this._rectMark.getAttribute('height', datum) as number;\n return pos + (bandWidth - width) * 0.5 + (continuous ? -bandWidth / 2 : 0);\n },\n height: () => this.getBarWidth(this._yAxisHelper)\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n this._rectMark,\n {\n x: (datum: Datum) => {\n const bandWidth =\n this.getXAxisHelper().getBandwidth?.(this._groups ? this._groups.fields.length - 1 : 0) ??\n DefaultBandWidth;\n const width = this._rectMark.getAttribute('width', datum) as number;\n const continuous = isContinuous(this.getXAxisHelper().getScale?.(0).type || 'band');\n const pos = this.dataToPositionX(datum);\n return pos + (bandWidth - width) / 2 + (continuous ? -bandWidth / 2 : 0);\n },\n y: (datum: Datum) => valueInScaleRange(this.dataToPositionY(datum), yScale),\n y1: (datum: Datum) => valueInScaleRange(this.dataToPositionY1(datum), yScale),\n width: () => {\n return this.getBarWidth(this._xAxisHelper);\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initLinearRectMarkStyle() {\n const xScale = this._xAxisHelper?.getScale?.(0);\n const yScale = this._yAxisHelper?.getScale?.(0);\n this.setMarkStyle(\n this._rectMark,\n {\n x: (datum: Datum) => valueInScaleRange(this.dataToPositionX(datum), xScale),\n x1: (datum: Datum) => valueInScaleRange(this.dataToPositionX1(datum), xScale),\n y: (datum: Datum) => valueInScaleRange(this.dataToPositionY(datum), yScale),\n y1: (datum: Datum) => valueInScaleRange(this.dataToPositionY1(datum), yScale)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n initAnimation() {\n // 这个数据在这个时候拿不到,因为组件还没创建结束,统计和筛选也还没添加。\n // 而且这个值理论上是动态的,建议 监听 viewDataStatisticsUpdate 消息动态更新\n const animationParams: IBarAnimationParams = {\n yField: this._fieldY[0],\n xField: 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<BarAppearPreset>)?.preset;\n // 分组数据的dataIndex应该与x轴顺序一致,而非data[DEFAULT_DATA_INDEX]顺序\n const dataIndex = (datum: any) => {\n const xValue = datum?.[this._fieldX[0]];\n const xIndex = this.getViewDataStatistics()?.latestData?.[this._fieldX[0]]?.values.indexOf(xValue);\n // 不应该出现xIndex === -1 || undefined的情况\n return xIndex || 0;\n };\n\n this._rectMark.setAnimationConfig(\n animationConfig(\n DEFAULT_MARK_ANIMATION.bar(animationParams, appearPreset),\n userAnimationConfig(this._barMarkName, this._spec),\n { dataIndex }\n )\n );\n }\n\n protected getBarWidth(axisHelper: IAxisHelper) {\n const hasBarWidth = this._spec.barWidth !== undefined;\n const bandWidth = axisHelper.getBandwidth?.(this._groups ? this._groups.fields.length - 1 : 0) ?? DefaultBandWidth;\n if (hasBarWidth) {\n return getActualNumValue(this._spec.barWidth, bandWidth);\n }\n const hasBarMinWidth = this._spec.barMinWidth !== undefined;\n const hasBarMaxWidth = this._spec.barMaxWidth !== undefined;\n let width = bandWidth;\n if (hasBarMinWidth) {\n width = Math.max(width, getActualNumValue(this._spec.barMinWidth, bandWidth));\n }\n if (hasBarMaxWidth) {\n width = Math.min(width, getActualNumValue(this._spec.barMaxWidth, bandWidth));\n }\n return width;\n }\n\n /**\n * spec 更新\n * @param spec\n * @returns\n */\n updateSpec(spec: IBarSeriesSpec) {\n // super updateSpec 会执行 setAttrFromSpec 所以先缓存比对值\n const { direction } = this._spec;\n const result = super.updateSpec(spec);\n if (spec.direction !== direction) {\n result.change = true;\n result.reRender = true;\n result.reMake = true;\n }\n return result;\n }\n\n getDefaultShapeType(): string {\n return 'square';\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/series/bar/bar.ts"],"names":[],"mappings":"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","file":"bar.js","sourcesContent":["/* eslint-disable no-duplicate-imports */\nimport { isContinuous } from '@visactor/vscale';\nimport { Direction } from '../../typings/space';\nimport { CartesianSeries } from '../cartesian/cartesian';\nimport { MarkTypeEnum } from '../../mark/interface';\nimport { AttributeLevel } from '../../constant';\nimport { getActualNumValue } from '../util/utils';\nimport type { Maybe, Datum, DirectionType } from '../../typings';\nimport { merge, valueInScaleRange } from '../../util';\nimport type { BarAppearPreset, IBarAnimationParams } from './animation';\nimport { animationConfig, shouldDoMorph, userAnimationConfig } from '../../animation/utils';\nimport type { IBarSeriesSpec, IBarSeriesTheme } from './interface';\nimport type { IAxisHelper } from '../../component/axis/cartesian/interface';\nimport type { IRectMark } from '../../mark/rect';\nimport type { IModelInitOption } from '../../model/interface';\nimport type { ITextMark } from '../../mark/text';\nimport type { SeriesMarkMap } from '../interface';\nimport { SeriesMarkNameEnum } from '../interface';\nimport { SeriesTypeEnum } from '../interface';\nimport { DEFAULT_MARK_ANIMATION } from '../../animation/config';\nimport type { IStateAnimateSpec } from '../../animation/spec';\nimport { BaseSeries } from '../base/base-series';\nimport { VChart } from '../../core/vchart';\nimport { RectMark } from '../../mark/rect';\nimport { TextMark } from '../../mark/text';\nimport { array, isValid, last } from '@visactor/vutils';\n\nVChart.useMark([RectMark, TextMark]);\n\nexport const DefaultBandWidth = 6; // 默认的bandWidth,避免连续轴没有bandWidth\n\nexport class BarSeries<T extends IBarSeriesSpec = IBarSeriesSpec> extends CartesianSeries<T> {\n static readonly type: string = SeriesTypeEnum.bar;\n type = SeriesTypeEnum.bar;\n protected _barMarkName: SeriesMarkNameEnum = SeriesMarkNameEnum.bar;\n protected _barMarkType: MarkTypeEnum = MarkTypeEnum.rect;\n\n static readonly mark: SeriesMarkMap = {\n ...BaseSeries.mark,\n [SeriesMarkNameEnum.bar]: { name: SeriesMarkNameEnum.bar, type: MarkTypeEnum.rect }\n };\n\n protected declare _theme: Maybe<IBarSeriesTheme>;\n\n protected _stack: boolean = true;\n protected _bandPosition = 0;\n protected _rectMark!: IRectMark;\n\n initMark(): void {\n const progressive = {\n progressiveStep: this._spec.progressiveStep,\n progressiveThreshold: this._spec.progressiveThreshold,\n large: this._spec.large,\n largeThreshold: this._spec.largeThreshold\n };\n\n this._rectMark = this._createMark(\n {\n ...BarSeries.mark.bar,\n name: this._barMarkName,\n type: this._barMarkType\n },\n {\n morph: shouldDoMorph(this._spec.animation, this._spec.morph, userAnimationConfig(this.type, this._spec)),\n defaultMorphElementKey: this.getDimensionField()[0],\n groupKey: this._seriesField,\n isSeriesMark: true,\n label: merge({ animation: this._spec.animation }, this._spec.label),\n progressive\n }\n ) as IRectMark;\n }\n\n initMarkStyle(): void {\n const rectMark = this._rectMark;\n if (rectMark) {\n this.setMarkStyle(\n rectMark,\n {\n fill: this.getColorAttribute()\n },\n 'normal',\n AttributeLevel.Series\n );\n\n this._trigger.registerMark(rectMark);\n this._tooltipHelper?.activeTriggerSet.mark.add(rectMark);\n }\n }\n\n initLabelMarkStyle(textMark: ITextMark) {\n if (!textMark) {\n return;\n }\n this.setMarkStyle(textMark, {\n fill: this.getColorAttribute(),\n text: (datum: Datum) => {\n return datum[this.getStackValueField()];\n },\n z: this.dataToPositionZ.bind(this)\n });\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n if (this.direction === 'vertical') {\n this._xAxisHelper?.getScale(0).type === 'band' ? this.initBandRectMarkStyle() : this.initLinearRectMarkStyle();\n } else {\n this._yAxisHelper?.getScale(0).type === 'band' ? this.initBandRectMarkStyle() : this.initLinearRectMarkStyle();\n }\n }\n\n initBandRectMarkStyle() {\n const xScale = this._xAxisHelper?.getScale?.(0);\n const yScale = this._yAxisHelper?.getScale?.(0);\n // TODO: 这里要考虑更多 条件因素\n // TODO: 这里要补充堆积\n // guess the direction which the user want\n if (this.direction === Direction.horizontal) {\n this.setMarkStyle(\n this._rectMark,\n {\n x: (datum: Datum) => valueInScaleRange(this.dataToPositionX(datum), xScale),\n x1: (datum: Datum) => valueInScaleRange(this.dataToPositionX1(datum), xScale),\n y: (datum: Datum) => this._getPosition(this.direction, datum),\n height: () => this._getBarWidth(this._yAxisHelper)\n },\n 'normal',\n AttributeLevel.Series\n );\n } else {\n this.setMarkStyle(\n this._rectMark,\n {\n x: (datum: Datum) => this._getPosition(this.direction, datum),\n y: (datum: Datum) => valueInScaleRange(this.dataToPositionY(datum), yScale),\n y1: (datum: Datum) => valueInScaleRange(this.dataToPositionY1(datum), yScale),\n width: () => {\n return this._getBarWidth(this._xAxisHelper);\n }\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n }\n\n initLinearRectMarkStyle() {\n const xScale = this._xAxisHelper?.getScale?.(0);\n const yScale = this._yAxisHelper?.getScale?.(0);\n this.setMarkStyle(\n this._rectMark,\n {\n x: (datum: Datum) => valueInScaleRange(this.dataToPositionX(datum), xScale),\n x1: (datum: Datum) => valueInScaleRange(this.dataToPositionX1(datum), xScale),\n y: (datum: Datum) => valueInScaleRange(this.dataToPositionY(datum), yScale),\n y1: (datum: Datum) => valueInScaleRange(this.dataToPositionY1(datum), yScale)\n },\n 'normal',\n AttributeLevel.Series\n );\n }\n\n initAnimation() {\n // 这个数据在这个时候拿不到,因为组件还没创建结束,统计和筛选也还没添加。\n // 而且这个值理论上是动态的,建议 监听 viewDataStatisticsUpdate 消息动态更新\n const animationParams: IBarAnimationParams = {\n yField: this._fieldY[0],\n xField: 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<BarAppearPreset>)?.preset;\n // 分组数据的dataIndex应该与x轴顺序一致,而非data[DEFAULT_DATA_INDEX]顺序\n const dataIndex = (datum: any) => {\n const xValue = datum?.[this._fieldX[0]];\n const xIndex = this.getViewDataStatistics()?.latestData?.[this._fieldX[0]]?.values.indexOf(xValue);\n // 不应该出现xIndex === -1 || undefined的情况\n return xIndex || 0;\n };\n\n this._rectMark.setAnimationConfig(\n animationConfig(\n DEFAULT_MARK_ANIMATION.bar(animationParams, appearPreset),\n userAnimationConfig(this._barMarkName, this._spec),\n { dataIndex }\n )\n );\n }\n\n protected _getBarWidth(axisHelper: IAxisHelper) {\n const hasBarWidth = this._spec.barWidth !== undefined;\n const bandWidth = axisHelper.getBandwidth?.(this._groups ? this._groups.fields.length - 1 : 0) ?? DefaultBandWidth;\n\n if (hasBarWidth) {\n return getActualNumValue(this._spec.barWidth, bandWidth);\n }\n const hasBarMinWidth = this._spec.barMinWidth !== undefined;\n const hasBarMaxWidth = this._spec.barMaxWidth !== undefined;\n let width = bandWidth;\n if (hasBarMinWidth) {\n width = Math.max(width, getActualNumValue(this._spec.barMinWidth, bandWidth));\n }\n if (hasBarMaxWidth) {\n width = Math.min(width, getActualNumValue(this._spec.barMaxWidth, bandWidth));\n }\n return width;\n }\n\n protected _getPosition(direction: DirectionType, datum: Datum) {\n let axisHelper;\n let sizeAttribute;\n let dataToPosition;\n if (direction === Direction.horizontal) {\n axisHelper = this.getYAxisHelper();\n sizeAttribute = 'height';\n dataToPosition = this.dataToPositionY.bind(this);\n } else {\n axisHelper = this.getXAxisHelper();\n sizeAttribute = 'width';\n dataToPosition = this.dataToPositionX.bind(this);\n }\n const scale = axisHelper.getScale(0);\n const size = this._rectMark.getAttribute(sizeAttribute, datum) as number;\n const bandWidth = axisHelper.getBandwidth?.(this._groups ? this._groups.fields.length - 1 : 0) ?? DefaultBandWidth;\n if (this._groups?.fields?.length > 1 && isValid(this._spec.barGapInGroup)) {\n // 自里向外计算,沿着第一层分组的中心点进行位置调整\n const groupFields = this._groups.fields;\n const barInGroup = array(this._spec.barGapInGroup);\n let totalWidth: number = 0;\n let offSet: number = 0;\n\n for (let index = groupFields.length - 1; index >= 1; index--) {\n const groupField = groupFields[index];\n const groupValues = this.getViewDataStatistics()?.latestData?.[groupField]?.values ?? [];\n const groupCount = groupValues.length;\n const gap = getActualNumValue(barInGroup[index - 1] ?? last(barInGroup), bandWidth);\n const i = groupValues.indexOf(datum[groupField]);\n if (index === groupFields.length - 1) {\n totalWidth += groupCount * size + (groupCount - 1) * gap;\n offSet += i * (size + gap);\n } else {\n offSet += i * (totalWidth + gap);\n totalWidth += totalWidth + (groupCount - 1) * gap;\n }\n }\n\n const center = scale.scale(datum[groupFields[0]]) + axisHelper.getBandwidth(0) / 2;\n return center - totalWidth / 2 + offSet;\n }\n\n const continuous = isContinuous(scale.type || 'band');\n const pos = dataToPosition(datum);\n return pos + (bandWidth - size) * 0.5 + (continuous ? -bandWidth / 2 : 0);\n }\n\n /**\n * spec 更新\n * @param spec\n * @returns\n */\n updateSpec(spec: IBarSeriesSpec) {\n // super updateSpec 会执行 setAttrFromSpec 所以先缓存比对值\n const { direction } = this._spec;\n const result = super.updateSpec(spec);\n if (spec.direction !== direction) {\n result.change = true;\n result.reRender = true;\n result.reMake = true;\n }\n return result;\n }\n\n getDefaultShapeType(): string {\n return 'square';\n }\n}\n"]}
|
|
@@ -6,6 +6,7 @@ import type { BarAppearPreset } from './animation';
|
|
|
6
6
|
import type { ILabelSpec } from '../../component/label';
|
|
7
7
|
import type { IMarkProgressiveConfig } from '../../mark/interface';
|
|
8
8
|
import type { SeriesMarkNameEnum } from '../interface';
|
|
9
|
+
import type { MaybeArray } from '../../typings';
|
|
9
10
|
type BarMarks = 'bar';
|
|
10
11
|
export interface IBarSeriesSpec extends ICartesianSeriesSpec, IAnimationSpec<BarMarks, BarAppearPreset>, IMarkProgressiveConfig {
|
|
11
12
|
type: 'bar';
|
|
@@ -13,9 +14,10 @@ export interface IBarSeriesSpec extends ICartesianSeriesSpec, IAnimationSpec<Bar
|
|
|
13
14
|
[SeriesMarkNameEnum.label]?: ILabelSpec & {
|
|
14
15
|
position?: 'outside' | 'top' | 'bottom' | 'left' | 'right' | 'inside' | 'inside-top' | 'inside-bottom' | 'inside-right' | 'inside-left';
|
|
15
16
|
};
|
|
16
|
-
barWidth?: number;
|
|
17
|
-
barMinWidth?: number;
|
|
18
|
-
barMaxWidth?: number;
|
|
17
|
+
barWidth?: number | string;
|
|
18
|
+
barMinWidth?: number | string;
|
|
19
|
+
barMaxWidth?: number | string;
|
|
20
|
+
barGapInGroup?: MaybeArray<number | string>;
|
|
19
21
|
}
|
|
20
22
|
export interface IBarSeriesTheme extends ICartesianSeriesTheme {
|
|
21
23
|
[SeriesMarkNameEnum.bar]?: Partial<IMarkTheme<IRectMarkSpec>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/series/bar/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { ICartesianSeriesSpec, ICartesianSeriesTheme } from '../cartesian/interface';\nimport type { IMarkSpec, IMarkTheme } from '../../typings/spec/common';\nimport type { IRect3dMarkSpec, IRectMarkSpec } from '../../typings/visual';\nimport type { IAnimationSpec } from '../../animation/spec';\nimport type { BarAppearPreset } from './animation';\nimport type { ILabelSpec } from '../../component/label';\nimport type { IMarkProgressiveConfig } from '../../mark/interface';\nimport type { SeriesMarkNameEnum } from '../interface';\n\ntype BarMarks = 'bar';\n\nexport interface IBarSeriesSpec\n extends ICartesianSeriesSpec,\n IAnimationSpec<BarMarks, BarAppearPreset>,\n IMarkProgressiveConfig {\n /**\n * 系列类型\n */\n type: 'bar';\n /**\n * 图元配置\n */\n [SeriesMarkNameEnum.bar]?: IMarkSpec<IRectMarkSpec>;\n /** 标签配置*/\n [SeriesMarkNameEnum.label]?: ILabelSpec & {\n /** 标签位置 */\n position?:\n | 'outside'\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'inside'\n | 'inside-top'\n | 'inside-bottom'\n | 'inside-right'\n | 'inside-left';\n };\n /**\n *
|
|
1
|
+
{"version":3,"sources":["../src/series/bar/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { ICartesianSeriesSpec, ICartesianSeriesTheme } from '../cartesian/interface';\nimport type { IMarkSpec, IMarkTheme } from '../../typings/spec/common';\nimport type { IRect3dMarkSpec, IRectMarkSpec } from '../../typings/visual';\nimport type { IAnimationSpec } from '../../animation/spec';\nimport type { BarAppearPreset } from './animation';\nimport type { ILabelSpec } from '../../component/label';\nimport type { IMarkProgressiveConfig } from '../../mark/interface';\nimport type { SeriesMarkNameEnum } from '../interface';\nimport type { MaybeArray } from '../../typings';\n\ntype BarMarks = 'bar';\n\nexport interface IBarSeriesSpec\n extends ICartesianSeriesSpec,\n IAnimationSpec<BarMarks, BarAppearPreset>,\n IMarkProgressiveConfig {\n /**\n * 系列类型\n */\n type: 'bar';\n /**\n * 图元配置\n */\n [SeriesMarkNameEnum.bar]?: IMarkSpec<IRectMarkSpec>;\n /** 标签配置*/\n [SeriesMarkNameEnum.label]?: ILabelSpec & {\n /** 标签位置 */\n position?:\n | 'outside'\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'inside'\n | 'inside-top'\n | 'inside-bottom'\n | 'inside-right'\n | 'inside-left';\n };\n /**\n * 柱体宽度,可以设置绝对的像素值,也可以使用百分比(如 '10%')\n * 1. number 类型,表示像素值\n * 2. string 类型,百分比用法,如 '10%',该值为对应最后一个分组字段对应的 scale 的 bandWidth 占比(因为柱子是等宽的,所以采用最后一层分组的 scale)\n */\n barWidth?: number | string;\n /**\n * 柱体最小宽度,可以设置绝对的像素值,也可以使用百分比(如 '10%')\n * 1. number 类型,表示像素值\n * 2. string 类型,百分比用法,如 '10%',该值为对应最后一个分组字段对应的 scale 的 bandWidth 占比(因为柱子是等宽的,所以采用最后一层分组的 scale)\n */\n barMinWidth?: number | string;\n /**\n * 柱体最大宽度,可以设置绝对的像素值,也可以使用百分比(如 '10%')\n * 1. number 类型,表示像素值\n * 2. string 类型,百分比用法,如 '10%',该值为对应最后一个分组字段对应的 scale 的 bandWidth 占比(因为柱子是等宽的,所以采用最后一层分组的 scale)\n */\n barMaxWidth?: number | string;\n /**\n * 分组柱图中各个分组内的柱子间距,可以设置绝对的像素值,也可以使用百分比(如 '10%')。\n * 当存在多层分组时,可以使用数组来设置不同层级的间距,如 [10, '20%'],表示第一层分组的间距为 10px,第二层分组的间距为 '20%'。\n * 如果 barGapInGroup 的数组个数小于分组层数,则后面的分组间距使用最后一个值。\n * 1. number 类型,表示像素值\n * 2. string 类型,百分比用法,如 '10%',该值为对应最后一个分组字段对应的 scale 的 bandWidth 占比(因为柱子是等宽的,所以采用最后一层分组的 scale)\n * @since 1.2.0\n */\n barGapInGroup?: MaybeArray<number | string>;\n}\n\nexport interface IBarSeriesTheme extends ICartesianSeriesTheme {\n [SeriesMarkNameEnum.bar]?: Partial<IMarkTheme<IRectMarkSpec>>;\n /**\n * 柱体宽度\n */\n barWidth?: number;\n /**\n * 柱体最小宽度\n */\n barMinWidth?: number;\n /**\n * 柱体最大宽度\n */\n barMaxWidth?: number;\n}\n\nexport type IBar3dSeriesSpec = {\n type: 'bar3d';\n} & Omit<IBarSeriesSpec, 'type'> &\n ICartesianSeriesSpec &\n IAnimationSpec<BarMarks, BarAppearPreset>;\n\nexport interface IBar3dSeriesTheme extends ICartesianSeriesTheme {\n [SeriesMarkNameEnum.bar3d]?: Partial<IMarkTheme<IRect3dMarkSpec>>;\n}\n"]}
|
|
@@ -78,6 +78,7 @@ export declare abstract class BaseSeries<T extends ISeriesSpec> extends BaseMode
|
|
|
78
78
|
operations: StatisticOperations;
|
|
79
79
|
}[]): DataView;
|
|
80
80
|
private createdStackData;
|
|
81
|
+
protected _noAnimationDataKey(datum: Datum, index: number, context: AddVChartPropertyContext): unknown | undefined;
|
|
81
82
|
protected generateDefaultDataKey(dataKey: DataKeyType, datum: Datum, index: number, context: AddVChartPropertyContext): any;
|
|
82
83
|
protected _addDataIndexAndKey(): void;
|
|
83
84
|
updateRawData(d: any): void;
|
|
@@ -168,8 +168,9 @@ export class BaseSeries extends BaseModel {
|
|
|
168
168
|
null === (_a = this._tooltipHelper) || void 0 === _a || _a.updateTooltipSpec();
|
|
169
169
|
}
|
|
170
170
|
initData() {
|
|
171
|
-
var _a;
|
|
172
|
-
if (this._rawData = this._spec.data, this.
|
|
171
|
+
var _a, _b;
|
|
172
|
+
if (this._rawData = this._spec.data, null === (_a = this._rawData) || void 0 === _a || _a.target.addListener("change", this.rawDataUpdate.bind(this)),
|
|
173
|
+
this._addDataIndexAndKey(), this._rawData) {
|
|
173
174
|
this._viewDataFilter = dataViewFromDataView(this._rawData, this._dataSet, {
|
|
174
175
|
name: `${PREFIX}_series_${this.id}_viewDataFilter`
|
|
175
176
|
});
|
|
@@ -179,7 +180,7 @@ export class BaseSeries extends BaseModel {
|
|
|
179
180
|
this._data = new SeriesData(this._option, viewData), this._viewDataFilter.target.removeListener("change", viewData.reRunAllTransform);
|
|
180
181
|
}
|
|
181
182
|
"link" !== this._invalidType && "zero" !== this._invalidType || (registerDataSetInstanceTransform(this._option.dataSet, "invalidTravel", invalidTravel),
|
|
182
|
-
null === (
|
|
183
|
+
null === (_b = this.getViewData()) || void 0 === _b || _b.transform({
|
|
183
184
|
type: "invalidTravel",
|
|
184
185
|
options: {
|
|
185
186
|
config: () => ({
|
|
@@ -199,8 +200,7 @@ export class BaseSeries extends BaseModel {
|
|
|
199
200
|
_statisticRawData() {
|
|
200
201
|
const rawDataName = `${PREFIX}_series_${this.id}_rawDataStatic`;
|
|
201
202
|
this._rawDataStatistics = this.createStatisticalData(rawDataName, this._rawData, this._option.globalScale.getStatisticalFields),
|
|
202
|
-
this._rawData.target.removeListener("change", this._rawDataStatistics.reRunAllTransform)
|
|
203
|
-
this._rawDataStatistics.reRunAllTransform();
|
|
203
|
+
this._rawData.target.removeListener("change", this._rawDataStatistics.reRunAllTransform);
|
|
204
204
|
}
|
|
205
205
|
_statisticViewData() {
|
|
206
206
|
const viewDataName = `${PREFIX}_series_${this.id}_viewDataStatic`;
|
|
@@ -243,8 +243,15 @@ export class BaseSeries extends BaseModel {
|
|
|
243
243
|
}
|
|
244
244
|
}, !1);
|
|
245
245
|
}
|
|
246
|
+
_noAnimationDataKey(datum, index, context) {
|
|
247
|
+
return index;
|
|
248
|
+
}
|
|
246
249
|
generateDefaultDataKey(dataKey, datum, index, context) {
|
|
247
250
|
if (isNil(dataKey)) {
|
|
251
|
+
if (!1 === this._spec.animation) {
|
|
252
|
+
const v = this._noAnimationDataKey(datum, index, context);
|
|
253
|
+
if (void 0 !== v) return v;
|
|
254
|
+
}
|
|
248
255
|
const {keyMap: keyMap} = context, seriesDataKey = this._getSeriesDataKey(datum);
|
|
249
256
|
return void 0 === keyMap.get(seriesDataKey) ? keyMap.set(seriesDataKey, 0) : keyMap.set(seriesDataKey, keyMap.get(seriesDataKey) + 1),
|
|
250
257
|
`${seriesDataKey}_${keyMap.get(seriesDataKey)}`;
|
|
@@ -267,9 +274,10 @@ export class BaseSeries extends BaseModel {
|
|
|
267
274
|
}
|
|
268
275
|
rawDataUpdate(d) {
|
|
269
276
|
var _a;
|
|
277
|
+
null === (_a = this._rawDataStatistics) || void 0 === _a || _a.reRunAllTransform(),
|
|
270
278
|
this.event.emit(ChartEvent.rawDataUpdate, {
|
|
271
279
|
model: this
|
|
272
|
-
})
|
|
280
|
+
});
|
|
273
281
|
}
|
|
274
282
|
rawDataStatisticsUpdate(d) {
|
|
275
283
|
this.event.emit(ChartEvent.rawDataStatisticsUpdate, {
|
|
@@ -380,14 +388,18 @@ export class BaseSeries extends BaseModel {
|
|
|
380
388
|
}));
|
|
381
389
|
}
|
|
382
390
|
afterInitMark() {
|
|
383
|
-
var _a;
|
|
391
|
+
var _a, _b, _c;
|
|
384
392
|
this.event.emit(ChartEvent.afterInitMark, {
|
|
385
393
|
model: this
|
|
386
|
-
}),
|
|
387
|
-
|
|
394
|
+
}), this.setSeriesField(this._spec.seriesField);
|
|
395
|
+
let animationThreshold = null !== (_a = this._spec.animationThreshold) && void 0 !== _a ? _a : Number.MAX_SAFE_INTEGER;
|
|
396
|
+
this.getMarks().forEach((m => {
|
|
388
397
|
var _a, _b;
|
|
389
398
|
(null === (_b = null === (_a = m.stateStyle) || void 0 === _a ? void 0 : _a.normal) || void 0 === _b ? void 0 : _b.lineWidth) && m.setAttribute("stroke", this.getColorAttribute(), "normal", AttributeLevel.Base_Series);
|
|
390
|
-
|
|
399
|
+
const config = m.getProgressiveConfig();
|
|
400
|
+
config && (config.large && config.largeThreshold && (animationThreshold = Math.min(animationThreshold, config.largeThreshold)),
|
|
401
|
+
config.progressiveThreshold && (animationThreshold = Math.min(animationThreshold, config.progressiveThreshold)));
|
|
402
|
+
})), (null === (_c = null === (_b = this._rawData) || void 0 === _b ? void 0 : _b.latestData) || void 0 === _c ? void 0 : _c.length) >= animationThreshold && (this._spec.animation = !1);
|
|
391
403
|
}
|
|
392
404
|
getMarksWithoutRoot() {
|
|
393
405
|
return this.getMarks().filter((m => !m.name.includes("seriesGroup")));
|
|
@@ -402,11 +414,10 @@ export class BaseSeries extends BaseModel {
|
|
|
402
414
|
return this.getMarks().find((m => m.id === markId));
|
|
403
415
|
}
|
|
404
416
|
initEvent() {
|
|
405
|
-
var _a, _b, _c, _d
|
|
406
|
-
this._trigger.init(), null === (_a = this.
|
|
407
|
-
null === (_c =
|
|
408
|
-
null === (_d = this.
|
|
409
|
-
null === (_e = this._rawDataStatistics) || void 0 === _e || _e.target.addListener("change", this.rawDataStatisticsUpdate.bind(this));
|
|
417
|
+
var _a, _b, _c, _d;
|
|
418
|
+
this._trigger.init(), null === (_b = null === (_a = this._data) || void 0 === _a ? void 0 : _a.getDataView()) || void 0 === _b || _b.target.addListener("change", this.viewDataUpdate.bind(this)),
|
|
419
|
+
null === (_c = this._viewDataStatistics) || void 0 === _c || _c.target.addListener("change", this.viewDataStatisticsUpdate.bind(this)),
|
|
420
|
+
null === (_d = this._rawDataStatistics) || void 0 === _d || _d.target.addListener("change", this.rawDataStatisticsUpdate.bind(this));
|
|
410
421
|
}
|
|
411
422
|
_releaseEvent() {
|
|
412
423
|
super._releaseEvent(), this._trigger.release();
|
|
@@ -461,9 +472,8 @@ export class BaseSeries extends BaseModel {
|
|
|
461
472
|
})));
|
|
462
473
|
}
|
|
463
474
|
getSeriesInfoInField(field) {
|
|
464
|
-
var _a;
|
|
465
|
-
|
|
466
|
-
return this._getSeriesInfo(field, keys);
|
|
475
|
+
var _a, _b;
|
|
476
|
+
return this._getSeriesInfo(field, null !== (_b = null === (_a = this._rawDataStatistics.latestData[field]) || void 0 === _a ? void 0 : _a.values) && void 0 !== _b ? _b : []);
|
|
467
477
|
}
|
|
468
478
|
getSeriesInfoList() {
|
|
469
479
|
var _a;
|