@visactor/vrender-components 0.11.2-alpha.1 → 0.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/cjs/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export declare const version = "0.11.2-alpha.1";
1
+ export declare const version = "0.12.1";
2
2
  export * from './core/base';
3
3
  export * from './scrollbar';
4
4
  export * from './tag';
package/cjs/index.js CHANGED
@@ -17,7 +17,7 @@ var __createBinding = this && this.__createBinding || (Object.create ? function(
17
17
 
18
18
  Object.defineProperty(exports, "__esModule", {
19
19
  value: !0
20
- }), exports.version = void 0, exports.version = "0.11.2-alpha.1", __exportStar(require("./core/base"), exports),
20
+ }), exports.version = void 0, exports.version = "0.12.1", __exportStar(require("./core/base"), exports),
21
21
  __exportStar(require("./scrollbar"), exports), __exportStar(require("./tag"), exports),
22
22
  __exportStar(require("./crosshair"), exports), __exportStar(require("./label"), exports),
23
23
  __exportStar(require("./axis"), exports), __exportStar(require("./segment"), exports),
package/cjs/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACa,QAAA,OAAO,GAAG,gBAAgB,CAAC;AAExC,8CAA4B;AAC5B,8CAA4B;AAC5B,wCAAsB;AACtB,8CAA4B;AAC5B,0CAAwB;AACxB,yCAAuB;AACvB,4CAA0B;AAC1B,8CAA4B;AAC5B,2CAAyB;AACzB,0CAAwB;AACxB,2CAAyB;AACzB,0CAAwB;AACxB,8CAA4B;AAC5B,2CAAyB;AACzB,8CAA4B;AAC5B,2CAAyB;AACzB,0CAAwB;AACxB,4CAA0B;AAC1B,8CAA4B","file":"index.js","sourcesContent":["// 导出版本号\nexport const version = \"0.11.2-alpha.1\";\n\nexport * from './core/base';\nexport * from './scrollbar';\nexport * from './tag';\nexport * from './crosshair';\nexport * from './label';\nexport * from './axis';\nexport * from './segment';\nexport * from './data-zoom';\nexport * from './marker';\nexport * from './pager';\nexport * from './legend';\nexport * from './title';\nexport * from './indicator';\nexport * from './slider';\nexport * from './link-path';\nexport * from './player';\nexport * from './brush';\nexport * from './tooltip';\nexport * from './interface';\n"]}
1
+ {"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACa,QAAA,OAAO,GAAG,QAAQ,CAAC;AAEhC,8CAA4B;AAC5B,8CAA4B;AAC5B,wCAAsB;AACtB,8CAA4B;AAC5B,0CAAwB;AACxB,yCAAuB;AACvB,4CAA0B;AAC1B,8CAA4B;AAC5B,2CAAyB;AACzB,0CAAwB;AACxB,2CAAyB;AACzB,0CAAwB;AACxB,8CAA4B;AAC5B,2CAAyB;AACzB,8CAA4B;AAC5B,2CAAyB;AACzB,0CAAwB;AACxB,4CAA0B;AAC1B,8CAA4B","file":"index.js","sourcesContent":["// 导出版本号\nexport const version = \"0.12.1\";\n\nexport * from './core/base';\nexport * from './scrollbar';\nexport * from './tag';\nexport * from './crosshair';\nexport * from './label';\nexport * from './axis';\nexport * from './segment';\nexport * from './data-zoom';\nexport * from './marker';\nexport * from './pager';\nexport * from './legend';\nexport * from './title';\nexport * from './indicator';\nexport * from './slider';\nexport * from './link-path';\nexport * from './player';\nexport * from './brush';\nexport * from './tooltip';\nexport * from './interface';\n"]}
@@ -1,9 +1,10 @@
1
- import { IGroup, IGraphic, IText } from '@visactor/vrender';
2
- import { IBoundsLike } from '@visactor/vutils';
1
+ import type { IGroup, IGraphic, IText } from '@visactor/vrender';
2
+ import type { IBoundsLike } from '@visactor/vutils';
3
3
  import { AbstractComponent } from '../core/base';
4
- import { PointLocationCfg } from '../core/type';
5
- import { Bitmap, bitmapTool } from './overlap';
6
- import { BaseLabelAttrs, OverlapAttrs, ILabelGraphicAttribute, ILabelAnimation } from './type';
4
+ import type { PointLocationCfg } from '../core/type';
5
+ import type { Bitmap } from './overlap';
6
+ import { bitmapTool } from './overlap';
7
+ import type { BaseLabelAttrs, OverlapAttrs, ILabelGraphicAttribute, ILabelAnimation } from './type';
7
8
  export declare abstract class LabelBase<T extends BaseLabelAttrs> extends AbstractComponent<T> {
8
9
  name: string;
9
10
  protected _baseMarks?: IGraphic[];
package/cjs/label/base.js CHANGED
@@ -108,16 +108,11 @@ class LabelBase extends base_1.AbstractComponent {
108
108
  const text = (0, vrender_1.createText)(labels[i]), baseMark = null === (_e = this._baseMarks) || void 0 === _e ? void 0 : _e[i];
109
109
  if (text.update(), (0, overlap_1.canPlace)(bmpTool, bitmap, text.AABBBounds, clampForce)) {
110
110
  if (!checkBounds) {
111
- bitmap.setRange((0, overlap_1.boundToRange)(bmpTool, text.AABBBounds, !0)), result.push(Object.assign(Object.assign({}, text.attribute), {
112
- _insideGraphic: (0, overlap_1.canPlaceInside)(text.AABBBounds, null == baseMark ? void 0 : baseMark.AABBBounds)
113
- }));
111
+ bitmap.setRange((0, overlap_1.boundToRange)(bmpTool, text.AABBBounds, !0)), result.push(Object.assign({}, text.attribute));
114
112
  continue;
115
113
  }
116
114
  if (checkBounds && (null == baseMark ? void 0 : baseMark.AABBBounds) && (0, overlap_1.canPlaceInside)(text.AABBBounds, null == baseMark ? void 0 : baseMark.AABBBounds)) {
117
- bitmap.setRange((0, overlap_1.boundToRange)(bmpTool, text.AABBBounds, !0)), result.push(Object.assign(Object.assign({}, text.attribute), {
118
- _insideGraphic: !0,
119
- _computedBound: text.AABBBounds
120
- }));
115
+ bitmap.setRange((0, overlap_1.boundToRange)(bmpTool, text.AABBBounds, !0)), result.push(Object.assign({}, text.attribute));
121
116
  continue;
122
117
  }
123
118
  }
@@ -126,15 +121,11 @@ class LabelBase extends base_1.AbstractComponent {
126
121
  !1 !== hasPlace) {
127
122
  result.push(Object.assign(Object.assign({}, text.attribute), {
128
123
  x: hasPlace.x,
129
- y: hasPlace.y,
130
- _insideGraphic: (0, overlap_1.canPlaceInside)(text.AABBBounds, null == baseMark ? void 0 : baseMark.AABBBounds)
124
+ y: hasPlace.y
131
125
  }));
132
126
  break;
133
127
  }
134
- !hasPlace && !hideOnHit && result.push(Object.assign(Object.assign({}, text.attribute), {
135
- _insideGraphic: (0, overlap_1.canPlaceInside)(text.AABBBounds, null == baseMark ? void 0 : baseMark.AABBBounds),
136
- _computedBound: text.AABBBounds
137
- }));
128
+ !hasPlace && !hideOnHit && result.push(Object.assign({}, text.attribute));
138
129
  }
139
130
  return (0, vutils_1.isFunction)(this.onAfterLabelOverlap) && this.onAfterLabelOverlap(bitmap),
140
131
  result;
@@ -231,11 +222,7 @@ class LabelBase extends base_1.AbstractComponent {
231
222
  if (!1 !== this.attribute.smartInvert) for (let i = 0; i < labels.length; i++) {
232
223
  const label = null == labels ? void 0 : labels[i];
233
224
  if (!label) continue;
234
- let isInside = label._insideGraphic;
235
- if (void 0 === isInside) {
236
- const text = (0, vrender_1.createText)(label);
237
- text.update(), isInside = (0, overlap_1.canPlaceInside)(text.AABBBounds, null === (_a = this._relationMap.get(label._relatedIndex)) || void 0 === _a ? void 0 : _a.AABBBounds);
238
- }
225
+ const isInside = (0, overlap_1.canPlaceInside)((0, vrender_1.createText)(label).AABBBounds, null === (_a = this._relationMap.get(label._relatedIndex)) || void 0 === _a ? void 0 : _a.AABBBounds);
239
226
  if (label.stroke && label.lineWidth > 0) label.fill = (0, labelSmartInvert_1.labelSmartInvert)(label.fill, label.stroke, null === (_b = this.attribute.smartInvert) || void 0 === _b ? void 0 : _b.textType, null === (_c = this.attribute.smartInvert) || void 0 === _c ? void 0 : _c.contrastRatiosThreshold, null === (_d = this.attribute.smartInvert) || void 0 === _d ? void 0 : _d.alternativeColors); else if (isInside) {
240
227
  const backgroundColor = this._relationMap.get(label._relatedIndex).attribute.fill, foregroundColor = label.fill;
241
228
  label.fill = (0, labelSmartInvert_1.labelSmartInvert)(foregroundColor, backgroundColor, null === (_e = this.attribute.smartInvert) || void 0 === _e ? void 0 : _e.textType, null === (_f = this.attribute.smartInvert) || void 0 === _f ? void 0 : _f.contrastRatiosThreshold, null === (_g = this.attribute.smartInvert) || void 0 === _g ? void 0 : _g.alternativeColors);
@@ -1 +1 @@
1
- {"version":3,"sources":["label/base.ts"],"names":[],"mappings":"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","file":"base.js","sourcesContent":["/**\n * @description Label 基类\n */\nimport {\n IGroup,\n Text,\n createText,\n IGraphic,\n IText,\n IncreaseCount,\n AttributeUpdateType,\n FederatedPointerEvent,\n IColor\n} from '@visactor/vrender';\nimport { isFunction, IBoundsLike, isValidNumber, isEmpty } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport { PointLocationCfg } from '../core/type';\nimport { labelSmartInvert } from '../util/labelSmartInvert';\nimport { traverseGroup } from '../util';\nimport { StateValue } from '../constant';\nimport { Bitmap, bitmapTool, boundToRange, canPlace, canPlaceInside, place } from './overlap';\nimport { BaseLabelAttrs, OverlapAttrs, ILabelGraphicAttribute, ILabelAnimation } from './type';\nimport { DefaultLabelAnimation, getAnimationAttributes } from './animate/animate';\n\nexport abstract class LabelBase<T extends BaseLabelAttrs> extends AbstractComponent<T> {\n name = 'label';\n\n protected _baseMarks?: IGraphic[];\n\n protected _bitmap?: Bitmap;\n\n setBitmap(bitmap: Bitmap) {\n this._bitmap = bitmap;\n }\n\n protected _bmpTool?: ReturnType<typeof bitmapTool>;\n setBitmapTool(bmpTool: ReturnType<typeof bitmapTool>) {\n this._bmpTool = bmpTool;\n }\n\n protected _relationMap: Map<number, IGraphic>;\n\n protected _prevRelationMap: Map<number, IGraphic>;\n\n protected _textMap: Map<IGraphic, IText>;\n\n onAfterLabelOverlap?: (bitmap: Bitmap) => void;\n\n private _lastHover: IGraphic;\n private _lastSelect: IGraphic;\n\n private _enableAnimation: boolean;\n\n protected abstract labeling(\n textBounds: IBoundsLike,\n graphicBounds: IBoundsLike,\n position?: BaseLabelAttrs['position'],\n offset?: number\n ): Partial<ILabelGraphicAttribute> | undefined;\n\n protected render() {\n const currentBaseMarks = this._checkMarks();\n const labels = this.layout(currentBaseMarks);\n\n this._smartInvert(labels);\n\n this._renderLabels(labels);\n }\n\n private _bindEvent(target: IGraphic) {\n if (!target) {\n return;\n }\n\n const { hover, select } = this.attribute;\n\n if (hover) {\n target.addEventListener('pointermove', this._onHover as EventListenerOrEventListenerObject);\n target.addEventListener('pointerout', this._onUnHover as EventListenerOrEventListenerObject);\n }\n\n if (select) {\n target.addEventListener('pointerdown', this._onClick as EventListenerOrEventListenerObject);\n }\n }\n\n private _setStates(target: IGraphic) {\n if (!target) {\n return;\n }\n const state = this.attribute.state;\n\n if (!state || isEmpty(state)) {\n return;\n }\n\n target.states = state;\n }\n\n private _onHover = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGraphic;\n if (target !== this._lastHover && !isEmpty(target.states)) {\n target.addState(StateValue.hover, true);\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (node !== target && !isEmpty(node.states)) {\n node.addState(StateValue.hoverReverse, true);\n }\n });\n this._lastHover = target;\n }\n };\n\n private _onUnHover = (e: FederatedPointerEvent) => {\n if (this._lastHover) {\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (!isEmpty(node.states)) {\n node.removeState(StateValue.hoverReverse);\n node.removeState(StateValue.hover);\n }\n });\n this._lastHover = null;\n }\n };\n\n private _onClick = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGraphic;\n if (this._lastSelect === target && target.hasState('selected')) {\n // 取消选中\n this._lastSelect = null;\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (!isEmpty(node.states)) {\n node.removeState(StateValue.selectedReverse);\n node.removeState(StateValue.selected);\n }\n });\n return;\n }\n\n if (!isEmpty(target.states)) {\n target.addState(StateValue.selected, true);\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (node !== target && !isEmpty(node.states)) {\n node.addState(StateValue.selectedReverse, true);\n }\n });\n this._lastSelect = target;\n }\n };\n\n private _createLabelText(attributes: ILabelGraphicAttribute) {\n const text = createText(attributes);\n this._bindEvent(text);\n this._setStates(text);\n return text;\n }\n\n private _checkMarks() {\n const baseMarks = this.getBaseMarks();\n const currentBaseMarks: IGraphic[] = [];\n baseMarks.forEach(mark => {\n if ((mark as any).releaseStatus !== 'willRelease') {\n currentBaseMarks.push(mark);\n }\n });\n this._prevRelationMap = new Map(this._relationMap);\n this._relationMap?.clear();\n return currentBaseMarks;\n }\n\n protected layout(currentMarks?: IGraphic[]): ILabelGraphicAttribute[] {\n const { textStyle, position, offset } = this.attribute as BaseLabelAttrs;\n let { data } = this.attribute as BaseLabelAttrs;\n if (isFunction(data)) {\n data = data({});\n }\n if (!data || data.length === 0) {\n return [];\n }\n\n let labels: ILabelGraphicAttribute[] = [];\n\n if (isFunction(this.attribute.sort) && currentMarks && currentMarks.length) {\n currentMarks = currentMarks.sort(this.attribute.sort);\n }\n\n if (!this._relationMap) {\n this._relationMap = new Map();\n }\n\n // 默认根据 index 顺序排序\n for (let i = 0; i < data.length; i++) {\n const textData = data[i];\n const baseMark = currentMarks?.[i] as IGraphic;\n const labelAttribute = {\n ...textStyle,\n ...textData,\n _relatedIndex: i\n };\n this._relationMap.set(i, baseMark);\n\n if (textData) {\n const text = createText(labelAttribute);\n text.update();\n const textBounds = this.getGraphicBounds(text);\n const graphicBounds = this.getGraphicBounds(baseMark, { x: textData.x as number, y: textData.y as number });\n\n const textAttributes = this.labeling(\n textBounds,\n graphicBounds,\n isFunction(position) ? position(textData) : position,\n offset\n );\n\n if (!textAttributes) {\n continue;\n }\n\n labelAttribute.x = textAttributes.x;\n labelAttribute.y = textAttributes.y;\n\n labels.push(labelAttribute);\n }\n }\n\n this._baseMarks = currentMarks as IGraphic[];\n if (this.attribute.overlap !== false) {\n labels = this.overlapping(labels, this.attribute.overlap as OverlapAttrs);\n }\n\n return labels;\n }\n\n protected overlapping(labels: ILabelGraphicAttribute[], option: OverlapAttrs = {}) {\n if (labels.length === 0) {\n return [];\n }\n const result: ILabelGraphicAttribute[] = [];\n const baseMarkGroup = this.getBaseMarkGroup();\n const size = option.size ?? {\n width: baseMarkGroup?.AABBBounds.width() ?? 0,\n height: baseMarkGroup?.AABBBounds.height() ?? 0\n };\n\n if (size.width === 0 || size.height === 0) {\n return labels;\n }\n\n const { avoidBaseMark, strategy = [], hideOnHit = true, clampForce = true } = option;\n const bmpTool = this._bmpTool || bitmapTool(size.width, size.height);\n const bitmap = this._bitmap || bmpTool.bitmap();\n const checkBounds = strategy.some(s => s.type === 'bound');\n\n if (avoidBaseMark) {\n this._baseMarks?.forEach(mark => {\n mark.AABBBounds && bitmap.setRange(boundToRange(bmpTool, mark.AABBBounds, true));\n });\n }\n\n for (let i = 0; i < labels.length; i++) {\n if (labels[i].visible === false) {\n continue;\n }\n const text = createText(labels[i]) as Text;\n const baseMark = this._baseMarks?.[i];\n text.update();\n\n // 默认位置可以放置\n if (canPlace(bmpTool, bitmap, text.AABBBounds, clampForce)) {\n // 如果配置了限制在图形内部,需要提前判断;\n if (!checkBounds) {\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push({\n ...text.attribute,\n _insideGraphic: canPlaceInside(text.AABBBounds, baseMark?.AABBBounds)\n });\n continue;\n }\n\n if (checkBounds && baseMark?.AABBBounds && canPlaceInside(text.AABBBounds, baseMark?.AABBBounds)) {\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push({ ...text.attribute, _insideGraphic: true, _computedBound: text.AABBBounds });\n continue;\n }\n }\n\n let hasPlace: ReturnType<typeof place> = false;\n // 发生碰撞,根据策略寻找可放置的位置\n for (let j = 0; j < strategy.length; j++) {\n hasPlace = place(\n bmpTool,\n bitmap,\n strategy[j],\n <BaseLabelAttrs>this.attribute,\n text,\n this.getGraphicBounds(baseMark, labels[i]),\n this.labeling\n );\n if (hasPlace !== false) {\n result.push({\n ...text.attribute,\n x: hasPlace.x,\n y: hasPlace.y,\n _insideGraphic: canPlaceInside(text.AABBBounds, baseMark?.AABBBounds)\n });\n break;\n }\n }\n\n !hasPlace &&\n !hideOnHit &&\n result.push({\n ...text.attribute,\n _insideGraphic: canPlaceInside(text.AABBBounds, baseMark?.AABBBounds),\n _computedBound: text.AABBBounds\n });\n }\n\n if (isFunction(this.onAfterLabelOverlap)) {\n this.onAfterLabelOverlap(bitmap);\n }\n\n return result;\n }\n\n protected getBaseMarks() {\n const baseMarkGroup = this.getBaseMarkGroup() as IGroup;\n if (!baseMarkGroup) {\n return;\n }\n return baseMarkGroup.getChildren() as IGraphic[];\n }\n\n protected getBaseMarkGroup() {\n const { baseMarkGroupName } = this.attribute as BaseLabelAttrs;\n if (!baseMarkGroupName) {\n return;\n }\n return (this.getRootNode() as IGroup).find(node => node.name === baseMarkGroupName, true) as IGroup;\n }\n\n protected getGraphicBounds(graphic?: IGraphic, point: Partial<PointLocationCfg> = {}): IBoundsLike {\n // if (graphic && !isEmpty((graphic as any).finalAttrs)) {\n // const g = graphic.clone();\n // g.onBeforeAttributeUpdate = graphic.onBeforeAttributeUpdate;\n // g.setAttributes((graphic as any).finalAttrs);\n // g.update();\n // return g.AABBBounds;\n // }\n return (\n graphic?.AABBBounds ||\n ({\n x1: point.x,\n x2: point.x,\n y1: point.y,\n y2: point.y\n } as IBoundsLike)\n );\n }\n\n protected _renderLabels(labels: ILabelGraphicAttribute[]) {\n const animationConfig = (this.attribute.animation ?? {}) as ILabelAnimation;\n const disableAnimation = this._enableAnimation === false || (animationConfig as unknown as boolean) === false;\n const mode = animationConfig.mode ?? DefaultLabelAnimation.mode;\n const duration = animationConfig.duration ?? DefaultLabelAnimation.duration;\n const easing = animationConfig.easing ?? DefaultLabelAnimation.easing;\n const delay = animationConfig.delay ?? 0;\n\n const currentTextMap = new Map();\n const prevTextMap = this._textMap || new Map();\n const texts = [] as IText[];\n\n labels.forEach((label, index) => {\n const text = this._createLabelText(label);\n const relatedGraphic = this._relationMap.get(label._relatedIndex);\n const state = prevTextMap?.get(relatedGraphic) ? 'update' : 'enter';\n\n if (state === 'enter') {\n texts.push(text);\n currentTextMap.set(relatedGraphic, text);\n if (!disableAnimation && relatedGraphic) {\n const { from, to } = getAnimationAttributes(label, 'fadeIn');\n this.add(text);\n relatedGraphic.onAnimateBind = () => {\n text.setAttributes(from);\n const listener = this._afterRelatedGraphicAttributeUpdate(text, texts, index, relatedGraphic, {\n mode,\n duration,\n easing,\n to,\n delay\n });\n relatedGraphic.on('afterAttributeUpdate', listener);\n };\n } else {\n this.add(text);\n }\n }\n\n if (state === 'update') {\n const prevText = prevTextMap.get(relatedGraphic);\n prevTextMap.delete(relatedGraphic);\n currentTextMap.set(relatedGraphic, prevText);\n if (!disableAnimation) {\n prevText.animate().to(text.attribute, duration, easing);\n if (\n animationConfig.increaseEffect !== false &&\n prevText.attribute.text !== text.attribute.text &&\n isValidNumber(Number(prevText.attribute.text) * Number(text.attribute.text))\n ) {\n prevText\n .animate()\n .play(\n new IncreaseCount(\n { text: prevText.attribute.text as string },\n { text: text.attribute.text as string },\n duration,\n easing\n )\n );\n }\n } else {\n prevText.setAttributes(text.attribute);\n }\n }\n });\n prevTextMap.forEach(label => {\n if (disableAnimation) {\n this.removeChild(label);\n } else {\n label\n ?.animate()\n .to(getAnimationAttributes(label.attribute, 'fadeOut').to, duration, easing)\n .onEnd(() => {\n this.removeChild(label);\n });\n }\n });\n\n this._textMap = currentTextMap;\n }\n\n protected _afterRelatedGraphicAttributeUpdate(\n text: IText,\n texts: IText[],\n index: number,\n relatedGraphic: IGraphic,\n { mode, duration, easing, to, delay }: ILabelAnimation & { to: any }\n ) {\n const listener = (event: any) => {\n const { detail } = event;\n if (!detail) {\n return {};\n }\n\n const isValidAnimateState =\n detail &&\n detail.type === AttributeUpdateType.ANIMATE_UPDATE &&\n detail.animationState &&\n detail.animationState.step?.type !== 'wait';\n\n if (!isValidAnimateState) {\n return {};\n }\n\n if (detail.type === AttributeUpdateType.ANIMATE_END) {\n text.setAttributes(to);\n return;\n }\n\n const onEnd = () => {\n if (relatedGraphic) {\n relatedGraphic.onAnimateBind = undefined;\n relatedGraphic.removeEventListener('afterAttributeUpdate', listener);\n }\n };\n\n switch (mode) {\n case 'after':\n // 3. 当前关联图元的动画播放结束后\n if (detail.animationState.end) {\n text.animate({ onEnd }).wait(delay).to(to, duration, easing);\n }\n break;\n case 'after-all':\n // 2. 所有完成后才开始;\n if (index === texts.length - 1) {\n if (detail.animationState.end) {\n texts.forEach(t => {\n t.animate({ onEnd }).wait(delay).to(to, duration, easing);\n });\n }\n }\n break;\n case 'same-time':\n default:\n // 1. 与当前关联图元的动画播放同时进行\n if (detail.animationState.isFirstFrameOfStep) {\n text.animate({ onEnd }).wait(delay).to(to, duration, easing);\n }\n break;\n }\n };\n return listener;\n }\n\n protected _smartInvert(labels: ILabelGraphicAttribute[]) {\n if (this.attribute.smartInvert === false) {\n return;\n }\n for (let i = 0; i < labels.length; i++) {\n const label = labels?.[i] as ILabelGraphicAttribute;\n if (!label) {\n continue;\n }\n let isInside = label._insideGraphic;\n if (isInside === undefined) {\n const text = createText(label);\n text.update();\n isInside = canPlaceInside(text.AABBBounds, this._relationMap.get(label._relatedIndex)?.AABBBounds);\n }\n /**\n * stroke 的处理逻辑\n * 1. 当文本在图元内部时,有两种情况:\n * - a. 未设置stroke:labelFill为前景色,baseMark填充色为背景色\n * - b. 设置了stroke:labelFill为前景色,labelStroke填充色为背景色\n * 2. 当文本在图元外部时,有两种情况:\n * - a. 未设置stroke:此时设置strokeColor为backgroundColor。labelFill为前景色,labelStroke填充色为背景色。避免文字一半在图元内部,一半在图元外部时,在图元外部文字不可见。\n * - b. 设置了stroke:保持strokeColor。labelFill为前景色,labelStroke填充色为背景色。\n */\n if (label.stroke && label.lineWidth > 0) {\n /**\n * 1-b, 2-b\n * 若label存在stroke,label填充色为前景色,label描边色为背景色\n * WCAG 2 字母周围的文本发光/光晕可用作背景颜色\n */\n label.fill = labelSmartInvert(\n label.fill as IColor,\n label.stroke as IColor,\n this.attribute.smartInvert?.textType,\n this.attribute.smartInvert?.contrastRatiosThreshold,\n this.attribute.smartInvert?.alternativeColors\n );\n } else if (isInside) {\n /**\n * 1-a\n * label在图元内部时,label填充色为前景色,baseMark填充色为背景色\n */\n const baseMark = this._relationMap.get(label._relatedIndex);\n const backgroundColor = baseMark.attribute.fill as IColor;\n const foregroundColor = label.fill as IColor;\n label.fill = labelSmartInvert(\n foregroundColor,\n backgroundColor,\n this.attribute.smartInvert?.textType,\n this.attribute.smartInvert?.contrastRatiosThreshold,\n this.attribute.smartInvert?.alternativeColors\n );\n } else if (label.lineWidth > 0) {\n /**\n * 2-a\n * 当文本在图元外部时,设置strokeColor为backgroundColor。labelFill为前景色,labelStroke填充色为背景色。\n */\n const baseMark = this._relationMap.get(label._relatedIndex);\n label.stroke = baseMark.attribute.fill;\n const backgroundColor = label.stroke as IColor;\n const foregroundColor = label.fill as IColor;\n label.fill = labelSmartInvert(\n foregroundColor,\n backgroundColor,\n this.attribute.smartInvert?.textType,\n this.attribute.smartInvert?.contrastRatiosThreshold,\n this.attribute.smartInvert?.alternativeColors\n );\n }\n }\n }\n\n setLocation(point: PointLocationCfg) {\n this.translateTo(point.x, point.y);\n }\n\n disableAnimation() {\n this._enableAnimation = false;\n }\n\n enableAnimation() {\n this._enableAnimation = true;\n }\n}\n"]}
1
+ {"version":3,"sources":["label/base.ts"],"names":[],"mappings":"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","file":"base.js","sourcesContent":["/**\n * @description Label 基类\n */\nimport type { IGroup, Text, IGraphic, IText, FederatedPointerEvent, IColor } from '@visactor/vrender';\nimport { createText, IncreaseCount, AttributeUpdateType } from '@visactor/vrender';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport { isFunction, isValidNumber, isEmpty } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { PointLocationCfg } from '../core/type';\nimport { labelSmartInvert } from '../util/labelSmartInvert';\nimport { traverseGroup } from '../util';\nimport { StateValue } from '../constant';\nimport type { Bitmap } from './overlap';\nimport { bitmapTool, boundToRange, canPlace, canPlaceInside, place } from './overlap';\nimport type { BaseLabelAttrs, OverlapAttrs, ILabelGraphicAttribute, ILabelAnimation } from './type';\nimport { DefaultLabelAnimation, getAnimationAttributes } from './animate/animate';\n\nexport abstract class LabelBase<T extends BaseLabelAttrs> extends AbstractComponent<T> {\n name = 'label';\n\n protected _baseMarks?: IGraphic[];\n\n protected _bitmap?: Bitmap;\n\n setBitmap(bitmap: Bitmap) {\n this._bitmap = bitmap;\n }\n\n protected _bmpTool?: ReturnType<typeof bitmapTool>;\n setBitmapTool(bmpTool: ReturnType<typeof bitmapTool>) {\n this._bmpTool = bmpTool;\n }\n\n protected _relationMap: Map<number, IGraphic>;\n\n protected _prevRelationMap: Map<number, IGraphic>;\n\n protected _textMap: Map<IGraphic, IText>;\n\n onAfterLabelOverlap?: (bitmap: Bitmap) => void;\n\n private _lastHover: IGraphic;\n private _lastSelect: IGraphic;\n\n private _enableAnimation: boolean;\n\n protected abstract labeling(\n textBounds: IBoundsLike,\n graphicBounds: IBoundsLike,\n position?: BaseLabelAttrs['position'],\n offset?: number\n ): Partial<ILabelGraphicAttribute> | undefined;\n\n protected render() {\n const currentBaseMarks = this._checkMarks();\n const labels = this.layout(currentBaseMarks);\n\n this._smartInvert(labels);\n\n this._renderLabels(labels);\n }\n\n private _bindEvent(target: IGraphic) {\n if (!target) {\n return;\n }\n\n const { hover, select } = this.attribute;\n\n if (hover) {\n target.addEventListener('pointermove', this._onHover as EventListenerOrEventListenerObject);\n target.addEventListener('pointerout', this._onUnHover as EventListenerOrEventListenerObject);\n }\n\n if (select) {\n target.addEventListener('pointerdown', this._onClick as EventListenerOrEventListenerObject);\n }\n }\n\n private _setStates(target: IGraphic) {\n if (!target) {\n return;\n }\n const state = this.attribute.state;\n\n if (!state || isEmpty(state)) {\n return;\n }\n\n target.states = state;\n }\n\n private _onHover = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGraphic;\n if (target !== this._lastHover && !isEmpty(target.states)) {\n target.addState(StateValue.hover, true);\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (node !== target && !isEmpty(node.states)) {\n node.addState(StateValue.hoverReverse, true);\n }\n });\n this._lastHover = target;\n }\n };\n\n private _onUnHover = (e: FederatedPointerEvent) => {\n if (this._lastHover) {\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (!isEmpty(node.states)) {\n node.removeState(StateValue.hoverReverse);\n node.removeState(StateValue.hover);\n }\n });\n this._lastHover = null;\n }\n };\n\n private _onClick = (e: FederatedPointerEvent) => {\n const target = e.target as unknown as IGraphic;\n if (this._lastSelect === target && target.hasState('selected')) {\n // 取消选中\n this._lastSelect = null;\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (!isEmpty(node.states)) {\n node.removeState(StateValue.selectedReverse);\n node.removeState(StateValue.selected);\n }\n });\n return;\n }\n\n if (!isEmpty(target.states)) {\n target.addState(StateValue.selected, true);\n traverseGroup(this as unknown as IGraphic, (node: IGraphic) => {\n if (node !== target && !isEmpty(node.states)) {\n node.addState(StateValue.selectedReverse, true);\n }\n });\n this._lastSelect = target;\n }\n };\n\n private _createLabelText(attributes: ILabelGraphicAttribute) {\n const text = createText(attributes);\n this._bindEvent(text);\n this._setStates(text);\n return text;\n }\n\n private _checkMarks() {\n const baseMarks = this.getBaseMarks();\n const currentBaseMarks: IGraphic[] = [];\n baseMarks.forEach(mark => {\n if ((mark as any).releaseStatus !== 'willRelease') {\n currentBaseMarks.push(mark);\n }\n });\n this._prevRelationMap = new Map(this._relationMap);\n this._relationMap?.clear();\n return currentBaseMarks;\n }\n\n protected layout(currentMarks?: IGraphic[]): ILabelGraphicAttribute[] {\n const { textStyle, position, offset } = this.attribute as BaseLabelAttrs;\n let { data } = this.attribute as BaseLabelAttrs;\n if (isFunction(data)) {\n data = data({});\n }\n if (!data || data.length === 0) {\n return [];\n }\n\n let labels: ILabelGraphicAttribute[] = [];\n\n if (isFunction(this.attribute.sort) && currentMarks && currentMarks.length) {\n currentMarks = currentMarks.sort(this.attribute.sort);\n }\n\n if (!this._relationMap) {\n this._relationMap = new Map();\n }\n\n // 默认根据 index 顺序排序\n for (let i = 0; i < data.length; i++) {\n const textData = data[i];\n const baseMark = currentMarks?.[i] as IGraphic;\n const labelAttribute = {\n ...textStyle,\n ...textData,\n _relatedIndex: i\n };\n this._relationMap.set(i, baseMark);\n\n if (textData) {\n const text = createText(labelAttribute);\n text.update();\n const textBounds = this.getGraphicBounds(text);\n const graphicBounds = this.getGraphicBounds(baseMark, { x: textData.x as number, y: textData.y as number });\n\n const textAttributes = this.labeling(\n textBounds,\n graphicBounds,\n isFunction(position) ? position(textData) : position,\n offset\n );\n\n if (!textAttributes) {\n continue;\n }\n\n labelAttribute.x = textAttributes.x;\n labelAttribute.y = textAttributes.y;\n\n labels.push(labelAttribute);\n }\n }\n\n this._baseMarks = currentMarks as IGraphic[];\n if (this.attribute.overlap !== false) {\n labels = this.overlapping(labels, this.attribute.overlap as OverlapAttrs);\n }\n\n return labels;\n }\n\n protected overlapping(labels: ILabelGraphicAttribute[], option: OverlapAttrs = {}) {\n if (labels.length === 0) {\n return [];\n }\n const result: ILabelGraphicAttribute[] = [];\n const baseMarkGroup = this.getBaseMarkGroup();\n const size = option.size ?? {\n width: baseMarkGroup?.AABBBounds.width() ?? 0,\n height: baseMarkGroup?.AABBBounds.height() ?? 0\n };\n\n if (size.width === 0 || size.height === 0) {\n return labels;\n }\n\n const { avoidBaseMark, strategy = [], hideOnHit = true, clampForce = true } = option;\n const bmpTool = this._bmpTool || bitmapTool(size.width, size.height);\n const bitmap = this._bitmap || bmpTool.bitmap();\n const checkBounds = strategy.some(s => s.type === 'bound');\n\n if (avoidBaseMark) {\n this._baseMarks?.forEach(mark => {\n mark.AABBBounds && bitmap.setRange(boundToRange(bmpTool, mark.AABBBounds, true));\n });\n }\n\n for (let i = 0; i < labels.length; i++) {\n if (labels[i].visible === false) {\n continue;\n }\n const text = createText(labels[i]) as Text;\n const baseMark = this._baseMarks?.[i];\n text.update();\n\n // 默认位置可以放置\n if (canPlace(bmpTool, bitmap, text.AABBBounds, clampForce)) {\n // 如果配置了限制在图形内部,需要提前判断;\n if (!checkBounds) {\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push({ ...text.attribute });\n continue;\n }\n\n if (checkBounds && baseMark?.AABBBounds && canPlaceInside(text.AABBBounds, baseMark?.AABBBounds)) {\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push({ ...text.attribute });\n continue;\n }\n }\n\n let hasPlace: ReturnType<typeof place> = false;\n // 发生碰撞,根据策略寻找可放置的位置\n for (let j = 0; j < strategy.length; j++) {\n hasPlace = place(\n bmpTool,\n bitmap,\n strategy[j],\n <BaseLabelAttrs>this.attribute,\n text,\n this.getGraphicBounds(baseMark, labels[i]),\n this.labeling\n );\n if (hasPlace !== false) {\n result.push({\n ...text.attribute,\n x: hasPlace.x,\n y: hasPlace.y\n });\n break;\n }\n }\n\n !hasPlace && !hideOnHit && result.push({ ...text.attribute });\n }\n\n if (isFunction(this.onAfterLabelOverlap)) {\n this.onAfterLabelOverlap(bitmap);\n }\n\n return result;\n }\n\n protected getBaseMarks() {\n const baseMarkGroup = this.getBaseMarkGroup() as IGroup;\n if (!baseMarkGroup) {\n return;\n }\n return baseMarkGroup.getChildren() as IGraphic[];\n }\n\n protected getBaseMarkGroup() {\n const { baseMarkGroupName } = this.attribute as BaseLabelAttrs;\n if (!baseMarkGroupName) {\n return;\n }\n return (this.getRootNode() as IGroup).find(node => node.name === baseMarkGroupName, true) as IGroup;\n }\n\n protected getGraphicBounds(graphic?: IGraphic, point: Partial<PointLocationCfg> = {}): IBoundsLike {\n // if (graphic && !isEmpty((graphic as any).finalAttrs)) {\n // const g = graphic.clone();\n // g.onBeforeAttributeUpdate = graphic.onBeforeAttributeUpdate;\n // g.setAttributes((graphic as any).finalAttrs);\n // g.update();\n // return g.AABBBounds;\n // }\n return (\n graphic?.AABBBounds ||\n ({\n x1: point.x,\n x2: point.x,\n y1: point.y,\n y2: point.y\n } as IBoundsLike)\n );\n }\n\n protected _renderLabels(labels: ILabelGraphicAttribute[]) {\n const animationConfig = (this.attribute.animation ?? {}) as ILabelAnimation;\n const disableAnimation = this._enableAnimation === false || (animationConfig as unknown as boolean) === false;\n const mode = animationConfig.mode ?? DefaultLabelAnimation.mode;\n const duration = animationConfig.duration ?? DefaultLabelAnimation.duration;\n const easing = animationConfig.easing ?? DefaultLabelAnimation.easing;\n const delay = animationConfig.delay ?? 0;\n\n const currentTextMap = new Map();\n const prevTextMap = this._textMap || new Map();\n const texts = [] as IText[];\n\n labels.forEach((label, index) => {\n const text = this._createLabelText(label);\n const relatedGraphic = this._relationMap.get(label._relatedIndex);\n const state = prevTextMap?.get(relatedGraphic) ? 'update' : 'enter';\n\n if (state === 'enter') {\n texts.push(text);\n currentTextMap.set(relatedGraphic, text);\n if (!disableAnimation && relatedGraphic) {\n const { from, to } = getAnimationAttributes(label, 'fadeIn');\n this.add(text);\n relatedGraphic.onAnimateBind = () => {\n text.setAttributes(from);\n const listener = this._afterRelatedGraphicAttributeUpdate(text, texts, index, relatedGraphic, {\n mode,\n duration,\n easing,\n to,\n delay\n });\n relatedGraphic.on('afterAttributeUpdate', listener);\n };\n } else {\n this.add(text);\n }\n }\n\n if (state === 'update') {\n const prevText = prevTextMap.get(relatedGraphic);\n prevTextMap.delete(relatedGraphic);\n currentTextMap.set(relatedGraphic, prevText);\n if (!disableAnimation) {\n prevText.animate().to(text.attribute, duration, easing);\n if (\n animationConfig.increaseEffect !== false &&\n prevText.attribute.text !== text.attribute.text &&\n isValidNumber(Number(prevText.attribute.text) * Number(text.attribute.text))\n ) {\n prevText\n .animate()\n .play(\n new IncreaseCount(\n { text: prevText.attribute.text as string },\n { text: text.attribute.text as string },\n duration,\n easing\n )\n );\n }\n } else {\n prevText.setAttributes(text.attribute);\n }\n }\n });\n prevTextMap.forEach(label => {\n if (disableAnimation) {\n this.removeChild(label);\n } else {\n label\n ?.animate()\n .to(getAnimationAttributes(label.attribute, 'fadeOut').to, duration, easing)\n .onEnd(() => {\n this.removeChild(label);\n });\n }\n });\n\n this._textMap = currentTextMap;\n }\n\n protected _afterRelatedGraphicAttributeUpdate(\n text: IText,\n texts: IText[],\n index: number,\n relatedGraphic: IGraphic,\n { mode, duration, easing, to, delay }: ILabelAnimation & { to: any }\n ) {\n const listener = (event: any) => {\n const { detail } = event;\n if (!detail) {\n return {};\n }\n\n const isValidAnimateState =\n detail &&\n detail.type === AttributeUpdateType.ANIMATE_UPDATE &&\n detail.animationState &&\n detail.animationState.step?.type !== 'wait';\n\n if (!isValidAnimateState) {\n return {};\n }\n\n if (detail.type === AttributeUpdateType.ANIMATE_END) {\n text.setAttributes(to);\n return;\n }\n\n const onEnd = () => {\n if (relatedGraphic) {\n relatedGraphic.onAnimateBind = undefined;\n relatedGraphic.removeEventListener('afterAttributeUpdate', listener);\n }\n };\n\n switch (mode) {\n case 'after':\n // 3. 当前关联图元的动画播放结束后\n if (detail.animationState.end) {\n text.animate({ onEnd }).wait(delay).to(to, duration, easing);\n }\n break;\n case 'after-all':\n // 2. 所有完成后才开始;\n if (index === texts.length - 1) {\n if (detail.animationState.end) {\n texts.forEach(t => {\n t.animate({ onEnd }).wait(delay).to(to, duration, easing);\n });\n }\n }\n break;\n case 'same-time':\n default:\n // 1. 与当前关联图元的动画播放同时进行\n if (detail.animationState.isFirstFrameOfStep) {\n text.animate({ onEnd }).wait(delay).to(to, duration, easing);\n }\n break;\n }\n };\n return listener;\n }\n\n protected _smartInvert(labels: ILabelGraphicAttribute[]) {\n if (this.attribute.smartInvert === false) {\n return;\n }\n for (let i = 0; i < labels.length; i++) {\n const label = labels?.[i] as ILabelGraphicAttribute;\n if (!label) {\n continue;\n }\n\n const isInside = canPlaceInside(\n createText(label).AABBBounds,\n this._relationMap.get(label._relatedIndex)?.AABBBounds\n );\n /**\n * stroke 的处理逻辑\n * 1. 当文本在图元内部时,有两种情况:\n * - a. 未设置stroke:labelFill为前景色,baseMark填充色为背景色\n * - b. 设置了stroke:labelFill为前景色,labelStroke填充色为背景色\n * 2. 当文本在图元外部时,有两种情况:\n * - a. 未设置stroke:此时设置strokeColor为backgroundColor。labelFill为前景色,labelStroke填充色为背景色。避免文字一半在图元内部,一半在图元外部时,在图元外部文字不可见。\n * - b. 设置了stroke:保持strokeColor。labelFill为前景色,labelStroke填充色为背景色。\n */\n if (label.stroke && label.lineWidth > 0) {\n /**\n * 1-b, 2-b\n * 若label存在stroke,label填充色为前景色,label描边色为背景色\n * WCAG 2 字母周围的文本发光/光晕可用作背景颜色\n */\n label.fill = labelSmartInvert(\n label.fill as IColor,\n label.stroke as IColor,\n this.attribute.smartInvert?.textType,\n this.attribute.smartInvert?.contrastRatiosThreshold,\n this.attribute.smartInvert?.alternativeColors\n );\n } else if (isInside) {\n /**\n * 1-a\n * label在图元内部时,label填充色为前景色,baseMark填充色为背景色\n */\n const baseMark = this._relationMap.get(label._relatedIndex);\n const backgroundColor = baseMark.attribute.fill as IColor;\n const foregroundColor = label.fill as IColor;\n label.fill = labelSmartInvert(\n foregroundColor,\n backgroundColor,\n this.attribute.smartInvert?.textType,\n this.attribute.smartInvert?.contrastRatiosThreshold,\n this.attribute.smartInvert?.alternativeColors\n );\n } else if (label.lineWidth > 0) {\n /**\n * 2-a\n * 当文本在图元外部时,设置strokeColor为backgroundColor。labelFill为前景色,labelStroke填充色为背景色。\n */\n const baseMark = this._relationMap.get(label._relatedIndex);\n label.stroke = baseMark.attribute.fill;\n const backgroundColor = label.stroke as IColor;\n const foregroundColor = label.fill as IColor;\n label.fill = labelSmartInvert(\n foregroundColor,\n backgroundColor,\n this.attribute.smartInvert?.textType,\n this.attribute.smartInvert?.contrastRatiosThreshold,\n this.attribute.smartInvert?.alternativeColors\n );\n }\n }\n }\n\n setLocation(point: PointLocationCfg) {\n this.translateTo(point.x, point.y);\n }\n\n disableAnimation() {\n this._enableAnimation = false;\n }\n\n enableAnimation() {\n this._enableAnimation = true;\n }\n}\n"]}
@@ -1,5 +1,4 @@
1
1
  import type { EasingType, IGroupGraphicAttribute, ITextGraphicAttribute } from '@visactor/vrender';
2
- import type { Bounds } from '@visactor/vutils';
3
2
  export type LabelItemStateStyle<T> = {
4
3
  hover?: T;
5
4
  hover_reverse?: T;
@@ -77,9 +76,7 @@ export interface DataLabelAttrs extends IGroupGraphicAttribute {
77
76
  }
78
77
  export type Functional<T> = T | ((data: any) => T);
79
78
  export interface ILabelGraphicAttribute extends ITextGraphicAttribute {
80
- _insideGraphic?: boolean;
81
79
  _relatedIndex?: number;
82
- _computedBound?: Bounds;
83
80
  }
84
81
  export interface ILabelAnimation {
85
82
  mode?: 'same-time' | 'after' | 'after-all';
@@ -1 +1 @@
1
- {"version":3,"sources":["label/type.ts"],"names":[],"mappings":"","file":"type.js","sourcesContent":["import type { EasingType, IGroupGraphicAttribute, ITextGraphicAttribute } from '@visactor/vrender';\nimport type { Bounds } from '@visactor/vutils';\n\nexport type LabelItemStateStyle<T> = {\n hover?: T;\n hover_reverse?: T;\n selected?: T;\n selected_reverse?: T;\n};\n\nexport interface BaseLabelAttrs extends IGroupGraphicAttribute {\n type: string;\n /**\n * 是否开启选中交互\n * @default false\n */\n select?: boolean;\n /**\n * 是否开启 hover 交互\n * @default false\n */\n hover?: boolean;\n /**\n * 标签数据\n */\n data: Functional<(ITextGraphicAttribute & Record<string, any>)[]>;\n\n sort?: (graphicA: any, graphicB: any) => number;\n\n /**\n * 图元 group 名称\n * 如果不配置,需要在 data 里指定标签定位 x/y\n */\n baseMarkGroupName?: string;\n\n /** 文本样式,优先级低于 data */\n textStyle?: Partial<ITextGraphicAttribute>;\n\n /** 文本交互样式 */\n state?: LabelItemStateStyle<ITextGraphicAttribute>;\n\n /** 标签默认位置 */\n position?: Functional<string>;\n\n /** 偏移量 */\n offset?: number;\n\n /** 是否开启防重叠\n * @default true\n */\n overlap?: OverlapAttrs | false;\n\n /** 智能反色 */\n smartInvert?: SmartInvertAttrs | false;\n\n /** 动画配置 */\n animation?: ILabelAnimation | false;\n}\n\nexport interface OverlapAttrs {\n /**\n * 防重叠的区域大小\n */\n size?: { width: number; height: number };\n\n /**\n * 发生重叠后,是否隐藏标签\n * @default true\n */\n hideOnHit?: boolean;\n\n /**\n * 是否约束标签在指定 size 的范围内。开启后若标签被区域裁剪,会向内收缩。\n * @default true\n */\n clampForce?: boolean;\n\n /**\n * 是否躲避基础图元\n * @default false\n */\n avoidBaseMark?: boolean;\n\n /**\n * 发生重叠后的躲避策略\n */\n strategy?: Strategy[];\n}\n\nexport interface SmartInvertAttrs {\n /**\n * 文本类型\n * 包含普通文本和大文本,对应不同的对比度标准,label默认为普通文本\n * 'normalText' | 'largeText'\n * @default 'normalText'\n */\n textType?: string;\n /**\n * 自定义对比度阈值\n */\n contrastRatiosThreshold?: number;\n /**\n * 自定义备选label颜色\n */\n alternativeColors?: string | string[];\n}\n\nexport type PositionStrategy = {\n /**\n * 可选位置策略。\n * 若默认位置没有足够的空间放置标签,则考虑 position 内的备选位置。\n */\n type: 'position';\n position?: Functional<LabelPosition[]>;\n};\n\nexport type BoundStrategy = {\n /**\n * 标签配置在图形内部时使用。\n * 当图形大小不足以放下标签,则考虑 position 内的备选位置。\n */\n type: 'bound';\n position?: Functional<LabelPosition[]>;\n};\n\nexport type MoveYStrategy = {\n /**\n * 可选位置策略。\n * 若默认位置没有足够的空间放置标签,则根据 offset 在Y方向上寻找位置。\n */\n type: 'moveY';\n /**\n * Y方向上的尝试的位置偏移量\n */\n offset: Functional<number[]>;\n};\n\nexport type MoveXStrategy = {\n /**\n * 可选位置策略。\n * 若默认位置没有足够的空间放置标签,则根据 offset 在X方向上寻找位置。\n */\n type: 'moveX';\n /**\n * X方向上的尝试的位置偏移量\n */\n offset: Functional<number[]>;\n};\n\nexport type Strategy = PositionStrategy | BoundStrategy | MoveYStrategy | MoveXStrategy;\n\nexport type LabelPosition = SymbolLabelAttrs['position'] | RectLabelAttrs['position'];\n\nexport interface SymbolLabelAttrs extends BaseLabelAttrs {\n type: 'symbol';\n\n /**\n * 标签位置\n * @default 'top'\n */\n position?: Functional<\n 'top' | 'bottom' | 'left' | 'right' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'center'\n >;\n}\n\nexport interface RectLabelAttrs extends BaseLabelAttrs {\n type: 'rect';\n\n /**\n * 图元 group 名称\n */\n baseMarkGroupName: string;\n\n /**\n * 标签位置\n * @default 'top'\n */\n position?: Functional<\n 'top' | 'bottom' | 'left' | 'right' | 'inside' | 'inside-top' | 'inside-bottom' | 'inside-right' | 'inside-left'\n >;\n}\n\nexport interface LineLabelAttrs extends BaseLabelAttrs {\n type: 'line';\n\n /**\n * 图元 group 名称\n */\n baseMarkGroupName: string;\n\n /**\n * 标签位置\n * @default 'end'\n */\n position?: Functional<'start' | 'end'>;\n}\n\nexport interface DataLabelAttrs extends IGroupGraphicAttribute {\n dataLabels: (RectLabelAttrs | SymbolLabelAttrs)[];\n /**\n * 防重叠的区域大小\n */\n size: { width: number; height: number };\n}\n\nexport type Functional<T> = T | ((data: any) => T);\n\nexport interface ILabelGraphicAttribute extends ITextGraphicAttribute {\n _insideGraphic?: boolean;\n _relatedIndex?: number;\n _computedBound?: Bounds;\n}\n\nexport interface ILabelAnimation {\n mode?: 'same-time' | 'after' | 'after-all';\n duration?: number;\n delay?: number;\n easing?: EasingType;\n /** 是否开启 increaseCount 动画\n * @default true\n */\n increaseEffect?: boolean;\n}\n"]}
1
+ {"version":3,"sources":["label/type.ts"],"names":[],"mappings":"","file":"type.js","sourcesContent":["import type { EasingType, IGroupGraphicAttribute, ITextGraphicAttribute } from '@visactor/vrender';\nimport type { Bounds } from '@visactor/vutils';\n\nexport type LabelItemStateStyle<T> = {\n hover?: T;\n hover_reverse?: T;\n selected?: T;\n selected_reverse?: T;\n};\n\nexport interface BaseLabelAttrs extends IGroupGraphicAttribute {\n type: string;\n /**\n * 是否开启选中交互\n * @default false\n */\n select?: boolean;\n /**\n * 是否开启 hover 交互\n * @default false\n */\n hover?: boolean;\n /**\n * 标签数据\n */\n data: Functional<(ITextGraphicAttribute & Record<string, any>)[]>;\n\n sort?: (graphicA: any, graphicB: any) => number;\n\n /**\n * 图元 group 名称\n * 如果不配置,需要在 data 里指定标签定位 x/y\n */\n baseMarkGroupName?: string;\n\n /** 文本样式,优先级低于 data */\n textStyle?: Partial<ITextGraphicAttribute>;\n\n /** 文本交互样式 */\n state?: LabelItemStateStyle<ITextGraphicAttribute>;\n\n /** 标签默认位置 */\n position?: Functional<string>;\n\n /** 偏移量 */\n offset?: number;\n\n /** 是否开启防重叠\n * @default true\n */\n overlap?: OverlapAttrs | false;\n\n /** 智能反色 */\n smartInvert?: SmartInvertAttrs | false;\n\n /** 动画配置 */\n animation?: ILabelAnimation | false;\n}\n\nexport interface OverlapAttrs {\n /**\n * 防重叠的区域大小\n */\n size?: { width: number; height: number };\n\n /**\n * 发生重叠后,是否隐藏标签\n * @default true\n */\n hideOnHit?: boolean;\n\n /**\n * 是否约束标签在指定 size 的范围内。开启后若标签被区域裁剪,会向内收缩。\n * @default true\n */\n clampForce?: boolean;\n\n /**\n * 是否躲避基础图元\n * @default false\n */\n avoidBaseMark?: boolean;\n\n /**\n * 发生重叠后的躲避策略\n */\n strategy?: Strategy[];\n}\n\nexport interface SmartInvertAttrs {\n /**\n * 文本类型\n * 包含普通文本和大文本,对应不同的对比度标准,label默认为普通文本\n * 'normalText' | 'largeText'\n * @default 'normalText'\n */\n textType?: string;\n /**\n * 自定义对比度阈值\n */\n contrastRatiosThreshold?: number;\n /**\n * 自定义备选label颜色\n */\n alternativeColors?: string | string[];\n}\n\nexport type PositionStrategy = {\n /**\n * 可选位置策略。\n * 若默认位置没有足够的空间放置标签,则考虑 position 内的备选位置。\n */\n type: 'position';\n position?: Functional<LabelPosition[]>;\n};\n\nexport type BoundStrategy = {\n /**\n * 标签配置在图形内部时使用。\n * 当图形大小不足以放下标签,则考虑 position 内的备选位置。\n */\n type: 'bound';\n position?: Functional<LabelPosition[]>;\n};\n\nexport type MoveYStrategy = {\n /**\n * 可选位置策略。\n * 若默认位置没有足够的空间放置标签,则根据 offset 在Y方向上寻找位置。\n */\n type: 'moveY';\n /**\n * Y方向上的尝试的位置偏移量\n */\n offset: Functional<number[]>;\n};\n\nexport type MoveXStrategy = {\n /**\n * 可选位置策略。\n * 若默认位置没有足够的空间放置标签,则根据 offset 在X方向上寻找位置。\n */\n type: 'moveX';\n /**\n * X方向上的尝试的位置偏移量\n */\n offset: Functional<number[]>;\n};\n\nexport type Strategy = PositionStrategy | BoundStrategy | MoveYStrategy | MoveXStrategy;\n\nexport type LabelPosition = SymbolLabelAttrs['position'] | RectLabelAttrs['position'];\n\nexport interface SymbolLabelAttrs extends BaseLabelAttrs {\n type: 'symbol';\n\n /**\n * 标签位置\n * @default 'top'\n */\n position?: Functional<\n 'top' | 'bottom' | 'left' | 'right' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'center'\n >;\n}\n\nexport interface RectLabelAttrs extends BaseLabelAttrs {\n type: 'rect';\n\n /**\n * 图元 group 名称\n */\n baseMarkGroupName: string;\n\n /**\n * 标签位置\n * @default 'top'\n */\n position?: Functional<\n 'top' | 'bottom' | 'left' | 'right' | 'inside' | 'inside-top' | 'inside-bottom' | 'inside-right' | 'inside-left'\n >;\n}\n\nexport interface LineLabelAttrs extends BaseLabelAttrs {\n type: 'line';\n\n /**\n * 图元 group 名称\n */\n baseMarkGroupName: string;\n\n /**\n * 标签位置\n * @default 'end'\n */\n position?: Functional<'start' | 'end'>;\n}\n\nexport interface DataLabelAttrs extends IGroupGraphicAttribute {\n dataLabels: (RectLabelAttrs | SymbolLabelAttrs)[];\n /**\n * 防重叠的区域大小\n */\n size: { width: number; height: number };\n}\n\nexport type Functional<T> = T | ((data: any) => T);\n\nexport interface ILabelGraphicAttribute extends ITextGraphicAttribute {\n _relatedIndex?: number;\n}\n\nexport interface ILabelAnimation {\n mode?: 'same-time' | 'after' | 'after-all';\n duration?: number;\n delay?: number;\n easing?: EasingType;\n /** 是否开启 increaseCount 动画\n * @default true\n */\n increaseEffect?: boolean;\n}\n"]}
@@ -8,13 +8,12 @@ const vrender_1 = require("@visactor/vrender"), base_1 = require("../core/base")
8
8
 
9
9
  class Marker extends base_1.AbstractComponent {
10
10
  render() {
11
- var _a;
11
+ var _a, _b;
12
12
  this.removeAllChild();
13
- const markerVisible = null === (_a = this.attribute.visible) || void 0 === _a || _a, group = (0,
14
- vrender_1.createGroup)({
15
- pickable: !1,
16
- childrenPickable: !1
17
- });
13
+ const markerVisible = null === (_a = this.attribute.visible) || void 0 === _a || _a;
14
+ null !== (_b = this.attribute.interactive) && void 0 !== _b && _b || (this.setAttribute("pickable", !1),
15
+ this.setAttribute("childrenPickable", !1));
16
+ const group = (0, vrender_1.createGroup)({});
18
17
  group.name = "marker-container", this.add(group), markerVisible && this.renderMarker(group);
19
18
  }
20
19
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["marker/base.ts"],"names":[],"mappings":";;;AAAA,+CAAwD;AACxD,uCAAiD;AAIjD,MAAsB,MAA8B,SAAQ,wBAA8B;IAQ9E,MAAM;;QACd,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,MAAM,aAAa,GAAG,MAAA,IAAI,CAAC,SAAS,CAAC,OAAO,mCAAI,IAAI,CAAC;QAErD,MAAM,KAAK,GAAG,IAAA,qBAAW,EAAC;YACxB,QAAQ,EAAE,KAAK;YACf,gBAAgB,EAAE,KAAK;SACxB,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChB,aAAa,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;CACF;AApBD,wBAoBC","file":"base.js","sourcesContent":["import { createGroup, IGroup } from '@visactor/vrender';\nimport { AbstractComponent } from '../core/base';\nimport { Tag } from '../tag';\nimport { MarkerAttrs } from './type';\n\nexport abstract class Marker<T extends MarkerAttrs> extends AbstractComponent<Required<T>> {\n private _container!: IGroup;\n\n protected _label!: Tag;\n\n protected abstract setLabelPos(): any;\n protected abstract renderMarker(container: IGroup): any;\n\n protected render() {\n this.removeAllChild();\n const markerVisible = this.attribute.visible ?? true;\n\n const group = createGroup({\n pickable: false,\n childrenPickable: false\n });\n group.name = 'marker-container';\n this.add(group);\n markerVisible && this.renderMarker(group);\n }\n}\n"]}
1
+ {"version":3,"sources":["marker/base.ts"],"names":[],"mappings":";;;AAAA,+CAAwD;AACxD,uCAAiD;AAIjD,MAAsB,MAA8B,SAAQ,wBAA8B;IAQ9E,MAAM;;QACd,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,MAAM,aAAa,GAAG,MAAA,IAAI,CAAC,SAAS,CAAC,OAAO,mCAAI,IAAI,CAAC;QACrD,MAAM,iBAAiB,GAAG,MAAA,IAAI,CAAC,SAAS,CAAC,WAAW,mCAAI,KAAK,CAAC;QAE9D,IAAI,CAAC,iBAAiB,EAAE;YACtB,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YACrC,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;SAC9C;QAED,MAAM,KAAK,GAAG,IAAA,qBAAW,EAAC,EAAE,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChB,aAAa,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;CACF;AAvBD,wBAuBC","file":"base.js","sourcesContent":["import { createGroup, IGroup } from '@visactor/vrender';\nimport { AbstractComponent } from '../core/base';\nimport { Tag } from '../tag';\nimport { MarkerAttrs } from './type';\n\nexport abstract class Marker<T extends MarkerAttrs> extends AbstractComponent<Required<T>> {\n private _container!: IGroup;\n\n protected _label!: Tag;\n\n protected abstract setLabelPos(): any;\n protected abstract renderMarker(container: IGroup): any;\n\n protected render() {\n this.removeAllChild();\n const markerVisible = this.attribute.visible ?? true;\n const markerInteractive = this.attribute.interactive ?? false;\n\n if (!markerInteractive) {\n this.setAttribute('pickable', false);\n this.setAttribute('childrenPickable', false);\n }\n\n const group = createGroup({});\n group.name = 'marker-container';\n this.add(group);\n markerVisible && this.renderMarker(group);\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { AbstractComponent } from '../core/base';
2
- import { TooltipAttributes, TooltipRowAttrs, TooltipRowStyleAttrs } from './type';
2
+ import type { TooltipAttributes, TooltipRowAttrs, TooltipRowStyleAttrs } from './type';
3
3
  export declare class Tooltip extends AbstractComponent<Required<TooltipAttributes>> {
4
4
  name: string;
5
5
  private _tooltipPanel;
@@ -108,8 +108,8 @@ class Tooltip extends base_1.AbstractComponent {
108
108
  maxWidth = width, titleMaxHeight = height;
109
109
  }
110
110
  if (titleHasShape && vrender_1.builtinSymbolsMap[titleShapeType] && (maxWidth += titleShape.size + titleShape.spacing,
111
- titleMaxHeight = Math.max(titleShape.size, titleMaxHeight)), attribute.title.width = maxWidth,
112
- attribute.title.height = titleMaxHeight, (0, util_1.isVisible)(titleAttr) && (containerHeight += titleMaxHeight + titleAttr.spaceRow),
111
+ titleMaxHeight = Math.max(titleShape.size, titleMaxHeight)), attribute.title && (attribute.title.width = maxWidth,
112
+ attribute.title.height = titleMaxHeight), (0, util_1.isVisible)(titleAttr) && (containerHeight += titleMaxHeight + titleAttr.spaceRow),
113
113
  null == content ? void 0 : content.length) {
114
114
  const filteredContent = [];
115
115
  if (content.forEach(((item, i) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["tooltip/tooltip.ts"],"names":[],"mappings":"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","file":"tooltip.js","sourcesContent":["/**\n * @description 标题组件\n */\nimport { IGroup, IText, IRect, ISymbol, builtinSymbolsMap } from '@visactor/vrender';\nimport { merge, isValid, normalizePadding, isNil } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport { initTextMeasure } from '../util/text';\nimport { isVisible } from '../util';\nimport { TooltipAttributes, TooltipRowAttrs, TooltipRowStyleAttrs } from './type';\nimport { mergeRowAttrs } from './util';\nimport { defaultAttributes, TOOLTIP_POSITION_ATTRIBUTES } from './config';\n\nconst TOOLTIP_BACKGROUND_NAME = 'tooltip-background';\nconst TOOLTIP_TITLE_NAME = 'tooltip-title';\nconst TOOLTIP_CONTENT_NAME = 'tooltip-content';\n\nconst TOOLTIP_SHAPE_NAME_SUFFIX = 'shape';\nconst TOOLTIP_KEY_NAME_SUFFIX = 'key';\nconst TOOLTIP_VALUE_NAME_SUFFIX = 'value';\n\nexport class Tooltip extends AbstractComponent<Required<TooltipAttributes>> {\n name = 'tooltip';\n\n // tooltip 背景\n private _tooltipPanel!: IRect;\n // tooltip title 容器\n private _tooltipTitleContainer!: IGroup;\n // tooltip title shape\n private _tooltipTitleSymbol!: ISymbol;\n // tooltip title 文本\n private _tooltipTitle!: IText;\n // tooltip 内容项容器\n private _tooltipContent!: IGroup;\n\n static defaultAttributes: Partial<TooltipAttributes> = defaultAttributes;\n\n constructor(attributes: TooltipAttributes) {\n super(merge({}, Tooltip.defaultAttributes, attributes));\n }\n\n protected render() {\n const { visible, content, panel, keyWidth, valueWidth, hasContentShape, autoCalculatePosition, autoMeasure } =\n this.attribute;\n\n if (!visible) {\n this.hideAll();\n return;\n }\n\n if (autoMeasure) {\n Tooltip.measureTooltip(this.attribute);\n }\n if (autoCalculatePosition) {\n Tooltip.calculateTooltipPosition(this.attribute);\n }\n\n const padding = normalizePadding(this.attribute.padding);\n\n // 创建背景层\n this._tooltipPanel = this.createOrUpdateChild(\n TOOLTIP_BACKGROUND_NAME,\n {\n visible: true,\n ...panel\n },\n 'rect'\n ) as IRect;\n\n // 创建标题层\n this._tooltipTitleContainer = this.createOrUpdateChild(\n TOOLTIP_TITLE_NAME,\n { visible: true, x: padding[3], y: padding[0] },\n 'group'\n ) as IGroup;\n\n // 合并样式\n const titleAttr = Tooltip.getTitleAttr(this.attribute);\n\n // 创建标题 shape\n // 创建 symbol\n this._tooltipTitleSymbol = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_SHAPE_NAME_SUFFIX}`,\n merge({ symbolType: 'circle' }, titleAttr.shape, {\n visible: isVisible(titleAttr) && isVisible(titleAttr.shape)\n }),\n 'symbol'\n ) as ISymbol;\n\n // 文本\n const titlePaddingLeft = isVisible(titleAttr.shape) ? titleAttr.shape.size + titleAttr.shape.spacing : 0;\n this._tooltipTitle = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n merge({ text: '' }, titleAttr.value, {\n visible: isVisible(titleAttr) && isVisible(titleAttr.value)\n }),\n 'text'\n ) as IText;\n\n // 调整标题的位置\n const { textAlign, textBaseline } = titleAttr.value;\n const contentWidth = panel.width - padding[3] - padding[0] - titlePaddingLeft;\n if (textAlign === 'center') {\n this._tooltipTitle.setAttribute('x', titlePaddingLeft + contentWidth / 2);\n } else if (textAlign === 'right' || textAlign === 'end') {\n // 右对齐\n this._tooltipTitle.setAttribute('x', titlePaddingLeft + contentWidth);\n } else {\n // 默认左对齐\n this._tooltipTitle.setAttribute('x', titlePaddingLeft);\n }\n if (textBaseline === 'bottom') {\n this._tooltipTitle.setAttribute('y', titleAttr.height);\n } else if (textBaseline === 'middle') {\n this._tooltipTitle.setAttribute('y', titleAttr.height / 2);\n } else {\n this._tooltipTitle.setAttribute('y', 0);\n }\n const titleHeight = isVisible(titleAttr) ? titleAttr.height + titleAttr.spaceRow : 0;\n\n // 创建内容层\n this._tooltipContent = this.createOrUpdateChild(TOOLTIP_CONTENT_NAME, { visible: true }, 'group') as IGroup;\n this._tooltipContent.removeAllChild(); // 清空内容区\n\n if (content?.length) {\n this._tooltipContent.setAttribute('x', padding[3]);\n this._tooltipContent.setAttribute('y', padding[0] + titleHeight);\n\n let lastYPos = 0;\n content.forEach((item, i) => {\n // 合并样式\n const itemAttr = Tooltip.getContentAttr(this.attribute, i);\n\n if (!isVisible(itemAttr)) {\n return;\n }\n\n const itemGroupName = `${TOOLTIP_CONTENT_NAME}-${i}`;\n const itemGroup = this._tooltipContent.createOrUpdateChild(\n itemGroupName,\n { visible: true, x: 0, y: lastYPos },\n 'group'\n ) as IGroup;\n\n let x = 0;\n if (isVisible(itemAttr.shape)) {\n // 存在 symbol\n itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_SHAPE_NAME_SUFFIX}`,\n {\n visible: true,\n x: itemAttr.shape.size / 2,\n y: itemAttr.height / 2,\n ...itemAttr.shape\n },\n 'symbol'\n ) as ISymbol;\n }\n if (hasContentShape) {\n x += itemAttr.shape.size + itemAttr.shape.spacing;\n }\n\n if (isVisible(itemAttr.key)) {\n const element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_KEY_NAME_SUFFIX}`,\n {\n visible: true,\n ...itemAttr.key\n },\n 'text'\n ) as IText;\n\n const { textAlign } = itemAttr.key;\n if (textAlign === 'center') {\n element.setAttribute('x', x + keyWidth / 2);\n } else if (textAlign === 'right' || textAlign === 'end') {\n // 右对齐\n element.setAttribute('x', x + keyWidth);\n } else {\n // 默认左对齐\n element.setAttribute('x', x);\n }\n\n element.setAttribute('y', itemAttr.height / 2);\n x += keyWidth + itemAttr.key.spacing;\n }\n\n if (isVisible(itemAttr.value)) {\n const element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: true,\n ...itemAttr.value\n },\n 'text'\n ) as IText;\n\n let textAlign = 'right';\n if (isValid(itemAttr.value.textAlign)) {\n textAlign = itemAttr.value.textAlign;\n } else if (!isVisible(itemAttr.key)) {\n textAlign = 'left';\n }\n element.setAttribute('textAlign', textAlign);\n\n if (textAlign === 'center') {\n element.setAttribute('x', x + valueWidth / 2);\n } else if (textAlign === 'right' || textAlign === 'end') {\n // 右对齐\n element.setAttribute('x', x + valueWidth);\n } else {\n // 默认左对齐\n element.setAttribute('x', x);\n }\n x += valueWidth;\n\n element.setAttribute('y', itemAttr.height / 2);\n\n itemGroup.add(element);\n }\n\n lastYPos += itemAttr.height + itemAttr.spaceRow;\n });\n }\n }\n\n setAttributes(params: Partial<Required<TooltipAttributes>>, forceUpdateTag?: boolean | undefined): void {\n const keys = Object.keys(params) as (keyof TooltipAttributes)[];\n // 优化:只更改 tooltip 位置\n if (this.attribute.autoCalculatePosition && keys.every(key => TOOLTIP_POSITION_ATTRIBUTES.includes(key))) {\n this._mergeAttributes(params, keys);\n // 计算 x y\n if (isNil(this.attribute.panel.width) && this.attribute.autoMeasure) {\n Tooltip.measureTooltip(this.attribute);\n }\n Tooltip.calculateTooltipPosition(this.attribute);\n // 应用 x y\n super.setAttributes(\n {\n x: this.attribute.x,\n y: this.attribute.y\n },\n forceUpdateTag\n );\n } else {\n super.setAttributes(params, forceUpdateTag);\n }\n }\n\n static calculateTooltipPosition(attribute: Partial<TooltipAttributes>): Partial<TooltipAttributes> {\n const { width: tooltipBoxWidth = 0, height: tooltipBoxHeight = 0 } = attribute.panel;\n\n const { offsetX, offsetY, pointerX, pointerY, positionX, positionY, parentBounds } = attribute;\n\n let x = pointerX;\n let y = pointerY;\n if (positionX === 'left') {\n x -= tooltipBoxWidth + offsetX;\n } else if (positionX === 'center') {\n x -= tooltipBoxWidth / 2;\n } else {\n x += offsetX;\n }\n if (positionY === 'top') {\n y -= tooltipBoxHeight + offsetY;\n } else if (positionY === 'middle') {\n y -= tooltipBoxHeight / 2;\n } else {\n y += offsetY;\n }\n\n /* 确保tooltip在视区内 */\n if (x + tooltipBoxWidth > parentBounds.x2) {\n // 位置不超出视区右界\n x -= tooltipBoxWidth + offsetX;\n }\n if (y + tooltipBoxHeight > parentBounds.y2) {\n // 位置不超出视区下界\n y -= tooltipBoxHeight + offsetY;\n }\n if (x < parentBounds.x1) {\n // 位置不超出视区左界\n x = parentBounds.x1;\n }\n if (y < parentBounds.y1) {\n // 位置不超出视区上界\n y = parentBounds.y1;\n }\n\n attribute.x = x;\n attribute.y = y;\n\n return attribute;\n }\n\n static measureTooltip(attribute: Partial<TooltipAttributes>): Partial<TooltipAttributes> {\n const { content, contentStyle } = attribute;\n const padding = normalizePadding(attribute.padding);\n // 合并样式\n const titleAttr = Tooltip.getTitleAttr(attribute);\n\n let maxWidth = 0;\n let containerHeight = padding[0] + padding[2];\n\n // calculate title\n let titleMaxHeight = 0;\n const { value: titleValue, shape: titleShape } = titleAttr;\n const { visible: titleHasShape = false, symbolType: titleShapeType = '' } = titleShape ?? {};\n\n if (isValid(titleValue)) {\n const { width, height } = initTextMeasure(titleValue).quickMeasure(titleValue.text);\n maxWidth = width;\n titleMaxHeight = height;\n }\n if (titleHasShape && builtinSymbolsMap[titleShapeType]) {\n maxWidth += titleShape.size + titleShape.spacing;\n titleMaxHeight = Math.max(titleShape.size, titleMaxHeight);\n }\n\n attribute.title.width = maxWidth;\n attribute.title.height = titleMaxHeight;\n\n if (isVisible(titleAttr)) {\n containerHeight += titleMaxHeight + titleAttr.spaceRow;\n }\n\n // calculate content\n if (content?.length) {\n // filter content\n const filteredContent: [TooltipRowAttrs, TooltipRowAttrs][] = [];\n content.forEach((item, i) => {\n // 合并样式\n const itemAttr = Tooltip.getContentAttr(attribute, i);\n if ((item.key || item.value) && isVisible(itemAttr)) {\n filteredContent.push([item, itemAttr]);\n }\n });\n\n if (filteredContent.length) {\n let hasContentShape = false;\n const shapeWidths: number[] = [];\n const keyWidths: number[] = [];\n const valueWidths: number[] = [];\n\n filteredContent.forEach(([item, itemAttr], i) => {\n const { key, value, shape, spaceRow } = itemAttr;\n const itemHasShape = isVisible(shape);\n const itemShapeType = shape?.symbolType ?? '';\n\n const keyTextMeasure = initTextMeasure(key);\n const valueTextMeasure = initTextMeasure(value);\n\n let itemHeight = 0;\n if (isVisible(key)) {\n const { width, height } = keyTextMeasure.quickMeasure(key.text);\n keyWidths.push(width);\n itemHeight = Math.max(itemHeight, height);\n }\n if (isVisible(value)) {\n const { width, height } = valueTextMeasure.quickMeasure(value.text);\n valueWidths.push(width);\n itemHeight = Math.max(itemHeight, height);\n }\n if (itemHasShape && builtinSymbolsMap[itemShapeType]) {\n hasContentShape = true;\n shapeWidths.push(shape.size);\n itemHeight = Math.max(shape.size, itemHeight);\n }\n\n item.height = itemHeight;\n containerHeight += itemHeight;\n if (i < filteredContent.length - 1) {\n containerHeight += spaceRow ?? contentStyle.spaceRow;\n }\n });\n\n const maxShapeWidth = shapeWidths.length ? Math.max(...shapeWidths) : 0; // shape 需要对齐\n const maxKeyWidth = keyWidths.length ? Math.max(...keyWidths) : 0; // name 需要对齐\n const maxValueWidth = valueWidths.length ? Math.max(...valueWidths) : 0; // value 需要对齐\n maxWidth = Math.max(\n maxKeyWidth +\n maxValueWidth +\n contentStyle.key.spacing +\n contentStyle.value.spacing +\n (hasContentShape ? maxShapeWidth + contentStyle.shape.spacing : 0),\n maxWidth\n );\n content.forEach(item => {\n item.width = maxWidth;\n });\n attribute.hasContentShape = hasContentShape;\n attribute.keyWidth = maxKeyWidth;\n attribute.valueWidth = maxValueWidth;\n }\n }\n\n attribute.panel.width = maxWidth + padding[1] + padding[3];\n attribute.panel.height = containerHeight;\n\n return attribute;\n }\n\n static getTitleAttr(attribute: Partial<TooltipAttributes>): TooltipRowAttrs & TooltipRowStyleAttrs {\n return mergeRowAttrs(\n {},\n Tooltip.defaultAttributes.titleStyle,\n Tooltip.defaultAttributes.title,\n attribute.titleStyle,\n attribute.title\n );\n }\n\n static getContentAttr(attribute: Partial<TooltipAttributes>, index: number): TooltipRowAttrs & TooltipRowStyleAttrs {\n return mergeRowAttrs({}, Tooltip.defaultAttributes.contentStyle, attribute.contentStyle, attribute.content[index]);\n }\n}\n"]}
1
+ {"version":3,"sources":["tooltip/tooltip.ts"],"names":[],"mappings":";;;AAIA,+CAAsD;AACtD,6CAA2E;AAC3E,uCAAiD;AACjD,uCAA+C;AAC/C,kCAAoC;AAEpC,iCAAuC;AACvC,qCAA0E;AAE1E,MAAM,uBAAuB,GAAG,oBAAoB,CAAC;AACrD,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAC3C,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AAE/C,MAAM,yBAAyB,GAAG,OAAO,CAAC;AAC1C,MAAM,uBAAuB,GAAG,KAAK,CAAC;AACtC,MAAM,yBAAyB,GAAG,OAAO,CAAC;AAE1C,MAAa,OAAQ,SAAQ,wBAA8C;IAgBzE,YAAY,UAA6B;QACvC,KAAK,CAAC,IAAA,cAAK,EAAC,EAAE,EAAE,OAAO,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC,CAAC;QAhB1D,SAAI,GAAG,SAAS,CAAC;IAiBjB,CAAC;IAES,MAAM;QACd,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,qBAAqB,EAAE,WAAW,EAAE,GAC1G,IAAI,CAAC,SAAS,CAAC;QAEjB,IAAI,CAAC,OAAO,EAAE;YACZ,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO;SACR;QAED,IAAI,WAAW,EAAE;YACf,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACxC;QACD,IAAI,qBAAqB,EAAE;YACzB,OAAO,CAAC,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAClD;QAED,MAAM,OAAO,GAAG,IAAA,yBAAgB,EAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAGzD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAC3C,uBAAuB,kBAErB,OAAO,EAAE,IAAI,IACV,KAAK,GAEV,MAAM,CACE,CAAC;QAGX,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,mBAAmB,CACpD,kBAAkB,EAClB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAC/C,OAAO,CACE,CAAC;QAGZ,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAIvD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,CAAC,mBAAmB,CACxE,GAAG,kBAAkB,IAAI,yBAAyB,EAAE,EACpD,IAAA,cAAK,EAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,SAAS,CAAC,KAAK,EAAE;YAC/C,OAAO,EAAE,IAAA,gBAAS,EAAC,SAAS,CAAC,IAAI,IAAA,gBAAS,EAAC,SAAS,CAAC,KAAK,CAAC;SAC5D,CAAC,EACF,QAAQ,CACE,CAAC;QAGb,MAAM,gBAAgB,GAAG,IAAA,gBAAS,EAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACzG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,sBAAsB,CAAC,mBAAmB,CAClE,GAAG,kBAAkB,IAAI,yBAAyB,EAAE,EACpD,IAAA,cAAK,EAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,KAAK,EAAE;YACnC,OAAO,EAAE,IAAA,gBAAS,EAAC,SAAS,CAAC,IAAI,IAAA,gBAAS,EAAC,SAAS,CAAC,KAAK,CAAC;SAC5D,CAAC,EACF,MAAM,CACE,CAAC;QAGX,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC;QACpD,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC;QAC9E,IAAI,SAAS,KAAK,QAAQ,EAAE;YAC1B,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,EAAE,gBAAgB,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC;SAC3E;aAAM,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,KAAK,EAAE;YAEvD,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,EAAE,gBAAgB,GAAG,YAAY,CAAC,CAAC;SACvE;aAAM;YAEL,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;SACxD;QACD,IAAI,YAAY,KAAK,QAAQ,EAAE;YAC7B,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;SACxD;aAAM,IAAI,YAAY,KAAK,QAAQ,EAAE;YACpC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;SAC5D;aAAM;YACL,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;SACzC;QACD,MAAM,WAAW,GAAG,IAAA,gBAAS,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAGrF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,OAAO,CAAW,CAAC;QAC5G,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,CAAC;QAEtC,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE;YACnB,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC;YAEjE,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBAE1B,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;gBAE3D,IAAI,CAAC,IAAA,gBAAS,EAAC,QAAQ,CAAC,EAAE;oBACxB,OAAO;iBACR;gBAED,MAAM,aAAa,GAAG,GAAG,oBAAoB,IAAI,CAAC,EAAE,CAAC;gBACrD,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CACxD,aAAa,EACb,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,EACpC,OAAO,CACE,CAAC;gBAEZ,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,IAAI,IAAA,gBAAS,EAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;oBAE7B,SAAS,CAAC,mBAAmB,CAC3B,GAAG,aAAa,IAAI,yBAAyB,EAAE,kBAE7C,OAAO,EAAE,IAAI,EACb,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAC1B,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,IACnB,QAAQ,CAAC,KAAK,GAEnB,QAAQ,CACE,CAAC;iBACd;gBACD,IAAI,eAAe,EAAE;oBACnB,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;iBACnD;gBAED,IAAI,IAAA,gBAAS,EAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;oBAC3B,MAAM,OAAO,GAAG,SAAS,CAAC,mBAAmB,CAC3C,GAAG,aAAa,IAAI,uBAAuB,EAAE,kBAE3C,OAAO,EAAE,IAAI,IACV,QAAQ,CAAC,GAAG,GAEjB,MAAM,CACE,CAAC;oBAEX,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC;oBACnC,IAAI,SAAS,KAAK,QAAQ,EAAE;wBAC1B,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC;qBAC7C;yBAAM,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,KAAK,EAAE;wBAEvD,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC;qBACzC;yBAAM;wBAEL,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;qBAC9B;oBAED,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC/C,CAAC,IAAI,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;iBACtC;gBAED,IAAI,IAAA,gBAAS,EAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;oBAC7B,MAAM,OAAO,GAAG,SAAS,CAAC,mBAAmB,CAC3C,GAAG,aAAa,IAAI,yBAAyB,EAAE,kBAE7C,OAAO,EAAE,IAAI,IACV,QAAQ,CAAC,KAAK,GAEnB,MAAM,CACE,CAAC;oBAEX,IAAI,SAAS,GAAG,OAAO,CAAC;oBACxB,IAAI,IAAA,gBAAO,EAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;wBACrC,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC;qBACtC;yBAAM,IAAI,CAAC,IAAA,gBAAS,EAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;wBACnC,SAAS,GAAG,MAAM,CAAC;qBACpB;oBACD,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;oBAE7C,IAAI,SAAS,KAAK,QAAQ,EAAE;wBAC1B,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC;qBAC/C;yBAAM,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,KAAK,EAAE;wBAEvD,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC;qBAC3C;yBAAM;wBAEL,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;qBAC9B;oBACD,CAAC,IAAI,UAAU,CAAC;oBAEhB,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAE/C,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;iBACxB;gBAED,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC;YAClD,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAED,aAAa,CAAC,MAA4C,EAAE,cAAoC;QAC9F,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAgC,CAAC;QAEhE,IAAI,IAAI,CAAC,SAAS,CAAC,qBAAqB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,oCAA2B,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;YACxG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAEpC,IAAI,IAAA,cAAK,EAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;gBACnE,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aACxC;YACD,OAAO,CAAC,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAEjD,KAAK,CAAC,aAAa,CACjB;gBACE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBACnB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;aACpB,EACD,cAAc,CACf,CAAC;SACH;aAAM;YACL,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;SAC7C;IACH,CAAC;IAED,MAAM,CAAC,wBAAwB,CAAC,SAAqC;QACnE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,CAAC,EAAE,MAAM,EAAE,gBAAgB,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC;QAErF,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC;QAE/F,IAAI,CAAC,GAAG,QAAQ,CAAC;QACjB,IAAI,CAAC,GAAG,QAAQ,CAAC;QACjB,IAAI,SAAS,KAAK,MAAM,EAAE;YACxB,CAAC,IAAI,eAAe,GAAG,OAAO,CAAC;SAChC;aAAM,IAAI,SAAS,KAAK,QAAQ,EAAE;YACjC,CAAC,IAAI,eAAe,GAAG,CAAC,CAAC;SAC1B;aAAM;YACL,CAAC,IAAI,OAAO,CAAC;SACd;QACD,IAAI,SAAS,KAAK,KAAK,EAAE;YACvB,CAAC,IAAI,gBAAgB,GAAG,OAAO,CAAC;SACjC;aAAM,IAAI,SAAS,KAAK,QAAQ,EAAE;YACjC,CAAC,IAAI,gBAAgB,GAAG,CAAC,CAAC;SAC3B;aAAM;YACL,CAAC,IAAI,OAAO,CAAC;SACd;QAGD,IAAI,CAAC,GAAG,eAAe,GAAG,YAAY,CAAC,EAAE,EAAE;YAEzC,CAAC,IAAI,eAAe,GAAG,OAAO,CAAC;SAChC;QACD,IAAI,CAAC,GAAG,gBAAgB,GAAG,YAAY,CAAC,EAAE,EAAE;YAE1C,CAAC,IAAI,gBAAgB,GAAG,OAAO,CAAC;SACjC;QACD,IAAI,CAAC,GAAG,YAAY,CAAC,EAAE,EAAE;YAEvB,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC;SACrB;QACD,IAAI,CAAC,GAAG,YAAY,CAAC,EAAE,EAAE;YAEvB,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC;SACrB;QAED,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;QAChB,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;QAEhB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,SAAqC;QACzD,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAA,yBAAgB,EAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAEpD,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAElD,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAG9C,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC;QAC3D,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,KAAK,EAAE,UAAU,EAAE,cAAc,GAAG,EAAE,EAAE,GAAG,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,EAAE,CAAC;QAE7F,IAAI,IAAA,gBAAO,EAAC,UAAU,CAAC,EAAE;YACvB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAA,sBAAe,EAAC,UAAU,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACpF,QAAQ,GAAG,KAAK,CAAC;YACjB,cAAc,GAAG,MAAM,CAAC;SACzB;QACD,IAAI,aAAa,IAAI,2BAAiB,CAAC,cAAc,CAAC,EAAE;YACtD,QAAQ,IAAI,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC;YACjD,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;SAC5D;QAED,IAAI,SAAS,CAAC,KAAK,EAAE;YACnB,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC;YACjC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC;SACzC;QAED,IAAI,IAAA,gBAAS,EAAC,SAAS,CAAC,EAAE;YACxB,eAAe,IAAI,cAAc,GAAG,SAAS,CAAC,QAAQ,CAAC;SACxD;QAGD,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE;YAEnB,MAAM,eAAe,GAAyC,EAAE,CAAC;YACjE,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBAE1B,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;gBACtD,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAA,gBAAS,EAAC,QAAQ,CAAC,EAAE;oBACnD,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;iBACxC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,eAAe,CAAC,MAAM,EAAE;gBAC1B,IAAI,eAAe,GAAG,KAAK,CAAC;gBAC5B,MAAM,WAAW,GAAa,EAAE,CAAC;gBACjC,MAAM,SAAS,GAAa,EAAE,CAAC;gBAC/B,MAAM,WAAW,GAAa,EAAE,CAAC;gBAEjC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE;;oBAC9C,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;oBACjD,MAAM,YAAY,GAAG,IAAA,gBAAS,EAAC,KAAK,CAAC,CAAC;oBACtC,MAAM,aAAa,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,mCAAI,EAAE,CAAC;oBAE9C,MAAM,cAAc,GAAG,IAAA,sBAAe,EAAC,GAAG,CAAC,CAAC;oBAC5C,MAAM,gBAAgB,GAAG,IAAA,sBAAe,EAAC,KAAK,CAAC,CAAC;oBAEhD,IAAI,UAAU,GAAG,CAAC,CAAC;oBACnB,IAAI,IAAA,gBAAS,EAAC,GAAG,CAAC,EAAE;wBAClB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBAChE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACtB,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;qBAC3C;oBACD,IAAI,IAAA,gBAAS,EAAC,KAAK,CAAC,EAAE;wBACpB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBACpE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACxB,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;qBAC3C;oBACD,IAAI,YAAY,IAAI,2BAAiB,CAAC,aAAa,CAAC,EAAE;wBACpD,eAAe,GAAG,IAAI,CAAC;wBACvB,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC7B,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;qBAC/C;oBAED,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;oBACzB,eAAe,IAAI,UAAU,CAAC;oBAC9B,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;wBAClC,eAAe,IAAI,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,YAAY,CAAC,QAAQ,CAAC;qBACtD;gBACH,CAAC,CAAC,CAAC;gBAEH,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxE,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClE,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxE,QAAQ,GAAG,IAAI,CAAC,GAAG,CACjB,WAAW;oBACT,aAAa;oBACb,YAAY,CAAC,GAAG,CAAC,OAAO;oBACxB,YAAY,CAAC,KAAK,CAAC,OAAO;oBAC1B,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EACpE,QAAQ,CACT,CAAC;gBACF,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBACrB,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;gBACxB,CAAC,CAAC,CAAC;gBACH,SAAS,CAAC,eAAe,GAAG,eAAe,CAAC;gBAC5C,SAAS,CAAC,QAAQ,GAAG,WAAW,CAAC;gBACjC,SAAS,CAAC,UAAU,GAAG,aAAa,CAAC;aACtC;SACF;QAED,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3D,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,eAAe,CAAC;QAEzC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,SAAqC;QACvD,OAAO,IAAA,oBAAa,EAClB,EAAE,EACF,OAAO,CAAC,iBAAiB,CAAC,UAAU,EACpC,OAAO,CAAC,iBAAiB,CAAC,KAAK,EAC/B,SAAS,CAAC,UAAU,EACpB,SAAS,CAAC,KAAK,CAChB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,SAAqC,EAAE,KAAa;QACxE,OAAO,IAAA,oBAAa,EAAC,EAAE,EAAE,OAAO,CAAC,iBAAiB,CAAC,YAAY,EAAE,SAAS,CAAC,YAAY,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACrH,CAAC;;AA3YH,0BA4YC;AA9XQ,yBAAiB,GAA+B,0BAAiB,CAAC","file":"tooltip.js","sourcesContent":["/**\n * @description 标题组件\n */\nimport type { IGroup, IText, IRect, ISymbol } from '@visactor/vrender';\nimport { builtinSymbolsMap } from '@visactor/vrender';\nimport { merge, isValid, normalizePadding, isNil } from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport { initTextMeasure } from '../util/text';\nimport { isVisible } from '../util';\nimport type { TooltipAttributes, TooltipRowAttrs, TooltipRowStyleAttrs } from './type';\nimport { mergeRowAttrs } from './util';\nimport { defaultAttributes, TOOLTIP_POSITION_ATTRIBUTES } from './config';\n\nconst TOOLTIP_BACKGROUND_NAME = 'tooltip-background';\nconst TOOLTIP_TITLE_NAME = 'tooltip-title';\nconst TOOLTIP_CONTENT_NAME = 'tooltip-content';\n\nconst TOOLTIP_SHAPE_NAME_SUFFIX = 'shape';\nconst TOOLTIP_KEY_NAME_SUFFIX = 'key';\nconst TOOLTIP_VALUE_NAME_SUFFIX = 'value';\n\nexport class Tooltip extends AbstractComponent<Required<TooltipAttributes>> {\n name = 'tooltip';\n\n // tooltip 背景\n private _tooltipPanel!: IRect;\n // tooltip title 容器\n private _tooltipTitleContainer!: IGroup;\n // tooltip title shape\n private _tooltipTitleSymbol!: ISymbol;\n // tooltip title 文本\n private _tooltipTitle!: IText;\n // tooltip 内容项容器\n private _tooltipContent!: IGroup;\n\n static defaultAttributes: Partial<TooltipAttributes> = defaultAttributes;\n\n constructor(attributes: TooltipAttributes) {\n super(merge({}, Tooltip.defaultAttributes, attributes));\n }\n\n protected render() {\n const { visible, content, panel, keyWidth, valueWidth, hasContentShape, autoCalculatePosition, autoMeasure } =\n this.attribute;\n\n if (!visible) {\n this.hideAll();\n return;\n }\n\n if (autoMeasure) {\n Tooltip.measureTooltip(this.attribute);\n }\n if (autoCalculatePosition) {\n Tooltip.calculateTooltipPosition(this.attribute);\n }\n\n const padding = normalizePadding(this.attribute.padding);\n\n // 创建背景层\n this._tooltipPanel = this.createOrUpdateChild(\n TOOLTIP_BACKGROUND_NAME,\n {\n visible: true,\n ...panel\n },\n 'rect'\n ) as IRect;\n\n // 创建标题层\n this._tooltipTitleContainer = this.createOrUpdateChild(\n TOOLTIP_TITLE_NAME,\n { visible: true, x: padding[3], y: padding[0] },\n 'group'\n ) as IGroup;\n\n // 合并样式\n const titleAttr = Tooltip.getTitleAttr(this.attribute);\n\n // 创建标题 shape\n // 创建 symbol\n this._tooltipTitleSymbol = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_SHAPE_NAME_SUFFIX}`,\n merge({ symbolType: 'circle' }, titleAttr.shape, {\n visible: isVisible(titleAttr) && isVisible(titleAttr.shape)\n }),\n 'symbol'\n ) as ISymbol;\n\n // 文本\n const titlePaddingLeft = isVisible(titleAttr.shape) ? titleAttr.shape.size + titleAttr.shape.spacing : 0;\n this._tooltipTitle = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n merge({ text: '' }, titleAttr.value, {\n visible: isVisible(titleAttr) && isVisible(titleAttr.value)\n }),\n 'text'\n ) as IText;\n\n // 调整标题的位置\n const { textAlign, textBaseline } = titleAttr.value;\n const contentWidth = panel.width - padding[3] - padding[0] - titlePaddingLeft;\n if (textAlign === 'center') {\n this._tooltipTitle.setAttribute('x', titlePaddingLeft + contentWidth / 2);\n } else if (textAlign === 'right' || textAlign === 'end') {\n // 右对齐\n this._tooltipTitle.setAttribute('x', titlePaddingLeft + contentWidth);\n } else {\n // 默认左对齐\n this._tooltipTitle.setAttribute('x', titlePaddingLeft);\n }\n if (textBaseline === 'bottom') {\n this._tooltipTitle.setAttribute('y', titleAttr.height);\n } else if (textBaseline === 'middle') {\n this._tooltipTitle.setAttribute('y', titleAttr.height / 2);\n } else {\n this._tooltipTitle.setAttribute('y', 0);\n }\n const titleHeight = isVisible(titleAttr) ? titleAttr.height + titleAttr.spaceRow : 0;\n\n // 创建内容层\n this._tooltipContent = this.createOrUpdateChild(TOOLTIP_CONTENT_NAME, { visible: true }, 'group') as IGroup;\n this._tooltipContent.removeAllChild(); // 清空内容区\n\n if (content?.length) {\n this._tooltipContent.setAttribute('x', padding[3]);\n this._tooltipContent.setAttribute('y', padding[0] + titleHeight);\n\n let lastYPos = 0;\n content.forEach((item, i) => {\n // 合并样式\n const itemAttr = Tooltip.getContentAttr(this.attribute, i);\n\n if (!isVisible(itemAttr)) {\n return;\n }\n\n const itemGroupName = `${TOOLTIP_CONTENT_NAME}-${i}`;\n const itemGroup = this._tooltipContent.createOrUpdateChild(\n itemGroupName,\n { visible: true, x: 0, y: lastYPos },\n 'group'\n ) as IGroup;\n\n let x = 0;\n if (isVisible(itemAttr.shape)) {\n // 存在 symbol\n itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_SHAPE_NAME_SUFFIX}`,\n {\n visible: true,\n x: itemAttr.shape.size / 2,\n y: itemAttr.height / 2,\n ...itemAttr.shape\n },\n 'symbol'\n ) as ISymbol;\n }\n if (hasContentShape) {\n x += itemAttr.shape.size + itemAttr.shape.spacing;\n }\n\n if (isVisible(itemAttr.key)) {\n const element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_KEY_NAME_SUFFIX}`,\n {\n visible: true,\n ...itemAttr.key\n },\n 'text'\n ) as IText;\n\n const { textAlign } = itemAttr.key;\n if (textAlign === 'center') {\n element.setAttribute('x', x + keyWidth / 2);\n } else if (textAlign === 'right' || textAlign === 'end') {\n // 右对齐\n element.setAttribute('x', x + keyWidth);\n } else {\n // 默认左对齐\n element.setAttribute('x', x);\n }\n\n element.setAttribute('y', itemAttr.height / 2);\n x += keyWidth + itemAttr.key.spacing;\n }\n\n if (isVisible(itemAttr.value)) {\n const element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: true,\n ...itemAttr.value\n },\n 'text'\n ) as IText;\n\n let textAlign = 'right';\n if (isValid(itemAttr.value.textAlign)) {\n textAlign = itemAttr.value.textAlign;\n } else if (!isVisible(itemAttr.key)) {\n textAlign = 'left';\n }\n element.setAttribute('textAlign', textAlign);\n\n if (textAlign === 'center') {\n element.setAttribute('x', x + valueWidth / 2);\n } else if (textAlign === 'right' || textAlign === 'end') {\n // 右对齐\n element.setAttribute('x', x + valueWidth);\n } else {\n // 默认左对齐\n element.setAttribute('x', x);\n }\n x += valueWidth;\n\n element.setAttribute('y', itemAttr.height / 2);\n\n itemGroup.add(element);\n }\n\n lastYPos += itemAttr.height + itemAttr.spaceRow;\n });\n }\n }\n\n setAttributes(params: Partial<Required<TooltipAttributes>>, forceUpdateTag?: boolean | undefined): void {\n const keys = Object.keys(params) as (keyof TooltipAttributes)[];\n // 优化:只更改 tooltip 位置\n if (this.attribute.autoCalculatePosition && keys.every(key => TOOLTIP_POSITION_ATTRIBUTES.includes(key))) {\n this._mergeAttributes(params, keys);\n // 计算 x y\n if (isNil(this.attribute.panel.width) && this.attribute.autoMeasure) {\n Tooltip.measureTooltip(this.attribute);\n }\n Tooltip.calculateTooltipPosition(this.attribute);\n // 应用 x y\n super.setAttributes(\n {\n x: this.attribute.x,\n y: this.attribute.y\n },\n forceUpdateTag\n );\n } else {\n super.setAttributes(params, forceUpdateTag);\n }\n }\n\n static calculateTooltipPosition(attribute: Partial<TooltipAttributes>): Partial<TooltipAttributes> {\n const { width: tooltipBoxWidth = 0, height: tooltipBoxHeight = 0 } = attribute.panel;\n\n const { offsetX, offsetY, pointerX, pointerY, positionX, positionY, parentBounds } = attribute;\n\n let x = pointerX;\n let y = pointerY;\n if (positionX === 'left') {\n x -= tooltipBoxWidth + offsetX;\n } else if (positionX === 'center') {\n x -= tooltipBoxWidth / 2;\n } else {\n x += offsetX;\n }\n if (positionY === 'top') {\n y -= tooltipBoxHeight + offsetY;\n } else if (positionY === 'middle') {\n y -= tooltipBoxHeight / 2;\n } else {\n y += offsetY;\n }\n\n /* 确保tooltip在视区内 */\n if (x + tooltipBoxWidth > parentBounds.x2) {\n // 位置不超出视区右界\n x -= tooltipBoxWidth + offsetX;\n }\n if (y + tooltipBoxHeight > parentBounds.y2) {\n // 位置不超出视区下界\n y -= tooltipBoxHeight + offsetY;\n }\n if (x < parentBounds.x1) {\n // 位置不超出视区左界\n x = parentBounds.x1;\n }\n if (y < parentBounds.y1) {\n // 位置不超出视区上界\n y = parentBounds.y1;\n }\n\n attribute.x = x;\n attribute.y = y;\n\n return attribute;\n }\n\n static measureTooltip(attribute: Partial<TooltipAttributes>): Partial<TooltipAttributes> {\n const { content, contentStyle } = attribute;\n const padding = normalizePadding(attribute.padding);\n // 合并样式\n const titleAttr = Tooltip.getTitleAttr(attribute);\n\n let maxWidth = 0;\n let containerHeight = padding[0] + padding[2];\n\n // calculate title\n let titleMaxHeight = 0;\n const { value: titleValue, shape: titleShape } = titleAttr;\n const { visible: titleHasShape = false, symbolType: titleShapeType = '' } = titleShape ?? {};\n\n if (isValid(titleValue)) {\n const { width, height } = initTextMeasure(titleValue).quickMeasure(titleValue.text);\n maxWidth = width;\n titleMaxHeight = height;\n }\n if (titleHasShape && builtinSymbolsMap[titleShapeType]) {\n maxWidth += titleShape.size + titleShape.spacing;\n titleMaxHeight = Math.max(titleShape.size, titleMaxHeight);\n }\n\n if (attribute.title) {\n attribute.title.width = maxWidth;\n attribute.title.height = titleMaxHeight;\n }\n\n if (isVisible(titleAttr)) {\n containerHeight += titleMaxHeight + titleAttr.spaceRow;\n }\n\n // calculate content\n if (content?.length) {\n // filter content\n const filteredContent: [TooltipRowAttrs, TooltipRowAttrs][] = [];\n content.forEach((item, i) => {\n // 合并样式\n const itemAttr = Tooltip.getContentAttr(attribute, i);\n if ((item.key || item.value) && isVisible(itemAttr)) {\n filteredContent.push([item, itemAttr]);\n }\n });\n\n if (filteredContent.length) {\n let hasContentShape = false;\n const shapeWidths: number[] = [];\n const keyWidths: number[] = [];\n const valueWidths: number[] = [];\n\n filteredContent.forEach(([item, itemAttr], i) => {\n const { key, value, shape, spaceRow } = itemAttr;\n const itemHasShape = isVisible(shape);\n const itemShapeType = shape?.symbolType ?? '';\n\n const keyTextMeasure = initTextMeasure(key);\n const valueTextMeasure = initTextMeasure(value);\n\n let itemHeight = 0;\n if (isVisible(key)) {\n const { width, height } = keyTextMeasure.quickMeasure(key.text);\n keyWidths.push(width);\n itemHeight = Math.max(itemHeight, height);\n }\n if (isVisible(value)) {\n const { width, height } = valueTextMeasure.quickMeasure(value.text);\n valueWidths.push(width);\n itemHeight = Math.max(itemHeight, height);\n }\n if (itemHasShape && builtinSymbolsMap[itemShapeType]) {\n hasContentShape = true;\n shapeWidths.push(shape.size);\n itemHeight = Math.max(shape.size, itemHeight);\n }\n\n item.height = itemHeight;\n containerHeight += itemHeight;\n if (i < filteredContent.length - 1) {\n containerHeight += spaceRow ?? contentStyle.spaceRow;\n }\n });\n\n const maxShapeWidth = shapeWidths.length ? Math.max(...shapeWidths) : 0; // shape 需要对齐\n const maxKeyWidth = keyWidths.length ? Math.max(...keyWidths) : 0; // name 需要对齐\n const maxValueWidth = valueWidths.length ? Math.max(...valueWidths) : 0; // value 需要对齐\n maxWidth = Math.max(\n maxKeyWidth +\n maxValueWidth +\n contentStyle.key.spacing +\n contentStyle.value.spacing +\n (hasContentShape ? maxShapeWidth + contentStyle.shape.spacing : 0),\n maxWidth\n );\n content.forEach(item => {\n item.width = maxWidth;\n });\n attribute.hasContentShape = hasContentShape;\n attribute.keyWidth = maxKeyWidth;\n attribute.valueWidth = maxValueWidth;\n }\n }\n\n attribute.panel.width = maxWidth + padding[1] + padding[3];\n attribute.panel.height = containerHeight;\n\n return attribute;\n }\n\n static getTitleAttr(attribute: Partial<TooltipAttributes>): TooltipRowAttrs & TooltipRowStyleAttrs {\n return mergeRowAttrs(\n {},\n Tooltip.defaultAttributes.titleStyle,\n Tooltip.defaultAttributes.title,\n attribute.titleStyle,\n attribute.title\n );\n }\n\n static getContentAttr(attribute: Partial<TooltipAttributes>, index: number): TooltipRowAttrs & TooltipRowStyleAttrs {\n return mergeRowAttrs({}, Tooltip.defaultAttributes.contentStyle, attribute.contentStyle, attribute.content[index]);\n }\n}\n"]}
package/dist/index.js CHANGED
@@ -1412,15 +1412,12 @@
1412
1412
  if (canPlace(bmpTool, bitmap, text.AABBBounds, clampForce)) {
1413
1413
  if (!checkBounds) {
1414
1414
  bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));
1415
- result.push({
1416
- ...text.attribute,
1417
- _insideGraphic: canPlaceInside(text.AABBBounds, baseMark?.AABBBounds)
1418
- });
1415
+ result.push({ ...text.attribute });
1419
1416
  continue;
1420
1417
  }
1421
1418
  if (checkBounds && baseMark?.AABBBounds && canPlaceInside(text.AABBBounds, baseMark?.AABBBounds)) {
1422
1419
  bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));
1423
- result.push({ ...text.attribute, _insideGraphic: true, _computedBound: text.AABBBounds });
1420
+ result.push({ ...text.attribute });
1424
1421
  continue;
1425
1422
  }
1426
1423
  }
@@ -1431,19 +1428,12 @@
1431
1428
  result.push({
1432
1429
  ...text.attribute,
1433
1430
  x: hasPlace.x,
1434
- y: hasPlace.y,
1435
- _insideGraphic: canPlaceInside(text.AABBBounds, baseMark?.AABBBounds)
1431
+ y: hasPlace.y
1436
1432
  });
1437
1433
  break;
1438
1434
  }
1439
1435
  }
1440
- !hasPlace &&
1441
- !hideOnHit &&
1442
- result.push({
1443
- ...text.attribute,
1444
- _insideGraphic: canPlaceInside(text.AABBBounds, baseMark?.AABBBounds),
1445
- _computedBound: text.AABBBounds
1446
- });
1436
+ !hasPlace && !hideOnHit && result.push({ ...text.attribute });
1447
1437
  }
1448
1438
  if (vutils.isFunction(this.onAfterLabelOverlap)) {
1449
1439
  this.onAfterLabelOverlap(bitmap);
@@ -1600,12 +1590,7 @@
1600
1590
  if (!label) {
1601
1591
  continue;
1602
1592
  }
1603
- let isInside = label._insideGraphic;
1604
- if (isInside === undefined) {
1605
- const text = vrender.createText(label);
1606
- text.update();
1607
- isInside = canPlaceInside(text.AABBBounds, this._relationMap.get(label._relatedIndex)?.AABBBounds);
1608
- }
1593
+ const isInside = canPlaceInside(vrender.createText(label).AABBBounds, this._relationMap.get(label._relatedIndex)?.AABBBounds);
1609
1594
  if (label.stroke && label.lineWidth > 0) {
1610
1595
  label.fill = labelSmartInvert(label.fill, label.stroke, this.attribute.smartInvert?.textType, this.attribute.smartInvert?.contrastRatiosThreshold, this.attribute.smartInvert?.alternativeColors);
1611
1596
  }
@@ -4317,10 +4302,12 @@
4317
4302
  render() {
4318
4303
  this.removeAllChild();
4319
4304
  const markerVisible = this.attribute.visible ?? true;
4320
- const group = vrender.createGroup({
4321
- pickable: false,
4322
- childrenPickable: false
4323
- });
4305
+ const markerInteractive = this.attribute.interactive ?? false;
4306
+ if (!markerInteractive) {
4307
+ this.setAttribute('pickable', false);
4308
+ this.setAttribute('childrenPickable', false);
4309
+ }
4310
+ const group = vrender.createGroup({});
4324
4311
  group.name = 'marker-container';
4325
4312
  this.add(group);
4326
4313
  markerVisible && this.renderMarker(group);
@@ -8655,8 +8642,10 @@
8655
8642
  maxWidth += titleShape.size + titleShape.spacing;
8656
8643
  titleMaxHeight = Math.max(titleShape.size, titleMaxHeight);
8657
8644
  }
8658
- attribute.title.width = maxWidth;
8659
- attribute.title.height = titleMaxHeight;
8645
+ if (attribute.title) {
8646
+ attribute.title.width = maxWidth;
8647
+ attribute.title.height = titleMaxHeight;
8648
+ }
8660
8649
  if (isVisible(titleAttr)) {
8661
8650
  containerHeight += titleMaxHeight + titleAttr.spaceRow;
8662
8651
  }
@@ -8729,7 +8718,7 @@
8729
8718
  }
8730
8719
  }
8731
8720
 
8732
- const version = "0.11.2-alpha.1";
8721
+ const version = "0.12.1";
8733
8722
 
8734
8723
  exports.AbstractComponent = AbstractComponent;
8735
8724
  exports.BasePlayer = BasePlayer;