@visactor/vchart-extension 2.1.0-alpha.8 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/build/index.js +124 -29
  2. package/build/index.min.js +2 -2
  3. package/cjs/charts/3d/layout.d.ts +2 -1
  4. package/cjs/charts/3d/layout.js.map +1 -1
  5. package/cjs/charts/axis-3d/band-axis.js +1 -1
  6. package/cjs/charts/axis-3d/index.js +1 -2
  7. package/cjs/charts/axis-3d/linear-axis.js +1 -1
  8. package/cjs/charts/axis-3d/log-axis.js +1 -1
  9. package/cjs/charts/axis-3d/symlog-axis.js +1 -1
  10. package/cjs/charts/axis-3d/theme.js +1 -1
  11. package/cjs/charts/axis-3d/time-axis.js +1 -1
  12. package/cjs/charts/axis-3d/util.js +1 -1
  13. package/cjs/charts/bar-3d/chart-spec-transformer.js +1 -1
  14. package/cjs/charts/bar-3d/chart.js +2 -1
  15. package/cjs/charts/bar-3d/constant.js +1 -1
  16. package/cjs/charts/bar-3d/index.js +1 -1
  17. package/cjs/charts/bar-3d/interface.js +1 -1
  18. package/cjs/charts/bar-3d/series-spec-transformer.js +1 -1
  19. package/cjs/charts/bar-3d/series.js +1 -1
  20. package/cjs/charts/bar-3d/theme.js +1 -1
  21. package/cjs/charts/image-cloud/series/image-cloud.d.ts +1 -1
  22. package/cjs/charts/pictogram/series/pictogram.d.ts +9 -2
  23. package/cjs/charts/pictogram/series/pictogram.js +55 -15
  24. package/cjs/charts/pictogram/series/pictogram.js.map +1 -1
  25. package/cjs/charts/pictogram/series/svg-source.d.ts +12 -2
  26. package/cjs/charts/pictogram/series/svg-source.js +27 -3
  27. package/cjs/charts/pictogram/series/svg-source.js.map +1 -1
  28. package/cjs/components/bar-regression-line/index.js +6 -3
  29. package/cjs/components/bar-regression-line/index.js.map +1 -1
  30. package/cjs/components/histogram-regression-line/index.js +6 -3
  31. package/cjs/components/histogram-regression-line/index.js.map +1 -1
  32. package/cjs/components/histogram-regression-line/type.js +1 -2
  33. package/cjs/components/map-label/layout.d.ts +2 -1
  34. package/cjs/components/map-label/layout.js +2 -1
  35. package/cjs/components/map-label/layout.js.map +1 -1
  36. package/cjs/components/map-label/map-label.d.ts +5 -4
  37. package/cjs/components/map-label/map-label.js.map +1 -1
  38. package/cjs/components/scatter-regression-line/index.js +6 -3
  39. package/cjs/components/scatter-regression-line/index.js.map +1 -1
  40. package/cjs/components/series-break/util.js +1 -2
  41. package/cjs/components/series-label/series-label.js +2 -1
  42. package/esm/charts/3d/layout.d.ts +2 -1
  43. package/esm/charts/3d/layout.js.map +1 -1
  44. package/esm/charts/axis-3d/band-axis.js +1 -1
  45. package/esm/charts/axis-3d/index.js +1 -2
  46. package/esm/charts/axis-3d/linear-axis.js +1 -1
  47. package/esm/charts/axis-3d/log-axis.js +1 -1
  48. package/esm/charts/axis-3d/symlog-axis.js +1 -1
  49. package/esm/charts/axis-3d/theme.js +1 -1
  50. package/esm/charts/axis-3d/time-axis.js +1 -1
  51. package/esm/charts/axis-3d/util.js +1 -1
  52. package/esm/charts/bar-3d/chart-spec-transformer.js +1 -1
  53. package/esm/charts/bar-3d/chart.js +2 -1
  54. package/esm/charts/bar-3d/constant.js +1 -1
  55. package/esm/charts/bar-3d/index.js +1 -1
  56. package/esm/charts/bar-3d/interface.js +1 -1
  57. package/esm/charts/bar-3d/series-spec-transformer.js +1 -1
  58. package/esm/charts/bar-3d/series.js +1 -1
  59. package/esm/charts/bar-3d/theme.js +1 -1
  60. package/esm/charts/image-cloud/series/image-cloud.d.ts +1 -1
  61. package/esm/charts/pictogram/series/pictogram.d.ts +9 -2
  62. package/esm/charts/pictogram/series/pictogram.js +57 -17
  63. package/esm/charts/pictogram/series/pictogram.js.map +1 -1
  64. package/esm/charts/pictogram/series/svg-source.d.ts +12 -2
  65. package/esm/charts/pictogram/series/svg-source.js +25 -1
  66. package/esm/charts/pictogram/series/svg-source.js.map +1 -1
  67. package/esm/components/bar-regression-line/index.js +5 -2
  68. package/esm/components/bar-regression-line/index.js.map +1 -1
  69. package/esm/components/histogram-regression-line/index.js +5 -2
  70. package/esm/components/histogram-regression-line/index.js.map +1 -1
  71. package/esm/components/histogram-regression-line/type.js +1 -2
  72. package/esm/components/map-label/layout.d.ts +2 -1
  73. package/esm/components/map-label/layout.js +2 -1
  74. package/esm/components/map-label/layout.js.map +1 -1
  75. package/esm/components/map-label/map-label.d.ts +5 -4
  76. package/esm/components/map-label/map-label.js.map +1 -1
  77. package/esm/components/scatter-regression-line/index.js +5 -2
  78. package/esm/components/scatter-regression-line/index.js.map +1 -1
  79. package/esm/components/series-break/util.js +1 -2
  80. package/esm/components/series-label/series-label.js +2 -1
  81. package/package.json +7 -7
@@ -13,4 +13,4 @@ export const registerCartesianTimeAxis3d = () => {
13
13
  axisZ: Object.assign(Object.assign({}, AxisCls.builtInTheme.axisX), axisZ)
14
14
  }), mixin(AxisCls, Axis3dMixin);
15
15
  };
16
- //# sourceMappingURL=time-axis.js.map
16
+ //# sourceMappingURL=time-axis.js.map
@@ -37,4 +37,4 @@ export const getUpdateAttributeOfZAxis = (axis, ignoreGrid) => {
37
37
  anchor3d: anchor3d
38
38
  }), attrs;
39
39
  };
40
- //# sourceMappingURL=util.js.map
40
+ //# sourceMappingURL=util.js.map
@@ -8,4 +8,4 @@ export class Bar3dChartSpecTransformer extends BarChartSpecTransformer {
8
8
  seriesSpec;
9
9
  }
10
10
  }
11
- //# sourceMappingURL=chart-spec-transformer.js.map
11
+ //# sourceMappingURL=chart-spec-transformer.js.map
@@ -21,4 +21,5 @@ Bar3dChart.type = "bar3d", Bar3dChart.seriesType = SeriesType3dEnum.bar3d, Bar3d
21
21
 
22
22
  export const registerBar3dChart = () => {
23
23
  register3DPlugin(), registerLayout3d(), registerBar3dSeries(), Factory.registerChart(Bar3dChart.type, Bar3dChart);
24
- };
24
+ };
25
+ //# sourceMappingURL=chart.js.map
@@ -8,4 +8,4 @@ export const bar3dSeriesMark = {
8
8
  type: "rect3d"
9
9
  }
10
10
  };
11
- //# sourceMappingURL=constant.js.map
11
+ //# sourceMappingURL=constant.js.map
@@ -7,4 +7,4 @@ export * from "./interface";
7
7
  export * from "./series";
8
8
 
9
9
  export * from "./series-spec-transformer";
10
- //# sourceMappingURL=index.js.map
10
+ //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
1
  export { };
2
- //# sourceMappingURL=interface.js.map
2
+ //# sourceMappingURL=interface.js.map
@@ -5,4 +5,4 @@ export class Bar3dSeriesSpecTransformer extends BarSeriesSpecTransformer {
5
5
  this._addMarkLabelSpec(spec, "bar3d");
6
6
  }
7
7
  }
8
- //# sourceMappingURL=series-spec-transformer.js.map
8
+ //# sourceMappingURL=series-spec-transformer.js.map
@@ -27,4 +27,4 @@ export const registerBar3dSeries = () => {
27
27
  registerBar3dAnimation(), registerRect3dMark(), registerCartesianBandAxis(), registerCartesianLinearAxis(),
28
28
  Factory.registerSeries(Bar3dSeries.type, Bar3dSeries);
29
29
  };
30
- //# sourceMappingURL=series.js.map
30
+ //# sourceMappingURL=series.js.map
@@ -12,4 +12,4 @@ export const bar3d = {
12
12
  }
13
13
  }
14
14
  };
15
- //# sourceMappingURL=theme.js.map
15
+ //# sourceMappingURL=theme.js.map
@@ -112,7 +112,7 @@ export declare class ImageCloudSeries<T extends IImageCloudSeriesSpec> extends B
112
112
  style?: Partial<import("@visactor/vchart").IImageMarkSpec>;
113
113
  };
114
114
  layoutConfig: import("@visactor/vchart").LayoutConfigType;
115
- createCanvas: (params: import("@visactor/vrender-core").ICreateCanvasParams) => any;
115
+ createCanvas: (params: import("@visactor/vrender-core/es/interface").ICreateCanvasParams) => any;
116
116
  createImage: typeof createImage;
117
117
  onUpdateMaskCanvas: (inputImage?: HTMLCanvasElement, maskImage?: HTMLCanvasElement) => void;
118
118
  onLayoutFinished: () => void;
@@ -1,5 +1,6 @@
1
- import { type SVGParsedElement, type SVGParserResult } from '@visactor/vchart';
1
+ import { type SVGParsedElement } from '@visactor/vchart';
2
2
  import type { IPictogramSeriesSpec } from './interface';
3
+ import { type SVGParserResultWithViewport } from './svg-source';
3
4
  import { PictogramSeriesSpecTransformer } from './pictogram-transformer';
4
5
  import type { IMatrix, IPoint, IPointLike, GraphicEventType } from '@visactor/vchart';
5
6
  import { type IGroup } from '@visactor/vchart';
@@ -80,7 +81,7 @@ export declare class PictogramSeries<T extends IPictogramSeriesSpec = IPictogram
80
81
  static readonly transformerConstructor: typeof PictogramSeriesSpecTransformer;
81
82
  svg: string;
82
83
  protected _pictogramMark: IGroupMark;
83
- protected _parsedSvgResult: SVGParserResult;
84
+ protected _parsedSvgResult: SVGParserResultWithViewport;
84
85
  private _labelMark;
85
86
  private _idToMark;
86
87
  setAttrFromSpec(): void;
@@ -113,6 +114,12 @@ export declare class PictogramSeries<T extends IPictogramSeriesSpec = IPictogram
113
114
  coordToPosition(point: IPoint): IPoint | undefined;
114
115
  getRootMatrix(): IMatrix;
115
116
  getPictogramRootGraphic(): IGroup;
117
+ private _getSvgRootMatrix;
118
+ private _getSvgViewportRect;
119
+ private _getSvgRootBounds;
120
+ private _appendMatrixScale;
121
+ private _appendMatrixTranslate;
122
+ private _getFittedSvgRootMatrix;
116
123
  initData(): void;
117
124
  mapViewDataUpdate(): void;
118
125
  onLayoutEnd(): void;
@@ -2,7 +2,7 @@ import { DataView } from "@visactor/vchart";
2
2
 
3
3
  import { ELEMENT_HIGHLIGHT_BY_GRPHIC_NAME, ELEMENT_SELECT_BY_GRPHIC_NAME, PICTOGRAM_SERIES_TYPE, PictogramSeriesMark } from "./constant";
4
4
 
5
- import { getSVGSource, registerSVGSource, svgSourceMap, unregisterSVGSource } from "./svg-source";
5
+ import { SVG_VIEWPORT_RECT_KEY, getSVGSource, registerSVGSource, svgSourceMap, unregisterSVGSource } from "./svg-source";
6
6
 
7
7
  import { PictogramSeriesSpecTransformer } from "./pictogram-transformer";
8
8
 
@@ -12,7 +12,7 @@ import { createRect } from "@visactor/vchart";
12
12
 
13
13
  import { PictogramSeriesTooltipHelper } from "./tooltip-helper";
14
14
 
15
- import { AttributeLevel, ChartEvent, CompilableData, Factory, GeoSeries, lookup, registerDataSetInstanceTransform, shouldMarkDoMorph, STATE_VALUE_ENUM } from "@visactor/vchart";
15
+ import { AttributeLevel, CompilableData, Factory, GeoSeries, lookup, registerDataSetInstanceTransform, shouldMarkDoMorph, STATE_VALUE_ENUM } from "@visactor/vchart";
16
16
 
17
17
  import { registerElementHighlightByGraphicName } from "../element-highlight-by-graphic-name";
18
18
 
@@ -124,13 +124,13 @@ export class PictogramSeries extends GeoSeries {
124
124
  }, STATE_VALUE_ENUM.STATE_NORMAL, AttributeLevel.Series);
125
125
  }
126
126
  initMarkStyle() {
127
- const {root: root, viewBoxRect: viewBoxRect} = this._parsedSvgResult, elements = this._mapViewData.getDataView().latestData;
127
+ const {root: root} = this._parsedSvgResult, svgViewportRect = this._getSvgViewportRect(), elements = this._mapViewData.getDataView().latestData;
128
128
  root && (this.setMarkStyle(this._pictogramMark, graphicAttributeTransform.group(root.attributes), "normal", AttributeLevel.Built_In),
129
- root.transform && this.setMarkStyle(this._pictogramMark, {
130
- postMatrix: () => root.transform
131
- }, "normal", AttributeLevel.Built_In), viewBoxRect && this._pictogramMark.setMarkConfig({
129
+ this.setMarkStyle(this._pictogramMark, {
130
+ postMatrix: () => this._getFittedSvgRootMatrix()
131
+ }, "normal", AttributeLevel.Built_In), svgViewportRect && this._pictogramMark.setMarkConfig({
132
132
  clip: !0,
133
- clipPath: [ createRect(Object.assign(Object.assign({}, viewBoxRect), {
133
+ clipPath: [ createRect(Object.assign(Object.assign({}, svgViewportRect), {
134
134
  fill: !0
135
135
  })) ]
136
136
  }));
@@ -192,6 +192,51 @@ export class PictogramSeries extends GeoSeries {
192
192
  getPictogramRootGraphic() {
193
193
  return this._pictogramMark.getProduct();
194
194
  }
195
+ _getSvgRootMatrix() {
196
+ var _a, _b;
197
+ const transform = null === (_b = null === (_a = this._parsedSvgResult) || void 0 === _a ? void 0 : _a.root) || void 0 === _b ? void 0 : _b.transform;
198
+ return transform ? new Matrix(transform.a, transform.b, transform.c, transform.d, transform.e, transform.f) : new Matrix;
199
+ }
200
+ _getSvgViewportRect() {
201
+ var _a, _b, _c, _d;
202
+ const viewBoxRect = null === (_a = this._parsedSvgResult) || void 0 === _a ? void 0 : _a.viewBoxRect;
203
+ if (viewBoxRect) return viewBoxRect;
204
+ const {width: width, height: height} = null !== (_b = this._parsedSvgResult) && void 0 !== _b ? _b : {};
205
+ return Number.isFinite(width) && Number.isFinite(height) && width > 0 && height > 0 ? {
206
+ x: 0,
207
+ y: 0,
208
+ width: width,
209
+ height: height
210
+ } : null !== (_d = null === (_c = this._parsedSvgResult) || void 0 === _c ? void 0 : _c[SVG_VIEWPORT_RECT_KEY]) && void 0 !== _d ? _d : null;
211
+ }
212
+ _getSvgRootBounds(rootMatrix) {
213
+ const viewBoxRect = this._getSvgViewportRect();
214
+ if (!viewBoxRect) return null;
215
+ const bounds = (new Bounds).setValue(viewBoxRect.x, viewBoxRect.y, viewBoxRect.x + viewBoxRect.width, viewBoxRect.y + viewBoxRect.height);
216
+ return bounds.transformWithMatrix(rootMatrix), bounds;
217
+ }
218
+ _appendMatrixScale(matrix, scale, center) {
219
+ const nextMatrix = new Matrix;
220
+ return nextMatrix.translate(center.x, center.y), nextMatrix.scale(scale, scale),
221
+ nextMatrix.translate(-center.x, -center.y), nextMatrix.multiply(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f),
222
+ nextMatrix;
223
+ }
224
+ _appendMatrixTranslate(matrix, dx, dy) {
225
+ const nextMatrix = new Matrix;
226
+ return nextMatrix.translate(dx, dy), nextMatrix.multiply(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f),
227
+ nextMatrix;
228
+ }
229
+ _getFittedSvgRootMatrix() {
230
+ const rootMatrix = this._getSvgRootMatrix(), bounds = this._getSvgRootBounds(rootMatrix);
231
+ if (!bounds) return rootMatrix;
232
+ const width = bounds.width(), height = bounds.height();
233
+ if (!Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0) return rootMatrix;
234
+ const {width: regionWidth, height: regionHeight} = this.getLayoutRect(), rootCenterX = (bounds.x1 + bounds.x2) / 2, rootCenterY = (bounds.y1 + bounds.y2) / 2, scale = Math.min(regionWidth / width, regionHeight / height), scaledMatrix = this._appendMatrixScale(rootMatrix, scale, {
235
+ x: rootCenterX,
236
+ y: rootCenterY
237
+ });
238
+ return this._appendMatrixTranslate(scaledMatrix, regionWidth / 2 - rootCenterX, regionHeight / 2 - rootCenterY);
239
+ }
195
240
  initData() {
196
241
  var _a, _b;
197
242
  super.initData();
@@ -236,19 +281,14 @@ export class PictogramSeries extends GeoSeries {
236
281
  super.onLayoutEnd(), null === (_a = this._mapViewData) || void 0 === _a || _a.getDataView().reRunAllTransform();
237
282
  }
238
283
  updateSVGSize() {
239
- const {width: regionWidth, height: regionHeight} = this.getLayoutRect(), regionCenterX = regionWidth / 2, regionCenterY = regionHeight / 2, root = this.getPictogramRootGraphic();
240
- if (root) {
241
- const bounds = root.AABBBounds, {x1: x1, x2: x2, y1: y1, y2: y2} = root.AABBBounds, rootCenterX = (x1 + x2) / 2, rootCenterY = (y1 + y2) / 2, scaleX = regionWidth / bounds.width(), scaleY = regionHeight / bounds.height(), scale = Math.min(scaleX, scaleY);
242
- root.scale(scale, scale, {
243
- x: rootCenterX,
244
- y: rootCenterY
245
- }), root.translate(regionCenterX - rootCenterX, regionCenterY - rootCenterY);
246
- }
284
+ const root = this.getPictogramRootGraphic();
285
+ root && root.setAttributes({
286
+ postMatrix: this._getFittedSvgRootMatrix()
287
+ });
247
288
  }
248
289
  initEvent() {
249
290
  var _a;
250
- super.initEvent(), null === (_a = this._mapViewData.getDataView()) || void 0 === _a || _a.target.addListener("change", this.mapViewDataUpdate.bind(this)),
251
- this.event.on(ChartEvent.afterMarkLayoutEnd, this.updateSVGSize.bind(this));
291
+ super.initEvent(), null === (_a = this._mapViewData.getDataView()) || void 0 === _a || _a.target.addListener("change", this.mapViewDataUpdate.bind(this));
252
292
  }
253
293
  handleZoom(e) {
254
294
  const {scale: scale, scaleCenter: scaleCenter} = e;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/charts/pictogram/series/pictogram.ts"],"names":[],"mappings":"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","file":"pictogram.js","sourcesContent":["import { DataView, type SVGParsedElement, type SVGParserResult } from '@visactor/vchart';\nimport type { IPictogramSeriesSpec } from './interface';\nimport {\n ELEMENT_HIGHLIGHT_BY_GRPHIC_NAME,\n ELEMENT_SELECT_BY_GRPHIC_NAME,\n PICTOGRAM_SERIES_TYPE,\n PictogramSeriesMark\n} from './constant';\nimport { getSVGSource, registerSVGSource, svgSourceMap, unregisterSVGSource } from './svg-source';\nimport { PictogramSeriesSpecTransformer } from './pictogram-transformer';\nimport type { IMatrix, IPoint, IPointLike, GraphicEventType } from '@visactor/vchart';\nimport { Bounds, Matrix, isValid, merge } from '@visactor/vchart';\nimport { createRect, type IGroup } from '@visactor/vchart';\nimport { PictogramSeriesTooltipHelper } from './tooltip-helper';\nimport type {\n Datum,\n IGroupMark,\n IHoverSpec,\n IMark,\n ISelectSpec,\n ISeriesSeriesInfo,\n ITextMark,\n PanEventParam,\n ZoomEventParam\n} from '@visactor/vchart';\nimport {\n AttributeLevel,\n ChartEvent,\n CompilableData,\n Factory,\n GeoSeries,\n lookup,\n registerDataSetInstanceTransform,\n shouldMarkDoMorph,\n STATE_VALUE_ENUM\n} from '@visactor/vchart';\nimport { registerElementHighlightByGraphicName } from '../element-highlight-by-graphic-name';\nimport { registerElementSelectByGraphicName } from '../element-select-by-graphic-name';\nimport { graphicAttributeTransform, pictogram } from './transform';\n\nexport interface SVGParsedElementExtend extends SVGParsedElement {\n _finalAttributes: Record<string, any>;\n _uniqueId: string; // 用于处理 svg 中 id 重复的情况\n}\n\nexport class PictogramSeries<T extends IPictogramSeriesSpec = IPictogramSeriesSpec> extends GeoSeries<T> {\n static readonly type: string = PICTOGRAM_SERIES_TYPE;\n type = PICTOGRAM_SERIES_TYPE;\n static readonly mark = PictogramSeriesMark;\n static readonly transformerConstructor = PictogramSeriesSpecTransformer;\n\n svg!: string;\n\n protected _pictogramMark: IGroupMark;\n protected _parsedSvgResult: SVGParserResult;\n private _labelMark: ITextMark;\n\n private _idToMark: Map<string, IMark> = new Map();\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this.svg = this._spec.svg;\n this._nameField = this._spec.nameField;\n this._valueField = this._spec.valueField;\n\n if (!this.svg) {\n this._option?.onError(`svg source is not specified !`);\n }\n this._parsedSvgResult = getSVGSource(this.svg)?.latestData;\n\n if (!this._parsedSvgResult) {\n this._option?.onError(`'${this.svg}' is not registered !`);\n }\n }\n\n getDatumCenter(datum: SVGParsedElementExtend): [number, number] {\n return [Number.NaN, Number.NaN];\n }\n\n getDatumName(datum: SVGParsedElementExtend): string {\n return datum.name || datum._nameFromParent;\n }\n\n getMarksWithoutRoot(): IMark[] {\n return this.getMarks().filter(\n m => m.name && !m.name.includes('seriesGroup') && !m.name.includes('root') && m !== this._pictogramMark\n );\n }\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n this._markAttributeContext.getTransformMatrix = this.getRootMatrix.bind(this);\n this._markAttributeContext.coordToPosition = this.coordToPosition.bind(this);\n this._markAttributeContext.dataToPosition = this.dataToPosition.bind(this);\n }\n\n protected _defaultHoverConfig(finalHoverSpec: IHoverSpec) {\n return {\n type: ELEMENT_HIGHLIGHT_BY_GRPHIC_NAME,\n // trigger: finalHoverSpec.trigger as EventType,\n trigger: finalHoverSpec.trigger as GraphicEventType,\n triggerOff: 'pointerout' as GraphicEventType,\n blurState: STATE_VALUE_ENUM.STATE_HOVER_REVERSE,\n highlightState: STATE_VALUE_ENUM.STATE_HOVER\n };\n }\n\n protected _defaultSelectConfig(finalSelectSpec: ISelectSpec) {\n const isMultiple = finalSelectSpec.mode === 'multiple';\n const triggerOff = isValid(finalSelectSpec.triggerOff)\n ? finalSelectSpec.triggerOff\n : isMultiple\n ? ['empty', 'self']\n : ['empty', finalSelectSpec.trigger];\n\n return {\n type: ELEMENT_SELECT_BY_GRPHIC_NAME,\n trigger: finalSelectSpec.trigger as GraphicEventType,\n triggerOff: triggerOff as GraphicEventType,\n reverseState: STATE_VALUE_ENUM.STATE_SELECTED_REVERSE,\n state: STATE_VALUE_ENUM.STATE_SELECTED,\n isMultiple\n };\n }\n\n initMark() {\n this._pictogramMark = this._createMark(\n PictogramSeries.mark.pictogram,\n {\n groupKey: this.getDimensionField()[0],\n isSeriesMark: true,\n skipBeforeLayouted: true\n },\n {\n morph: shouldMarkDoMorph(this._spec, PictogramSeries.mark.pictogram.name)\n }\n ) as IGroupMark;\n\n if (!this._pictogramMark) {\n return;\n }\n this._pictogramMark.setData(this._mapViewData);\n this._pictogramMark.setUserId(PictogramSeries.mark.pictogram.name);\n for (const element of this._mapViewData.getDataView().latestData as SVGParserResult['elements']) {\n const { graphicType: type, name, parent, id, _nameFromParent, _uniqueId } = element;\n\n const mark = this._createMark(\n { type, name: name ?? _nameFromParent },\n {\n groupKey: _uniqueId,\n isSeriesMark: false,\n skipBeforeLayouted: true,\n parent: (this._idToMark.get(parent?._uniqueId) as IGroupMark) ?? this._pictogramMark\n },\n {\n morph: shouldMarkDoMorph(this._spec, PictogramSeries.mark.pictogram.name)\n }\n );\n\n if (mark) {\n mark.setData(this._mapViewData);\n mark.setUserId(_uniqueId); // id 必须唯一,但无法控制 svg 中元素有重复 id, 这里做一个保护\n this._idToMark.set(_uniqueId, mark);\n if (mark.type !== 'group') {\n mark.setMarkConfig({ graphicName: mark.name });\n }\n mark.setTransform([\n {\n type: 'filter',\n callback: (datum: SVGParsedElementExtend) => {\n return datum._uniqueId === _uniqueId;\n }\n }\n ]);\n }\n }\n this._initLabelMark();\n }\n\n private _initLabelMark() {\n // @ts-ignore\n if (this._spec.label.visible !== true) {\n return;\n }\n\n const labelMark = this._createMark(PictogramSeries.mark.label, {\n isSeriesMark: false,\n parent: this._pictogramMark,\n groupKey: '_uniqueId',\n skipBeforeLayouted: true\n }) as ITextMark;\n\n if (labelMark) {\n this._labelMark = labelMark;\n this._labelMark.setData(this._mapViewData);\n }\n }\n\n initLabelMarkStyle() {\n if (!this._labelMark) {\n return;\n }\n this.setMarkStyle(\n this._labelMark,\n {\n visible: (d: Datum) => !!this._validElement(d as SVGParsedElementExtend),\n x: (d: Datum) => this.dataToPosition(d, true)?.x,\n y: (d: Datum) => this.dataToPosition(d, true)?.y,\n text: (d: Datum) => d[this.nameField],\n textAlign: 'center',\n textBaseline: 'middle'\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n initMarkStyle() {\n const { root, viewBoxRect } = this._parsedSvgResult;\n const elements = this._mapViewData.getDataView().latestData as SVGParserResult['elements'];\n if (root) {\n this.setMarkStyle(\n this._pictogramMark,\n graphicAttributeTransform.group(root.attributes),\n 'normal',\n AttributeLevel.Built_In\n );\n if (root.transform) {\n this.setMarkStyle(\n this._pictogramMark,\n {\n postMatrix: () => root.transform\n },\n 'normal',\n AttributeLevel.Built_In\n );\n }\n if (viewBoxRect) {\n // fill should be true or content will be invisible\n this._pictogramMark.setMarkConfig({\n clip: true,\n clipPath: [createRect({ ...viewBoxRect, fill: true }) as any]\n });\n }\n }\n for (const element of elements) {\n const { _uniqueId, _finalAttributes: attributes } = element as SVGParsedElementExtend;\n const mark = this._idToMark.get(_uniqueId);\n const valid = this._validElement(element);\n if (mark) {\n // 描边粗细跟随缩放倍数\n this.setMarkStyle(mark, { keepStrokeScale: true }, 'normal', AttributeLevel.Built_In);\n if (valid) {\n this.initMarkStyleWithSpec(mark, merge({}, this._spec.pictogram, (this._spec as any)[mark.name]));\n this.setMarkStyle(mark, attributes, 'normal', AttributeLevel.Series);\n mark.setPostProcess('fill', (result, datum) => {\n return isValid(result) ? result : this._spec.defaultFillColor;\n });\n } else {\n // 对于没有设置 name 的元素,不支持响应事件、改变样式\n mark.setMarkConfig({ interactive: false });\n this.setMarkStyle(mark, attributes, 'normal', AttributeLevel.Built_In);\n }\n }\n }\n\n this.initLabelMarkStyle();\n }\n /** 在 svg 中使用 name attribute 标注了的图元*/\n protected _validElement(element: SVGParsedElement) {\n return element.name || element._nameFromParent;\n }\n\n protected initTooltip() {\n this._tooltipHelper = new PictogramSeriesTooltipHelper(this);\n this.getMarksWithoutRoot().forEach(mark => {\n if (mark && mark.name) {\n this._tooltipHelper.activeTriggerSet.mark.add(mark);\n }\n });\n }\n\n dataToPosition(datum: Datum, global = false): IPointLike {\n if (!datum) {\n return null;\n }\n const name = datum[this.nameField];\n if (!name) {\n return null;\n }\n\n const mark = this.getMarksWithoutRoot().filter(mark => mark.name === name);\n if (!mark || mark.length === 0) {\n return null;\n }\n let bounds = new Bounds();\n if (global) {\n mark.forEach(m => {\n bounds = bounds.union(m.getGraphics()[0].globalAABBBounds);\n });\n } else {\n mark.forEach(m => {\n bounds = bounds.union(m.getProduct().AABBBounds);\n });\n }\n\n const point = { x: (bounds.x1 + bounds.x2) / 2, y: (bounds.y1 + bounds.y2) / 2 };\n\n if (global) {\n const { x, y } = this.getLayoutStartPoint();\n point.x -= x;\n point.y -= y;\n }\n return point;\n }\n\n coordToPosition(point: IPoint): IPoint | undefined {\n if (!point) {\n return null;\n }\n const { x, y } = point;\n const matrix = this.getRootMatrix();\n if (!matrix) {\n return null;\n }\n const position = {};\n matrix.getInverse().transformPoint({ x, y }, position as IPoint);\n return position as IPoint;\n }\n\n getRootMatrix() {\n return this.getPictogramRootGraphic()?.transMatrix as IMatrix;\n }\n\n getPictogramRootGraphic(): IGroup {\n return this._pictogramMark.getProduct();\n }\n\n initData() {\n super.initData();\n const parsedSvg = svgSourceMap.get(this.svg);\n if (!parsedSvg) {\n this._option?.onError('no valid svg found!');\n }\n const svgData = new DataView(this._dataSet, { name: `pictogram_${this.id}_data` });\n registerDataSetInstanceTransform(this._dataSet, 'pictogram', pictogram);\n registerDataSetInstanceTransform(this._dataSet, 'lookup', lookup);\n svgData\n .parse([parsedSvg], {\n type: 'dataview'\n })\n .transform({ type: 'pictogram' })\n .transform({\n type: 'lookup',\n options: {\n from: () => this.getViewData().latestData,\n key: 'name',\n fields: this._nameField,\n set: (a: Datum, b: Datum) => {\n if (b) {\n a.data = b;\n }\n }\n }\n })\n .transform({\n type: 'lookup',\n options: {\n from: () => this.getViewData().latestData,\n key: '_nameFromParent',\n fields: this._nameField,\n set: (a: Datum, b: Datum) => {\n if (b) {\n a.data = b;\n }\n }\n }\n });\n this._data?.getDataView().target.addListener('change', svgData.reRunAllTransform);\n this._mapViewData = new CompilableData(this._option, svgData);\n }\n\n mapViewDataUpdate() {\n this._mapViewData.updateData();\n }\n\n onLayoutEnd(): void {\n super.onLayoutEnd();\n this._mapViewData?.getDataView().reRunAllTransform();\n }\n\n updateSVGSize() {\n const { width: regionWidth, height: regionHeight } = this.getLayoutRect();\n const regionCenterX = regionWidth / 2;\n const regionCenterY = regionHeight / 2;\n const root = this.getPictogramRootGraphic();\n if (root) {\n const bounds = root.AABBBounds;\n const { x1, x2, y1, y2 } = root.AABBBounds;\n const width = bounds.width();\n const height = bounds.height();\n\n const rootCenterX = (x1 + x2) / 2;\n const rootCenterY = (y1 + y2) / 2;\n\n const scaleX = regionWidth / width;\n const scaleY = regionHeight / height;\n const scale = Math.min(scaleX, scaleY);\n\n root.scale(scale, scale, { x: rootCenterX, y: rootCenterY });\n root.translate(regionCenterX - rootCenterX, regionCenterY - rootCenterY);\n }\n }\n\n protected initEvent(): void {\n super.initEvent();\n this._mapViewData.getDataView()?.target.addListener('change', this.mapViewDataUpdate.bind(this));\n // 必须在有 vrender mark 的时机后更新\n this.event.on(ChartEvent.afterMarkLayoutEnd, this.updateSVGSize.bind(this));\n }\n\n handleZoom(e: ZoomEventParam) {\n const { scale, scaleCenter } = e;\n if (scale === 1) {\n return;\n }\n\n const root = this.getPictogramRootGraphic();\n if (root) {\n if (!root.attribute.postMatrix) {\n root.setAttributes({\n postMatrix: new Matrix()\n });\n }\n root.scale(scale, scale, scaleCenter);\n }\n }\n\n handlePan(e: PanEventParam) {\n const { delta } = e;\n if (delta[0] === 0 && delta[1] === 0) {\n return;\n }\n const root = this.getPictogramRootGraphic();\n if (root) {\n if (!root.attribute.postMatrix) {\n root.setAttributes({\n postMatrix: new Matrix()\n });\n }\n root.translate(delta[0], delta[1]);\n }\n }\n\n getMarkData(datum: Datum) {\n return datum.data ?? {};\n }\n\n getMeasureField(): string[] {\n return [this.valueField];\n }\n\n getDimensionField(): string[] {\n return [this.nameField];\n }\n protected _getSeriesInfo(field: string, keys: string[]) {\n const defaultShapeType = this.getDefaultShapeType();\n return keys.map(key => {\n return {\n key,\n originalKey: key,\n style: this.getSeriesStyle({\n data: {\n [field]: key\n }\n }),\n shapeType: defaultShapeType\n } as ISeriesSeriesInfo;\n });\n }\n\n release(): void {\n this._parsedSvgResult = null;\n this._idToMark.clear();\n this._idToMark = null;\n }\n}\n\nexport const registerPictogramSeries = () => {\n // 注册语法元素\n Factory.registerSeries(PictogramSeries.type, PictogramSeries);\n Factory.registerImplement('registerSVG', registerSVGSource);\n Factory.registerImplement('unregisterSVG', unregisterSVGSource);\n registerElementHighlightByGraphicName();\n registerElementSelectByGraphicName();\n};\n"]}
1
+ {"version":3,"sources":["../src/charts/pictogram/series/pictogram.ts"],"names":[],"mappings":"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","file":"pictogram.js","sourcesContent":["import { DataView, type SVGParsedElement, type SVGParserResult } from '@visactor/vchart';\nimport type { IPictogramSeriesSpec } from './interface';\nimport {\n ELEMENT_HIGHLIGHT_BY_GRPHIC_NAME,\n ELEMENT_SELECT_BY_GRPHIC_NAME,\n PICTOGRAM_SERIES_TYPE,\n PictogramSeriesMark\n} from './constant';\nimport {\n SVG_VIEWPORT_RECT_KEY,\n getSVGSource,\n registerSVGSource,\n svgSourceMap,\n unregisterSVGSource,\n type SVGParserResultWithViewport\n} from './svg-source';\nimport { PictogramSeriesSpecTransformer } from './pictogram-transformer';\nimport type { IMatrix, IPoint, IPointLike, GraphicEventType } from '@visactor/vchart';\nimport { Bounds, Matrix, isValid, merge } from '@visactor/vchart';\nimport { createRect, type IGroup } from '@visactor/vchart';\nimport { PictogramSeriesTooltipHelper } from './tooltip-helper';\nimport type {\n Datum,\n IGroupMark,\n IHoverSpec,\n IMark,\n ISelectSpec,\n ISeriesSeriesInfo,\n ITextMark,\n PanEventParam,\n ZoomEventParam\n} from '@visactor/vchart';\nimport {\n AttributeLevel,\n CompilableData,\n Factory,\n GeoSeries,\n lookup,\n registerDataSetInstanceTransform,\n shouldMarkDoMorph,\n STATE_VALUE_ENUM\n} from '@visactor/vchart';\nimport { registerElementHighlightByGraphicName } from '../element-highlight-by-graphic-name';\nimport { registerElementSelectByGraphicName } from '../element-select-by-graphic-name';\nimport { graphicAttributeTransform, pictogram } from './transform';\n\nexport interface SVGParsedElementExtend extends SVGParsedElement {\n _finalAttributes: Record<string, any>;\n _uniqueId: string; // 用于处理 svg 中 id 重复的情况\n}\n\nexport class PictogramSeries<T extends IPictogramSeriesSpec = IPictogramSeriesSpec> extends GeoSeries<T> {\n static readonly type: string = PICTOGRAM_SERIES_TYPE;\n type = PICTOGRAM_SERIES_TYPE;\n static readonly mark = PictogramSeriesMark;\n static readonly transformerConstructor = PictogramSeriesSpecTransformer;\n\n svg!: string;\n\n protected _pictogramMark: IGroupMark;\n protected _parsedSvgResult: SVGParserResultWithViewport;\n private _labelMark: ITextMark;\n\n private _idToMark: Map<string, IMark> = new Map();\n\n setAttrFromSpec() {\n super.setAttrFromSpec();\n this.svg = this._spec.svg;\n this._nameField = this._spec.nameField;\n this._valueField = this._spec.valueField;\n\n if (!this.svg) {\n this._option?.onError(`svg source is not specified !`);\n }\n this._parsedSvgResult = getSVGSource(this.svg)?.latestData;\n\n if (!this._parsedSvgResult) {\n this._option?.onError(`'${this.svg}' is not registered !`);\n }\n }\n\n getDatumCenter(datum: SVGParsedElementExtend): [number, number] {\n return [Number.NaN, Number.NaN];\n }\n\n getDatumName(datum: SVGParsedElementExtend): string {\n return datum.name || datum._nameFromParent;\n }\n\n getMarksWithoutRoot(): IMark[] {\n return this.getMarks().filter(\n m => m.name && !m.name.includes('seriesGroup') && !m.name.includes('root') && m !== this._pictogramMark\n );\n }\n\n protected _buildMarkAttributeContext() {\n super._buildMarkAttributeContext();\n this._markAttributeContext.getTransformMatrix = this.getRootMatrix.bind(this);\n this._markAttributeContext.coordToPosition = this.coordToPosition.bind(this);\n this._markAttributeContext.dataToPosition = this.dataToPosition.bind(this);\n }\n\n protected _defaultHoverConfig(finalHoverSpec: IHoverSpec) {\n return {\n type: ELEMENT_HIGHLIGHT_BY_GRPHIC_NAME,\n // trigger: finalHoverSpec.trigger as EventType,\n trigger: finalHoverSpec.trigger as GraphicEventType,\n triggerOff: 'pointerout' as GraphicEventType,\n blurState: STATE_VALUE_ENUM.STATE_HOVER_REVERSE,\n highlightState: STATE_VALUE_ENUM.STATE_HOVER\n };\n }\n\n protected _defaultSelectConfig(finalSelectSpec: ISelectSpec) {\n const isMultiple = finalSelectSpec.mode === 'multiple';\n const triggerOff = isValid(finalSelectSpec.triggerOff)\n ? finalSelectSpec.triggerOff\n : isMultiple\n ? ['empty', 'self']\n : ['empty', finalSelectSpec.trigger];\n\n return {\n type: ELEMENT_SELECT_BY_GRPHIC_NAME,\n trigger: finalSelectSpec.trigger as GraphicEventType,\n triggerOff: triggerOff as GraphicEventType,\n reverseState: STATE_VALUE_ENUM.STATE_SELECTED_REVERSE,\n state: STATE_VALUE_ENUM.STATE_SELECTED,\n isMultiple\n };\n }\n\n initMark() {\n this._pictogramMark = this._createMark(\n PictogramSeries.mark.pictogram,\n {\n groupKey: this.getDimensionField()[0],\n isSeriesMark: true,\n skipBeforeLayouted: true\n },\n {\n morph: shouldMarkDoMorph(this._spec, PictogramSeries.mark.pictogram.name)\n }\n ) as IGroupMark;\n\n if (!this._pictogramMark) {\n return;\n }\n this._pictogramMark.setData(this._mapViewData);\n this._pictogramMark.setUserId(PictogramSeries.mark.pictogram.name);\n for (const element of this._mapViewData.getDataView().latestData as SVGParserResult['elements']) {\n const { graphicType: type, name, parent, id, _nameFromParent, _uniqueId } = element;\n\n const mark = this._createMark(\n { type, name: name ?? _nameFromParent },\n {\n groupKey: _uniqueId,\n isSeriesMark: false,\n skipBeforeLayouted: true,\n parent: (this._idToMark.get(parent?._uniqueId) as IGroupMark) ?? this._pictogramMark\n },\n {\n morph: shouldMarkDoMorph(this._spec, PictogramSeries.mark.pictogram.name)\n }\n );\n\n if (mark) {\n mark.setData(this._mapViewData);\n mark.setUserId(_uniqueId); // id 必须唯一,但无法控制 svg 中元素有重复 id, 这里做一个保护\n this._idToMark.set(_uniqueId, mark);\n if (mark.type !== 'group') {\n mark.setMarkConfig({ graphicName: mark.name });\n }\n mark.setTransform([\n {\n type: 'filter',\n callback: (datum: SVGParsedElementExtend) => {\n return datum._uniqueId === _uniqueId;\n }\n }\n ]);\n }\n }\n this._initLabelMark();\n }\n\n private _initLabelMark() {\n // @ts-ignore\n if (this._spec.label.visible !== true) {\n return;\n }\n\n const labelMark = this._createMark(PictogramSeries.mark.label, {\n isSeriesMark: false,\n parent: this._pictogramMark,\n groupKey: '_uniqueId',\n skipBeforeLayouted: true\n }) as ITextMark;\n\n if (labelMark) {\n this._labelMark = labelMark;\n this._labelMark.setData(this._mapViewData);\n }\n }\n\n initLabelMarkStyle() {\n if (!this._labelMark) {\n return;\n }\n this.setMarkStyle(\n this._labelMark,\n {\n visible: (d: Datum) => !!this._validElement(d as SVGParsedElementExtend),\n x: (d: Datum) => this.dataToPosition(d, true)?.x,\n y: (d: Datum) => this.dataToPosition(d, true)?.y,\n text: (d: Datum) => d[this.nameField],\n textAlign: 'center',\n textBaseline: 'middle'\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n initMarkStyle() {\n const { root } = this._parsedSvgResult;\n const svgViewportRect = this._getSvgViewportRect();\n const elements = this._mapViewData.getDataView().latestData as SVGParserResult['elements'];\n if (root) {\n this.setMarkStyle(\n this._pictogramMark,\n graphicAttributeTransform.group(root.attributes),\n 'normal',\n AttributeLevel.Built_In\n );\n this.setMarkStyle(\n this._pictogramMark,\n {\n postMatrix: () => this._getFittedSvgRootMatrix()\n },\n 'normal',\n AttributeLevel.Built_In\n );\n if (svgViewportRect) {\n // fill should be true or content will be invisible\n this._pictogramMark.setMarkConfig({\n clip: true,\n clipPath: [createRect({ ...svgViewportRect, fill: true }) as any]\n });\n }\n }\n for (const element of elements) {\n const { _uniqueId, _finalAttributes: attributes } = element as SVGParsedElementExtend;\n const mark = this._idToMark.get(_uniqueId);\n const valid = this._validElement(element);\n if (mark) {\n // 描边粗细跟随缩放倍数\n this.setMarkStyle(mark, { keepStrokeScale: true }, 'normal', AttributeLevel.Built_In);\n if (valid) {\n this.initMarkStyleWithSpec(mark, merge({}, this._spec.pictogram, (this._spec as any)[mark.name]));\n this.setMarkStyle(mark, attributes, 'normal', AttributeLevel.Series);\n mark.setPostProcess('fill', (result, datum) => {\n return isValid(result) ? result : this._spec.defaultFillColor;\n });\n } else {\n // 对于没有设置 name 的元素,不支持响应事件、改变样式\n mark.setMarkConfig({ interactive: false });\n this.setMarkStyle(mark, attributes, 'normal', AttributeLevel.Built_In);\n }\n }\n }\n\n this.initLabelMarkStyle();\n }\n /** 在 svg 中使用 name attribute 标注了的图元*/\n protected _validElement(element: SVGParsedElement) {\n return element.name || element._nameFromParent;\n }\n\n protected initTooltip() {\n this._tooltipHelper = new PictogramSeriesTooltipHelper(this);\n this.getMarksWithoutRoot().forEach(mark => {\n if (mark && mark.name) {\n this._tooltipHelper.activeTriggerSet.mark.add(mark);\n }\n });\n }\n\n dataToPosition(datum: Datum, global = false): IPointLike {\n if (!datum) {\n return null;\n }\n const name = datum[this.nameField];\n if (!name) {\n return null;\n }\n\n const mark = this.getMarksWithoutRoot().filter(mark => mark.name === name);\n if (!mark || mark.length === 0) {\n return null;\n }\n let bounds = new Bounds();\n if (global) {\n mark.forEach(m => {\n bounds = bounds.union(m.getGraphics()[0].globalAABBBounds);\n });\n } else {\n mark.forEach(m => {\n bounds = bounds.union(m.getProduct().AABBBounds);\n });\n }\n\n const point = { x: (bounds.x1 + bounds.x2) / 2, y: (bounds.y1 + bounds.y2) / 2 };\n\n if (global) {\n const { x, y } = this.getLayoutStartPoint();\n point.x -= x;\n point.y -= y;\n }\n return point;\n }\n\n coordToPosition(point: IPoint): IPoint | undefined {\n if (!point) {\n return null;\n }\n const { x, y } = point;\n const matrix = this.getRootMatrix();\n if (!matrix) {\n return null;\n }\n const position = {};\n matrix.getInverse().transformPoint({ x, y }, position as IPoint);\n return position as IPoint;\n }\n\n getRootMatrix() {\n return this.getPictogramRootGraphic()?.transMatrix as IMatrix;\n }\n\n getPictogramRootGraphic(): IGroup {\n return this._pictogramMark.getProduct();\n }\n\n private _getSvgRootMatrix() {\n const transform = this._parsedSvgResult?.root?.transform as IMatrix;\n return transform\n ? new Matrix(transform.a, transform.b, transform.c, transform.d, transform.e, transform.f)\n : new Matrix();\n }\n\n private _getSvgViewportRect() {\n const viewBoxRect = this._parsedSvgResult?.viewBoxRect;\n\n if (viewBoxRect) {\n return viewBoxRect;\n }\n\n const { width, height } = this._parsedSvgResult ?? {};\n if (Number.isFinite(width) && Number.isFinite(height) && width > 0 && height > 0) {\n return {\n x: 0,\n y: 0,\n width,\n height\n };\n }\n\n return this._parsedSvgResult?.[SVG_VIEWPORT_RECT_KEY] ?? null;\n }\n\n private _getSvgRootBounds(rootMatrix: Matrix) {\n const viewBoxRect = this._getSvgViewportRect();\n\n if (!viewBoxRect) {\n return null;\n }\n\n const bounds = new Bounds().setValue(\n viewBoxRect.x,\n viewBoxRect.y,\n viewBoxRect.x + viewBoxRect.width,\n viewBoxRect.y + viewBoxRect.height\n );\n bounds.transformWithMatrix(rootMatrix);\n\n return bounds;\n }\n\n private _appendMatrixScale(matrix: Matrix, scale: number, center: IPointLike) {\n const nextMatrix = new Matrix();\n\n nextMatrix.translate(center.x, center.y);\n nextMatrix.scale(scale, scale);\n nextMatrix.translate(-center.x, -center.y);\n nextMatrix.multiply(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f);\n\n return nextMatrix;\n }\n\n private _appendMatrixTranslate(matrix: Matrix, dx: number, dy: number) {\n const nextMatrix = new Matrix();\n\n nextMatrix.translate(dx, dy);\n nextMatrix.multiply(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f);\n\n return nextMatrix;\n }\n\n private _getFittedSvgRootMatrix() {\n const rootMatrix = this._getSvgRootMatrix();\n const bounds = this._getSvgRootBounds(rootMatrix);\n\n if (!bounds) {\n return rootMatrix;\n }\n\n const width = bounds.width();\n const height = bounds.height();\n if (!Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0) {\n return rootMatrix;\n }\n\n const { width: regionWidth, height: regionHeight } = this.getLayoutRect();\n const rootCenterX = (bounds.x1 + bounds.x2) / 2;\n const rootCenterY = (bounds.y1 + bounds.y2) / 2;\n const scale = Math.min(regionWidth / width, regionHeight / height);\n const scaledMatrix = this._appendMatrixScale(rootMatrix, scale, { x: rootCenterX, y: rootCenterY });\n\n return this._appendMatrixTranslate(scaledMatrix, regionWidth / 2 - rootCenterX, regionHeight / 2 - rootCenterY);\n }\n\n initData() {\n super.initData();\n const parsedSvg = svgSourceMap.get(this.svg);\n if (!parsedSvg) {\n this._option?.onError('no valid svg found!');\n }\n const svgData = new DataView(this._dataSet, { name: `pictogram_${this.id}_data` });\n registerDataSetInstanceTransform(this._dataSet, 'pictogram', pictogram);\n registerDataSetInstanceTransform(this._dataSet, 'lookup', lookup);\n svgData\n .parse([parsedSvg], {\n type: 'dataview'\n })\n .transform({ type: 'pictogram' })\n .transform({\n type: 'lookup',\n options: {\n from: () => this.getViewData().latestData,\n key: 'name',\n fields: this._nameField,\n set: (a: Datum, b: Datum) => {\n if (b) {\n a.data = b;\n }\n }\n }\n })\n .transform({\n type: 'lookup',\n options: {\n from: () => this.getViewData().latestData,\n key: '_nameFromParent',\n fields: this._nameField,\n set: (a: Datum, b: Datum) => {\n if (b) {\n a.data = b;\n }\n }\n }\n });\n this._data?.getDataView().target.addListener('change', svgData.reRunAllTransform);\n this._mapViewData = new CompilableData(this._option, svgData);\n }\n\n mapViewDataUpdate() {\n this._mapViewData.updateData();\n }\n\n onLayoutEnd(): void {\n super.onLayoutEnd();\n this._mapViewData?.getDataView().reRunAllTransform();\n }\n\n updateSVGSize() {\n const root = this.getPictogramRootGraphic();\n if (root) {\n root.setAttributes({ postMatrix: this._getFittedSvgRootMatrix() });\n }\n }\n\n protected initEvent(): void {\n super.initEvent();\n this._mapViewData.getDataView()?.target.addListener('change', this.mapViewDataUpdate.bind(this));\n }\n\n handleZoom(e: ZoomEventParam) {\n const { scale, scaleCenter } = e;\n if (scale === 1) {\n return;\n }\n\n const root = this.getPictogramRootGraphic();\n if (root) {\n if (!root.attribute.postMatrix) {\n root.setAttributes({\n postMatrix: new Matrix()\n });\n }\n root.scale(scale, scale, scaleCenter);\n }\n }\n\n handlePan(e: PanEventParam) {\n const { delta } = e;\n if (delta[0] === 0 && delta[1] === 0) {\n return;\n }\n const root = this.getPictogramRootGraphic();\n if (root) {\n if (!root.attribute.postMatrix) {\n root.setAttributes({\n postMatrix: new Matrix()\n });\n }\n root.translate(delta[0], delta[1]);\n }\n }\n\n getMarkData(datum: Datum) {\n return datum.data ?? {};\n }\n\n getMeasureField(): string[] {\n return [this.valueField];\n }\n\n getDimensionField(): string[] {\n return [this.nameField];\n }\n protected _getSeriesInfo(field: string, keys: string[]) {\n const defaultShapeType = this.getDefaultShapeType();\n return keys.map(key => {\n return {\n key,\n originalKey: key,\n style: this.getSeriesStyle({\n data: {\n [field]: key\n }\n }),\n shapeType: defaultShapeType\n } as ISeriesSeriesInfo;\n });\n }\n\n release(): void {\n this._parsedSvgResult = null;\n this._idToMark.clear();\n this._idToMark = null;\n }\n}\n\nexport const registerPictogramSeries = () => {\n // 注册语法元素\n Factory.registerSeries(PictogramSeries.type, PictogramSeries);\n Factory.registerImplement('registerSVG', registerSVGSource);\n Factory.registerImplement('unregisterSVG', unregisterSVGSource);\n registerElementHighlightByGraphicName();\n registerElementSelectByGraphicName();\n};\n"]}
@@ -1,6 +1,16 @@
1
- import { DataView, type ISVGSourceOption } from '@visactor/vchart';
1
+ import { DataView, type SVGParserResult } from '@visactor/vchart';
2
2
  export declare const svgSourceMap: Map<string, DataView>;
3
- export declare function registerSVGSource(key: string, source: ISVGSourceOption): void;
3
+ export declare const SVG_VIEWPORT_RECT_KEY: "_vchartViewportRect";
4
+ export interface SVGViewportRect {
5
+ x: number;
6
+ y: number;
7
+ width: number;
8
+ height: number;
9
+ }
10
+ export interface SVGParserResultWithViewport extends SVGParserResult {
11
+ [SVG_VIEWPORT_RECT_KEY]?: SVGViewportRect;
12
+ }
13
+ export declare function registerSVGSource(key: string, source: string): void;
4
14
  export declare function unregisterSVGSource(key: string): void;
5
15
  export declare function getSVGSource(type: string): DataView;
6
16
  export declare function clearSVGSource(): void;
@@ -4,19 +4,43 @@ import { DataSet, DataView, svgParser } from "@visactor/vchart";
4
4
 
5
5
  export const svgSourceMap = new Map;
6
6
 
7
+ export const SVG_VIEWPORT_RECT_KEY = "_vchartViewportRect";
8
+
7
9
  let svgDataSet;
8
10
 
11
+ const numberReg = /-?(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?/gi;
12
+
9
13
  function initSVGDataSet() {
10
14
  svgDataSet || (svgDataSet = new DataSet, registerDataSetInstanceParser(svgDataSet, "svg", svgParser));
11
15
  }
12
16
 
17
+ function parseEnableBackgroundViewport(source) {
18
+ var _a, _b, _c, _d;
19
+ const svgStartTag = null === (_a = source.match(/<svg\b[\s\S]*?>/i)) || void 0 === _a ? void 0 : _a[0], enableBackground = null === (_b = null == svgStartTag ? void 0 : svgStartTag.match(/\benable-background\s*=\s*(['"])(.*?)\1/i)) || void 0 === _b ? void 0 : _b[2];
20
+ if (!enableBackground || !/^\s*new\b/i.test(enableBackground)) return null;
21
+ const values = null !== (_d = null === (_c = enableBackground.match(numberReg)) || void 0 === _c ? void 0 : _c.map(Number)) && void 0 !== _d ? _d : [], [x, y, width, height] = values;
22
+ return !Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0 ? null : {
23
+ x: x,
24
+ y: y,
25
+ width: width,
26
+ height: height
27
+ };
28
+ }
29
+
30
+ function hasValidSize(parsedSvg) {
31
+ return Number.isFinite(parsedSvg.width) && Number.isFinite(parsedSvg.height) && parsedSvg.width > 0 && parsedSvg.height > 0;
32
+ }
33
+
13
34
  export function registerSVGSource(key, source) {
14
35
  svgSourceMap.has(key) && warn(`svg source key of '${key}' already exists, will be overwritten.`),
15
36
  initSVGDataSet();
16
37
  const dataView = new DataView(svgDataSet);
17
38
  dataView.parse(source, {
18
39
  type: "svg"
19
- }), svgSourceMap.set(key, dataView);
40
+ });
41
+ const parsedSvg = dataView.latestData, viewportRect = parseEnableBackgroundViewport(source);
42
+ parsedSvg && viewportRect && !parsedSvg.viewBoxRect && !hasValidSize(parsedSvg) && (parsedSvg._vchartViewportRect = viewportRect),
43
+ svgSourceMap.set(key, dataView);
20
44
  }
21
45
 
22
46
  export function unregisterSVGSource(key) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/charts/pictogram/series/svg-source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAyB,MAAM,kBAAkB,CAAC;AAEvF,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAoB,CAAC;AAExD,IAAI,UAA0B,CAAC;AAE/B,SAAS,cAAc;IACrB,IAAI,UAAU,EAAE;QACd,OAAO;KACR;IACD,UAAU,GAAG,IAAI,OAAO,EAAE,CAAC;IAC3B,6BAA6B,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAW,EAAE,MAAwB;IACrE,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QACzB,IAAI,CAAC,sBAAsB,GAAG,wCAAwC,CAAC,CAAC;KACzE;IACD,cAAc,EAAE,CAAC;IACjB,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,UAAW,CAAC,CAAC;IAC3C,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE;QACrB,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;IAEH,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QAC1B,IAAI,CAAC,gBAAgB,GAAG,oBAAoB,CAAC,CAAC;QAC9C,OAAO;KACR;IACD,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,YAAY,CAAC,KAAK,EAAE,CAAC;IACrB,UAAU,GAAG,IAAI,CAAC;AACpB,CAAC","file":"svg-source.js","sourcesContent":["import { registerDataSetInstanceParser, warn } from '@visactor/vchart';\nimport { DataSet, DataView, svgParser, type ISVGSourceOption } from '@visactor/vchart';\n\nexport const svgSourceMap = new Map<string, DataView>();\n\nlet svgDataSet: DataSet | null;\n\nfunction initSVGDataSet() {\n if (svgDataSet) {\n return;\n }\n svgDataSet = new DataSet();\n registerDataSetInstanceParser(svgDataSet, 'svg', svgParser);\n}\n\nexport function registerSVGSource(key: string, source: ISVGSourceOption) {\n if (svgSourceMap.has(key)) {\n warn(`svg source key of '${key}' already exists, will be overwritten.`);\n }\n initSVGDataSet();\n const dataView = new DataView(svgDataSet!);\n dataView.parse(source, {\n type: 'svg'\n });\n\n svgSourceMap.set(key, dataView);\n}\n\nexport function unregisterSVGSource(key: string) {\n if (!svgSourceMap.has(key)) {\n warn(`map type of '${key}' does not exists.`);\n return;\n }\n svgSourceMap.delete(key);\n}\n\nexport function getSVGSource(type: string) {\n return svgSourceMap.get(type);\n}\n\nexport function clearSVGSource() {\n svgSourceMap.clear();\n svgDataSet = null;\n}\n"]}
1
+ {"version":3,"sources":["../src/charts/pictogram/series/svg-source.ts"],"names":[],"mappings":"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","file":"svg-source.js","sourcesContent":["import { registerDataSetInstanceParser, warn } from '@visactor/vchart';\nimport { DataSet, DataView, svgParser, type SVGParserResult } from '@visactor/vchart';\n\nexport const svgSourceMap = new Map<string, DataView>();\nexport const SVG_VIEWPORT_RECT_KEY = '_vchartViewportRect' as const;\n\nexport interface SVGViewportRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface SVGParserResultWithViewport extends SVGParserResult {\n [SVG_VIEWPORT_RECT_KEY]?: SVGViewportRect;\n}\n\nlet svgDataSet: DataSet | null;\n\nconst numberReg = /-?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[-+]?\\d+)?/gi;\n\nfunction initSVGDataSet() {\n if (svgDataSet) {\n return;\n }\n svgDataSet = new DataSet();\n registerDataSetInstanceParser(svgDataSet, 'svg', svgParser);\n}\n\nfunction parseEnableBackgroundViewport(source: string): SVGViewportRect | null {\n const svgStartTag = source.match(/<svg\\b[\\s\\S]*?>/i)?.[0];\n const enableBackground = svgStartTag?.match(/\\benable-background\\s*=\\s*(['\"])(.*?)\\1/i)?.[2];\n\n if (!enableBackground || !/^\\s*new\\b/i.test(enableBackground)) {\n return null;\n }\n\n const values = enableBackground.match(numberReg)?.map(Number) ?? [];\n const [x, y, width, height] = values;\n\n if (\n !Number.isFinite(x) ||\n !Number.isFinite(y) ||\n !Number.isFinite(width) ||\n !Number.isFinite(height) ||\n width <= 0 ||\n height <= 0\n ) {\n return null;\n }\n\n return { x, y, width, height };\n}\n\nfunction hasValidSize(parsedSvg: SVGParserResultWithViewport) {\n return (\n Number.isFinite(parsedSvg.width) && Number.isFinite(parsedSvg.height) && parsedSvg.width > 0 && parsedSvg.height > 0\n );\n}\n\nexport function registerSVGSource(key: string, source: string) {\n if (svgSourceMap.has(key)) {\n warn(`svg source key of '${key}' already exists, will be overwritten.`);\n }\n initSVGDataSet();\n const dataView = new DataView(svgDataSet!);\n dataView.parse(source, {\n type: 'svg'\n });\n const parsedSvg = dataView.latestData as SVGParserResultWithViewport;\n const viewportRect = parseEnableBackgroundViewport(source);\n\n if (parsedSvg && viewportRect && !parsedSvg.viewBoxRect && !hasValidSize(parsedSvg)) {\n parsedSvg[SVG_VIEWPORT_RECT_KEY] = viewportRect;\n }\n\n svgSourceMap.set(key, dataView);\n}\n\nexport function unregisterSVGSource(key: string) {\n if (!svgSourceMap.has(key)) {\n warn(`map type of '${key}' does not exists.`);\n return;\n }\n svgSourceMap.delete(key);\n}\n\nexport function getSVGSource(type: string) {\n return svgSourceMap.get(type);\n}\n\nexport function clearSVGSource() {\n svgSourceMap.clear();\n svgDataSet = null;\n}\n"]}
@@ -67,8 +67,11 @@ export function getBarRegressionLineConfig(config) {
67
67
  }
68
68
 
69
69
  export function appendBarRegressionLineConfig(chartSpec, spec) {
70
- var _a, _b;
71
- spec || (spec = null !== (_a = get(chartSpec, REGRESSION_LINE)) && void 0 !== _a ? _a : get(null === (_b = chartSpec.series) || void 0 === _b ? void 0 : _b.find((s => s.type === SeriesTypeEnum.bar)), REGRESSION_LINE));
70
+ var _a;
71
+ if (!spec) {
72
+ const seriesSpecs = Array.isArray(chartSpec.series) ? chartSpec.series : chartSpec.series ? [ chartSpec.series ] : [];
73
+ spec = null !== (_a = get(chartSpec, REGRESSION_LINE)) && void 0 !== _a ? _a : get(seriesSpecs.find((s => s.type === SeriesTypeEnum.bar)), REGRESSION_LINE);
74
+ }
72
75
  array(spec).forEach((s => {
73
76
  if (!1 !== s.visible) {
74
77
  chartSpec.customMark || (chartSpec.customMark = []);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/bar-regression-line/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @description vchart 自定义组件,用于实现柱图、线图以及面积图的系列标签\n * @author zhangweixing\n */\nimport { array, clamper, get, regressionPolynomial } from '@visactor/vchart';\nimport type { Datum, ICartesianSeries, ISpec } from '@visactor/vchart';\nimport { Direction, SeriesTypeEnum } from '@visactor/vchart';\nimport type { BarRegressionLineSpec } from './type';\nimport type { RegressionLineData } from '../regression-line/type';\nimport { REGRESSION_LINE } from '../regression-line/regression-line';\n\n/**\n * 获取系列标签的 spec 配置\n * @param position 显示位置\n * @param config 系列标签的样式配置\n * @returns\n */\nexport function getBarRegressionLineConfig(config: Omit<BarRegressionLineSpec, 'visible'>) {\n const { color, line, confidenceInterval, label } = config;\n return {\n type: 'component',\n componentType: REGRESSION_LINE,\n interactive: false,\n zIndex: 500, // 高于柱子\n style: {\n data: (datum: any, ctx: any) => {\n const vchart = ctx.vchart;\n const chart = vchart.getChart();\n const series = chart.getAllSeries().filter((s: any) => s.type === SeriesTypeEnum.bar) as ICartesianSeries[];\n const regressionData: RegressionLineData[] = [];\n\n // 必须存在散点图系列\n if (series && series.length) {\n series.forEach(s => {\n const region = s.getRegion().getLayoutStartPoint();\n const start = s.getRegion().getLayoutStartPoint();\n const rect = s.getRegion().getLayoutRect();\n const yClamper = clamper(start.y, start.y + rect.height);\n\n const data = s.getViewData().latestData;\n const fieldX = s.fieldX?.[0];\n const fieldY = s.fieldY?.[0];\n const isHorizontal = s.direction === Direction.horizontal;\n const groups = s.getRawDataStatisticsByField(fieldX).values;\n\n if (isHorizontal || !fieldX || !fieldY || !data || data.length <= 2 || groups.length <= 2) {\n return;\n }\n const { evaluateGrid, confidenceInterval } = regressionPolynomial(\n data,\n (datum: Datum) => groups.indexOf(datum?.[fieldX]),\n (datum: Datum) => datum?.[fieldY],\n { degree: config.degree }\n );\n const N = groups.length;\n const lineData = evaluateGrid(N);\n const confidenceData = confidenceInterval(N);\n const halfBandWidth = s.getXAxisHelper().getBandwidth(0) / 2;\n\n regressionData.push({\n color: color ?? s.getOption().globalScale.getScale('color')?.scale(s.getSeriesKeys()[0]),\n line: lineData.map((ld: Datum) => {\n const d = { [fieldX]: groups[ld.x], [fieldY]: ld.y };\n return {\n x: s.dataToPositionX(d) + region.x + halfBandWidth,\n y: yClamper(s.dataToPositionY(d) + region.y)\n };\n }),\n area: confidenceData.map((c: Datum) => {\n const d = { [fieldX]: groups[c.x], [fieldY]: c.lower };\n return {\n x: s.dataToPositionX(d) + region.x + halfBandWidth,\n y: yClamper(s.dataToPositionY(d) + region.y),\n y1: yClamper(s.dataToPositionY({ [fieldY]: c.upper }) + region.y)\n };\n })\n });\n });\n }\n\n return regressionData;\n },\n line,\n confidenceInterval,\n label\n }\n };\n}\n\nexport function appendBarRegressionLineConfig(chartSpec: ISpec, spec?: BarRegressionLineSpec) {\n if (!spec) {\n spec =\n get(chartSpec, REGRESSION_LINE) ??\n get(\n chartSpec.series?.find(s => s.type === SeriesTypeEnum.bar),\n REGRESSION_LINE\n );\n }\n const specs = array(spec);\n\n specs.forEach((s: BarRegressionLineSpec) => {\n if (s.visible !== false) {\n if (!(chartSpec as any).customMark) {\n (chartSpec as any).customMark = [];\n }\n\n const { visible, ...rest } = s;\n (chartSpec as any).customMark.push(getBarRegressionLineConfig(rest));\n }\n });\n}\n"]}
1
+ {"version":3,"sources":["../src/components/bar-regression-line/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @description vchart 自定义组件,用于实现柱图、线图以及面积图的系列标签\n * @author zhangweixing\n */\nimport { array, clamper, get, regressionPolynomial } from '@visactor/vchart';\nimport type { Datum, ICartesianSeries, ISpec } from '@visactor/vchart';\nimport { Direction, SeriesTypeEnum } from '@visactor/vchart';\nimport type { BarRegressionLineSpec } from './type';\nimport type { RegressionLineData } from '../regression-line/type';\nimport { REGRESSION_LINE } from '../regression-line/regression-line';\n\n/**\n * 获取系列标签的 spec 配置\n * @param position 显示位置\n * @param config 系列标签的样式配置\n * @returns\n */\nexport function getBarRegressionLineConfig(config: Omit<BarRegressionLineSpec, 'visible'>) {\n const { color, line, confidenceInterval, label } = config;\n return {\n type: 'component',\n componentType: REGRESSION_LINE,\n interactive: false,\n zIndex: 500, // 高于柱子\n style: {\n data: (datum: any, ctx: any) => {\n const vchart = ctx.vchart;\n const chart = vchart.getChart();\n const series = chart.getAllSeries().filter((s: any) => s.type === SeriesTypeEnum.bar) as ICartesianSeries[];\n const regressionData: RegressionLineData[] = [];\n\n // 必须存在散点图系列\n if (series && series.length) {\n series.forEach(s => {\n const region = s.getRegion().getLayoutStartPoint();\n const start = s.getRegion().getLayoutStartPoint();\n const rect = s.getRegion().getLayoutRect();\n const yClamper = clamper(start.y, start.y + rect.height);\n\n const data = s.getViewData().latestData;\n const fieldX = s.fieldX?.[0];\n const fieldY = s.fieldY?.[0];\n const isHorizontal = s.direction === Direction.horizontal;\n const groups = s.getRawDataStatisticsByField(fieldX).values;\n\n if (isHorizontal || !fieldX || !fieldY || !data || data.length <= 2 || groups.length <= 2) {\n return;\n }\n const { evaluateGrid, confidenceInterval } = regressionPolynomial(\n data,\n (datum: Datum) => groups.indexOf(datum?.[fieldX]),\n (datum: Datum) => datum?.[fieldY],\n { degree: config.degree }\n );\n const N = groups.length;\n const lineData = evaluateGrid(N);\n const confidenceData = confidenceInterval(N);\n const halfBandWidth = s.getXAxisHelper().getBandwidth(0) / 2;\n\n regressionData.push({\n color: color ?? s.getOption().globalScale.getScale('color')?.scale(s.getSeriesKeys()[0]),\n line: lineData.map((ld: Datum) => {\n const d = { [fieldX]: groups[ld.x], [fieldY]: ld.y };\n return {\n x: s.dataToPositionX(d) + region.x + halfBandWidth,\n y: yClamper(s.dataToPositionY(d) + region.y)\n };\n }),\n area: confidenceData.map((c: Datum) => {\n const d = { [fieldX]: groups[c.x], [fieldY]: c.lower };\n return {\n x: s.dataToPositionX(d) + region.x + halfBandWidth,\n y: yClamper(s.dataToPositionY(d) + region.y),\n y1: yClamper(s.dataToPositionY({ [fieldY]: c.upper }) + region.y)\n };\n })\n });\n });\n }\n\n return regressionData;\n },\n line,\n confidenceInterval,\n label\n }\n };\n}\n\nexport function appendBarRegressionLineConfig(chartSpec: ISpec, spec?: BarRegressionLineSpec) {\n if (!spec) {\n const seriesSpecs: any[] = Array.isArray(chartSpec.series)\n ? chartSpec.series\n : chartSpec.series\n ? [chartSpec.series]\n : [];\n\n spec =\n get(chartSpec, REGRESSION_LINE) ??\n get(\n seriesSpecs.find((s: any) => s.type === SeriesTypeEnum.bar),\n REGRESSION_LINE\n );\n }\n const specs = array(spec);\n\n specs.forEach((s: BarRegressionLineSpec) => {\n if (s.visible !== false) {\n if (!(chartSpec as any).customMark) {\n (chartSpec as any).customMark = [];\n }\n\n const { visible, ...rest } = s;\n (chartSpec as any).customMark.push(getBarRegressionLineConfig(rest));\n }\n });\n}\n"]}
@@ -62,8 +62,11 @@ export function getHistogramRegressionLineConfig(type, config) {
62
62
  }
63
63
 
64
64
  export function appendHistogramRegressionLineConfig(chartSpec, spec) {
65
- var _a, _b;
66
- spec || (spec = null !== (_a = get(chartSpec, REGRESSION_LINE)) && void 0 !== _a ? _a : get(null === (_b = chartSpec.series) || void 0 === _b ? void 0 : _b.find((s => s.type === SeriesTypeEnum.bar)), REGRESSION_LINE));
65
+ var _a;
66
+ if (!spec) {
67
+ const seriesSpecs = Array.isArray(chartSpec.series) ? chartSpec.series : chartSpec.series ? [ chartSpec.series ] : [];
68
+ spec = null !== (_a = get(chartSpec, REGRESSION_LINE)) && void 0 !== _a ? _a : get(seriesSpecs.find((s => s.type === SeriesTypeEnum.bar)), REGRESSION_LINE);
69
+ }
67
70
  array(spec).forEach((s => {
68
71
  if (!1 !== s.visible) {
69
72
  chartSpec.customMark || (chartSpec.customMark = []);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/histogram-regression-line/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @description vchart 自定义组件,用于实现柱图、线图以及面积图的系列标签\n * @author zhangweixing\n */\n\nimport type { KDEEvaluator } from '@visactor/vchart';\nimport { array, get, kde, ecdf, last } from '@visactor/vchart';\nimport type { Datum, ICartesianSeries, ISpec } from '@visactor/vchart';\nimport { SeriesTypeEnum } from '@visactor/vchart';\nimport type { HistogramRegressionLineSpec } from './type';\nimport type { RegressionLineData } from '../regression-line/type';\nimport { REGRESSION_LINE } from '../regression-line/regression-line';\n\nconst getRegressionByType = (type: 'kde' | 'ecdf', data: number[], kdeOptions?: any) => {\n switch (type) {\n case 'kde':\n return kde(data, kdeOptions);\n case 'ecdf':\n return ecdf(data);\n }\n};\n\n/**\n * 获取系列标签的 spec 配置\n * @param position 显示位置\n * @param config 系列标签的样式配置\n * @returns\n */\nexport function getHistogramRegressionLineConfig(\n type: 'kde' | 'ecdf',\n config: Omit<HistogramRegressionLineSpec, 'visible' | 'type'>\n) {\n const { line, label, color } = config;\n return {\n type: 'component',\n componentType: REGRESSION_LINE,\n interactive: false,\n zIndex: 500, // 高于柱子\n style: {\n data: (datum: any, ctx: any) => {\n const vchart = ctx.vchart;\n const chart = vchart.getChart();\n const series = chart.getAllSeries().filter((s: any) => s.type === SeriesTypeEnum.bar) as ICartesianSeries[];\n const regressionData: RegressionLineData[] = [];\n\n // 直方图使用的是bar系列\n if (series && series.length) {\n series.forEach(s => {\n const region = s.getRegion().getLayoutStartPoint();\n\n const rawData = (s as any)._rawData;\n const data = rawData?.rawData;\n const binTransformOptions = rawData.transformsArr?.find((t: any) => t.type === 'bin')?.options;\n const fieldX = s.fieldX?.[0];\n const scaleY = s.getYAxisHelper().getScale(0);\n const viewData = s.getViewData().latestData;\n\n if (!data || !data.length || !binTransformOptions?.field || !scaleY || !viewData || !viewData.length) {\n return;\n }\n const simpleData = data.map((entry: Datum) => entry[binTransformOptions.field]);\n const res = getRegressionByType(\n type,\n simpleData,\n type === 'kde'\n ? {\n bandwidth:\n viewData[0][binTransformOptions.outputNames?.x1 ?? 'x1'] -\n viewData[0][binTransformOptions.outputNames?.x0 ?? 'x0']\n }\n : null\n );\n const N = Math.max(3, Math.floor(simpleData.length / 4));\n const lineData = res.evaluateGrid(N);\n const yRange = scaleY.range();\n const y0 = yRange[0];\n const y1 = last(yRange);\n const scaleR =\n type === 'kde'\n ? (k: number) => {\n return scaleY.scale(k * data.length * (res as KDEEvaluator).bandwidth);\n }\n : (e: number) => {\n return y0 + (y1 - y0) * e;\n };\n\n regressionData.push({\n color: color ?? s.getOption().globalScale.getScale('color')?.scale(s.getSeriesKeys()[0]),\n line: lineData.map((ld: Datum) => {\n const d = { [fieldX]: ld.x };\n return {\n x: s.dataToPositionX(d) + region.x,\n y: scaleR(ld.y) + region.y\n };\n })\n });\n });\n }\n\n return regressionData;\n },\n line,\n label\n }\n };\n}\n\nexport function appendHistogramRegressionLineConfig(\n chartSpec: ISpec,\n spec?: HistogramRegressionLineSpec | HistogramRegressionLineSpec[]\n) {\n if (!spec) {\n spec =\n get(chartSpec, REGRESSION_LINE) ??\n get(\n chartSpec.series?.find(s => s.type === SeriesTypeEnum.bar),\n REGRESSION_LINE\n );\n }\n const specs = array(spec);\n\n specs.forEach((s: HistogramRegressionLineSpec) => {\n if (s.visible !== false) {\n if (!(chartSpec as any).customMark) {\n (chartSpec as any).customMark = [];\n }\n const { type, ...rest } = s;\n (chartSpec as any).customMark.push(getHistogramRegressionLineConfig(type, rest));\n }\n });\n}\n"]}
1
+ {"version":3,"sources":["../src/components/histogram-regression-line/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @description vchart 自定义组件,用于实现柱图、线图以及面积图的系列标签\n * @author zhangweixing\n */\n\nimport type { KDEEvaluator } from '@visactor/vchart';\nimport { array, get, kde, ecdf, last } from '@visactor/vchart';\nimport type { Datum, ICartesianSeries, ISpec } from '@visactor/vchart';\nimport { SeriesTypeEnum } from '@visactor/vchart';\nimport type { HistogramRegressionLineSpec } from './type';\nimport type { RegressionLineData } from '../regression-line/type';\nimport { REGRESSION_LINE } from '../regression-line/regression-line';\n\nconst getRegressionByType = (type: 'kde' | 'ecdf', data: number[], kdeOptions?: any) => {\n switch (type) {\n case 'kde':\n return kde(data, kdeOptions);\n case 'ecdf':\n return ecdf(data);\n }\n};\n\n/**\n * 获取系列标签的 spec 配置\n * @param position 显示位置\n * @param config 系列标签的样式配置\n * @returns\n */\nexport function getHistogramRegressionLineConfig(\n type: 'kde' | 'ecdf',\n config: Omit<HistogramRegressionLineSpec, 'visible' | 'type'>\n) {\n const { line, label, color } = config;\n return {\n type: 'component',\n componentType: REGRESSION_LINE,\n interactive: false,\n zIndex: 500, // 高于柱子\n style: {\n data: (datum: any, ctx: any) => {\n const vchart = ctx.vchart;\n const chart = vchart.getChart();\n const series = chart.getAllSeries().filter((s: any) => s.type === SeriesTypeEnum.bar) as ICartesianSeries[];\n const regressionData: RegressionLineData[] = [];\n\n // 直方图使用的是bar系列\n if (series && series.length) {\n series.forEach(s => {\n const region = s.getRegion().getLayoutStartPoint();\n\n const rawData = (s as any)._rawData;\n const data = rawData?.rawData;\n const binTransformOptions = rawData.transformsArr?.find((t: any) => t.type === 'bin')?.options;\n const fieldX = s.fieldX?.[0];\n const scaleY = s.getYAxisHelper().getScale(0);\n const viewData = s.getViewData().latestData;\n\n if (!data || !data.length || !binTransformOptions?.field || !scaleY || !viewData || !viewData.length) {\n return;\n }\n const simpleData = data.map((entry: Datum) => entry[binTransformOptions.field]);\n const res = getRegressionByType(\n type,\n simpleData,\n type === 'kde'\n ? {\n bandwidth:\n viewData[0][binTransformOptions.outputNames?.x1 ?? 'x1'] -\n viewData[0][binTransformOptions.outputNames?.x0 ?? 'x0']\n }\n : null\n );\n const N = Math.max(3, Math.floor(simpleData.length / 4));\n const lineData = res.evaluateGrid(N);\n const yRange = scaleY.range();\n const y0 = yRange[0];\n const y1 = last(yRange);\n const scaleR =\n type === 'kde'\n ? (k: number) => {\n return scaleY.scale(k * data.length * (res as KDEEvaluator).bandwidth);\n }\n : (e: number) => {\n return y0 + (y1 - y0) * e;\n };\n\n regressionData.push({\n color: color ?? s.getOption().globalScale.getScale('color')?.scale(s.getSeriesKeys()[0]),\n line: lineData.map((ld: Datum) => {\n const d = { [fieldX]: ld.x };\n return {\n x: s.dataToPositionX(d) + region.x,\n y: scaleR(ld.y) + region.y\n };\n })\n });\n });\n }\n\n return regressionData;\n },\n line,\n label\n }\n };\n}\n\nexport function appendHistogramRegressionLineConfig(\n chartSpec: ISpec,\n spec?: HistogramRegressionLineSpec | HistogramRegressionLineSpec[]\n) {\n if (!spec) {\n const seriesSpecs: any[] = Array.isArray(chartSpec.series)\n ? chartSpec.series\n : chartSpec.series\n ? [chartSpec.series]\n : [];\n\n spec =\n get(chartSpec, REGRESSION_LINE) ??\n get(\n seriesSpecs.find((s: any) => s.type === SeriesTypeEnum.bar),\n REGRESSION_LINE\n );\n }\n const specs = array(spec);\n\n specs.forEach((s: HistogramRegressionLineSpec) => {\n if (s.visible !== false) {\n if (!(chartSpec as any).customMark) {\n (chartSpec as any).customMark = [];\n }\n const { type, ...rest } = s;\n (chartSpec as any).customMark.push(getHistogramRegressionLineConfig(type, rest));\n }\n });\n}\n"]}
@@ -1,2 +1 @@
1
- export { };
2
- //# sourceMappingURL=type.js.map
1
+ export { };
@@ -1,5 +1,6 @@
1
1
  import type { Feature } from '@visactor/vchart';
2
- import type { IRect, IOrientType, IPoint } from '@visactor/vchart';
2
+ import type { IOrientType, IPoint } from '@visactor/vchart';
3
+ import type { IRect } from '@visactor/vchart/src/typings/space';
3
4
  type IBound = {
4
5
  x1: number;
5
6
  x2: number;
@@ -139,4 +139,5 @@ export function candidatesByOrient(positions, anchor, rect, offset = 0) {
139
139
  y: y
140
140
  });
141
141
  })), candidates;
142
- }
142
+ }
143
+ //# sourceMappingURL=layout.js.map