@visactor/vchart 2.0.7-alpha.5 → 2.0.7-alpha.7

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 (74) hide show
  1. package/build/es5/index.js +1 -1
  2. package/build/index.es.js +25556 -21878
  3. package/build/index.js +25977 -21916
  4. package/build/index.min.js +2 -3
  5. package/build/tsconfig.tsbuildinfo +1 -1
  6. package/cjs/component/crosshair/base.d.ts +1 -1
  7. package/cjs/component/crosshair/base.js +10 -6
  8. package/cjs/component/crosshair/base.js.map +1 -1
  9. package/cjs/component/geo/geo-coordinate.js.map +1 -1
  10. package/cjs/component/legend/discrete/util.js +5 -1
  11. package/cjs/component/legend/discrete/util.js.map +1 -1
  12. package/cjs/core/index.d.ts +9 -3
  13. package/cjs/core/index.js +119 -2
  14. package/cjs/core/index.js.map +1 -1
  15. package/cjs/core/interface.js +1 -1
  16. package/cjs/core/util.js +1 -1
  17. package/cjs/core/vchart.js +2 -1
  18. package/cjs/core/vchart.js.map +1 -1
  19. package/cjs/data/initialize.js +1 -1
  20. package/cjs/data/register.js +1 -1
  21. package/cjs/layout/base-layout.d.ts +2 -2
  22. package/cjs/layout/base-layout.js +12 -7
  23. package/cjs/layout/base-layout.js.map +1 -1
  24. package/cjs/layout/interface.d.ts +1 -0
  25. package/cjs/layout/interface.js.map +1 -1
  26. package/cjs/plugin/chart/index.d.ts +1 -0
  27. package/cjs/plugin/chart/index.js +2 -1
  28. package/cjs/plugin/chart/index.js.map +1 -1
  29. package/cjs/plugin/chart/interface.d.ts +2 -0
  30. package/cjs/plugin/chart/interface.js.map +1 -1
  31. package/cjs/plugin/chart/plugin-service.d.ts +1 -0
  32. package/cjs/plugin/chart/plugin-service.js +5 -0
  33. package/cjs/plugin/chart/plugin-service.js.map +1 -1
  34. package/cjs/plugin/chart/resize-zoom/index.d.ts +1 -0
  35. package/cjs/plugin/chart/resize-zoom/index.js +21 -0
  36. package/cjs/plugin/chart/resize-zoom/index.js.map +1 -0
  37. package/cjs/plugin/chart/resize-zoom/zoom.d.ts +21 -0
  38. package/cjs/plugin/chart/resize-zoom/zoom.js +62 -0
  39. package/cjs/plugin/chart/resize-zoom/zoom.js.map +1 -0
  40. package/esm/component/crosshair/base.d.ts +1 -1
  41. package/esm/component/crosshair/base.js +10 -6
  42. package/esm/component/crosshair/base.js.map +1 -1
  43. package/esm/component/geo/geo-coordinate.js.map +1 -1
  44. package/esm/component/legend/discrete/util.js +5 -2
  45. package/esm/component/legend/discrete/util.js.map +1 -1
  46. package/esm/core/index.d.ts +9 -3
  47. package/esm/core/index.js +13 -3
  48. package/esm/core/index.js.map +1 -1
  49. package/esm/core/interface.js +1 -1
  50. package/esm/core/util.js +1 -1
  51. package/esm/core/vchart.js +2 -1
  52. package/esm/core/vchart.js.map +1 -1
  53. package/esm/data/initialize.js +1 -1
  54. package/esm/data/register.js +1 -1
  55. package/esm/layout/base-layout.d.ts +2 -2
  56. package/esm/layout/base-layout.js +12 -7
  57. package/esm/layout/base-layout.js.map +1 -1
  58. package/esm/layout/interface.d.ts +1 -0
  59. package/esm/layout/interface.js.map +1 -1
  60. package/esm/plugin/chart/index.d.ts +1 -0
  61. package/esm/plugin/chart/index.js +2 -0
  62. package/esm/plugin/chart/index.js.map +1 -1
  63. package/esm/plugin/chart/interface.d.ts +2 -0
  64. package/esm/plugin/chart/interface.js.map +1 -1
  65. package/esm/plugin/chart/plugin-service.d.ts +1 -0
  66. package/esm/plugin/chart/plugin-service.js +5 -0
  67. package/esm/plugin/chart/plugin-service.js.map +1 -1
  68. package/esm/plugin/chart/resize-zoom/index.d.ts +1 -0
  69. package/esm/plugin/chart/resize-zoom/index.js +2 -0
  70. package/esm/plugin/chart/resize-zoom/index.js.map +1 -0
  71. package/esm/plugin/chart/resize-zoom/zoom.d.ts +21 -0
  72. package/esm/plugin/chart/resize-zoom/zoom.js +59 -0
  73. package/esm/plugin/chart/resize-zoom/zoom.js.map +1 -0
  74. package/package.json +4 -4
@@ -70,11 +70,12 @@ class Layout {
70
70
  };
71
71
  }
72
72
  layoutItems(_chart, items, chartLayoutRect, chartViewBox) {
73
+ var _a, _b, _c;
73
74
  this._layoutInit(_chart, items, chartLayoutRect, chartViewBox);
74
75
  const recompute = {
75
76
  recomputeWidth: this.recomputeWidth,
76
77
  recomputeHeight: this.recomputeHeight
77
- };
78
+ }, secondLayoutLeftRight = null !== (_c = null === (_b = null === (_a = null == _chart ? void 0 : _chart.getSpec()) || void 0 === _a ? void 0 : _a.layout) || void 0 === _b ? void 0 : _b.secondLayoutLeftRight) && void 0 !== _c && _c;
78
79
  this._layoutNormalItems(items, recompute);
79
80
  const layoutTemp = {
80
81
  left: this.leftCurrent,
@@ -82,8 +83,8 @@ class Layout {
82
83
  right: this.rightCurrent,
83
84
  bottom: this.bottomCurrent
84
85
  }, {regionItems: regionItems, relativeItems: relativeItems, relativeOverlapItems: relativeOverlapItems, allRelatives: allRelatives, overlapItems: overlapItems} = this._groupItems(items);
85
- this.layoutRegionItems(regionItems, relativeItems, relativeOverlapItems, overlapItems, recompute),
86
- this._processAutoIndent(regionItems, relativeItems, relativeOverlapItems, overlapItems, allRelatives, layoutTemp, recompute),
86
+ this.layoutRegionItems(regionItems, relativeItems, relativeOverlapItems, overlapItems, recompute, secondLayoutLeftRight),
87
+ this._processAutoIndent(regionItems, relativeItems, relativeOverlapItems, overlapItems, allRelatives, layoutTemp, recompute, secondLayoutLeftRight),
87
88
  this.layoutAbsoluteItems(items.filter((x => "absolute" === x.layoutType))), items.forEach((item => {
88
89
  item.clearWillLayoutTag();
89
90
  }));
@@ -124,12 +125,12 @@ class Layout {
124
125
  height: 0
125
126
  }
126
127
  }
127
- }, allRelatives, layoutTemp, recompute) {
128
+ }, allRelatives, layoutTemp, recompute, secondLayoutLeftRight = !1) {
128
129
  if (allRelatives.some((i => i.autoIndent))) {
129
130
  const {top: top, bottom: bottom, left: left, right: right} = this._checkAutoIndent(allRelatives, layoutTemp);
130
131
  (top || bottom || left || right) && (this.topCurrent = layoutTemp.top + top, this.bottomCurrent = layoutTemp.bottom - bottom,
131
132
  this.leftCurrent = layoutTemp.left + left, this.rightCurrent = layoutTemp.right - right,
132
- this.layoutRegionItems(regionItems, relativeItems, relativeOverlapItems, overlapItems, recompute));
133
+ this.layoutRegionItems(regionItems, relativeItems, relativeOverlapItems, overlapItems, recompute, secondLayoutLeftRight));
133
134
  }
134
135
  }
135
136
  layoutNormalItems(normalItems, recompute) {
@@ -252,7 +253,8 @@ class Layout {
252
253
  height: 0
253
254
  }
254
255
  }
255
- }, recompute) {
256
+ }, recompute, secondLayoutLeftRight = !1) {
257
+ const leftBeforeLayout = this.leftCurrent, rightBeforeLayout = this.rightCurrent;
256
258
  let regionRelativeTotalWidth = this.rightCurrent - this.leftCurrent, regionRelativeTotalHeight = this.bottomCurrent - this.topCurrent;
257
259
  regionRelativeItems.filter((x => "left" === x.layoutOrient || "right" === x.layoutOrient)).forEach((item => {
258
260
  this._layoutRelativeItem(item, recompute);
@@ -260,7 +262,10 @@ class Layout {
260
262
  regionRelativeTotalWidth = this.rightCurrent - this.leftCurrent, regionRelativeItems.filter((x => "top" === x.layoutOrient || "bottom" === x.layoutOrient)).forEach((item => {
261
263
  this._layoutRelativeItem(item, recompute);
262
264
  })), this._layoutRelativeOverlap("top", overlapItems.top, recompute), this._layoutRelativeOverlap("bottom", overlapItems.bottom, recompute),
263
- regionRelativeTotalHeight = this.bottomCurrent - this.topCurrent;
265
+ regionRelativeTotalHeight = this.bottomCurrent - this.topCurrent, secondLayoutLeftRight && (this.leftCurrent = leftBeforeLayout,
266
+ this.rightCurrent = rightBeforeLayout, regionRelativeItems.filter((x => "left" === x.layoutOrient || "right" === x.layoutOrient)).forEach((item => {
267
+ this._layoutRelativeItem(item, recompute);
268
+ })), regionRelativeTotalWidth = this.rightCurrent - this.leftCurrent);
264
269
  const {regionWidth: regionWidth, regionHeight: regionHeight} = this._layoutRegionItem(regionItems, regionRelativeTotalWidth, regionRelativeTotalHeight);
265
270
  regionRelativeItems.concat(regionRelativeOverlapItems).forEach((item => {
266
271
  if ([ "left", "right" ].includes(item.layoutOrient)) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/layout/base-layout.ts"],"names":[],"mappings":"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","file":"base-layout.js","sourcesContent":["import type { utilFunctionCtx } from '../typings/params';\nimport type { IChart } from '../chart/interface/chart';\nimport { isEqual, type IBoundsLike } from '@visactor/vutils';\nimport type { IBaseLayout, ILayoutItem } from './interface';\nimport type { IOrientType, IPadding, IRect } from '../typings/space';\nimport { error } from '../util/debug';\nimport type { IRecompute } from './util';\nimport {\n getItemLayoutWithTag,\n layoutBottomInlineItems,\n layoutLeftInlineItems,\n layoutRightInlineItems,\n layoutTopInlineItems\n} from './util';\nimport type { ILayoutRect } from '../typings/layout';\n\nexport type LayoutSideType = {\n top: number;\n left: number;\n bottom: number;\n right: number;\n};\n\nexport interface IOffset {\n offsetLeft: number;\n offsetRight: number;\n offsetTop: number;\n offsetBottom: number;\n}\n\ntype overlapInfo = {\n items: ILayoutItem[];\n rect: ILayoutRect;\n};\n\nexport class Layout implements IBaseLayout {\n static type = 'base';\n\n leftCurrent: number = 0;\n topCurrent: number = 0;\n rightCurrent: number = 0;\n bottomCurrent: number = 0;\n\n _chartLayoutRect!: IRect;\n _chartViewBox!: IBoundsLike;\n\n recomputeWidth: boolean = false;\n recomputeHeight: boolean = false;\n\n protected _onError: (msg: string) => void;\n\n constructor(_spec?: unknown, ctx?: utilFunctionCtx) {\n this._onError = ctx?.onError;\n }\n\n protected _layoutInit(_chart: IChart, items: ILayoutItem[], chartLayoutRect: IRect, chartViewBox: IBoundsLike) {\n this._chartLayoutRect = chartLayoutRect;\n this._chartViewBox = chartViewBox;\n this.leftCurrent = chartLayoutRect.x;\n this.topCurrent = chartLayoutRect.y;\n this.rightCurrent = chartLayoutRect.x + chartLayoutRect.width;\n this.bottomCurrent = chartLayoutRect.height + chartLayoutRect.y;\n this.recomputeWidth = false;\n this.recomputeHeight = false;\n\n // 越大越先处理,进行排序调整,利用原地排序特性,排序会受 level 和传进来的数组顺序共同影响\n items.sort((a, b) => b.layoutLevel - a.layoutLevel);\n }\n\n protected _layoutNormalItems(items: ILayoutItem[], recompute: IRecompute) {\n this.layoutNormalInlineItems(\n items.filter(x => x.layoutType === 'normal-inline'),\n recompute\n );\n this.layoutNormalItems(\n items.filter(x => x.layoutType === 'normal'),\n recompute\n );\n }\n\n protected _groupItems(items: ILayoutItem[]) {\n const regionItems = items.filter(x => x.layoutType === 'region');\n const relativeItems = items.filter(x => x.layoutType === 'region-relative');\n const relativeOverlapItems = items.filter(x => x.layoutType === 'region-relative-overlap');\n const allRelatives = relativeItems.concat(relativeOverlapItems);\n // 允许重叠元素 ,目前允许重叠元素认为是紧贴region的。最后布局\n const overlapItems: {\n [key in IOrientType]: overlapInfo;\n } = {\n left: { items: [], rect: { width: 0, height: 0 } },\n right: { items: [], rect: { width: 0, height: 0 } },\n top: { items: [], rect: { width: 0, height: 0 } },\n bottom: { items: [], rect: { width: 0, height: 0 } },\n z: { items: [], rect: { width: 0, height: 0 } }\n };\n relativeOverlapItems.forEach(i => {\n overlapItems[i.layoutOrient].items.push(i);\n });\n\n return {\n regionItems,\n relativeItems,\n relativeOverlapItems,\n allRelatives,\n overlapItems\n };\n }\n\n layoutItems(_chart: IChart, items: ILayoutItem[], chartLayoutRect: IRect, chartViewBox: IBoundsLike): void {\n // 布局初始化\n this._layoutInit(_chart, items, chartLayoutRect, chartViewBox);\n const recompute = {\n recomputeWidth: this.recomputeWidth,\n recomputeHeight: this.recomputeHeight\n };\n // 先布局 normal 类型的元素\n this._layoutNormalItems(items, recompute);\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 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 this._processAutoIndent(\n regionItems,\n relativeItems,\n relativeOverlapItems,\n overlapItems,\n allRelatives,\n layoutTemp,\n recompute\n );\n\n this.layoutAbsoluteItems(items.filter(x => x.layoutType === 'absolute'));\n\n items.forEach(item => {\n // 布局完成 ,清除标记\n item.clearWillLayoutTag();\n });\n }\n\n protected _processAutoIndent(\n regionItems: ILayoutItem[],\n relativeItems: ILayoutItem[],\n relativeOverlapItems: ILayoutItem[],\n overlapItems: {\n [key in IOrientType]: overlapInfo;\n } = {\n left: { items: [], rect: { width: 0, height: 0 } },\n right: { items: [], rect: { width: 0, height: 0 } },\n top: { items: [], rect: { width: 0, height: 0 } },\n bottom: { items: [], rect: { width: 0, height: 0 } },\n z: { items: [], rect: { width: 0, height: 0 } }\n },\n allRelatives: ILayoutItem[],\n layoutTemp: LayoutSideType,\n recompute: IRecompute\n ): void {\n // 如果有缩进\n if (allRelatives.some(i => i.autoIndent)) {\n // check auto indent\n const { top, bottom, left, right } = this._checkAutoIndent(allRelatives, layoutTemp);\n // 如果出现了需要自动缩进的场景 则基于缩进再次布局\n if (top || bottom || left || right) {\n // set outer bounds to padding\n this.topCurrent = layoutTemp.top + top;\n this.bottomCurrent = layoutTemp.bottom - bottom;\n this.leftCurrent = layoutTemp.left + left;\n this.rightCurrent = layoutTemp.right - right;\n // reLayout\n this.layoutRegionItems(regionItems, relativeItems, relativeOverlapItems, overlapItems, recompute);\n }\n }\n }\n\n protected layoutNormalItems(normalItems: ILayoutItem[], recompute: IRecompute): void {\n normalItems.forEach(item => {\n // const layoutRect = this.getItemComputeLayoutRect(item);\n // const rect = item.computeBoundsInRect(layoutRect);\n // item.setLayoutRect(rect);\n const { rect } = getItemLayoutWithTag(item, this, recompute);\n if (item.layoutOrient === 'left') {\n item.setLayoutStartPosition({\n x: this.leftCurrent + item.layoutOffsetX + item.layoutPaddingLeft,\n y: this.topCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n this.leftCurrent += rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n } else if (item.layoutOrient === 'top') {\n item.setLayoutStartPosition({\n x: this.leftCurrent + item.layoutOffsetX + item.layoutPaddingLeft,\n y: this.topCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n this.topCurrent += rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n } else if (item.layoutOrient === 'right') {\n item.setLayoutStartPosition({\n x: this.rightCurrent + item.layoutOffsetX - rect.width - item.layoutPaddingRight,\n y: this.topCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n this.rightCurrent -= rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n } else if (item.layoutOrient === 'bottom') {\n item.setLayoutStartPosition({\n x: this.leftCurrent + item.layoutOffsetX + item.layoutPaddingRight,\n y: this.bottomCurrent + item.layoutOffsetY - rect.height - item.layoutPaddingBottom\n });\n this.bottomCurrent -= rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n }\n });\n }\n\n protected layoutNormalInlineItems(normalItems: ILayoutItem[], recompute: IRecompute): boolean {\n const leftItems = normalItems.filter(item => item.layoutOrient === 'left');\n const rightItems = normalItems.filter(item => item.layoutOrient === 'right');\n const topItems = normalItems.filter(item => item.layoutOrient === 'top');\n const bottomItems = normalItems.filter(item => item.layoutOrient === 'bottom');\n\n const limitWidth = this._chartLayoutRect.width + this._chartLayoutRect.x;\n const limitHeight = this._chartLayoutRect.height + this._chartLayoutRect.y;\n\n // 同 normal,按照 left、top、right、bottom 的顺序进行布局\n // 各个方向上再按照 position 进行分组布局,顺序为 start middle end\n leftItems.length && layoutLeftInlineItems(leftItems, this, limitHeight, recompute);\n topItems.length && layoutTopInlineItems(topItems, this, limitWidth, recompute);\n rightItems.length && layoutRightInlineItems(rightItems, this, limitHeight, recompute);\n bottomItems.length && layoutBottomInlineItems(bottomItems, this, limitWidth, recompute);\n return true;\n }\n\n protected _layoutRelativeOverlap(orient: IOrientType, info: overlapInfo, recompute: IRecompute) {\n // 得到 max rect\n info.items.forEach((item: ILayoutItem) => {\n const { rect } = getItemLayoutWithTag(item, this, recompute);\n info.rect.width = Math.max(rect.width + item.layoutPaddingLeft + item.layoutPaddingRight, info.rect.width);\n info.rect.height = Math.max(rect.height + item.layoutPaddingTop + item.layoutPaddingBottom, info.rect.height);\n });\n\n // 统一设置rect和pos\n info.items.forEach((item: ILayoutItem) => {\n if (!isEqual(item.getLayoutRect(), info.rect)) {\n item.setLayoutRect(info.rect);\n }\n if (orient === 'left') {\n item.setLayoutStartPosition({\n x: this.leftCurrent + item.layoutOffsetX\n });\n } else if (orient === 'right') {\n item.setLayoutStartPosition({\n x: this.rightCurrent - info.rect.width + item.layoutOffsetX\n });\n } else if (orient === 'top') {\n item.setLayoutStartPosition({\n x: this.topCurrent + item.layoutOffsetY\n });\n } else {\n item.setLayoutStartPosition({\n x: this.bottomCurrent - info.rect.height + item.layoutOffsetY\n });\n }\n });\n\n if (orient === 'left') {\n this.leftCurrent += info.rect.width;\n } else if (orient === 'right') {\n this.rightCurrent -= info.rect.width;\n } else if (orient === 'top') {\n this.topCurrent += info.rect.height;\n } else {\n this.bottomCurrent -= info.rect.height;\n }\n }\n\n protected _layoutRelativeItem(item: ILayoutItem, recompute: IRecompute) {\n const { rect } = getItemLayoutWithTag(item, this, recompute, false);\n if (item.layoutOrient === 'left' || item.layoutOrient === 'right') {\n item.setLayoutRect({ width: rect.width });\n } else {\n item.setLayoutRect({ height: rect.height });\n }\n // 减少尺寸\n if (item.layoutOrient === 'left') {\n item.setLayoutStartPosition({\n x: this.leftCurrent + item.layoutOffsetX + item.layoutPaddingLeft\n });\n this.leftCurrent += rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n } else if (item.layoutOrient === 'right') {\n this.rightCurrent -= rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n item.setLayoutStartPosition({\n x: this.rightCurrent + item.layoutOffsetX + item.layoutPaddingLeft\n });\n } // 减少尺寸\n else if (item.layoutOrient === 'top') {\n item.setLayoutStartPosition({\n y: this.topCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n this.topCurrent += rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n } else if (item.layoutOrient === 'bottom') {\n this.bottomCurrent -= rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n item.setLayoutStartPosition({\n y: this.bottomCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n }\n }\n\n protected _layoutRegionItem(\n regionItems: ILayoutItem[],\n regionRelativeTotalWidth: number,\n regionRelativeTotalHeight: number\n ) {\n // region 处理\n const regionWidth = Math.max(\n Math.min(regionRelativeTotalWidth, ...regionItems.map(region => region.maxWidth ?? Number.MAX_VALUE)),\n 0\n );\n const regionHeight = Math.max(\n Math.min(regionRelativeTotalHeight, ...regionItems.map(region => region.maxHeight ?? Number.MAX_VALUE)),\n 0\n );\n regionItems.forEach(region => {\n const width = regionWidth - region.layoutPaddingLeft - region.layoutPaddingRight;\n const height = regionHeight - region.layoutPaddingTop - region.layoutPaddingBottom;\n\n region.setLayoutRect({\n width: width,\n height: height\n });\n\n region.setLayoutStartPosition({\n x: this.leftCurrent + region.layoutOffsetX + region.layoutPaddingLeft,\n y: this.topCurrent + region.layoutOffsetY + region.layoutPaddingTop\n });\n });\n\n return {\n regionHeight,\n regionWidth\n };\n }\n\n /**\n *\n * 1. 补全 region-relative rect 和部分 layoutStartPoint\n * 2. 补全 region rect 和 layoutStartPoint\n *\n */\n protected layoutRegionItems(\n regionItems: ILayoutItem[],\n regionRelativeItems: ILayoutItem[],\n regionRelativeOverlapItems: ILayoutItem[],\n overlapItems: {\n [key in IOrientType]: overlapInfo;\n } = {\n left: { items: [], rect: { width: 0, height: 0 } },\n right: { items: [], rect: { width: 0, height: 0 } },\n top: { items: [], rect: { width: 0, height: 0 } },\n bottom: { items: [], rect: { width: 0, height: 0 } },\n z: { items: [], rect: { width: 0, height: 0 } }\n },\n recompute: IRecompute\n ): void {\n let regionRelativeTotalWidth = this.rightCurrent - this.leftCurrent;\n let regionRelativeTotalHeight = this.bottomCurrent - this.topCurrent;\n\n regionRelativeItems\n .filter(x => x.layoutOrient === 'left' || x.layoutOrient === 'right')\n .forEach(item => {\n this._layoutRelativeItem(item, recompute);\n });\n\n this._layoutRelativeOverlap('left', overlapItems.left, recompute);\n this._layoutRelativeOverlap('right', overlapItems.right, recompute);\n\n regionRelativeTotalWidth = this.rightCurrent - this.leftCurrent;\n\n regionRelativeItems\n .filter(x => x.layoutOrient === 'top' || x.layoutOrient === 'bottom')\n .forEach(item => {\n this._layoutRelativeItem(item, recompute);\n });\n\n this._layoutRelativeOverlap('top', overlapItems.top, recompute);\n this._layoutRelativeOverlap('bottom', overlapItems.bottom, recompute);\n\n // 此时得到height\n regionRelativeTotalHeight = this.bottomCurrent - this.topCurrent;\n\n // region 处理\n const { regionWidth, regionHeight } = this._layoutRegionItem(\n regionItems,\n regionRelativeTotalWidth,\n regionRelativeTotalHeight\n );\n\n // region-relative 特殊处理\n regionRelativeItems.concat(regionRelativeOverlapItems).forEach(item => {\n // 处理特殊元素的宽高\n if (['left', 'right'].includes(item.layoutOrient)) {\n // 用户有配置的话,已经处理过,不需要再次处理\n const relativeRegion = this.filterRegionsWithID(regionItems, item.layoutBindRegionID[0]);\n\n item.setLayoutRect({\n height: relativeRegion.getLayoutRect().height\n });\n item.setLayoutStartPosition({\n y: relativeRegion.getLayoutStartPoint().y + item.layoutOffsetY + item.layoutPaddingTop\n });\n\n if (item.layoutOrient === 'right') {\n item.setLayoutStartPosition({\n x: item.getLayoutStartPoint().x + regionWidth - regionRelativeTotalWidth\n });\n }\n } else if (['top', 'bottom'].includes(item.layoutOrient)) {\n const relativeRegion = this.filterRegionsWithID(regionItems, item.layoutBindRegionID[0]);\n\n item.setLayoutRect({\n width: relativeRegion.getLayoutRect().width\n });\n\n item.setLayoutStartPosition({\n x: relativeRegion.getLayoutStartPoint().x + item.layoutOffsetX + item.layoutPaddingLeft\n });\n\n if (item.layoutOrient === 'bottom') {\n item.setLayoutStartPosition({\n y: item.getLayoutStartPoint().y + regionHeight - regionRelativeTotalHeight\n });\n }\n }\n });\n }\n\n /**\n * 再找出对 absolute 元素,无需排序,在 compiler 层需要排序放置\n *\n * 重要:absolute 默认依据 region 进行相对依赖\n */\n protected layoutAbsoluteItems(absoluteItems: ILayoutItem[]) {\n absoluteItems.forEach(item => {\n if (item.willLayoutTag) {\n // 设置盒子\n item.absoluteLayoutInRect(this._chartLayoutRect);\n }\n });\n }\n\n // 对普通布局来说,只出一个 region 绑定\n filterRegionsWithID(items: ILayoutItem[], id: number): ILayoutItem {\n const target = items.find(x => x.getModelId() === id);\n if (!target) {\n (this._onError ?? error)('can not find target region item, invalid id');\n }\n return target as ILayoutItem;\n }\n\n /**\n * 工具方法 根据item属性获取给item提供的布局空间\n * @param item\n */\n getItemComputeLayoutRect(item: ILayoutItem) {\n const result = {\n width: this.rightCurrent - this.leftCurrent - item.layoutPaddingLeft - item.layoutPaddingRight,\n height: this.bottomCurrent - this.topCurrent - item.layoutPaddingTop - item.layoutPaddingBottom\n };\n return result;\n }\n\n protected _checkAutoIndent(\n items: ILayoutItem[],\n layoutTemp: {\n top: number;\n left: number;\n bottom: number;\n right: number;\n }\n ): IPadding {\n const result = {\n top: 0,\n left: 0,\n bottom: 0,\n right: 0\n };\n items.forEach(i => {\n if (!i.getModelVisible() || !i.autoIndent) {\n return;\n }\n const vOrH = i.layoutOrient === 'left' || i.layoutOrient === 'right';\n const itemOuter = i.getLastComputeOutBounds();\n const outer = this._getOutInLayout(itemOuter, i, layoutTemp);\n if (vOrH) {\n result.top = Math.max(result.top, outer.top);\n result.bottom = Math.max(result.bottom, outer.bottom);\n } else {\n result.left = Math.max(result.left, outer.left);\n result.right = Math.max(result.right, outer.right);\n }\n });\n return result;\n }\n\n private _getOutInLayout(itemOuter: IBoundsLike, i: ILayoutItem, tempBorder: LayoutSideType): LayoutSideType {\n const { x, y } = i.getLayoutStartPoint();\n const { width, height } = i.getLayoutRect();\n\n const result: LayoutSideType = {\n left: tempBorder.left - (x - itemOuter.x1),\n right: x + width + itemOuter.x2 - tempBorder.right,\n top: tempBorder.top - (y - itemOuter.y1),\n bottom: y + height + itemOuter.y2 - tempBorder.bottom\n };\n return result;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/layout/base-layout.ts"],"names":[],"mappings":"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","file":"base-layout.js","sourcesContent":["import type { utilFunctionCtx } from '../typings/params';\nimport type { IChart } from '../chart/interface/chart';\nimport { isEqual, type IBoundsLike } from '@visactor/vutils';\nimport type { IBaseLayout, ILayoutItem } from './interface';\nimport type { IOrientType, IPadding, IRect } from '../typings/space';\nimport { error } from '../util/debug';\nimport type { IRecompute } from './util';\nimport {\n getItemLayoutWithTag,\n layoutBottomInlineItems,\n layoutLeftInlineItems,\n layoutRightInlineItems,\n layoutTopInlineItems\n} from './util';\nimport type { ILayoutRect } from '../typings/layout';\n\nexport type LayoutSideType = {\n top: number;\n left: number;\n bottom: number;\n right: number;\n};\n\nexport interface IOffset {\n offsetLeft: number;\n offsetRight: number;\n offsetTop: number;\n offsetBottom: number;\n}\n\ntype overlapInfo = {\n items: ILayoutItem[];\n rect: ILayoutRect;\n};\n\nexport class Layout implements IBaseLayout {\n static type = 'base';\n\n leftCurrent: number = 0;\n topCurrent: number = 0;\n rightCurrent: number = 0;\n bottomCurrent: number = 0;\n\n _chartLayoutRect!: IRect;\n _chartViewBox!: IBoundsLike;\n\n recomputeWidth: boolean = false;\n recomputeHeight: boolean = false;\n\n protected _onError: (msg: string) => void;\n\n constructor(_spec?: unknown, ctx?: utilFunctionCtx) {\n this._onError = ctx?.onError;\n }\n\n protected _layoutInit(_chart: IChart, items: ILayoutItem[], chartLayoutRect: IRect, chartViewBox: IBoundsLike) {\n this._chartLayoutRect = chartLayoutRect;\n this._chartViewBox = chartViewBox;\n this.leftCurrent = chartLayoutRect.x;\n this.topCurrent = chartLayoutRect.y;\n this.rightCurrent = chartLayoutRect.x + chartLayoutRect.width;\n this.bottomCurrent = chartLayoutRect.height + chartLayoutRect.y;\n this.recomputeWidth = false;\n this.recomputeHeight = false;\n\n // 越大越先处理,进行排序调整,利用原地排序特性,排序会受 level 和传进来的数组顺序共同影响\n items.sort((a, b) => b.layoutLevel - a.layoutLevel);\n }\n\n protected _layoutNormalItems(items: ILayoutItem[], recompute: IRecompute) {\n this.layoutNormalInlineItems(\n items.filter(x => x.layoutType === 'normal-inline'),\n recompute\n );\n this.layoutNormalItems(\n items.filter(x => x.layoutType === 'normal'),\n recompute\n );\n }\n\n protected _groupItems(items: ILayoutItem[]) {\n const regionItems = items.filter(x => x.layoutType === 'region');\n const relativeItems = items.filter(x => x.layoutType === 'region-relative');\n const relativeOverlapItems = items.filter(x => x.layoutType === 'region-relative-overlap');\n const allRelatives = relativeItems.concat(relativeOverlapItems);\n // 允许重叠元素 ,目前允许重叠元素认为是紧贴region的。最后布局\n const overlapItems: {\n [key in IOrientType]: overlapInfo;\n } = {\n left: { items: [], rect: { width: 0, height: 0 } },\n right: { items: [], rect: { width: 0, height: 0 } },\n top: { items: [], rect: { width: 0, height: 0 } },\n bottom: { items: [], rect: { width: 0, height: 0 } },\n z: { items: [], rect: { width: 0, height: 0 } }\n };\n relativeOverlapItems.forEach(i => {\n overlapItems[i.layoutOrient].items.push(i);\n });\n\n return {\n regionItems,\n relativeItems,\n relativeOverlapItems,\n allRelatives,\n overlapItems\n };\n }\n\n layoutItems(_chart: IChart, items: ILayoutItem[], chartLayoutRect: IRect, chartViewBox: IBoundsLike): void {\n // 布局初始化\n this._layoutInit(_chart, items, chartLayoutRect, chartViewBox);\n const recompute = {\n recomputeWidth: this.recomputeWidth,\n recomputeHeight: this.recomputeHeight\n };\n const secondLayoutLeftRight = _chart?.getSpec()?.layout?.secondLayoutLeftRight ?? false;\n // 先布局 normal 类型的元素\n this._layoutNormalItems(items, recompute);\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 const { regionItems, relativeItems, relativeOverlapItems, allRelatives, overlapItems } = this._groupItems(items);\n // 有元素开启了自动缩进\n // TODO:目前只有普通占位布局下的 region-relative 元素支持\n // 主要考虑常规元素超出画布一般为用户个性设置,而且可以设置padding规避裁剪,不需要使用自动缩进\n this.layoutRegionItems(\n regionItems,\n relativeItems,\n relativeOverlapItems,\n overlapItems,\n recompute,\n secondLayoutLeftRight\n );\n // 缩进\n this._processAutoIndent(\n regionItems,\n relativeItems,\n relativeOverlapItems,\n overlapItems,\n allRelatives,\n layoutTemp,\n recompute,\n secondLayoutLeftRight\n );\n\n this.layoutAbsoluteItems(items.filter(x => x.layoutType === 'absolute'));\n\n items.forEach(item => {\n // 布局完成 ,清除标记\n item.clearWillLayoutTag();\n });\n }\n\n protected _processAutoIndent(\n regionItems: ILayoutItem[],\n relativeItems: ILayoutItem[],\n relativeOverlapItems: ILayoutItem[],\n overlapItems: {\n [key in IOrientType]: overlapInfo;\n } = {\n left: { items: [], rect: { width: 0, height: 0 } },\n right: { items: [], rect: { width: 0, height: 0 } },\n top: { items: [], rect: { width: 0, height: 0 } },\n bottom: { items: [], rect: { width: 0, height: 0 } },\n z: { items: [], rect: { width: 0, height: 0 } }\n },\n allRelatives: ILayoutItem[],\n layoutTemp: LayoutSideType,\n recompute: IRecompute,\n secondLayoutLeftRight: boolean = false\n ): void {\n // 如果有缩进\n if (allRelatives.some(i => i.autoIndent)) {\n // check auto indent\n const { top, bottom, left, right } = this._checkAutoIndent(allRelatives, layoutTemp);\n // 如果出现了需要自动缩进的场景 则基于缩进再次布局\n if (top || bottom || left || right) {\n // set outer bounds to padding\n this.topCurrent = layoutTemp.top + top;\n this.bottomCurrent = layoutTemp.bottom - bottom;\n this.leftCurrent = layoutTemp.left + left;\n this.rightCurrent = layoutTemp.right - right;\n // reLayout\n this.layoutRegionItems(\n regionItems,\n relativeItems,\n relativeOverlapItems,\n overlapItems,\n recompute,\n secondLayoutLeftRight\n );\n }\n }\n }\n\n protected layoutNormalItems(normalItems: ILayoutItem[], recompute: IRecompute): void {\n normalItems.forEach(item => {\n // const layoutRect = this.getItemComputeLayoutRect(item);\n // const rect = item.computeBoundsInRect(layoutRect);\n // item.setLayoutRect(rect);\n const { rect } = getItemLayoutWithTag(item, this, recompute);\n if (item.layoutOrient === 'left') {\n item.setLayoutStartPosition({\n x: this.leftCurrent + item.layoutOffsetX + item.layoutPaddingLeft,\n y: this.topCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n this.leftCurrent += rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n } else if (item.layoutOrient === 'top') {\n item.setLayoutStartPosition({\n x: this.leftCurrent + item.layoutOffsetX + item.layoutPaddingLeft,\n y: this.topCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n this.topCurrent += rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n } else if (item.layoutOrient === 'right') {\n item.setLayoutStartPosition({\n x: this.rightCurrent + item.layoutOffsetX - rect.width - item.layoutPaddingRight,\n y: this.topCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n this.rightCurrent -= rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n } else if (item.layoutOrient === 'bottom') {\n item.setLayoutStartPosition({\n x: this.leftCurrent + item.layoutOffsetX + item.layoutPaddingRight,\n y: this.bottomCurrent + item.layoutOffsetY - rect.height - item.layoutPaddingBottom\n });\n this.bottomCurrent -= rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n }\n });\n }\n\n protected layoutNormalInlineItems(normalItems: ILayoutItem[], recompute: IRecompute): boolean {\n const leftItems = normalItems.filter(item => item.layoutOrient === 'left');\n const rightItems = normalItems.filter(item => item.layoutOrient === 'right');\n const topItems = normalItems.filter(item => item.layoutOrient === 'top');\n const bottomItems = normalItems.filter(item => item.layoutOrient === 'bottom');\n\n const limitWidth = this._chartLayoutRect.width + this._chartLayoutRect.x;\n const limitHeight = this._chartLayoutRect.height + this._chartLayoutRect.y;\n\n // 同 normal,按照 left、top、right、bottom 的顺序进行布局\n // 各个方向上再按照 position 进行分组布局,顺序为 start middle end\n leftItems.length && layoutLeftInlineItems(leftItems, this, limitHeight, recompute);\n topItems.length && layoutTopInlineItems(topItems, this, limitWidth, recompute);\n rightItems.length && layoutRightInlineItems(rightItems, this, limitHeight, recompute);\n bottomItems.length && layoutBottomInlineItems(bottomItems, this, limitWidth, recompute);\n return true;\n }\n\n protected _layoutRelativeOverlap(orient: IOrientType, info: overlapInfo, recompute: IRecompute) {\n // 得到 max rect\n info.items.forEach((item: ILayoutItem) => {\n const { rect } = getItemLayoutWithTag(item, this, recompute);\n info.rect.width = Math.max(rect.width + item.layoutPaddingLeft + item.layoutPaddingRight, info.rect.width);\n info.rect.height = Math.max(rect.height + item.layoutPaddingTop + item.layoutPaddingBottom, info.rect.height);\n });\n\n // 统一设置rect和pos\n info.items.forEach((item: ILayoutItem) => {\n if (!isEqual(item.getLayoutRect(), info.rect)) {\n item.setLayoutRect(info.rect);\n }\n if (orient === 'left') {\n item.setLayoutStartPosition({\n x: this.leftCurrent + item.layoutOffsetX\n });\n } else if (orient === 'right') {\n item.setLayoutStartPosition({\n x: this.rightCurrent - info.rect.width + item.layoutOffsetX\n });\n } else if (orient === 'top') {\n item.setLayoutStartPosition({\n x: this.topCurrent + item.layoutOffsetY\n });\n } else {\n item.setLayoutStartPosition({\n x: this.bottomCurrent - info.rect.height + item.layoutOffsetY\n });\n }\n });\n\n if (orient === 'left') {\n this.leftCurrent += info.rect.width;\n } else if (orient === 'right') {\n this.rightCurrent -= info.rect.width;\n } else if (orient === 'top') {\n this.topCurrent += info.rect.height;\n } else {\n this.bottomCurrent -= info.rect.height;\n }\n }\n\n protected _layoutRelativeItem(item: ILayoutItem, recompute: IRecompute) {\n const { rect } = getItemLayoutWithTag(item, this, recompute, false);\n if (item.layoutOrient === 'left' || item.layoutOrient === 'right') {\n item.setLayoutRect({ width: rect.width });\n } else {\n item.setLayoutRect({ height: rect.height });\n }\n // 减少尺寸\n if (item.layoutOrient === 'left') {\n item.setLayoutStartPosition({\n x: this.leftCurrent + item.layoutOffsetX + item.layoutPaddingLeft\n });\n this.leftCurrent += rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n } else if (item.layoutOrient === 'right') {\n this.rightCurrent -= rect.width + item.layoutPaddingLeft + item.layoutPaddingRight;\n item.setLayoutStartPosition({\n x: this.rightCurrent + item.layoutOffsetX + item.layoutPaddingLeft\n });\n } // 减少尺寸\n else if (item.layoutOrient === 'top') {\n item.setLayoutStartPosition({\n y: this.topCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n this.topCurrent += rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n } else if (item.layoutOrient === 'bottom') {\n this.bottomCurrent -= rect.height + item.layoutPaddingTop + item.layoutPaddingBottom;\n item.setLayoutStartPosition({\n y: this.bottomCurrent + item.layoutOffsetY + item.layoutPaddingTop\n });\n }\n }\n\n protected _layoutRegionItem(\n regionItems: ILayoutItem[],\n regionRelativeTotalWidth: number,\n regionRelativeTotalHeight: number\n ) {\n // region 处理\n const regionWidth = Math.max(\n Math.min(regionRelativeTotalWidth, ...regionItems.map(region => region.maxWidth ?? Number.MAX_VALUE)),\n 0\n );\n const regionHeight = Math.max(\n Math.min(regionRelativeTotalHeight, ...regionItems.map(region => region.maxHeight ?? Number.MAX_VALUE)),\n 0\n );\n regionItems.forEach(region => {\n const width = regionWidth - region.layoutPaddingLeft - region.layoutPaddingRight;\n const height = regionHeight - region.layoutPaddingTop - region.layoutPaddingBottom;\n\n region.setLayoutRect({\n width: width,\n height: height\n });\n\n region.setLayoutStartPosition({\n x: this.leftCurrent + region.layoutOffsetX + region.layoutPaddingLeft,\n y: this.topCurrent + region.layoutOffsetY + region.layoutPaddingTop\n });\n });\n\n return {\n regionHeight,\n regionWidth\n };\n }\n\n /**\n *\n * 1. 补全 region-relative rect 和部分 layoutStartPoint\n * 2. 补全 region rect 和 layoutStartPoint\n *\n */\n protected layoutRegionItems(\n regionItems: ILayoutItem[],\n regionRelativeItems: ILayoutItem[],\n regionRelativeOverlapItems: ILayoutItem[],\n overlapItems: {\n [key in IOrientType]: overlapInfo;\n } = {\n left: { items: [], rect: { width: 0, height: 0 } },\n right: { items: [], rect: { width: 0, height: 0 } },\n top: { items: [], rect: { width: 0, height: 0 } },\n bottom: { items: [], rect: { width: 0, height: 0 } },\n z: { items: [], rect: { width: 0, height: 0 } }\n },\n recompute: IRecompute,\n secondLayoutLeftRight: boolean = false\n ): void {\n const leftBeforeLayout = this.leftCurrent;\n const rightBeforeLayout = this.rightCurrent;\n\n let regionRelativeTotalWidth = this.rightCurrent - this.leftCurrent;\n let regionRelativeTotalHeight = this.bottomCurrent - this.topCurrent;\n\n regionRelativeItems\n .filter(x => x.layoutOrient === 'left' || x.layoutOrient === 'right')\n .forEach(item => {\n this._layoutRelativeItem(item, recompute);\n });\n\n this._layoutRelativeOverlap('left', overlapItems.left, recompute);\n this._layoutRelativeOverlap('right', overlapItems.right, recompute);\n\n // 此时得到宽度\n regionRelativeTotalWidth = this.rightCurrent - this.leftCurrent;\n\n regionRelativeItems\n .filter(x => x.layoutOrient === 'top' || x.layoutOrient === 'bottom')\n .forEach(item => {\n this._layoutRelativeItem(item, recompute);\n });\n\n this._layoutRelativeOverlap('top', overlapItems.top, recompute);\n this._layoutRelativeOverlap('bottom', overlapItems.bottom, recompute);\n\n // 此时得到height\n regionRelativeTotalHeight = this.bottomCurrent - this.topCurrent;\n\n if (secondLayoutLeftRight) {\n /** 多次布局保证不被裁减 */\n // 使用高度再次布局一次\n this.leftCurrent = leftBeforeLayout;\n this.rightCurrent = rightBeforeLayout;\n regionRelativeItems\n .filter(x => x.layoutOrient === 'left' || x.layoutOrient === 'right')\n .forEach(item => {\n this._layoutRelativeItem(item, recompute);\n });\n\n // 此时得到宽度\n regionRelativeTotalWidth = this.rightCurrent - this.leftCurrent;\n }\n\n // region 处理\n const { regionWidth, regionHeight } = this._layoutRegionItem(\n regionItems,\n regionRelativeTotalWidth,\n regionRelativeTotalHeight\n );\n\n // region-relative 特殊处理\n regionRelativeItems.concat(regionRelativeOverlapItems).forEach(item => {\n // 处理特殊元素的宽高\n if (['left', 'right'].includes(item.layoutOrient)) {\n // 用户有配置的话,已经处理过,不需要再次处理\n const relativeRegion = this.filterRegionsWithID(regionItems, item.layoutBindRegionID[0]);\n\n item.setLayoutRect({\n height: relativeRegion.getLayoutRect().height\n });\n item.setLayoutStartPosition({\n y: relativeRegion.getLayoutStartPoint().y + item.layoutOffsetY + item.layoutPaddingTop\n });\n\n if (item.layoutOrient === 'right') {\n item.setLayoutStartPosition({\n x: item.getLayoutStartPoint().x + regionWidth - regionRelativeTotalWidth\n });\n }\n } else if (['top', 'bottom'].includes(item.layoutOrient)) {\n const relativeRegion = this.filterRegionsWithID(regionItems, item.layoutBindRegionID[0]);\n\n item.setLayoutRect({\n width: relativeRegion.getLayoutRect().width\n });\n\n item.setLayoutStartPosition({\n x: relativeRegion.getLayoutStartPoint().x + item.layoutOffsetX + item.layoutPaddingLeft\n });\n\n if (item.layoutOrient === 'bottom') {\n item.setLayoutStartPosition({\n y: item.getLayoutStartPoint().y + regionHeight - regionRelativeTotalHeight\n });\n }\n }\n });\n }\n\n /**\n * 再找出对 absolute 元素,无需排序,在 compiler 层需要排序放置\n *\n * 重要:absolute 默认依据 region 进行相对依赖\n */\n protected layoutAbsoluteItems(absoluteItems: ILayoutItem[]) {\n absoluteItems.forEach(item => {\n if (item.willLayoutTag) {\n // 设置盒子\n item.absoluteLayoutInRect(this._chartLayoutRect);\n }\n });\n }\n\n // 对普通布局来说,只出一个 region 绑定\n filterRegionsWithID(items: ILayoutItem[], id: number): ILayoutItem {\n const target = items.find(x => x.getModelId() === id);\n if (!target) {\n (this._onError ?? error)('can not find target region item, invalid id');\n }\n return target as ILayoutItem;\n }\n\n /**\n * 工具方法 根据item属性获取给item提供的布局空间\n * @param item\n */\n getItemComputeLayoutRect(item: ILayoutItem) {\n const result = {\n width: this.rightCurrent - this.leftCurrent - item.layoutPaddingLeft - item.layoutPaddingRight,\n height: this.bottomCurrent - this.topCurrent - item.layoutPaddingTop - item.layoutPaddingBottom\n };\n return result;\n }\n\n protected _checkAutoIndent(\n items: ILayoutItem[],\n layoutTemp: {\n top: number;\n left: number;\n bottom: number;\n right: number;\n }\n ): IPadding {\n const result = {\n top: 0,\n left: 0,\n bottom: 0,\n right: 0\n };\n items.forEach(i => {\n if (!i.getModelVisible() || !i.autoIndent) {\n return;\n }\n const vOrH = i.layoutOrient === 'left' || i.layoutOrient === 'right';\n const itemOuter = i.getLastComputeOutBounds();\n const outer = this._getOutInLayout(itemOuter, i, layoutTemp);\n if (vOrH) {\n result.top = Math.max(result.top, outer.top);\n result.bottom = Math.max(result.bottom, outer.bottom);\n } else {\n result.left = Math.max(result.left, outer.left);\n result.right = Math.max(result.right, outer.right);\n }\n });\n return result;\n }\n\n private _getOutInLayout(itemOuter: IBoundsLike, i: ILayoutItem, tempBorder: LayoutSideType): LayoutSideType {\n const { x, y } = i.getLayoutStartPoint();\n const { width, height } = i.getLayoutRect();\n\n const result: LayoutSideType = {\n left: tempBorder.left - (x - itemOuter.x1),\n right: x + width + itemOuter.x2 - tempBorder.right,\n top: tempBorder.top - (y - itemOuter.y1),\n bottom: y + height + itemOuter.y2 - tempBorder.bottom\n };\n return result;\n }\n}\n"]}
@@ -38,6 +38,7 @@ export interface IGridLayoutSpec extends ILayoutSpecBase {
38
38
  }
39
39
  export interface IBaseLayoutSpec extends ILayoutSpecBase {
40
40
  type: 'base';
41
+ secondLayoutLeftRight?: boolean;
41
42
  }
42
43
  export type ILayoutSpec = IBaseLayoutSpec | IGridLayoutSpec;
43
44
  export interface ILayoutConstructor {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/layout/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { IBoundsLike } from '@visactor/vutils';\nimport type { StringOrNumber } from '../typings/common';\nimport type { IOrientType, IPadding, IRect } from '../typings/space';\nimport type { IPoint } from '../typings/coordinate';\nimport type { ILayoutNumber, ILayoutPaddingSpec, ILayoutPoint, ILayoutRect, ILayoutType } from '../typings/layout';\nimport type { ILayoutModel } from '../model/interface';\n\nexport interface IBaseLayout {\n /**\n * 对一组布局元素布局\n * 布局策略随意\n * @param item 布局元素数组\n * @param chartLayoutRect 排除图表 padding 后的图表的布局矩形,原点是图表绘制区域左上角。\n * @param chartViewBox 图表在画布中的可用空间,包含图表padding,原点是画布左上角\n * @returns\n */\n layoutItems: LayoutCallBack;\n}\n\nexport type LayoutCallBack = (\n chart: any,\n item: ILayoutItem[],\n chartLayoutRect: IRect,\n chartViewBox: IBoundsLike\n) => void;\n\nexport interface ILayoutSpecBase {\n /**\n * 布局的类型,现在支持 grid布局和默认布局(基于占位的布局)\n */\n type: string;\n}\n\nexport type ElementSpec = (\n | {\n /**\n * 组件对应的spec key,如'legends'表示图例\n */\n modelKey: string;\n /**\n * 组件对应的序号\n */\n modelIndex: number;\n }\n | {\n /**\n * 组件对应的id\n */\n modelId: string;\n }\n) & {\n /**\n * 组件在grid布局中所在的列。从左向右,从 0 开始计数\n */\n col: number;\n /**\n * 组件在grid布局中所在的列跨度,即占了几列,默认值为1\n */\n colSpan?: number;\n /**\n * 组件在grid布局中所在的行。从上向下,从 0 开始计数。\n */\n row: number;\n /**\n * 组件在grid布局中所在的行跨度,即占了几行,默认值为1\n */\n rowSpan?: number;\n};\n\nexport interface IGridLayoutSpec extends ILayoutSpecBase {\n /**\n * 设置布局类型为grid布局\n */\n type: 'grid';\n /**\n * grid布局的总列数\n */\n col: number;\n /**\n * grid布局的总行数\n */\n row: number;\n /**\n * 可选配置,指定某几列的宽度\n */\n colWidth?: {\n /**\n * 指定列数,序号从 0 开始\n */\n index: number;\n /**\n * 设置指定列的宽度,单位为像素\n */\n size: number | ((maxSize: number) => number);\n }[];\n /**\n * 可选配置,指定某几行的高度\n */\n rowHeight?: {\n /**\n * 指定行数,序号从 0 开始\n */\n index: number;\n /**\n * 设置指定行的高度,单位为像素\n */\n size: number | ((maxSize: number) => number);\n }[];\n /**\n *\n * 指定所有图表元素所在位置,图表元素的位置起点和占几行几列,可以占多行多列\n * 图表元素位置允许配置重叠。\n */\n elements: ElementSpec[];\n}\n\nexport interface IBaseLayoutSpec extends ILayoutSpecBase {\n /**\n * 设置布局类型为默认布局\n */\n type: 'base';\n}\n\nexport type ILayoutSpec = IBaseLayoutSpec | IGridLayoutSpec;\n\nexport interface ILayoutConstructor {\n type: string;\n // TODO: spec 类型生命\n new (spec: ILayoutSpec | any, ctx?: any): IBaseLayout;\n}\n\n/**\n * 因为这些元素都会继承到各个模块,所以这里统一有前缀避免语意冲突\n */\nexport interface ILayoutItem {\n readonly type: string;\n /**\n * 标记当前布局元素是否需要重新计算布局属性\n * 图表模块可能部分需要重新布局,部分不需要,根据这个tag在布局过程中进行优化\n */\n readonly willLayoutTag: boolean;\n /**\n * 上一次布局的布局尺寸\n */\n readonly lastComputeRect: ILayoutRect;\n /**\n * 标记这个布局Item的方向(left->right, right->left, top->bottom, bottom->top)\n */\n directionStr?: 'l2r' | 'r2l' | 't2b' | 'b2t';\n layoutClip: boolean;\n layoutType: ILayoutType;\n layoutBindRegionID: number | number[];\n layoutOrient: IOrientType;\n /** 是否自动缩进 */\n autoIndent: boolean;\n\n /**\n * inline元素和其他同行元素的对齐方式\n * 顶部的inline元素,'start' - 顶部对齐;'end' - '底部对齐'; 'middle' - 居中对齐\n * 底部的inline元素,'start' - 底部对齐;'end' - '顶部对齐'; 'middle' - 居中对齐\n * 左侧的inline元素,'start' - 左侧对齐;'end' - '右侧对齐'; 'middle' - 居中对齐\n * 右侧的inline元素,'start' - 右侧对齐;'end' - '左侧对齐'; 'middle' - 居中对齐\n */\n alignSelf?: 'start' | 'end' | 'middle';\n\n layoutPaddingLeft: number;\n layoutPaddingTop: number;\n layoutPaddingRight: number;\n layoutPaddingBottom: number;\n\n layoutOffsetX: number;\n layoutOffsetY: number;\n\n // 越大越先处理\n layoutLevel: number;\n\n chartLayoutRect: ILayoutRect;\n\n readonly layoutRectLevelMap: ILayoutRect;\n minWidth: number;\n maxWidth: number;\n minHeight: number;\n maxHeight: number;\n\n readonly model: ILayoutModel;\n\n getModelId: () => StringOrNumber;\n getModelVisible: () => boolean;\n\n getSpec?: () => any;\n setAttrFromSpec: (spec: ILayoutItemSpec, chartViewRect: ILayoutRect) => void;\n\n setRectInSpec: (rect: ILayoutRect) => ILayoutRect;\n\n getLayoutStartPoint: () => ILayoutPoint;\n getLayoutRect: () => ILayoutRect;\n getLayout: () => IRect;\n getLastComputeOutBounds: () => IBoundsLike;\n\n /** 生命周期 */\n onLayoutStart: (layoutRect: IRect, viewRect: ILayoutRect) => void;\n onLayoutEnd: () => void;\n\n /**\n * 更新元素布局的 layoutRect 大小,用来更新指定布局空间\n */\n setLayoutRect: (rect: Partial<ILayoutRect>, levelMap?: Partial<ILayoutRect>) => void;\n /**\n * 基于元素内部逻辑计算占位空间,rect表示可用空间\n */\n computeBoundsInRect: (rect: ILayoutRect) => ILayoutRect;\n /**\n * 更新元素布局的起始点位置\n */\n setLayoutStartPosition: (pos: Partial<IPoint>) => void;\n /**\n * 更新绝对布局元素的位置信息\n */\n absoluteLayoutInRect: (rect: IRect) => void;\n /**\n * 布局完成后,清楚标记\n */\n clearWillLayoutTag: () => void;\n /**\n * 标记要重新布局\n */\n setWillLayoutTag: () => void;\n}\n\nexport interface ILayoutItemSpec {\n /** 当前模块的布局类型,配置为 absolute 的话,当前元素会以图表左上角为原点进行绝对布局 */\n layoutType?: ILayoutType;\n /**\n * 布局顺序等级,等级越大的,越优先布局\n * 比如顶部同时有标题和图例的场景,期望标题先放在顶部,然后放置图例。\n */\n layoutLevel?: number;\n\n /**\n * inline元素和其他同行元素的对齐方式\n * 顶部的inline元素,'start' - 顶部对齐;'end' - '底部对齐'; 'middle' - 居中对齐\n * 底部的inline元素,'start' - 底部对齐;'end' - '顶部对齐'; 'middle' - 居中对齐\n * 左侧的inline元素,'start' - 左侧对齐;'end' - '右侧对齐'; 'middle' - 居中对齐\n * 右侧的inline元素,'start' - 右侧对齐;'end' - '左侧对齐'; 'middle' - 居中对齐\n */\n alignSelf?: 'start' | 'end' | 'middle';\n\n // 基础的布局配置\n /** 模块布局位置 */\n orient?: IOrientType;\n /** 模块的布局间距 */\n padding?: ILayoutPaddingSpec;\n /** 是否按照 orient 自动修改 padding,隐藏位于外侧的 padding。目前只在组件上生效 */\n noOuterPadding?: boolean;\n /** 模块的布局大小:宽度 */\n width?: ILayoutNumber;\n /** 模块的布局最大宽度 */\n maxWidth?: ILayoutNumber;\n /** 模块的布局最小宽度 */\n minWidth?: ILayoutNumber;\n /** 模块的布局大小:高度 */\n height?: ILayoutNumber;\n /** 模块的布局最大高度 */\n maxHeight?: ILayoutNumber;\n /** 模块的布局最小高度 */\n minHeight?: ILayoutNumber;\n /** 模块的布局位置偏移:X */\n offsetX?: ILayoutNumber;\n /** 模块的布局位置偏移:Y */\n offsetY?: ILayoutNumber;\n\n /** 模块的展示层级,当2个模块重叠时,层级较大的展示在上方 */\n zIndex?: number;\n /** 模块是否裁剪超出布局区域外的绘图内容 */\n clip?: boolean;\n\n // 绝对布局下的对齐设置\n\n /** 模块绝对布局下,与图表左侧的距离。注意仅在 layoutType === 'absolute' 时生效 */\n left?: ILayoutNumber;\n /** 模块绝对布局下,与图表右侧的距离。注意仅在 layoutType === 'absolute' 时生效 */\n right?: ILayoutNumber;\n /** 模块绝对布局下,与图表顶部的距离。注意仅在 layoutType === 'absolute' 时生效 */\n top?: ILayoutNumber;\n /** 模块绝对布局下,与图表底部的距离。注意仅在 layoutType === 'absolute' 时生效 */\n bottom?: ILayoutNumber;\n /** 模块绝对布局下,元素将放置在图表的正中间。注意仅在 layoutType === 'absolute' 时生效,同时将忽略 padding 属性 */\n center?: boolean;\n}\n\nexport interface ILayoutItemInitOption {\n layoutType: ILayoutType;\n layoutLevel: number;\n layoutOrient?: IOrientType;\n transformLayoutRect?: (rect: ILayoutRect) => ILayoutRect;\n transformLayoutPosition?: (pos: Partial<IPoint>) => Partial<IPoint>;\n transformLayoutPadding?: (padding: IPadding) => IPadding;\n}\n"]}
1
+ {"version":3,"sources":["../src/layout/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { IBoundsLike } from '@visactor/vutils';\nimport type { StringOrNumber } from '../typings/common';\nimport type { IOrientType, IPadding, IRect } from '../typings/space';\nimport type { IPoint } from '../typings/coordinate';\nimport type { ILayoutNumber, ILayoutPaddingSpec, ILayoutPoint, ILayoutRect, ILayoutType } from '../typings/layout';\nimport type { ILayoutModel } from '../model/interface';\n\nexport interface IBaseLayout {\n /**\n * 对一组布局元素布局\n * 布局策略随意\n * @param item 布局元素数组\n * @param chartLayoutRect 排除图表 padding 后的图表的布局矩形,原点是图表绘制区域左上角。\n * @param chartViewBox 图表在画布中的可用空间,包含图表padding,原点是画布左上角\n * @returns\n */\n layoutItems: LayoutCallBack;\n}\n\nexport type LayoutCallBack = (\n chart: any,\n item: ILayoutItem[],\n chartLayoutRect: IRect,\n chartViewBox: IBoundsLike\n) => void;\n\nexport interface ILayoutSpecBase {\n /**\n * 布局的类型,现在支持 grid布局和默认布局(基于占位的布局)\n */\n type: string;\n}\n\nexport type ElementSpec = (\n | {\n /**\n * 组件对应的spec key,如'legends'表示图例\n */\n modelKey: string;\n /**\n * 组件对应的序号\n */\n modelIndex: number;\n }\n | {\n /**\n * 组件对应的id\n */\n modelId: string;\n }\n) & {\n /**\n * 组件在grid布局中所在的列。从左向右,从 0 开始计数\n */\n col: number;\n /**\n * 组件在grid布局中所在的列跨度,即占了几列,默认值为1\n */\n colSpan?: number;\n /**\n * 组件在grid布局中所在的行。从上向下,从 0 开始计数。\n */\n row: number;\n /**\n * 组件在grid布局中所在的行跨度,即占了几行,默认值为1\n */\n rowSpan?: number;\n};\n\nexport interface IGridLayoutSpec extends ILayoutSpecBase {\n /**\n * 设置布局类型为grid布局\n */\n type: 'grid';\n /**\n * grid布局的总列数\n */\n col: number;\n /**\n * grid布局的总行数\n */\n row: number;\n /**\n * 可选配置,指定某几列的宽度\n */\n colWidth?: {\n /**\n * 指定列数,序号从 0 开始\n */\n index: number;\n /**\n * 设置指定列的宽度,单位为像素\n */\n size: number | ((maxSize: number) => number);\n }[];\n /**\n * 可选配置,指定某几行的高度\n */\n rowHeight?: {\n /**\n * 指定行数,序号从 0 开始\n */\n index: number;\n /**\n * 设置指定行的高度,单位为像素\n */\n size: number | ((maxSize: number) => number);\n }[];\n /**\n *\n * 指定所有图表元素所在位置,图表元素的位置起点和占几行几列,可以占多行多列\n * 图表元素位置允许配置重叠。\n */\n elements: ElementSpec[];\n}\n\nexport interface IBaseLayoutSpec extends ILayoutSpecBase {\n /**\n * 设置布局类型为默认布局\n */\n type: 'base';\n /**\n * 是否在第一次布局完成后,再次布局一次,用于解决第一次布局时,元素宽度或高度为0的问题\n * @since 2.0.7\n */\n secondLayoutLeftRight?: boolean;\n}\n\nexport type ILayoutSpec = IBaseLayoutSpec | IGridLayoutSpec;\n\nexport interface ILayoutConstructor {\n type: string;\n // TODO: spec 类型生命\n new (spec: ILayoutSpec | any, ctx?: any): IBaseLayout;\n}\n\n/**\n * 因为这些元素都会继承到各个模块,所以这里统一有前缀避免语意冲突\n */\nexport interface ILayoutItem {\n readonly type: string;\n /**\n * 标记当前布局元素是否需要重新计算布局属性\n * 图表模块可能部分需要重新布局,部分不需要,根据这个tag在布局过程中进行优化\n */\n readonly willLayoutTag: boolean;\n /**\n * 上一次布局的布局尺寸\n */\n readonly lastComputeRect: ILayoutRect;\n /**\n * 标记这个布局Item的方向(left->right, right->left, top->bottom, bottom->top)\n */\n directionStr?: 'l2r' | 'r2l' | 't2b' | 'b2t';\n layoutClip: boolean;\n layoutType: ILayoutType;\n layoutBindRegionID: number | number[];\n layoutOrient: IOrientType;\n /** 是否自动缩进 */\n autoIndent: boolean;\n\n /**\n * inline元素和其他同行元素的对齐方式\n * 顶部的inline元素,'start' - 顶部对齐;'end' - '底部对齐'; 'middle' - 居中对齐\n * 底部的inline元素,'start' - 底部对齐;'end' - '顶部对齐'; 'middle' - 居中对齐\n * 左侧的inline元素,'start' - 左侧对齐;'end' - '右侧对齐'; 'middle' - 居中对齐\n * 右侧的inline元素,'start' - 右侧对齐;'end' - '左侧对齐'; 'middle' - 居中对齐\n */\n alignSelf?: 'start' | 'end' | 'middle';\n\n layoutPaddingLeft: number;\n layoutPaddingTop: number;\n layoutPaddingRight: number;\n layoutPaddingBottom: number;\n\n layoutOffsetX: number;\n layoutOffsetY: number;\n\n // 越大越先处理\n layoutLevel: number;\n\n chartLayoutRect: ILayoutRect;\n\n readonly layoutRectLevelMap: ILayoutRect;\n minWidth: number;\n maxWidth: number;\n minHeight: number;\n maxHeight: number;\n\n readonly model: ILayoutModel;\n\n getModelId: () => StringOrNumber;\n getModelVisible: () => boolean;\n\n getSpec?: () => any;\n setAttrFromSpec: (spec: ILayoutItemSpec, chartViewRect: ILayoutRect) => void;\n\n setRectInSpec: (rect: ILayoutRect) => ILayoutRect;\n\n getLayoutStartPoint: () => ILayoutPoint;\n getLayoutRect: () => ILayoutRect;\n getLayout: () => IRect;\n getLastComputeOutBounds: () => IBoundsLike;\n\n /** 生命周期 */\n onLayoutStart: (layoutRect: IRect, viewRect: ILayoutRect) => void;\n onLayoutEnd: () => void;\n\n /**\n * 更新元素布局的 layoutRect 大小,用来更新指定布局空间\n */\n setLayoutRect: (rect: Partial<ILayoutRect>, levelMap?: Partial<ILayoutRect>) => void;\n /**\n * 基于元素内部逻辑计算占位空间,rect表示可用空间\n */\n computeBoundsInRect: (rect: ILayoutRect) => ILayoutRect;\n /**\n * 更新元素布局的起始点位置\n */\n setLayoutStartPosition: (pos: Partial<IPoint>) => void;\n /**\n * 更新绝对布局元素的位置信息\n */\n absoluteLayoutInRect: (rect: IRect) => void;\n /**\n * 布局完成后,清楚标记\n */\n clearWillLayoutTag: () => void;\n /**\n * 标记要重新布局\n */\n setWillLayoutTag: () => void;\n}\n\nexport interface ILayoutItemSpec {\n /** 当前模块的布局类型,配置为 absolute 的话,当前元素会以图表左上角为原点进行绝对布局 */\n layoutType?: ILayoutType;\n /**\n * 布局顺序等级,等级越大的,越优先布局\n * 比如顶部同时有标题和图例的场景,期望标题先放在顶部,然后放置图例。\n */\n layoutLevel?: number;\n\n /**\n * inline元素和其他同行元素的对齐方式\n * 顶部的inline元素,'start' - 顶部对齐;'end' - '底部对齐'; 'middle' - 居中对齐\n * 底部的inline元素,'start' - 底部对齐;'end' - '顶部对齐'; 'middle' - 居中对齐\n * 左侧的inline元素,'start' - 左侧对齐;'end' - '右侧对齐'; 'middle' - 居中对齐\n * 右侧的inline元素,'start' - 右侧对齐;'end' - '左侧对齐'; 'middle' - 居中对齐\n */\n alignSelf?: 'start' | 'end' | 'middle';\n\n // 基础的布局配置\n /** 模块布局位置 */\n orient?: IOrientType;\n /** 模块的布局间距 */\n padding?: ILayoutPaddingSpec;\n /** 是否按照 orient 自动修改 padding,隐藏位于外侧的 padding。目前只在组件上生效 */\n noOuterPadding?: boolean;\n /** 模块的布局大小:宽度 */\n width?: ILayoutNumber;\n /** 模块的布局最大宽度 */\n maxWidth?: ILayoutNumber;\n /** 模块的布局最小宽度 */\n minWidth?: ILayoutNumber;\n /** 模块的布局大小:高度 */\n height?: ILayoutNumber;\n /** 模块的布局最大高度 */\n maxHeight?: ILayoutNumber;\n /** 模块的布局最小高度 */\n minHeight?: ILayoutNumber;\n /** 模块的布局位置偏移:X */\n offsetX?: ILayoutNumber;\n /** 模块的布局位置偏移:Y */\n offsetY?: ILayoutNumber;\n\n /** 模块的展示层级,当2个模块重叠时,层级较大的展示在上方 */\n zIndex?: number;\n /** 模块是否裁剪超出布局区域外的绘图内容 */\n clip?: boolean;\n\n // 绝对布局下的对齐设置\n\n /** 模块绝对布局下,与图表左侧的距离。注意仅在 layoutType === 'absolute' 时生效 */\n left?: ILayoutNumber;\n /** 模块绝对布局下,与图表右侧的距离。注意仅在 layoutType === 'absolute' 时生效 */\n right?: ILayoutNumber;\n /** 模块绝对布局下,与图表顶部的距离。注意仅在 layoutType === 'absolute' 时生效 */\n top?: ILayoutNumber;\n /** 模块绝对布局下,与图表底部的距离。注意仅在 layoutType === 'absolute' 时生效 */\n bottom?: ILayoutNumber;\n /** 模块绝对布局下,元素将放置在图表的正中间。注意仅在 layoutType === 'absolute' 时生效,同时将忽略 padding 属性 */\n center?: boolean;\n}\n\nexport interface ILayoutItemInitOption {\n layoutType: ILayoutType;\n layoutLevel: number;\n layoutOrient?: IOrientType;\n transformLayoutRect?: (rect: ILayoutRect) => ILayoutRect;\n transformLayoutPosition?: (pos: Partial<IPoint>) => Partial<IPoint>;\n transformLayoutPadding?: (padding: IPadding) => IPadding;\n}\n"]}
@@ -2,3 +2,4 @@ export * from './media-query';
2
2
  export * from './formatter';
3
3
  export * from './register';
4
4
  export * from './interface';
5
+ export * from './resize-zoom';
@@ -18,5 +18,6 @@ var __createBinding = this && this.__createBinding || (Object.create ? function(
18
18
  Object.defineProperty(exports, "__esModule", {
19
19
  value: !0
20
20
  }), __exportStar(require("./media-query"), exports), __exportStar(require("./formatter"), exports),
21
- __exportStar(require("./register"), exports), __exportStar(require("./interface"), exports);
21
+ __exportStar(require("./register"), exports), __exportStar(require("./interface"), exports),
22
+ __exportStar(require("./resize-zoom"), exports);
22
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/plugin/chart/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,8CAA4B;AAC5B,6CAA2B;AAC3B,8CAA4B","file":"index.js","sourcesContent":["export * from './media-query';\nexport * from './formatter';\nexport * from './register';\nexport * from './interface';\n"]}
1
+ {"version":3,"sources":["../src/plugin/chart/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,8CAA4B;AAC5B,6CAA2B;AAC3B,8CAA4B;AAC5B,gDAA8B","file":"index.js","sourcesContent":["export * from './media-query';\nexport * from './formatter';\nexport * from './register';\nexport * from './interface';\nexport * from './resize-zoom';\n"]}
@@ -8,6 +8,7 @@ export interface IChartPlugin<T extends IChartPluginService = any> extends IBase
8
8
  onAfterChartSpecTransform?: (service: T, chartSpec: any, actionSource: VChartRenderActionSource) => MaybePromise<void>;
9
9
  onAfterModelSpecTransform?: (service: T, chartSpec: any, chartSpecInfo: IChartSpecInfo, actionSource: VChartRenderActionSource) => MaybePromise<void>;
10
10
  onBeforeInitChart?: (service: T, chartSpec: any, actionSource: VChartRenderActionSource) => MaybePromise<void>;
11
+ onAfterInitChart?: (service: T, chartSpec: any, actionSource: VChartRenderActionSource) => MaybePromise<void>;
11
12
  }
12
13
  export interface IChartPluginConstructor {
13
14
  readonly pluginType: 'chart';
@@ -22,4 +23,5 @@ export interface IChartPluginService<T extends IChartPlugin = any> extends IBase
22
23
  onAfterChartSpecTransform?: (chartSpec: any, actionSource: VChartRenderActionSource) => MaybePromise<void>;
23
24
  onAfterModelSpecTransform?: (chartSpec: any, chartSpecInfo: IChartSpecInfo, actionSource: VChartRenderActionSource) => MaybePromise<void>;
24
25
  onBeforeInitChart?: (chartSpec: any, actionSource: VChartRenderActionSource) => MaybePromise<void>;
26
+ onAfterInitChart?: (chartSpec: any, actionSource: VChartRenderActionSource) => MaybePromise<void>;
25
27
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/plugin/chart/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { IChartSpecInfo } from '../../chart/interface';\nimport type { VChartRenderActionSource, IVChart } from '../../core/interface';\nimport type { IBasePlugin, IBasePluginService, MaybePromise } from '../base/interface';\n\nexport interface IChartPlugin<T extends IChartPluginService = any> extends IBasePlugin<T> {\n specKey?: string;\n onInit?: (service: T, chartSpec: any) => MaybePromise<void>;\n onBeforeResize?: (service: T, width: number, height: number) => MaybePromise<void>;\n onAfterChartSpecTransform?: (\n service: T,\n chartSpec: any,\n actionSource: VChartRenderActionSource\n ) => MaybePromise<void>;\n onAfterModelSpecTransform?: (\n service: T,\n chartSpec: any,\n chartSpecInfo: IChartSpecInfo,\n actionSource: VChartRenderActionSource\n ) => MaybePromise<void>;\n onBeforeInitChart?: (service: T, chartSpec: any, actionSource: VChartRenderActionSource) => MaybePromise<void>;\n}\n\nexport interface IChartPluginConstructor {\n readonly pluginType: 'chart';\n readonly specKey?: string;\n readonly type: string;\n new (): IChartPlugin;\n}\n\nexport interface IChartPluginService<T extends IChartPlugin = any> extends IBasePluginService<T> {\n globalInstance: IVChart;\n onInit?: (chartSpec: any) => MaybePromise<void>;\n onBeforeResize?: (width: number, height: number) => MaybePromise<void>;\n onAfterChartSpecTransform?: (chartSpec: any, actionSource: VChartRenderActionSource) => MaybePromise<void>;\n onAfterModelSpecTransform?: (\n chartSpec: any,\n chartSpecInfo: IChartSpecInfo,\n actionSource: VChartRenderActionSource\n ) => MaybePromise<void>;\n onBeforeInitChart?: (chartSpec: any, actionSource: VChartRenderActionSource) => MaybePromise<void>;\n}\n"]}
1
+ {"version":3,"sources":["../src/plugin/chart/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { IChartSpecInfo } from '../../chart/interface';\nimport type { VChartRenderActionSource, IVChart } from '../../core/interface';\nimport type { IBasePlugin, IBasePluginService, MaybePromise } from '../base/interface';\n\nexport interface IChartPlugin<T extends IChartPluginService = any> extends IBasePlugin<T> {\n specKey?: string;\n onInit?: (service: T, chartSpec: any) => MaybePromise<void>;\n onBeforeResize?: (service: T, width: number, height: number) => MaybePromise<void>;\n onAfterChartSpecTransform?: (\n service: T,\n chartSpec: any,\n actionSource: VChartRenderActionSource\n ) => MaybePromise<void>;\n onAfterModelSpecTransform?: (\n service: T,\n chartSpec: any,\n chartSpecInfo: IChartSpecInfo,\n actionSource: VChartRenderActionSource\n ) => MaybePromise<void>;\n onBeforeInitChart?: (service: T, chartSpec: any, actionSource: VChartRenderActionSource) => MaybePromise<void>;\n onAfterInitChart?: (service: T, chartSpec: any, actionSource: VChartRenderActionSource) => MaybePromise<void>;\n}\n\nexport interface IChartPluginConstructor {\n readonly pluginType: 'chart';\n readonly specKey?: string;\n readonly type: string;\n new (): IChartPlugin;\n}\n\nexport interface IChartPluginService<T extends IChartPlugin = any> extends IBasePluginService<T> {\n globalInstance: IVChart;\n onInit?: (chartSpec: any) => MaybePromise<void>;\n onBeforeResize?: (width: number, height: number) => MaybePromise<void>;\n onAfterChartSpecTransform?: (chartSpec: any, actionSource: VChartRenderActionSource) => MaybePromise<void>;\n onAfterModelSpecTransform?: (\n chartSpec: any,\n chartSpecInfo: IChartSpecInfo,\n actionSource: VChartRenderActionSource\n ) => MaybePromise<void>;\n onBeforeInitChart?: (chartSpec: any, actionSource: VChartRenderActionSource) => MaybePromise<void>;\n onAfterInitChart?: (chartSpec: any, actionSource: VChartRenderActionSource) => MaybePromise<void>;\n}\n"]}
@@ -11,5 +11,6 @@ export declare class ChartPluginService<T extends IChartPlugin = IChartPlugin> e
11
11
  onAfterChartSpecTransform(chartSpec: any, actionSource: VChartRenderActionSource): void;
12
12
  onAfterModelSpecTransform(chartSpec: any, chartSpecInfo: IChartSpecInfo, actionSource: VChartRenderActionSource): void;
13
13
  onBeforeInitChart(chartSpec: any, actionSource: VChartRenderActionSource): void;
14
+ onAfterInitChart(chartSpec: any, actionSource: VChartRenderActionSource): void;
14
15
  releaseAll(): void;
15
16
  }
@@ -35,6 +35,11 @@ class ChartPluginService extends base_plugin_service_1.BasePluginService {
35
35
  plugin.onBeforeInitChart && plugin.onBeforeInitChart(this, chartSpec, actionSource);
36
36
  }));
37
37
  }
38
+ onAfterInitChart(chartSpec, actionSource) {
39
+ this._plugins.forEach((plugin => {
40
+ plugin.onAfterInitChart && plugin.onAfterInitChart(this, chartSpec, actionSource);
41
+ }));
42
+ }
38
43
  releaseAll() {
39
44
  super.releaseAll(), this.globalInstance = null;
40
45
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/plugin/chart/plugin-service.ts"],"names":[],"mappings":";;;AAEA,qEAAgE;AAIhE,MAAa,kBACX,SAAQ,uCAAoB;IAK5B,YAAY,cAAuB;QACjC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,SAAc;QACnB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7B,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,cAAc,CAAC,KAAa,EAAE,MAAc;QAC1C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7B,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;IACL,CAAC;IAED,yBAAyB,CAAC,SAAc,EAAE,YAAsC;QAC9E,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7B,MAAM,CAAC,yBAAyB,IAAI,MAAM,CAAC,yBAAyB,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QACtG,CAAC,CAAC,CAAC;IACL,CAAC;IAED,yBAAyB,CAAC,SAAc,EAAE,aAA6B,EAAE,YAAsC;QAC7G,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7B,MAAM,CAAC,yBAAyB;gBAC9B,MAAM,CAAC,yBAAyB,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;QACnF,CAAC,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB,CAAC,SAAc,EAAE,YAAsC;QACtE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7B,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;IACL,CAAC;IAED,UAAU;QACR,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;CACF;AA9CD,gDA8CC","file":"plugin-service.js","sourcesContent":["import type { IChartPlugin, IChartPluginService } from './interface';\nimport type { IVChart } from '../../core';\nimport { BasePluginService } from '../base/base-plugin-service';\nimport type { VChartRenderActionSource } from '../../core/interface';\nimport type { IChartSpecInfo } from '../../chart/interface/common';\n\nexport class ChartPluginService<T extends IChartPlugin = IChartPlugin>\n extends BasePluginService<T>\n implements IChartPluginService<T>\n{\n globalInstance: IVChart;\n\n constructor(globalInstance: IVChart) {\n super();\n this.globalInstance = globalInstance;\n }\n\n onInit(chartSpec: any) {\n this._plugins.forEach(plugin => {\n plugin.onInit && plugin.onInit(this, chartSpec);\n });\n }\n\n onBeforeResize(width: number, height: number) {\n this._plugins.forEach(plugin => {\n plugin.onBeforeResize && plugin.onBeforeResize(this, width, height);\n });\n }\n\n onAfterChartSpecTransform(chartSpec: any, actionSource: VChartRenderActionSource) {\n this._plugins.forEach(plugin => {\n plugin.onAfterChartSpecTransform && plugin.onAfterChartSpecTransform(this, chartSpec, actionSource);\n });\n }\n\n onAfterModelSpecTransform(chartSpec: any, chartSpecInfo: IChartSpecInfo, actionSource: VChartRenderActionSource) {\n this._plugins.forEach(plugin => {\n plugin.onAfterModelSpecTransform &&\n plugin.onAfterModelSpecTransform(this, chartSpec, chartSpecInfo, actionSource);\n });\n }\n\n onBeforeInitChart(chartSpec: any, actionSource: VChartRenderActionSource) {\n this._plugins.forEach(plugin => {\n plugin.onBeforeInitChart && plugin.onBeforeInitChart(this, chartSpec, actionSource);\n });\n }\n\n releaseAll(): void {\n super.releaseAll();\n this.globalInstance = null;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/plugin/chart/plugin-service.ts"],"names":[],"mappings":";;;AAEA,qEAAgE;AAIhE,MAAa,kBACX,SAAQ,uCAAoB;IAK5B,YAAY,cAAuB;QACjC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,SAAc;QACnB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7B,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,cAAc,CAAC,KAAa,EAAE,MAAc;QAC1C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7B,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;IACL,CAAC;IAED,yBAAyB,CAAC,SAAc,EAAE,YAAsC;QAC9E,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7B,MAAM,CAAC,yBAAyB,IAAI,MAAM,CAAC,yBAAyB,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QACtG,CAAC,CAAC,CAAC;IACL,CAAC;IAED,yBAAyB,CAAC,SAAc,EAAE,aAA6B,EAAE,YAAsC;QAC7G,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7B,MAAM,CAAC,yBAAyB;gBAC9B,MAAM,CAAC,yBAAyB,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;QACnF,CAAC,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB,CAAC,SAAc,EAAE,YAAsC;QACtE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7B,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,CAAC,SAAc,EAAE,YAAsC;QACrE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7B,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QACpF,CAAC,CAAC,CAAC;IACL,CAAC;IAED,UAAU;QACR,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;CACF;AApDD,gDAoDC","file":"plugin-service.js","sourcesContent":["import type { IChartPlugin, IChartPluginService } from './interface';\nimport type { IVChart } from '../../core';\nimport { BasePluginService } from '../base/base-plugin-service';\nimport type { VChartRenderActionSource } from '../../core/interface';\nimport type { IChartSpecInfo } from '../../chart/interface/common';\n\nexport class ChartPluginService<T extends IChartPlugin = IChartPlugin>\n extends BasePluginService<T>\n implements IChartPluginService<T>\n{\n globalInstance: IVChart;\n\n constructor(globalInstance: IVChart) {\n super();\n this.globalInstance = globalInstance;\n }\n\n onInit(chartSpec: any) {\n this._plugins.forEach(plugin => {\n plugin.onInit && plugin.onInit(this, chartSpec);\n });\n }\n\n onBeforeResize(width: number, height: number) {\n this._plugins.forEach(plugin => {\n plugin.onBeforeResize && plugin.onBeforeResize(this, width, height);\n });\n }\n\n onAfterChartSpecTransform(chartSpec: any, actionSource: VChartRenderActionSource) {\n this._plugins.forEach(plugin => {\n plugin.onAfterChartSpecTransform && plugin.onAfterChartSpecTransform(this, chartSpec, actionSource);\n });\n }\n\n onAfterModelSpecTransform(chartSpec: any, chartSpecInfo: IChartSpecInfo, actionSource: VChartRenderActionSource) {\n this._plugins.forEach(plugin => {\n plugin.onAfterModelSpecTransform &&\n plugin.onAfterModelSpecTransform(this, chartSpec, chartSpecInfo, actionSource);\n });\n }\n\n onBeforeInitChart(chartSpec: any, actionSource: VChartRenderActionSource) {\n this._plugins.forEach(plugin => {\n plugin.onBeforeInitChart && plugin.onBeforeInitChart(this, chartSpec, actionSource);\n });\n }\n\n onAfterInitChart(chartSpec: any, actionSource: VChartRenderActionSource) {\n this._plugins.forEach(plugin => {\n plugin.onAfterInitChart && plugin.onAfterInitChart(this, chartSpec, actionSource);\n });\n }\n\n releaseAll(): void {\n super.releaseAll();\n this.globalInstance = null;\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ export * from './zoom';
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ var __createBinding = this && this.__createBinding || (Object.create ? function(o, m, k, k2) {
4
+ void 0 === k2 && (k2 = k);
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ desc && !("get" in desc ? !m.__esModule : desc.writable || desc.configurable) || (desc = {
7
+ enumerable: !0,
8
+ get: function() {
9
+ return m[k];
10
+ }
11
+ }), Object.defineProperty(o, k2, desc);
12
+ } : function(o, m, k, k2) {
13
+ void 0 === k2 && (k2 = k), o[k2] = m[k];
14
+ }), __exportStar = this && this.__exportStar || function(m, exports) {
15
+ for (var p in m) "default" === p || Object.prototype.hasOwnProperty.call(exports, p) || __createBinding(exports, m, p);
16
+ };
17
+
18
+ Object.defineProperty(exports, "__esModule", {
19
+ value: !0
20
+ }), __exportStar(require("./zoom"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/plugin/chart/resize-zoom/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB","file":"index.js","sourcesContent":["export * from './zoom';\n"]}
@@ -0,0 +1,21 @@
1
+ import type { IChartPlugin, IChartPluginService } from '../interface';
2
+ import { BasePlugin } from '../../base/base-plugin';
3
+ import type { IPoint } from '../../../typings';
4
+ export declare class ChartResizeZoomPlugin extends BasePlugin<IChartPluginService> implements IChartPlugin {
5
+ static readonly pluginType: 'chart';
6
+ static readonly specKey = "resizeZoom";
7
+ static readonly type: string;
8
+ readonly type: string;
9
+ protected _container?: HTMLElement;
10
+ protected _triggerEvent?: string;
11
+ protected _minZoom?: number;
12
+ protected _maxZoom?: number;
13
+ protected _zoom: number;
14
+ protected _rate?: number;
15
+ constructor();
16
+ onAfterInitChart(service: IChartPluginService, chartSpec: any): void;
17
+ protected _onWheel: (e: WheelEvent) => void;
18
+ zoom(zoom: number, pointerPos?: IPoint): void;
19
+ release(): void;
20
+ }
21
+ export declare const registerChartResizeZoomPlugin: () => void;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ }), exports.registerChartResizeZoomPlugin = exports.ChartResizeZoomPlugin = void 0;
6
+
7
+ const base_plugin_1 = require("../../base/base-plugin"), register_1 = require("../register"), config_1 = require("../../../component/common/trigger/config"), MIN_ZOOM = .1, MAX_ZOOM = 10;
8
+
9
+ class ChartResizeZoomPlugin extends base_plugin_1.BasePlugin {
10
+ constructor() {
11
+ super(ChartResizeZoomPlugin.type), this.type = "ChartResizeZoomPlugin", this._zoom = 1,
12
+ this._onWheel = e => {
13
+ e.preventDefault(), e.stopImmediatePropagation();
14
+ const zoom = Math.pow(1.005, -e.deltaY * Math.pow(16, e.deltaMode) * .2 * this._rate), center = {
15
+ x: e.offsetX,
16
+ y: e.offsetY
17
+ };
18
+ this.zoom(zoom, center);
19
+ };
20
+ }
21
+ onAfterInitChart(service, chartSpec) {
22
+ var _a, _b, _c, _d, _e;
23
+ const chart = service.globalInstance, spec = null !== (_b = null === (_a = chart.getSpec()) || void 0 === _a ? void 0 : _a[ChartResizeZoomPlugin.specKey]) && void 0 !== _b ? _b : {
24
+ enabled: !1
25
+ };
26
+ !0 === spec.enabled && (this._minZoom = null !== (_c = spec.min) && void 0 !== _c ? _c : .1,
27
+ this._maxZoom = null !== (_d = spec.max) && void 0 !== _d ? _d : 10, this._rate = null !== (_e = spec.rate) && void 0 !== _e ? _e : .1,
28
+ this._container = chart.getContainer(), this._triggerEvent = (0, config_1.getDefaultTriggerEventByMode)(service.globalInstance.getChart().getOption().mode).zoom,
29
+ this._container && this._triggerEvent && this._container.addEventListener(this._triggerEvent, this._onWheel));
30
+ }
31
+ zoom(zoom, pointerPos) {
32
+ const vchart = this.service.globalInstance;
33
+ if (!vchart) return;
34
+ const oldZoom = this._zoom;
35
+ let tempZoom = this._zoom * zoom;
36
+ if (tempZoom <= this._minZoom && zoom < 1 || tempZoom >= this._maxZoom && zoom > 1) if (tempZoom <= this._minZoom && this._zoom > this._minZoom) tempZoom = this._minZoom; else {
37
+ if (!(tempZoom >= this._maxZoom && this._zoom < this._maxZoom)) return;
38
+ tempZoom = this._maxZoom;
39
+ }
40
+ if (tempZoom === oldZoom) return;
41
+ const actualZoomRatio = tempZoom / oldZoom;
42
+ if (this._zoom = tempZoom, vchart.resize(vchart.getCurrentSize().width * this._zoom, vchart.getCurrentSize().height * this._zoom),
43
+ pointerPos && this._container) {
44
+ const {scrollLeft: scrollLeft, scrollTop: scrollTop} = this._container;
45
+ this._container.scrollLeft = scrollLeft + pointerPos.x * (actualZoomRatio - 1),
46
+ this._container.scrollTop = scrollTop + pointerPos.y * (actualZoomRatio - 1);
47
+ }
48
+ }
49
+ release() {
50
+ this._container && this._triggerEvent && this._container.removeEventListener(this._triggerEvent, this._onWheel);
51
+ }
52
+ }
53
+
54
+ exports.ChartResizeZoomPlugin = ChartResizeZoomPlugin, ChartResizeZoomPlugin.specKey = "resizeZoom",
55
+ ChartResizeZoomPlugin.type = "ChartResizeZoomPlugin";
56
+
57
+ const registerChartResizeZoomPlugin = () => {
58
+ (0, register_1.registerChartPlugin)(ChartResizeZoomPlugin);
59
+ };
60
+
61
+ exports.registerChartResizeZoomPlugin = registerChartResizeZoomPlugin;
62
+ //# sourceMappingURL=zoom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/plugin/chart/resize-zoom/zoom.ts"],"names":[],"mappings":"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","file":"zoom.js","sourcesContent":["import type { IChartPlugin, IChartPluginService } from '../interface';\nimport { BasePlugin } from '../../base/base-plugin';\nimport { registerChartPlugin } from '../register';\nimport type { IPoint } from '../../../typings';\nimport { getDefaultTriggerEventByMode } from '../../../component/common/trigger/config';\n\nconst MIN_ZOOM = 0.1;\nconst MAX_ZOOM = 10;\n\nexport class ChartResizeZoomPlugin extends BasePlugin<IChartPluginService> implements IChartPlugin {\n static readonly pluginType: 'chart';\n static readonly specKey = 'resizeZoom';\n static readonly type: string = 'ChartResizeZoomPlugin';\n readonly type: string = 'ChartResizeZoomPlugin';\n\n protected _container?: HTMLElement;\n protected _triggerEvent?: string;\n protected _minZoom?: number;\n protected _maxZoom?: number;\n protected _zoom: number = 1;\n protected _rate?: number;\n\n constructor() {\n super(ChartResizeZoomPlugin.type);\n }\n\n onAfterInitChart(service: IChartPluginService, chartSpec: any) {\n const chart = service.globalInstance;\n const spec = chart.getSpec()?.[ChartResizeZoomPlugin.specKey] ?? { enabled: false };\n if (spec.enabled !== true) {\n return;\n }\n this._minZoom = spec.min ?? MIN_ZOOM;\n this._maxZoom = spec.max ?? MAX_ZOOM;\n this._rate = spec.rate ?? 0.1;\n this._container = chart.getContainer();\n this._triggerEvent = getDefaultTriggerEventByMode(service.globalInstance.getChart().getOption().mode).zoom;\n if (this._container && this._triggerEvent) {\n this._container.addEventListener(this._triggerEvent as keyof HTMLElementEventMap, this._onWheel as EventListener);\n }\n }\n\n protected _onWheel = (e: WheelEvent) => {\n e.preventDefault();\n e.stopImmediatePropagation();\n\n const zoom = Math.pow(1.005, -e.deltaY * Math.pow(16, e.deltaMode) * 0.2 * this._rate);\n const center = { x: e.offsetX, y: e.offsetY };\n this.zoom(zoom, center);\n };\n\n /**\n * 缩放图表\n * @param zoom 缩放比例\n * @param pointerPos 缩放中心,即鼠标位置\n */\n zoom(zoom: number, pointerPos?: IPoint) {\n const vchart = this.service.globalInstance;\n if (!vchart) {\n return;\n }\n const oldZoom = this._zoom;\n let tempZoom = this._zoom * zoom;\n if ((tempZoom <= this._minZoom && zoom < 1) || (tempZoom >= this._maxZoom && zoom > 1)) {\n if (tempZoom <= this._minZoom && this._zoom > this._minZoom) {\n tempZoom = this._minZoom;\n } else if (tempZoom >= this._maxZoom && this._zoom < this._maxZoom) {\n tempZoom = this._maxZoom;\n } else {\n return;\n }\n }\n\n if (tempZoom === oldZoom) {\n return;\n }\n\n const actualZoomRatio = tempZoom / oldZoom;\n this._zoom = tempZoom;\n\n vchart.resize(vchart.getCurrentSize().width * this._zoom, vchart.getCurrentSize().height * this._zoom);\n // 滚动容器滚动, 保持当前鼠标位置在缩放后不变\n if (pointerPos && this._container) {\n const { scrollLeft, scrollTop } = this._container;\n this._container.scrollLeft = scrollLeft + pointerPos.x * (actualZoomRatio - 1);\n this._container.scrollTop = scrollTop + pointerPos.y * (actualZoomRatio - 1);\n }\n }\n\n release(): void {\n if (this._container && this._triggerEvent) {\n this._container.removeEventListener(\n this._triggerEvent as keyof HTMLElementEventMap,\n this._onWheel as EventListener\n );\n }\n }\n}\n\nexport const registerChartResizeZoomPlugin = () => {\n registerChartPlugin(ChartResizeZoomPlugin);\n};\n"]}
@@ -36,7 +36,7 @@ export declare abstract class BaseCrossHair<T extends ICartesianCrosshairSpec |
36
36
  value: string | number;
37
37
  }[]): void;
38
38
  protected _getLimitBounds(): IBoundsLike;
39
- protected _showDefaultCrosshairBySpec(): void;
39
+ protected _showDefaultCrosshairBySpec(): boolean;
40
40
  protected _updateVisibleCrosshair(): void;
41
41
  protected _showDefaultCrosshair(): void;
42
42
  setAttrFromSpec(): void;
@@ -58,7 +58,7 @@ export class BaseCrossHair extends BaseComponent {
58
58
  this._clickLock || this._handleIn(params);
59
59
  }), 10), this._handleOutEvent = () => {
60
60
  this.enableRemain || this._clickLock || !this._hasActive || (this.clearOutEvent(),
61
- this.hide());
61
+ this.hideCrosshair());
62
62
  }, this._handleTooltipShow = params => {
63
63
  const tooltipData = params.tooltipData;
64
64
  if (params.isEmptyTooltip || !tooltipData || !tooltipData.length) return void this._handleTooltipHideOrRelease();
@@ -68,7 +68,7 @@ export class BaseCrossHair extends BaseComponent {
68
68
  const components = this._getNeedClearVRenderComponents();
69
69
  this._hasActive = components.some((comp => comp && !1 !== comp.attribute.visible));
70
70
  }, this._handleTooltipHideOrRelease = () => {
71
- this.clearOutEvent(), this.hide();
71
+ this.clearOutEvent(), this.hideCrosshair();
72
72
  }, this.enable = !0, this.showDefault = !0;
73
73
  }
74
74
  _setAllAxisValues(axisMap, point, field) {
@@ -116,16 +116,18 @@ export class BaseCrossHair extends BaseComponent {
116
116
  return this._limitBounds;
117
117
  }
118
118
  _showDefaultCrosshairBySpec() {
119
- Object.keys(this._stateByField).forEach((field => {
119
+ let hasDefaultCrosshair = !1;
120
+ return Object.keys(this._stateByField).forEach((field => {
120
121
  const fieldSpec = this._spec[field];
121
122
  if (fieldSpec && fieldSpec.visible && fieldSpec.defaultSelect) {
122
123
  const {axisIndex: axisIndex = 0, datum: datum} = fieldSpec.defaultSelect, axis = this._option.getComponentsByKey("axes").find((c => c.getSpecIndex() === axisIndex));
123
- axis && (this._stateByField[field].currentValue.clear(), this._stateByField[field].currentValue.set(axisIndex, {
124
+ axis && (hasDefaultCrosshair = !0, this._stateByField[field].currentValue.clear(),
125
+ this._stateByField[field].currentValue.set(axisIndex, {
124
126
  axis: axis,
125
127
  datum: datum
126
128
  }));
127
129
  }
128
- }));
130
+ })), hasDefaultCrosshair;
129
131
  }
130
132
  _updateVisibleCrosshair() {
131
133
  let hasVisible = !1;
@@ -135,7 +137,9 @@ export class BaseCrossHair extends BaseComponent {
135
137
  })), hasVisible && this.layoutByValue(!1);
136
138
  }
137
139
  _showDefaultCrosshair() {
138
- this.showDefault ? (this._showDefaultCrosshairBySpec(), this.layoutByValue(!1)) : this._updateVisibleCrosshair();
140
+ if (this.showDefault) {
141
+ this._showDefaultCrosshairBySpec() && this.layoutByValue(!1);
142
+ } else this._updateVisibleCrosshair();
139
143
  }
140
144
  setAttrFromSpec() {
141
145
  super.setAttrFromSpec(), this._parseCrosshairSpec();