@visactor/vchart-extension 2.1.0-alpha.9 → 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 (41) 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/image-cloud/series/image-cloud.d.ts +1 -1
  6. package/cjs/charts/pictogram/series/pictogram.d.ts +9 -2
  7. package/cjs/charts/pictogram/series/pictogram.js +55 -15
  8. package/cjs/charts/pictogram/series/pictogram.js.map +1 -1
  9. package/cjs/charts/pictogram/series/svg-source.d.ts +12 -2
  10. package/cjs/charts/pictogram/series/svg-source.js +27 -3
  11. package/cjs/charts/pictogram/series/svg-source.js.map +1 -1
  12. package/cjs/components/bar-regression-line/index.js +6 -3
  13. package/cjs/components/bar-regression-line/index.js.map +1 -1
  14. package/cjs/components/histogram-regression-line/index.js +6 -3
  15. package/cjs/components/histogram-regression-line/index.js.map +1 -1
  16. package/cjs/components/map-label/layout.d.ts +2 -1
  17. package/cjs/components/map-label/layout.js.map +1 -1
  18. package/cjs/components/map-label/map-label.d.ts +5 -4
  19. package/cjs/components/map-label/map-label.js.map +1 -1
  20. package/cjs/components/scatter-regression-line/index.js +6 -3
  21. package/cjs/components/scatter-regression-line/index.js.map +1 -1
  22. package/esm/charts/3d/layout.d.ts +2 -1
  23. package/esm/charts/3d/layout.js.map +1 -1
  24. package/esm/charts/image-cloud/series/image-cloud.d.ts +1 -1
  25. package/esm/charts/pictogram/series/pictogram.d.ts +9 -2
  26. package/esm/charts/pictogram/series/pictogram.js +57 -17
  27. package/esm/charts/pictogram/series/pictogram.js.map +1 -1
  28. package/esm/charts/pictogram/series/svg-source.d.ts +12 -2
  29. package/esm/charts/pictogram/series/svg-source.js +25 -1
  30. package/esm/charts/pictogram/series/svg-source.js.map +1 -1
  31. package/esm/components/bar-regression-line/index.js +5 -2
  32. package/esm/components/bar-regression-line/index.js.map +1 -1
  33. package/esm/components/histogram-regression-line/index.js +5 -2
  34. package/esm/components/histogram-regression-line/index.js.map +1 -1
  35. package/esm/components/map-label/layout.d.ts +2 -1
  36. package/esm/components/map-label/layout.js.map +1 -1
  37. package/esm/components/map-label/map-label.d.ts +5 -4
  38. package/esm/components/map-label/map-label.js.map +1 -1
  39. package/esm/components/scatter-regression-line/index.js +5 -2
  40. package/esm/components/scatter-regression-line/index.js.map +1 -1
  41. package/package.json +7 -7
@@ -1,6 +1,7 @@
1
- import type { IBaseLayout, IChart, ILayoutItem, IOffset, IRect } from '@visactor/vchart';
1
+ import type { IBaseLayout, IChart, ILayoutItem, IOffset } from '@visactor/vchart';
2
2
  import { Layout } from '@visactor/vchart';
3
3
  import type { IBoundsLike } from '@visactor/vchart';
4
+ import type { IRect } from '@visactor/vchart/src/typings/space';
4
5
  export declare class Layout3d extends Layout implements IBaseLayout {
5
6
  recomputeWidth: boolean;
6
7
  recomputeHeight: boolean;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/charts/3d/layout.ts"],"names":[],"mappings":"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","file":"layout.js","sourcesContent":["import type { IAxis, IBaseLayout, IChart, ILayoutItem, IOffset, IRect, LayoutSideType } from '@visactor/vchart';\nimport { Factory, isXAxis, isYAxis, Layout } from '@visactor/vchart';\nimport type { IBoundsLike } from '@visactor/vchart';\n\nexport class Layout3d extends Layout implements IBaseLayout {\n declare recomputeWidth: boolean;\n declare recomputeHeight: boolean;\n static type = 'layout3d';\n\n layoutItems(_chart: IChart, items: ILayoutItem[], chartLayoutRect: IRect, chartViewBox: IBoundsLike): void {\n // 布局初始化\n this._layoutInit(_chart, items, chartLayoutRect, chartViewBox);\n\n const recompute = {\n recomputeWidth: this.recomputeWidth,\n recomputeHeight: this.recomputeHeight\n };\n // 先布局 normal 类型的元素\n this._layoutNormalItems(items, recompute);\n\n // 开始布局 region 相关元素\n // 为了锁紧先保存一下当前的布局空间\n const layoutTemp: LayoutSideType = {\n left: this.leftCurrent,\n top: this.topCurrent,\n right: this.rightCurrent,\n bottom: this.bottomCurrent\n };\n // 计算3d轴\n const absoluteItem = items.filter(x => x.layoutType === 'absolute');\n const zItems = absoluteItem.filter(i => {\n return i.layoutOrient === 'z';\n });\n\n // 计算z的宽高,让出一部分位置\n let extraWH = { width: 0, height: 0 };\n if (zItems.length) {\n const layoutRect = zItems[0].getLayoutRect();\n extraWH = layoutRect;\n }\n this.leftCurrent += extraWH.width / 8;\n this.rightCurrent -= extraWH.width / 8;\n this.topCurrent += extraWH.height / 8;\n this.bottomCurrent -= extraWH.height / 8;\n\n const { regionItems, relativeItems, relativeOverlapItems, allRelatives, overlapItems } = this._groupItems(items);\n // 有元素开启了自动缩进\n // TODO:目前只有普通占位布局下的 region-relative 元素支持\n // 主要考虑常规元素超出画布一般为用户个性设置,而且可以设置padding规避裁剪,不需要使用自动缩进\n this.layoutRegionItems(regionItems, relativeItems, relativeOverlapItems, overlapItems, recompute);\n\n // 缩进\n this._processAutoIndent(\n regionItems,\n relativeItems,\n relativeOverlapItems,\n overlapItems,\n allRelatives,\n layoutTemp,\n recompute\n );\n\n // z轴以外的绝对定位\n const absoluteItemExceptZAxis = absoluteItem.filter(i => i.layoutOrient !== 'z');\n this.layoutAbsoluteItems(absoluteItemExceptZAxis);\n\n // 找到x轴\n const xAxis = relativeItems.filter(item => {\n return item.model.specKey === 'axes' && isXAxis(item.layoutOrient);\n })[0];\n const yAxis = relativeItems.filter(item => {\n return item.model.specKey === 'axes' && isYAxis(item.layoutOrient);\n })[0];\n if (xAxis && zItems.length) {\n const sp = xAxis.getLayoutStartPoint();\n const lr = xAxis.getLayoutRect();\n const zRect = {\n x: yAxis.layoutOrient === 'left' ? sp.x + lr.width : sp.x,\n y: sp.y,\n width: this._chartLayoutRect.width,\n height: this._chartLayoutRect.height\n };\n (zItems[0].model as IAxis).directionStr = yAxis.layoutOrient === 'left' ? 'r2l' : 'l2r';\n // 将长宽高信息传给所有的轴\n const xRect = xAxis.getLayoutRect();\n const yRect = yAxis.getLayoutRect();\n // const zRect = zItems[0].getLayoutRect();\n const box3d = {\n length: zItems[0].getLayoutRect().width,\n width: xRect.width,\n height: yRect.height\n };\n\n (<any>xAxis.model).setLayout3dBox && (<any>xAxis.model).setLayout3dBox(box3d);\n (<any>yAxis.model).setLayout3dBox && (<any>yAxis.model).setLayout3dBox(box3d);\n (<any>zItems[0].model).setLayout3dBox && (<any>zItems[0].model).setLayout3dBox(box3d);\n\n this.layoutZAxisItems(zItems, zRect);\n }\n }\n\n /**\n * 对z轴进行布局\n * @param zItems\n */\n protected layoutZAxisItems(zItems: ILayoutItem[], zRect: IRect) {\n zItems.forEach(item => {\n // 设置盒子\n item.absoluteLayoutInRect(zRect);\n });\n }\n\n /**\n * 工具方法 根据item属性获取给item提供的布局空间\n * @param item\n */\n getItemComputeLayoutRect(item: ILayoutItem, extraOffset?: IOffset) {\n if (!extraOffset) {\n extraOffset = { offsetLeft: 0, offsetRight: 0, offsetTop: 0, offsetBottom: 0 };\n }\n const result = {\n width:\n this.rightCurrent -\n this.leftCurrent -\n item.layoutPaddingLeft -\n item.layoutPaddingRight -\n (extraOffset.offsetLeft + extraOffset.offsetRight),\n height:\n this.bottomCurrent -\n this.topCurrent -\n item.layoutPaddingTop -\n item.layoutPaddingBottom -\n (extraOffset.offsetTop + extraOffset.offsetBottom)\n };\n return result;\n }\n\n protected _checkAutoIndent(items: ILayoutItem[]) {\n const result = {\n top: 0,\n left: 0,\n bottom: 0,\n right: 0\n };\n const rightCurrent = this._chartViewBox.x2 - this._chartViewBox.x1 - this.rightCurrent;\n const bottomCurrent = this._chartViewBox.y2 - this._chartViewBox.y1 - this.bottomCurrent;\n items.forEach(i => {\n if (!i.getModelVisible() || !i.autoIndent) {\n return;\n }\n const vOrH = i.layoutOrient === 'left' || i.layoutOrient === 'right';\n const outer = i.getLastComputeOutBounds();\n if (vOrH) {\n result.top = Math.max(result.top, outer.y1 - this.topCurrent);\n result.bottom = Math.max(result.bottom, outer.y2 - bottomCurrent);\n } else {\n result.left = Math.max(result.left, outer.x1 - this.leftCurrent);\n result.right = Math.max(result.right, outer.x2 - rightCurrent);\n }\n });\n return result;\n }\n}\n\nexport const registerLayout3d = () => {\n Factory.registerLayout(Layout3d.type, Layout3d);\n};\n"]}
1
+ {"version":3,"sources":["../src/charts/3d/layout.ts"],"names":[],"mappings":"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","file":"layout.js","sourcesContent":["import type { IAxis, IBaseLayout, IChart, ILayoutItem, IOffset, LayoutSideType } from '@visactor/vchart';\nimport { Factory, isXAxis, isYAxis, Layout } from '@visactor/vchart';\nimport type { IBoundsLike } from '@visactor/vchart';\nimport type { IRect } from '@visactor/vchart/src/typings/space';\n\nexport class Layout3d extends Layout implements IBaseLayout {\n declare recomputeWidth: boolean;\n declare recomputeHeight: boolean;\n static type = 'layout3d';\n\n layoutItems(_chart: IChart, items: ILayoutItem[], chartLayoutRect: IRect, chartViewBox: IBoundsLike): void {\n // 布局初始化\n this._layoutInit(_chart, items, chartLayoutRect, chartViewBox);\n\n const recompute = {\n recomputeWidth: this.recomputeWidth,\n recomputeHeight: this.recomputeHeight\n };\n // 先布局 normal 类型的元素\n this._layoutNormalItems(items, recompute);\n\n // 开始布局 region 相关元素\n // 为了锁紧先保存一下当前的布局空间\n const layoutTemp: LayoutSideType = {\n left: this.leftCurrent,\n top: this.topCurrent,\n right: this.rightCurrent,\n bottom: this.bottomCurrent\n };\n // 计算3d轴\n const absoluteItem = items.filter(x => x.layoutType === 'absolute');\n const zItems = absoluteItem.filter(i => {\n return i.layoutOrient === 'z';\n });\n\n // 计算z的宽高,让出一部分位置\n let extraWH = { width: 0, height: 0 };\n if (zItems.length) {\n const layoutRect = zItems[0].getLayoutRect();\n extraWH = layoutRect;\n }\n this.leftCurrent += extraWH.width / 8;\n this.rightCurrent -= extraWH.width / 8;\n this.topCurrent += extraWH.height / 8;\n this.bottomCurrent -= extraWH.height / 8;\n\n const { regionItems, relativeItems, relativeOverlapItems, allRelatives, overlapItems } = this._groupItems(items);\n // 有元素开启了自动缩进\n // TODO:目前只有普通占位布局下的 region-relative 元素支持\n // 主要考虑常规元素超出画布一般为用户个性设置,而且可以设置padding规避裁剪,不需要使用自动缩进\n this.layoutRegionItems(regionItems, relativeItems, relativeOverlapItems, overlapItems, recompute);\n\n // 缩进\n this._processAutoIndent(\n regionItems,\n relativeItems,\n relativeOverlapItems,\n overlapItems,\n allRelatives,\n layoutTemp,\n recompute\n );\n\n // z轴以外的绝对定位\n const absoluteItemExceptZAxis = absoluteItem.filter(i => i.layoutOrient !== 'z');\n this.layoutAbsoluteItems(absoluteItemExceptZAxis);\n\n // 找到x轴\n const xAxis = relativeItems.filter(item => {\n return item.model.specKey === 'axes' && isXAxis(item.layoutOrient);\n })[0];\n const yAxis = relativeItems.filter(item => {\n return item.model.specKey === 'axes' && isYAxis(item.layoutOrient);\n })[0];\n if (xAxis && zItems.length) {\n const sp = xAxis.getLayoutStartPoint();\n const lr = xAxis.getLayoutRect();\n const zRect = {\n x: yAxis.layoutOrient === 'left' ? sp.x + lr.width : sp.x,\n y: sp.y,\n width: this._chartLayoutRect.width,\n height: this._chartLayoutRect.height\n };\n (zItems[0].model as IAxis).directionStr = yAxis.layoutOrient === 'left' ? 'r2l' : 'l2r';\n // 将长宽高信息传给所有的轴\n const xRect = xAxis.getLayoutRect();\n const yRect = yAxis.getLayoutRect();\n // const zRect = zItems[0].getLayoutRect();\n const box3d = {\n length: zItems[0].getLayoutRect().width,\n width: xRect.width,\n height: yRect.height\n };\n\n (<any>xAxis.model).setLayout3dBox && (<any>xAxis.model).setLayout3dBox(box3d);\n (<any>yAxis.model).setLayout3dBox && (<any>yAxis.model).setLayout3dBox(box3d);\n (<any>zItems[0].model).setLayout3dBox && (<any>zItems[0].model).setLayout3dBox(box3d);\n\n this.layoutZAxisItems(zItems, zRect);\n }\n }\n\n /**\n * 对z轴进行布局\n * @param zItems\n */\n protected layoutZAxisItems(zItems: ILayoutItem[], zRect: IRect) {\n zItems.forEach(item => {\n // 设置盒子\n item.absoluteLayoutInRect(zRect);\n });\n }\n\n /**\n * 工具方法 根据item属性获取给item提供的布局空间\n * @param item\n */\n getItemComputeLayoutRect(item: ILayoutItem, extraOffset?: IOffset) {\n if (!extraOffset) {\n extraOffset = { offsetLeft: 0, offsetRight: 0, offsetTop: 0, offsetBottom: 0 };\n }\n const result = {\n width:\n this.rightCurrent -\n this.leftCurrent -\n item.layoutPaddingLeft -\n item.layoutPaddingRight -\n (extraOffset.offsetLeft + extraOffset.offsetRight),\n height:\n this.bottomCurrent -\n this.topCurrent -\n item.layoutPaddingTop -\n item.layoutPaddingBottom -\n (extraOffset.offsetTop + extraOffset.offsetBottom)\n };\n return result;\n }\n\n protected _checkAutoIndent(items: ILayoutItem[]) {\n const result = {\n top: 0,\n left: 0,\n bottom: 0,\n right: 0\n };\n const rightCurrent = this._chartViewBox.x2 - this._chartViewBox.x1 - this.rightCurrent;\n const bottomCurrent = this._chartViewBox.y2 - this._chartViewBox.y1 - this.bottomCurrent;\n items.forEach(i => {\n if (!i.getModelVisible() || !i.autoIndent) {\n return;\n }\n const vOrH = i.layoutOrient === 'left' || i.layoutOrient === 'right';\n const outer = i.getLastComputeOutBounds();\n if (vOrH) {\n result.top = Math.max(result.top, outer.y1 - this.topCurrent);\n result.bottom = Math.max(result.bottom, outer.y2 - bottomCurrent);\n } else {\n result.left = Math.max(result.left, outer.x1 - this.leftCurrent);\n result.right = Math.max(result.right, outer.x2 - rightCurrent);\n }\n });\n return result;\n }\n}\n\nexport const registerLayout3d = () => {\n Factory.registerLayout(Layout3d.type, Layout3d);\n};\n"]}
@@ -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;
@@ -110,13 +110,13 @@ class PictogramSeries extends vchart_4.GeoSeries {
110
110
  }, vchart_4.STATE_VALUE_ENUM.STATE_NORMAL, vchart_4.AttributeLevel.Series);
111
111
  }
112
112
  initMarkStyle() {
113
- const {root: root, viewBoxRect: viewBoxRect} = this._parsedSvgResult, elements = this._mapViewData.getDataView().latestData;
113
+ const {root: root} = this._parsedSvgResult, svgViewportRect = this._getSvgViewportRect(), elements = this._mapViewData.getDataView().latestData;
114
114
  root && (this.setMarkStyle(this._pictogramMark, transform_1.graphicAttributeTransform.group(root.attributes), "normal", vchart_4.AttributeLevel.Built_In),
115
- root.transform && this.setMarkStyle(this._pictogramMark, {
116
- postMatrix: () => root.transform
117
- }, "normal", vchart_4.AttributeLevel.Built_In), viewBoxRect && this._pictogramMark.setMarkConfig({
115
+ this.setMarkStyle(this._pictogramMark, {
116
+ postMatrix: () => this._getFittedSvgRootMatrix()
117
+ }, "normal", vchart_4.AttributeLevel.Built_In), svgViewportRect && this._pictogramMark.setMarkConfig({
118
118
  clip: !0,
119
- clipPath: [ (0, vchart_3.createRect)(Object.assign(Object.assign({}, viewBoxRect), {
119
+ clipPath: [ (0, vchart_3.createRect)(Object.assign(Object.assign({}, svgViewportRect), {
120
120
  fill: !0
121
121
  })) ]
122
122
  }));
@@ -179,6 +179,51 @@ class PictogramSeries extends vchart_4.GeoSeries {
179
179
  getPictogramRootGraphic() {
180
180
  return this._pictogramMark.getProduct();
181
181
  }
182
+ _getSvgRootMatrix() {
183
+ var _a, _b;
184
+ const transform = null === (_b = null === (_a = this._parsedSvgResult) || void 0 === _a ? void 0 : _a.root) || void 0 === _b ? void 0 : _b.transform;
185
+ return transform ? new vchart_2.Matrix(transform.a, transform.b, transform.c, transform.d, transform.e, transform.f) : new vchart_2.Matrix;
186
+ }
187
+ _getSvgViewportRect() {
188
+ var _a, _b, _c, _d;
189
+ const viewBoxRect = null === (_a = this._parsedSvgResult) || void 0 === _a ? void 0 : _a.viewBoxRect;
190
+ if (viewBoxRect) return viewBoxRect;
191
+ const {width: width, height: height} = null !== (_b = this._parsedSvgResult) && void 0 !== _b ? _b : {};
192
+ return Number.isFinite(width) && Number.isFinite(height) && width > 0 && height > 0 ? {
193
+ x: 0,
194
+ y: 0,
195
+ width: width,
196
+ height: height
197
+ } : null !== (_d = null === (_c = this._parsedSvgResult) || void 0 === _c ? void 0 : _c[svg_source_1.SVG_VIEWPORT_RECT_KEY]) && void 0 !== _d ? _d : null;
198
+ }
199
+ _getSvgRootBounds(rootMatrix) {
200
+ const viewBoxRect = this._getSvgViewportRect();
201
+ if (!viewBoxRect) return null;
202
+ const bounds = (new vchart_2.Bounds).setValue(viewBoxRect.x, viewBoxRect.y, viewBoxRect.x + viewBoxRect.width, viewBoxRect.y + viewBoxRect.height);
203
+ return bounds.transformWithMatrix(rootMatrix), bounds;
204
+ }
205
+ _appendMatrixScale(matrix, scale, center) {
206
+ const nextMatrix = new vchart_2.Matrix;
207
+ return nextMatrix.translate(center.x, center.y), nextMatrix.scale(scale, scale),
208
+ nextMatrix.translate(-center.x, -center.y), nextMatrix.multiply(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f),
209
+ nextMatrix;
210
+ }
211
+ _appendMatrixTranslate(matrix, dx, dy) {
212
+ const nextMatrix = new vchart_2.Matrix;
213
+ return nextMatrix.translate(dx, dy), nextMatrix.multiply(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f),
214
+ nextMatrix;
215
+ }
216
+ _getFittedSvgRootMatrix() {
217
+ const rootMatrix = this._getSvgRootMatrix(), bounds = this._getSvgRootBounds(rootMatrix);
218
+ if (!bounds) return rootMatrix;
219
+ const width = bounds.width(), height = bounds.height();
220
+ if (!Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0) return rootMatrix;
221
+ 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, {
222
+ x: rootCenterX,
223
+ y: rootCenterY
224
+ });
225
+ return this._appendMatrixTranslate(scaledMatrix, regionWidth / 2 - rootCenterX, regionHeight / 2 - rootCenterY);
226
+ }
182
227
  initData() {
183
228
  var _a, _b;
184
229
  super.initData();
@@ -224,19 +269,14 @@ class PictogramSeries extends vchart_4.GeoSeries {
224
269
  super.onLayoutEnd(), null === (_a = this._mapViewData) || void 0 === _a || _a.getDataView().reRunAllTransform();
225
270
  }
226
271
  updateSVGSize() {
227
- const {width: regionWidth, height: regionHeight} = this.getLayoutRect(), regionCenterX = regionWidth / 2, regionCenterY = regionHeight / 2, root = this.getPictogramRootGraphic();
228
- if (root) {
229
- 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);
230
- root.scale(scale, scale, {
231
- x: rootCenterX,
232
- y: rootCenterY
233
- }), root.translate(regionCenterX - rootCenterX, regionCenterY - rootCenterY);
234
- }
272
+ const root = this.getPictogramRootGraphic();
273
+ root && root.setAttributes({
274
+ postMatrix: this._getFittedSvgRootMatrix()
275
+ });
235
276
  }
236
277
  initEvent() {
237
278
  var _a;
238
- super.initEvent(), null === (_a = this._mapViewData.getDataView()) || void 0 === _a || _a.target.addListener("change", this.mapViewDataUpdate.bind(this)),
239
- this.event.on(vchart_4.ChartEvent.afterMarkLayoutEnd, this.updateSVGSize.bind(this));
279
+ super.initEvent(), null === (_a = this._mapViewData.getDataView()) || void 0 === _a || _a.target.addListener("change", this.mapViewDataUpdate.bind(this));
240
280
  }
241
281
  handleZoom(e) {
242
282
  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;
@@ -2,23 +2,47 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
- }), exports.clearSVGSource = exports.getSVGSource = exports.unregisterSVGSource = exports.registerSVGSource = exports.svgSourceMap = void 0;
5
+ }), exports.clearSVGSource = exports.getSVGSource = exports.unregisterSVGSource = exports.registerSVGSource = exports.SVG_VIEWPORT_RECT_KEY = exports.svgSourceMap = void 0;
6
6
 
7
7
  const vchart_1 = require("@visactor/vchart"), vchart_2 = require("@visactor/vchart");
8
8
 
9
9
  let svgDataSet;
10
10
 
11
+ exports.svgSourceMap = new Map, exports.SVG_VIEWPORT_RECT_KEY = "_vchartViewportRect";
12
+
13
+ const numberReg = /-?(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?/gi;
14
+
11
15
  function initSVGDataSet() {
12
16
  svgDataSet || (svgDataSet = new vchart_2.DataSet, (0, vchart_1.registerDataSetInstanceParser)(svgDataSet, "svg", vchart_2.svgParser));
13
17
  }
14
18
 
19
+ function parseEnableBackgroundViewport(source) {
20
+ var _a, _b, _c, _d;
21
+ 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];
22
+ if (!enableBackground || !/^\s*new\b/i.test(enableBackground)) return null;
23
+ 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;
24
+ return !Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0 ? null : {
25
+ x: x,
26
+ y: y,
27
+ width: width,
28
+ height: height
29
+ };
30
+ }
31
+
32
+ function hasValidSize(parsedSvg) {
33
+ return Number.isFinite(parsedSvg.width) && Number.isFinite(parsedSvg.height) && parsedSvg.width > 0 && parsedSvg.height > 0;
34
+ }
35
+
15
36
  function registerSVGSource(key, source) {
16
37
  exports.svgSourceMap.has(key) && (0, vchart_1.warn)(`svg source key of '${key}' already exists, will be overwritten.`),
17
38
  initSVGDataSet();
18
39
  const dataView = new vchart_2.DataView(svgDataSet);
19
40
  dataView.parse(source, {
20
41
  type: "svg"
21
- }), exports.svgSourceMap.set(key, dataView);
42
+ });
43
+ const parsedSvg = dataView.latestData, viewportRect = parseEnableBackgroundViewport(source);
44
+ parsedSvg && viewportRect && !parsedSvg.viewBoxRect && !hasValidSize(parsedSvg) && (parsedSvg[exports.SVG_VIEWPORT_RECT_KEY] = viewportRect),
45
+ exports.svgSourceMap.set(key, dataView);
22
46
  }
23
47
 
24
48
  function unregisterSVGSource(key) {
@@ -33,6 +57,6 @@ function clearSVGSource() {
33
57
  exports.svgSourceMap.clear(), svgDataSet = null;
34
58
  }
35
59
 
36
- exports.svgSourceMap = new Map, exports.registerSVGSource = registerSVGSource, exports.unregisterSVGSource = unregisterSVGSource,
60
+ exports.registerSVGSource = registerSVGSource, exports.unregisterSVGSource = unregisterSVGSource,
37
61
  exports.getSVGSource = getSVGSource, exports.clearSVGSource = clearSVGSource;
38
62
  //# sourceMappingURL=svg-source.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/charts/pictogram/series/svg-source.ts"],"names":[],"mappings":";;;AAAA,6CAAuE;AACvE,6CAAuF;AAE1E,QAAA,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,gBAAO,EAAE,CAAC;IAC3B,IAAA,sCAA6B,EAAC,UAAU,EAAE,KAAK,EAAE,kBAAS,CAAC,CAAC;AAC9D,CAAC;AAED,SAAgB,iBAAiB,CAAC,GAAW,EAAE,MAAwB;IACrE,IAAI,oBAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QACzB,IAAA,aAAI,EAAC,sBAAsB,GAAG,wCAAwC,CAAC,CAAC;KACzE;IACD,cAAc,EAAE,CAAC;IACjB,MAAM,QAAQ,GAAG,IAAI,iBAAQ,CAAC,UAAW,CAAC,CAAC;IAC3C,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE;QACrB,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;IAEH,oBAAY,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC;AAXD,8CAWC;AAED,SAAgB,mBAAmB,CAAC,GAAW;IAC7C,IAAI,CAAC,oBAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QAC1B,IAAA,aAAI,EAAC,gBAAgB,GAAG,oBAAoB,CAAC,CAAC;QAC9C,OAAO;KACR;IACD,oBAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAND,kDAMC;AAED,SAAgB,YAAY,CAAC,IAAY;IACvC,OAAO,oBAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAFD,oCAEC;AAED,SAAgB,cAAc;IAC5B,oBAAY,CAAC,KAAK,EAAE,CAAC;IACrB,UAAU,GAAG,IAAI,CAAC;AACpB,CAAC;AAHD,wCAGC","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"]}
@@ -71,9 +71,12 @@ function getBarRegressionLineConfig(config) {
71
71
  }
72
72
 
73
73
  function appendBarRegressionLineConfig(chartSpec, spec) {
74
- var _a, _b;
75
- spec || (spec = null !== (_a = (0, vchart_1.get)(chartSpec, regression_line_1.REGRESSION_LINE)) && void 0 !== _a ? _a : (0,
76
- vchart_1.get)(null === (_b = chartSpec.series) || void 0 === _b ? void 0 : _b.find((s => s.type === vchart_2.SeriesTypeEnum.bar)), regression_line_1.REGRESSION_LINE));
74
+ var _a;
75
+ if (!spec) {
76
+ const seriesSpecs = Array.isArray(chartSpec.series) ? chartSpec.series : chartSpec.series ? [ chartSpec.series ] : [];
77
+ spec = null !== (_a = (0, vchart_1.get)(chartSpec, regression_line_1.REGRESSION_LINE)) && void 0 !== _a ? _a : (0,
78
+ vchart_1.get)(seriesSpecs.find((s => s.type === vchart_2.SeriesTypeEnum.bar)), regression_line_1.REGRESSION_LINE);
79
+ }
77
80
  (0, vchart_1.array)(spec).forEach((s => {
78
81
  if (!1 !== s.visible) {
79
82
  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"]}
@@ -63,9 +63,12 @@ function getHistogramRegressionLineConfig(type, config) {
63
63
  }
64
64
 
65
65
  function appendHistogramRegressionLineConfig(chartSpec, spec) {
66
- var _a, _b;
67
- spec || (spec = null !== (_a = (0, vchart_1.get)(chartSpec, regression_line_1.REGRESSION_LINE)) && void 0 !== _a ? _a : (0,
68
- vchart_1.get)(null === (_b = chartSpec.series) || void 0 === _b ? void 0 : _b.find((s => s.type === vchart_2.SeriesTypeEnum.bar)), regression_line_1.REGRESSION_LINE));
66
+ var _a;
67
+ if (!spec) {
68
+ const seriesSpecs = Array.isArray(chartSpec.series) ? chartSpec.series : chartSpec.series ? [ chartSpec.series ] : [];
69
+ spec = null !== (_a = (0, vchart_1.get)(chartSpec, regression_line_1.REGRESSION_LINE)) && void 0 !== _a ? _a : (0,
70
+ vchart_1.get)(seriesSpecs.find((s => s.type === vchart_2.SeriesTypeEnum.bar)), regression_line_1.REGRESSION_LINE);
71
+ }
69
72
  (0, vchart_1.array)(spec).forEach((s => {
70
73
  if (!1 !== s.visible) {
71
74
  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,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;