@visactor/vrender-components 0.16.14-alpha.6 → 0.16.14-alpha.8

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.16.14-alpha.6";
1
+ export declare const version = "0.16.14-alpha.8";
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.16.14-alpha.6", __exportStar(require("./core/base"), exports),
20
+ }), exports.version = void 0, exports.version = "0.16.14-alpha.8", __exportStar(require("./core/base"), exports),
21
21
  __exportStar(require("./scrollbar"), exports), __exportStar(require("./tag"), exports),
22
22
  __exportStar(require("./poptip"), exports), __exportStar(require("./crosshair"), exports),
23
23
  __exportStar(require("./label"), exports), __exportStar(require("./axis"), exports),
package/cjs/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACa,QAAA,OAAO,GAAG,iBAAiB,CAAC;AAEzC,8CAA4B;AAC5B,8CAA4B;AAC5B,wCAAsB;AACtB,2CAAyB;AACzB,8CAA4B;AAC5B,0CAAwB;AACxB,yCAAuB;AACvB,8CAA4B;AAC5B,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;AAC5B,wCAAsB;AACtB,6CAA2B","file":"index.js","sourcesContent":["// 导出版本号\nexport const version = \"0.16.14-alpha.6\";\n\nexport * from './core/base';\nexport * from './scrollbar';\nexport * from './tag';\nexport * from './poptip';\nexport * from './crosshair';\nexport * from './label';\nexport * from './axis';\nexport * from './axis/grid';\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';\nexport * from './jsx';\nexport * from './checkbox';\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACa,QAAA,OAAO,GAAG,iBAAiB,CAAC;AAEzC,8CAA4B;AAC5B,8CAA4B;AAC5B,wCAAsB;AACtB,2CAAyB;AACzB,8CAA4B;AAC5B,0CAAwB;AACxB,yCAAuB;AACvB,8CAA4B;AAC5B,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;AAC5B,wCAAsB;AACtB,6CAA2B","file":"index.js","sourcesContent":["// 导出版本号\nexport const version = \"0.16.14-alpha.8\";\n\nexport * from './core/base';\nexport * from './scrollbar';\nexport * from './tag';\nexport * from './poptip';\nexport * from './crosshair';\nexport * from './label';\nexport * from './axis';\nexport * from './axis/grid';\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';\nexport * from './jsx';\nexport * from './checkbox';\n"]}
package/cjs/label/base.js CHANGED
@@ -78,13 +78,13 @@ class LabelBase extends base_1.AbstractComponent {
78
78
  }
79
79
  _createLabelText(attributes) {
80
80
  var _a, _b;
81
- if ("rich" === attributes.type) {
81
+ if ("rich" === attributes.textType) {
82
82
  attributes.textConfig = attributes.text, attributes.width = null !== (_a = attributes.width) && void 0 !== _a ? _a : 0,
83
83
  attributes.height = null !== (_b = attributes.height) && void 0 !== _b ? _b : 0;
84
84
  const text = (0, vrender_core_1.createRichText)(attributes);
85
85
  return this._bindEvent(text), this._setStatesOfText(text), text;
86
86
  }
87
- if ("html" === attributes.type) {
87
+ if ("html" === attributes.textType) {
88
88
  attributes.textConfig = [], attributes.html = Object.assign({
89
89
  dom: attributes.text,
90
90
  container: "",
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/label/base.ts"],"names":[],"mappings":"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","file":"base.js","sourcesContent":["/**\n * @description Label 基类\n */\nimport type {\n IGroup,\n Text,\n IGraphic,\n IText,\n FederatedPointerEvent,\n IColor,\n ILine,\n IArea,\n IRichTextGraphicAttribute,\n IRichText,\n IRichTextCharacter,\n ITextAttribute\n} from '@visactor/vrender-core';\nimport {\n createText,\n IncreaseCount,\n AttributeUpdateType,\n IContainPointMode,\n createRichText\n} from '@visactor/vrender-core';\nimport type { IAABBBounds, IBoundsLike, IPointLike } from '@visactor/vutils';\nimport {\n isFunction,\n isValidNumber,\n isEmpty,\n isValid,\n isString,\n merge,\n isRectIntersect,\n isNil,\n isArray\n} from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { PointLocationCfg } from '../core/type';\nimport { labelSmartInvert, contrastAccessibilityChecker, smartInvertStrategy } from '../util/label-smartInvert';\nimport { getMarksByName, getNoneGroupMarksByName, traverseGroup } from '../util';\nimport { StateValue } from '../constant';\nimport type { Bitmap } from './overlap';\nimport { bitmapTool, boundToRange, canPlace, clampText, place } from './overlap';\nimport type { BaseLabelAttrs, OverlapAttrs, ILabelAnimation, ArcLabelAttrs, LabelItem, SmartInvertAttrs } from './type';\nimport { DefaultLabelAnimation, getAnimationAttributes } from './animate/animate';\nimport { getPointsOfLineArea } from './util';\n\nexport class LabelBase<T extends BaseLabelAttrs> extends AbstractComponent<T> {\n name = 'label';\n\n protected _baseMarks?: IGraphic[];\n\n protected _isCollectionBase: boolean;\n\n protected _bitmap?: Bitmap;\n\n static defaultAttributes: Partial<BaseLabelAttrs> = {\n textStyle: {\n fontSize: 12,\n // FIXME: we need a default color. Yet in current logic, textStyle will override fill from baseMark.\n // This need a new config option like `colorFull`\n // fill: '#000',\n textAlign: 'center',\n textBaseline: 'middle',\n boundsPadding: [-1, 0, -1, 0] // to ignore the textBound buf\n },\n offset: 0,\n pickable: false\n };\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 _graphicToText: Map<IGraphic, { text: IText | IRichText; labelLine?: ILine }>;\n\n protected _idToGraphic: Map<string, IGraphic>;\n\n protected _idToPoint: Map<string, IPointLike>;\n\n onAfterLabelOverlap?: (bitmap: Bitmap) => void;\n\n private _lastHover: IGraphic;\n private _lastSelect: IGraphic;\n\n private _enableAnimation: boolean;\n\n constructor(attributes: BaseLabelAttrs) {\n super(merge({}, LabelBase.defaultAttributes, attributes));\n }\n\n /**\n * 计算 text 的最终位置属性x, y\n * @param textBounds\n * @param graphicBounds\n * @param position\n * @param offset\n * @returns\n */\n protected labeling(\n textBounds: IBoundsLike,\n graphicBounds: IBoundsLike,\n position?: BaseLabelAttrs['position'],\n offset?: number\n ): { x: number; y: number } | undefined {\n // 基类没有指定的图元类型,需要在 data 中指定位置,故无需进行 labeling\n return;\n }\n\n protected _labelLine(text: LabelItem): ILine | undefined {\n // 基类没有指定的图元类型,需要在 data 中指定位置,故无需进行 labeling\n return;\n }\n\n protected render() {\n this._prepare();\n\n if (isNil(this._idToGraphic) || (this._isCollectionBase && isNil(this._idToPoint))) {\n return;\n }\n\n const { overlap, smartInvert, dataFilter, customLayoutFunc, customOverlapFunc } = this.attribute;\n let data = this.attribute.data;\n\n if (isFunction(dataFilter)) {\n data = dataFilter(data);\n }\n\n let labels: (IText | IRichText)[];\n\n if (isFunction(customLayoutFunc)) {\n labels = customLayoutFunc(\n data,\n this.getRelatedGrphic,\n this._isCollectionBase ? (d: LabelItem) => this._idToPoint.get(d.id) : null\n );\n } else {\n // 根据关联图元和配置的position计算标签坐标\n labels = this._layout(data);\n }\n\n if (isFunction(customOverlapFunc)) {\n labels = customOverlapFunc(\n labels as Text[],\n this.getRelatedGrphic,\n this._isCollectionBase ? (d: LabelItem) => this._idToPoint.get(d.id) : null\n );\n } else {\n // 防重叠逻辑\n if (overlap !== false) {\n labels = this._overlapping(labels);\n }\n }\n\n if (smartInvert !== false) {\n this._smartInvert(labels);\n }\n\n this._renderLabels(labels);\n }\n\n private _bindEvent(target: IGraphic) {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\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 _setStatesOfText(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 _setStatesOfLabelLine(target: IGraphic) {\n if (!target) {\n return;\n }\n const state = this.attribute.labelLineState;\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 protected _createLabelText(attributes: LabelItem) {\n if (attributes.type === 'rich') {\n attributes.textConfig = attributes.text as IRichTextCharacter[];\n attributes.width = attributes.width ?? 0;\n attributes.height = attributes.height ?? 0;\n const text = createRichText(attributes as any);\n this._bindEvent(text);\n this._setStatesOfText(text);\n return text;\n } else if (attributes.type === 'html') {\n attributes.textConfig = [] as IRichTextCharacter[];\n attributes.html = {\n dom: attributes.text as string,\n container: '',\n width: 30,\n height: 30,\n style: {},\n ...attributes\n };\n const text = createRichText(attributes as IRichTextGraphicAttribute);\n this._bindEvent(text);\n this._setStatesOfText(text);\n return text;\n }\n const text = createText(attributes);\n this._bindEvent(text);\n this._setStatesOfText(text);\n return text;\n }\n\n private _prepare() {\n const currentBaseMarks: IGraphic[] = [];\n let baseMarks;\n if (isFunction(this.attribute.getBaseMarks)) {\n baseMarks = this.attribute.getBaseMarks();\n } else {\n baseMarks = getMarksByName(this.getRootNode() as IGroup, this.attribute.baseMarkGroupName);\n }\n\n baseMarks.forEach(mark => {\n if ((mark as any).releaseStatus !== 'willRelease') {\n currentBaseMarks.push(mark);\n }\n });\n\n this._idToGraphic?.clear();\n this._idToPoint?.clear();\n this._baseMarks = currentBaseMarks;\n this._isCollectionBase = currentBaseMarks?.[0]?.type === 'line' || currentBaseMarks?.[0]?.type === 'area';\n\n if (!currentBaseMarks || currentBaseMarks.length === 0) {\n return;\n }\n\n const { data } = this.attribute;\n\n if (!data || data.length === 0) {\n return;\n }\n if (!this._idToGraphic) {\n this._idToGraphic = new Map();\n }\n\n // generate id mapping before data filter\n if (this._isCollectionBase) {\n if (!this._idToPoint) {\n this._idToPoint = new Map();\n }\n let cur = 0;\n for (let i = 0; i < currentBaseMarks.length; i++) {\n const baseMark = currentBaseMarks[i];\n const points = getPointsOfLineArea(baseMark as ILine | IArea);\n\n if (points?.length) {\n for (let j = 0; j < points.length; j++) {\n const textData = data[cur];\n if (textData && points[j]) {\n if (!isValid(textData.id)) {\n textData.id = `vrender-component-${this.name}-${cur}`;\n }\n this._idToPoint.set(textData.id, points[j]);\n this._idToGraphic.set(textData.id, baseMark);\n }\n\n cur++;\n }\n }\n }\n } else {\n for (let i = 0; i < currentBaseMarks.length; i++) {\n const textData = data[i];\n const baseMark = currentBaseMarks[i] as IGraphic;\n if (textData && baseMark) {\n if (!isValid(textData.id)) {\n textData.id = `vrender-component-${this.name}-${i}`;\n }\n this._idToGraphic.set(textData.id, baseMark);\n }\n }\n }\n }\n\n protected getRelatedGrphic(item: LabelItem) {\n return this._idToGraphic.get(item.id);\n }\n\n protected _layout(data: LabelItem[] = []): (IText | IRichText)[] {\n const { textStyle = {}, position, offset } = this.attribute;\n const labels = [];\n\n for (let i = 0; i < data.length; i++) {\n const textData = data[i];\n const baseMark = this.getRelatedGrphic(textData);\n\n const labelAttribute = {\n fill: this._isCollectionBase\n ? isArray(baseMark.attribute.stroke)\n ? baseMark.attribute.stroke.find(entry => !!entry && entry !== true)\n : baseMark.attribute.stroke\n : baseMark.attribute.fill,\n ...textStyle,\n ...textData\n };\n const text = this._createLabelText(labelAttribute);\n const textBounds = this.getGraphicBounds(text);\n const graphicBounds = this._isCollectionBase\n ? this.getGraphicBounds(null, this._idToPoint.get(textData.id))\n : this.getGraphicBounds(baseMark, { x: textData.x as number, y: textData.y as number });\n\n const textLocation = this.labeling(\n textBounds,\n graphicBounds,\n isFunction(position) ? position(textData) : position,\n offset\n );\n\n if (textLocation) {\n labelAttribute.x = textLocation.x;\n labelAttribute.y = textLocation.y;\n text.setAttributes(textLocation);\n }\n\n labels.push(text);\n }\n\n return labels;\n }\n\n protected _overlapping(labels: (IText | IRichText)[]) {\n if (labels.length === 0) {\n return [];\n }\n const option = this.attribute.overlap as OverlapAttrs;\n\n const result: (IText | IRichText)[] = [];\n const baseMarkGroup = this.getBaseMarkGroup();\n\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 {\n avoidBaseMark,\n strategy = [],\n hideOnHit = true,\n clampForce = true,\n avoidMarks = [],\n overlapPadding\n } = 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 // 躲避关联的基础图元\n if (avoidBaseMark) {\n this._baseMarks?.forEach(mark => {\n mark.AABBBounds && bitmap.setRange(boundToRange(bmpTool, mark.AABBBounds, true));\n });\n }\n\n // 躲避指定图元\n if (avoidMarks.length > 0) {\n avoidMarks.forEach(avoid => {\n if (isString(avoid)) {\n getNoneGroupMarksByName(this.getRootNode() as IGroup, avoid).forEach(avoidMark => {\n avoidMark.AABBBounds && bitmap.setRange(boundToRange(bmpTool, avoidMark.AABBBounds, true));\n });\n } else if (avoid.AABBBounds) {\n bitmap.setRange(boundToRange(bmpTool, avoid.AABBBounds, true));\n }\n });\n }\n\n for (let i = 0; i < labels.length; i++) {\n if (labels[i].visible === false) {\n continue;\n }\n\n const text = labels[i] as IText | IRichText;\n const baseMark = this.getRelatedGrphic(text.attribute);\n text.update();\n if (!isRectIntersect(baseMark.AABBBounds, { x1: 0, x2: bmpTool.width, y1: 0, y2: bmpTool.height }, true)) {\n continue;\n }\n\n // 默认位置可以放置\n if (canPlace(bmpTool, bitmap, text.AABBBounds, clampForce, overlapPadding)) {\n // 如果配置了限制在图形内部,需要提前判断;\n if (!checkBounds) {\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push(text);\n continue;\n }\n\n if (checkBounds && baseMark?.AABBBounds && this._canPlaceInside(text.AABBBounds, baseMark?.AABBBounds)) {\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push(text);\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 as Text,\n this._isCollectionBase\n ? this.getGraphicBounds(null, this._idToPoint.get((labels[i].attribute as any).id))\n : this.getGraphicBounds(baseMark, labels[i].attribute),\n this.labeling\n );\n if (hasPlace !== false) {\n text.setAttributes({ x: hasPlace.x, y: hasPlace.y });\n result.push(text);\n break;\n }\n }\n\n // 尝试向内挤压\n if (!hasPlace && clampForce) {\n const { dx = 0, dy = 0 } = clampText(text as IText, bmpTool.width, bmpTool.height);\n if (\n !(dx === 0 && dy === 0) &&\n canPlace(\n bmpTool,\n bitmap,\n {\n x1: text.AABBBounds.x1 + dx,\n x2: text.AABBBounds.x2 + dx,\n y1: text.AABBBounds.y1 + dy,\n y2: text.AABBBounds.y2 + dy\n }\n // 向内 clamp 只处理超出的位移量,不叠加 overlapPadding\n )\n ) {\n text.setAttributes({ x: text.attribute.x + dx, y: text.attribute.y + dy });\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push(text);\n continue;\n }\n }\n\n !hasPlace && !hideOnHit && result.push(text);\n }\n\n if (isFunction(this.onAfterLabelOverlap)) {\n this.onAfterLabelOverlap(bitmap);\n }\n\n return result;\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\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: (IText | IRichText)[]) {\n const disableAnimation = this._enableAnimation === false || this.attribute.animation === false;\n\n if (disableAnimation) {\n this._renderWithOutAnimation(labels);\n } else {\n this._renderWithAnimation(labels);\n }\n }\n\n protected _renderWithAnimation(labels: (IText | IRichText)[]) {\n const animationConfig = (this.attribute.animation ?? {}) as ILabelAnimation;\n\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: Map<any, { text: IText | IRichText; labelLine?: ILine }> = new Map();\n const prevTextMap: Map<any, { text: IText | IRichText; labelLine?: ILine }> = this._graphicToText || new Map();\n const texts = [] as (IText | IRichText)[];\n\n labels.forEach((text, index) => {\n const labelLine: ILine = this._labelLine(text as any);\n const relatedGraphic = this.getRelatedGrphic(text.attribute);\n const textId = (text.attribute as LabelItem).id;\n const textKey = this._isCollectionBase ? textId : relatedGraphic;\n const state = prevTextMap?.get(textKey) ? 'update' : 'enter';\n\n if (state === 'enter') {\n texts.push(text);\n currentTextMap.set(textKey, labelLine ? { text, labelLine } : { text });\n if (relatedGraphic) {\n const { from, to } = getAnimationAttributes(text.attribute, 'fadeIn');\n this.add(text);\n\n if (labelLine) {\n this._setStatesOfLabelLine(labelLine);\n this.add(labelLine);\n }\n\n this._syncStateWithRelatedGraphic(relatedGraphic);\n relatedGraphic.once('animate-bind', a => {\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 }\n } else if (state === 'update') {\n const prevLabel = prevTextMap.get(textKey);\n prevTextMap.delete(textKey);\n currentTextMap.set(textKey, prevLabel);\n const prevText = prevLabel.text;\n prevText.animate().to(text.attribute, duration, easing);\n if (prevLabel.labelLine) {\n prevLabel.labelLine.animate().to(\n merge({}, prevLabel.labelLine.attribute, {\n visible:\n ((text.attribute as ArcLabelAttrs)?.line?.visible && text.attribute?.visible) ??\n text.attribute?.visible ??\n true,\n points: (text.attribute as ArcLabelAttrs)?.points\n }),\n duration,\n easing\n );\n }\n if (\n animationConfig.increaseEffect !== false &&\n (prevText as IText).attribute?.text !== (text as IText).attribute?.text &&\n isValidNumber(Number((prevText as IText).attribute?.text) * Number((text as IText).attribute?.text))\n ) {\n prevText\n .animate()\n .play(\n new IncreaseCount(\n { text: (prevText as IText).attribute?.text as string },\n { text: (text as IText).attribute?.text as string },\n duration,\n easing\n )\n );\n }\n }\n });\n prevTextMap.forEach(label => {\n label.text\n ?.animate()\n .to(getAnimationAttributes(label.text.attribute, 'fadeOut').to, duration, easing)\n .onEnd(() => {\n this.removeChild(label.text);\n if (label?.labelLine) {\n this.removeChild(label.labelLine);\n }\n });\n });\n\n this._graphicToText = currentTextMap;\n }\n\n protected _renderWithOutAnimation(labels: (IText | IRichText)[]) {\n const currentTextMap: Map<any, { text: IText | IRichText; labelLine?: ILine }> = new Map();\n const prevTextMap: Map<any, { text: IText | IRichText; labelLine?: ILine }> = this._graphicToText || new Map();\n const texts = [] as (IText | IRichText)[];\n\n labels.forEach(text => {\n const labelLine = this._labelLine(text as any);\n const relatedGraphic = this.getRelatedGrphic(text.attribute);\n const state = prevTextMap?.get(relatedGraphic) ? 'update' : 'enter';\n const textKey = this._isCollectionBase ? (text.attribute as LabelItem).id : relatedGraphic;\n\n if (state === 'enter') {\n texts.push(text);\n currentTextMap.set(textKey, labelLine ? { text, labelLine } : { text });\n this.add(text);\n if (labelLine) {\n this.add(labelLine);\n }\n\n this._syncStateWithRelatedGraphic(relatedGraphic);\n } else if (state === 'update') {\n const prevLabel = prevTextMap.get(textKey);\n prevTextMap.delete(textKey);\n currentTextMap.set(textKey, prevLabel);\n prevLabel.text.setAttributes(text.attribute as any);\n if (prevLabel?.labelLine) {\n prevLabel.labelLine.setAttributes({ points: (text.attribute as ArcLabelAttrs)?.points });\n }\n }\n });\n\n prevTextMap.forEach(label => {\n this.removeChild(label.text);\n if (label?.labelLine) {\n this.removeChild(label.labelLine);\n }\n });\n\n this._graphicToText = currentTextMap;\n }\n\n protected _handleRelatedGraphicSetState = (e: any) => {\n if (e.detail?.type === AttributeUpdateType.STATE) {\n const currentStates = e.target?.currentStates ?? [];\n const labels = this._isCollectionBase ? [...this._graphicToText.values()] : [this._graphicToText.get(e.target)];\n\n labels.forEach(label => {\n if (label) {\n if (label.text) {\n label.text.useStates(currentStates);\n }\n\n if (label.labelLine) {\n label.labelLine.useStates(currentStates);\n }\n }\n });\n }\n };\n\n protected _syncStateWithRelatedGraphic(relatedGraphic: IGraphic) {\n if (this.attribute.syncState) {\n relatedGraphic.on('afterAttributeUpdate', this._handleRelatedGraphicSetState);\n }\n }\n\n protected _afterRelatedGraphicAttributeUpdate(\n text: IText | IRichText,\n texts: (IText | IRichText)[],\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 if (this._isCollectionBase) {\n const point = this._idToPoint.get((text.attribute as LabelItem).id);\n\n if (\n point &&\n (!text.animates || !text.animates.has('label-animate')) &&\n this._baseMarks[0].containsPoint(point.x, point.y, IContainPointMode.LOCAL, this.stage?.pickerService)\n ) {\n text.animate({ onEnd }).wait(delay).to(to, duration, easing);\n }\n } else if (detail.animationState.isFirstFrameOfStep) {\n text.animate({ onEnd }).wait(delay).to(to, duration, easing);\n }\n\n break;\n }\n };\n return listener;\n }\n\n protected _smartInvert(labels: (IText | IRichText)[]) {\n const option = (this.attribute.smartInvert || {}) as SmartInvertAttrs;\n const { textType, contrastRatiosThreshold, alternativeColors } = option;\n const fillStrategy = option.fillStrategy ?? 'invertBase';\n const strokeStrategy = option.strokeStrategy ?? 'base';\n const brightColor = option.brightColor ?? '#ffffff';\n const darkColor = option.darkColor ?? '#000000';\n const outsideEnable = option.outsideEnable ?? false;\n\n if (fillStrategy === 'null' && strokeStrategy === 'null') {\n return;\n }\n\n for (let i = 0; i < labels.length; i++) {\n const label = labels[i];\n if (!label) {\n continue;\n }\n\n const baseMark = this.getRelatedGrphic(label.attribute as LabelItem);\n\n /**\n * 增加smartInvert时fillStrategy和 strokeStrategy的四种策略:\n * series(baseMark色),\n * invertSeries(执行智能反色),\n * similarSeries(智能反色的补色),\n * null(不执行智能反色,保持fill设置的颜色)\n * */\n const backgroundColor = baseMark.attribute.fill as IColor;\n const foregroundColor = label.attribute.fill as IColor;\n const baseColor = backgroundColor;\n const invertColor = labelSmartInvert(\n foregroundColor,\n backgroundColor,\n textType,\n contrastRatiosThreshold,\n alternativeColors\n );\n const similarColor = contrastAccessibilityChecker(invertColor, brightColor) ? brightColor : darkColor;\n\n if (outsideEnable) {\n const fill = smartInvertStrategy(fillStrategy, baseColor, invertColor, similarColor);\n fill && label.setAttributes({ fill });\n\n if (label.attribute.lineWidth === 0) {\n continue;\n }\n\n const stroke = smartInvertStrategy(strokeStrategy, baseColor, invertColor, similarColor);\n stroke && label.setAttributes({ stroke });\n } else {\n const isInside = this._canPlaceInside(label.AABBBounds, baseMark?.AABBBounds);\n if (isInside) {\n const fill = smartInvertStrategy(fillStrategy, baseColor, invertColor, similarColor);\n fill && label.setAttributes({ fill });\n\n if (label.attribute.lineWidth === 0) {\n continue;\n }\n\n const stroke = smartInvertStrategy(strokeStrategy, baseColor, invertColor, similarColor);\n stroke && label.setAttributes({ stroke });\n } else {\n /** 当label无法设置stroke时,不进行反色计算(容易反色为白色与白色背景混合不可见) */\n if (label.attribute.lineWidth === 0) {\n continue;\n }\n\n /** 当label设置stroke时,保留stroke设置的颜色,根据stroke对fill做反色 */\n if (label.attribute.stroke) {\n label.setAttributes({\n fill: labelSmartInvert(\n label.attribute.fill as IColor,\n label.attribute.stroke as IColor,\n textType,\n contrastRatiosThreshold,\n alternativeColors\n )\n });\n continue;\n }\n\n /** 当label未设置stroke,且可设置stroke时,正常计算 */\n const fill = smartInvertStrategy(fillStrategy, baseColor, invertColor, similarColor);\n fill && label.setAttributes({ fill });\n\n const stroke = smartInvertStrategy(strokeStrategy, baseColor, invertColor, similarColor);\n stroke && label.setAttributes({ stroke });\n }\n }\n }\n }\n\n /**\n * 是否在图形内部\n * @param textBound\n * @param shapeBound\n * @returns\n */\n protected _canPlaceInside(textBound: IBoundsLike, shapeBound: IAABBBounds) {\n if (!textBound || !shapeBound) {\n return false;\n }\n return shapeBound.encloses(textBound);\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":["../src/label/base.ts"],"names":[],"mappings":"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","file":"base.js","sourcesContent":["/**\n * @description Label 基类\n */\nimport type {\n IGroup,\n Text,\n IGraphic,\n IText,\n FederatedPointerEvent,\n IColor,\n ILine,\n IArea,\n IRichTextGraphicAttribute,\n IRichText,\n IRichTextCharacter,\n ITextAttribute\n} from '@visactor/vrender-core';\nimport {\n createText,\n IncreaseCount,\n AttributeUpdateType,\n IContainPointMode,\n createRichText\n} from '@visactor/vrender-core';\nimport type { IAABBBounds, IBoundsLike, IPointLike } from '@visactor/vutils';\nimport {\n isFunction,\n isValidNumber,\n isEmpty,\n isValid,\n isString,\n merge,\n isRectIntersect,\n isNil,\n isArray\n} from '@visactor/vutils';\nimport { AbstractComponent } from '../core/base';\nimport type { PointLocationCfg } from '../core/type';\nimport { labelSmartInvert, contrastAccessibilityChecker, smartInvertStrategy } from '../util/label-smartInvert';\nimport { getMarksByName, getNoneGroupMarksByName, traverseGroup } from '../util';\nimport { StateValue } from '../constant';\nimport type { Bitmap } from './overlap';\nimport { bitmapTool, boundToRange, canPlace, clampText, place } from './overlap';\nimport type { BaseLabelAttrs, OverlapAttrs, ILabelAnimation, ArcLabelAttrs, LabelItem, SmartInvertAttrs } from './type';\nimport { DefaultLabelAnimation, getAnimationAttributes } from './animate/animate';\nimport { getPointsOfLineArea } from './util';\n\nexport class LabelBase<T extends BaseLabelAttrs> extends AbstractComponent<T> {\n name = 'label';\n\n protected _baseMarks?: IGraphic[];\n\n protected _isCollectionBase: boolean;\n\n protected _bitmap?: Bitmap;\n\n static defaultAttributes: Partial<BaseLabelAttrs> = {\n textStyle: {\n fontSize: 12,\n // FIXME: we need a default color. Yet in current logic, textStyle will override fill from baseMark.\n // This need a new config option like `colorFull`\n // fill: '#000',\n textAlign: 'center',\n textBaseline: 'middle',\n boundsPadding: [-1, 0, -1, 0] // to ignore the textBound buf\n },\n offset: 0,\n pickable: false\n };\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 _graphicToText: Map<IGraphic, { text: IText | IRichText; labelLine?: ILine }>;\n\n protected _idToGraphic: Map<string, IGraphic>;\n\n protected _idToPoint: Map<string, IPointLike>;\n\n onAfterLabelOverlap?: (bitmap: Bitmap) => void;\n\n private _lastHover: IGraphic;\n private _lastSelect: IGraphic;\n\n private _enableAnimation: boolean;\n\n constructor(attributes: BaseLabelAttrs) {\n super(merge({}, LabelBase.defaultAttributes, attributes));\n }\n\n /**\n * 计算 text 的最终位置属性x, y\n * @param textBounds\n * @param graphicBounds\n * @param position\n * @param offset\n * @returns\n */\n protected labeling(\n textBounds: IBoundsLike,\n graphicBounds: IBoundsLike,\n position?: BaseLabelAttrs['position'],\n offset?: number\n ): { x: number; y: number } | undefined {\n // 基类没有指定的图元类型,需要在 data 中指定位置,故无需进行 labeling\n return;\n }\n\n protected _labelLine(text: LabelItem): ILine | undefined {\n // 基类没有指定的图元类型,需要在 data 中指定位置,故无需进行 labeling\n return;\n }\n\n protected render() {\n this._prepare();\n\n if (isNil(this._idToGraphic) || (this._isCollectionBase && isNil(this._idToPoint))) {\n return;\n }\n\n const { overlap, smartInvert, dataFilter, customLayoutFunc, customOverlapFunc } = this.attribute;\n let data = this.attribute.data;\n\n if (isFunction(dataFilter)) {\n data = dataFilter(data);\n }\n\n let labels: (IText | IRichText)[];\n\n if (isFunction(customLayoutFunc)) {\n labels = customLayoutFunc(\n data,\n this.getRelatedGrphic,\n this._isCollectionBase ? (d: LabelItem) => this._idToPoint.get(d.id) : null\n );\n } else {\n // 根据关联图元和配置的position计算标签坐标\n labels = this._layout(data);\n }\n\n if (isFunction(customOverlapFunc)) {\n labels = customOverlapFunc(\n labels as Text[],\n this.getRelatedGrphic,\n this._isCollectionBase ? (d: LabelItem) => this._idToPoint.get(d.id) : null\n );\n } else {\n // 防重叠逻辑\n if (overlap !== false) {\n labels = this._overlapping(labels);\n }\n }\n\n if (smartInvert !== false) {\n this._smartInvert(labels);\n }\n\n this._renderLabels(labels);\n }\n\n private _bindEvent(target: IGraphic) {\n if (this.attribute.disableTriggerEvent) {\n return;\n }\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 _setStatesOfText(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 _setStatesOfLabelLine(target: IGraphic) {\n if (!target) {\n return;\n }\n const state = this.attribute.labelLineState;\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 protected _createLabelText(attributes: LabelItem) {\n if (attributes.textType === 'rich') {\n attributes.textConfig = attributes.text as IRichTextCharacter[];\n attributes.width = attributes.width ?? 0;\n attributes.height = attributes.height ?? 0;\n const text = createRichText(attributes as any);\n this._bindEvent(text);\n this._setStatesOfText(text);\n return text;\n } else if (attributes.textType === 'html') {\n attributes.textConfig = [] as IRichTextCharacter[];\n attributes.html = {\n dom: attributes.text as string,\n container: '',\n width: 30,\n height: 30,\n style: {},\n ...attributes\n };\n const text = createRichText(attributes as IRichTextGraphicAttribute);\n this._bindEvent(text);\n this._setStatesOfText(text);\n return text;\n }\n const text = createText(attributes);\n this._bindEvent(text);\n this._setStatesOfText(text);\n return text;\n }\n\n private _prepare() {\n const currentBaseMarks: IGraphic[] = [];\n let baseMarks;\n if (isFunction(this.attribute.getBaseMarks)) {\n baseMarks = this.attribute.getBaseMarks();\n } else {\n baseMarks = getMarksByName(this.getRootNode() as IGroup, this.attribute.baseMarkGroupName);\n }\n\n baseMarks.forEach(mark => {\n if ((mark as any).releaseStatus !== 'willRelease') {\n currentBaseMarks.push(mark);\n }\n });\n\n this._idToGraphic?.clear();\n this._idToPoint?.clear();\n this._baseMarks = currentBaseMarks;\n this._isCollectionBase = currentBaseMarks?.[0]?.type === 'line' || currentBaseMarks?.[0]?.type === 'area';\n\n if (!currentBaseMarks || currentBaseMarks.length === 0) {\n return;\n }\n\n const { data } = this.attribute;\n\n if (!data || data.length === 0) {\n return;\n }\n if (!this._idToGraphic) {\n this._idToGraphic = new Map();\n }\n\n // generate id mapping before data filter\n if (this._isCollectionBase) {\n if (!this._idToPoint) {\n this._idToPoint = new Map();\n }\n let cur = 0;\n for (let i = 0; i < currentBaseMarks.length; i++) {\n const baseMark = currentBaseMarks[i];\n const points = getPointsOfLineArea(baseMark as ILine | IArea);\n\n if (points?.length) {\n for (let j = 0; j < points.length; j++) {\n const textData = data[cur];\n if (textData && points[j]) {\n if (!isValid(textData.id)) {\n textData.id = `vrender-component-${this.name}-${cur}`;\n }\n this._idToPoint.set(textData.id, points[j]);\n this._idToGraphic.set(textData.id, baseMark);\n }\n\n cur++;\n }\n }\n }\n } else {\n for (let i = 0; i < currentBaseMarks.length; i++) {\n const textData = data[i];\n const baseMark = currentBaseMarks[i] as IGraphic;\n if (textData && baseMark) {\n if (!isValid(textData.id)) {\n textData.id = `vrender-component-${this.name}-${i}`;\n }\n this._idToGraphic.set(textData.id, baseMark);\n }\n }\n }\n }\n\n protected getRelatedGrphic(item: LabelItem) {\n return this._idToGraphic.get(item.id);\n }\n\n protected _layout(data: LabelItem[] = []): (IText | IRichText)[] {\n const { textStyle = {}, position, offset } = this.attribute;\n const labels = [];\n\n for (let i = 0; i < data.length; i++) {\n const textData = data[i];\n const baseMark = this.getRelatedGrphic(textData);\n\n const labelAttribute = {\n fill: this._isCollectionBase\n ? isArray(baseMark.attribute.stroke)\n ? baseMark.attribute.stroke.find(entry => !!entry && entry !== true)\n : baseMark.attribute.stroke\n : baseMark.attribute.fill,\n ...textStyle,\n ...textData\n };\n const text = this._createLabelText(labelAttribute);\n const textBounds = this.getGraphicBounds(text);\n const graphicBounds = this._isCollectionBase\n ? this.getGraphicBounds(null, this._idToPoint.get(textData.id))\n : this.getGraphicBounds(baseMark, { x: textData.x as number, y: textData.y as number });\n\n const textLocation = this.labeling(\n textBounds,\n graphicBounds,\n isFunction(position) ? position(textData) : position,\n offset\n );\n\n if (textLocation) {\n labelAttribute.x = textLocation.x;\n labelAttribute.y = textLocation.y;\n text.setAttributes(textLocation);\n }\n\n labels.push(text);\n }\n\n return labels;\n }\n\n protected _overlapping(labels: (IText | IRichText)[]) {\n if (labels.length === 0) {\n return [];\n }\n const option = this.attribute.overlap as OverlapAttrs;\n\n const result: (IText | IRichText)[] = [];\n const baseMarkGroup = this.getBaseMarkGroup();\n\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 {\n avoidBaseMark,\n strategy = [],\n hideOnHit = true,\n clampForce = true,\n avoidMarks = [],\n overlapPadding\n } = 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 // 躲避关联的基础图元\n if (avoidBaseMark) {\n this._baseMarks?.forEach(mark => {\n mark.AABBBounds && bitmap.setRange(boundToRange(bmpTool, mark.AABBBounds, true));\n });\n }\n\n // 躲避指定图元\n if (avoidMarks.length > 0) {\n avoidMarks.forEach(avoid => {\n if (isString(avoid)) {\n getNoneGroupMarksByName(this.getRootNode() as IGroup, avoid).forEach(avoidMark => {\n avoidMark.AABBBounds && bitmap.setRange(boundToRange(bmpTool, avoidMark.AABBBounds, true));\n });\n } else if (avoid.AABBBounds) {\n bitmap.setRange(boundToRange(bmpTool, avoid.AABBBounds, true));\n }\n });\n }\n\n for (let i = 0; i < labels.length; i++) {\n if (labels[i].visible === false) {\n continue;\n }\n\n const text = labels[i] as IText | IRichText;\n const baseMark = this.getRelatedGrphic(text.attribute);\n text.update();\n if (!isRectIntersect(baseMark.AABBBounds, { x1: 0, x2: bmpTool.width, y1: 0, y2: bmpTool.height }, true)) {\n continue;\n }\n\n // 默认位置可以放置\n if (canPlace(bmpTool, bitmap, text.AABBBounds, clampForce, overlapPadding)) {\n // 如果配置了限制在图形内部,需要提前判断;\n if (!checkBounds) {\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push(text);\n continue;\n }\n\n if (checkBounds && baseMark?.AABBBounds && this._canPlaceInside(text.AABBBounds, baseMark?.AABBBounds)) {\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push(text);\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 as Text,\n this._isCollectionBase\n ? this.getGraphicBounds(null, this._idToPoint.get((labels[i].attribute as any).id))\n : this.getGraphicBounds(baseMark, labels[i].attribute),\n this.labeling\n );\n if (hasPlace !== false) {\n text.setAttributes({ x: hasPlace.x, y: hasPlace.y });\n result.push(text);\n break;\n }\n }\n\n // 尝试向内挤压\n if (!hasPlace && clampForce) {\n const { dx = 0, dy = 0 } = clampText(text as IText, bmpTool.width, bmpTool.height);\n if (\n !(dx === 0 && dy === 0) &&\n canPlace(\n bmpTool,\n bitmap,\n {\n x1: text.AABBBounds.x1 + dx,\n x2: text.AABBBounds.x2 + dx,\n y1: text.AABBBounds.y1 + dy,\n y2: text.AABBBounds.y2 + dy\n }\n // 向内 clamp 只处理超出的位移量,不叠加 overlapPadding\n )\n ) {\n text.setAttributes({ x: text.attribute.x + dx, y: text.attribute.y + dy });\n bitmap.setRange(boundToRange(bmpTool, text.AABBBounds, true));\n result.push(text);\n continue;\n }\n }\n\n !hasPlace && !hideOnHit && result.push(text);\n }\n\n if (isFunction(this.onAfterLabelOverlap)) {\n this.onAfterLabelOverlap(bitmap);\n }\n\n return result;\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\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: (IText | IRichText)[]) {\n const disableAnimation = this._enableAnimation === false || this.attribute.animation === false;\n\n if (disableAnimation) {\n this._renderWithOutAnimation(labels);\n } else {\n this._renderWithAnimation(labels);\n }\n }\n\n protected _renderWithAnimation(labels: (IText | IRichText)[]) {\n const animationConfig = (this.attribute.animation ?? {}) as ILabelAnimation;\n\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: Map<any, { text: IText | IRichText; labelLine?: ILine }> = new Map();\n const prevTextMap: Map<any, { text: IText | IRichText; labelLine?: ILine }> = this._graphicToText || new Map();\n const texts = [] as (IText | IRichText)[];\n\n labels.forEach((text, index) => {\n const labelLine: ILine = this._labelLine(text as any);\n const relatedGraphic = this.getRelatedGrphic(text.attribute);\n const textId = (text.attribute as LabelItem).id;\n const textKey = this._isCollectionBase ? textId : relatedGraphic;\n const state = prevTextMap?.get(textKey) ? 'update' : 'enter';\n\n if (state === 'enter') {\n texts.push(text);\n currentTextMap.set(textKey, labelLine ? { text, labelLine } : { text });\n if (relatedGraphic) {\n const { from, to } = getAnimationAttributes(text.attribute, 'fadeIn');\n this.add(text);\n\n if (labelLine) {\n this._setStatesOfLabelLine(labelLine);\n this.add(labelLine);\n }\n\n this._syncStateWithRelatedGraphic(relatedGraphic);\n relatedGraphic.once('animate-bind', a => {\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 }\n } else if (state === 'update') {\n const prevLabel = prevTextMap.get(textKey);\n prevTextMap.delete(textKey);\n currentTextMap.set(textKey, prevLabel);\n const prevText = prevLabel.text;\n prevText.animate().to(text.attribute, duration, easing);\n if (prevLabel.labelLine) {\n prevLabel.labelLine.animate().to(\n merge({}, prevLabel.labelLine.attribute, {\n visible:\n ((text.attribute as ArcLabelAttrs)?.line?.visible && text.attribute?.visible) ??\n text.attribute?.visible ??\n true,\n points: (text.attribute as ArcLabelAttrs)?.points\n }),\n duration,\n easing\n );\n }\n if (\n animationConfig.increaseEffect !== false &&\n (prevText as IText).attribute?.text !== (text as IText).attribute?.text &&\n isValidNumber(Number((prevText as IText).attribute?.text) * Number((text as IText).attribute?.text))\n ) {\n prevText\n .animate()\n .play(\n new IncreaseCount(\n { text: (prevText as IText).attribute?.text as string },\n { text: (text as IText).attribute?.text as string },\n duration,\n easing\n )\n );\n }\n }\n });\n prevTextMap.forEach(label => {\n label.text\n ?.animate()\n .to(getAnimationAttributes(label.text.attribute, 'fadeOut').to, duration, easing)\n .onEnd(() => {\n this.removeChild(label.text);\n if (label?.labelLine) {\n this.removeChild(label.labelLine);\n }\n });\n });\n\n this._graphicToText = currentTextMap;\n }\n\n protected _renderWithOutAnimation(labels: (IText | IRichText)[]) {\n const currentTextMap: Map<any, { text: IText | IRichText; labelLine?: ILine }> = new Map();\n const prevTextMap: Map<any, { text: IText | IRichText; labelLine?: ILine }> = this._graphicToText || new Map();\n const texts = [] as (IText | IRichText)[];\n\n labels.forEach(text => {\n const labelLine = this._labelLine(text as any);\n const relatedGraphic = this.getRelatedGrphic(text.attribute);\n const state = prevTextMap?.get(relatedGraphic) ? 'update' : 'enter';\n const textKey = this._isCollectionBase ? (text.attribute as LabelItem).id : relatedGraphic;\n\n if (state === 'enter') {\n texts.push(text);\n currentTextMap.set(textKey, labelLine ? { text, labelLine } : { text });\n this.add(text);\n if (labelLine) {\n this.add(labelLine);\n }\n\n this._syncStateWithRelatedGraphic(relatedGraphic);\n } else if (state === 'update') {\n const prevLabel = prevTextMap.get(textKey);\n prevTextMap.delete(textKey);\n currentTextMap.set(textKey, prevLabel);\n prevLabel.text.setAttributes(text.attribute as any);\n if (prevLabel?.labelLine) {\n prevLabel.labelLine.setAttributes({ points: (text.attribute as ArcLabelAttrs)?.points });\n }\n }\n });\n\n prevTextMap.forEach(label => {\n this.removeChild(label.text);\n if (label?.labelLine) {\n this.removeChild(label.labelLine);\n }\n });\n\n this._graphicToText = currentTextMap;\n }\n\n protected _handleRelatedGraphicSetState = (e: any) => {\n if (e.detail?.type === AttributeUpdateType.STATE) {\n const currentStates = e.target?.currentStates ?? [];\n const labels = this._isCollectionBase ? [...this._graphicToText.values()] : [this._graphicToText.get(e.target)];\n\n labels.forEach(label => {\n if (label) {\n if (label.text) {\n label.text.useStates(currentStates);\n }\n\n if (label.labelLine) {\n label.labelLine.useStates(currentStates);\n }\n }\n });\n }\n };\n\n protected _syncStateWithRelatedGraphic(relatedGraphic: IGraphic) {\n if (this.attribute.syncState) {\n relatedGraphic.on('afterAttributeUpdate', this._handleRelatedGraphicSetState);\n }\n }\n\n protected _afterRelatedGraphicAttributeUpdate(\n text: IText | IRichText,\n texts: (IText | IRichText)[],\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 if (this._isCollectionBase) {\n const point = this._idToPoint.get((text.attribute as LabelItem).id);\n\n if (\n point &&\n (!text.animates || !text.animates.has('label-animate')) &&\n this._baseMarks[0].containsPoint(point.x, point.y, IContainPointMode.LOCAL, this.stage?.pickerService)\n ) {\n text.animate({ onEnd }).wait(delay).to(to, duration, easing);\n }\n } else if (detail.animationState.isFirstFrameOfStep) {\n text.animate({ onEnd }).wait(delay).to(to, duration, easing);\n }\n\n break;\n }\n };\n return listener;\n }\n\n protected _smartInvert(labels: (IText | IRichText)[]) {\n const option = (this.attribute.smartInvert || {}) as SmartInvertAttrs;\n const { textType, contrastRatiosThreshold, alternativeColors } = option;\n const fillStrategy = option.fillStrategy ?? 'invertBase';\n const strokeStrategy = option.strokeStrategy ?? 'base';\n const brightColor = option.brightColor ?? '#ffffff';\n const darkColor = option.darkColor ?? '#000000';\n const outsideEnable = option.outsideEnable ?? false;\n\n if (fillStrategy === 'null' && strokeStrategy === 'null') {\n return;\n }\n\n for (let i = 0; i < labels.length; i++) {\n const label = labels[i];\n if (!label) {\n continue;\n }\n\n const baseMark = this.getRelatedGrphic(label.attribute as LabelItem);\n\n /**\n * 增加smartInvert时fillStrategy和 strokeStrategy的四种策略:\n * series(baseMark色),\n * invertSeries(执行智能反色),\n * similarSeries(智能反色的补色),\n * null(不执行智能反色,保持fill设置的颜色)\n * */\n const backgroundColor = baseMark.attribute.fill as IColor;\n const foregroundColor = label.attribute.fill as IColor;\n const baseColor = backgroundColor;\n const invertColor = labelSmartInvert(\n foregroundColor,\n backgroundColor,\n textType,\n contrastRatiosThreshold,\n alternativeColors\n );\n const similarColor = contrastAccessibilityChecker(invertColor, brightColor) ? brightColor : darkColor;\n\n if (outsideEnable) {\n const fill = smartInvertStrategy(fillStrategy, baseColor, invertColor, similarColor);\n fill && label.setAttributes({ fill });\n\n if (label.attribute.lineWidth === 0) {\n continue;\n }\n\n const stroke = smartInvertStrategy(strokeStrategy, baseColor, invertColor, similarColor);\n stroke && label.setAttributes({ stroke });\n } else {\n const isInside = this._canPlaceInside(label.AABBBounds, baseMark?.AABBBounds);\n if (isInside) {\n const fill = smartInvertStrategy(fillStrategy, baseColor, invertColor, similarColor);\n fill && label.setAttributes({ fill });\n\n if (label.attribute.lineWidth === 0) {\n continue;\n }\n\n const stroke = smartInvertStrategy(strokeStrategy, baseColor, invertColor, similarColor);\n stroke && label.setAttributes({ stroke });\n } else {\n /** 当label无法设置stroke时,不进行反色计算(容易反色为白色与白色背景混合不可见) */\n if (label.attribute.lineWidth === 0) {\n continue;\n }\n\n /** 当label设置stroke时,保留stroke设置的颜色,根据stroke对fill做反色 */\n if (label.attribute.stroke) {\n label.setAttributes({\n fill: labelSmartInvert(\n label.attribute.fill as IColor,\n label.attribute.stroke as IColor,\n textType,\n contrastRatiosThreshold,\n alternativeColors\n )\n });\n continue;\n }\n\n /** 当label未设置stroke,且可设置stroke时,正常计算 */\n const fill = smartInvertStrategy(fillStrategy, baseColor, invertColor, similarColor);\n fill && label.setAttributes({ fill });\n\n const stroke = smartInvertStrategy(strokeStrategy, baseColor, invertColor, similarColor);\n stroke && label.setAttributes({ stroke });\n }\n }\n }\n }\n\n /**\n * 是否在图形内部\n * @param textBound\n * @param shapeBound\n * @returns\n */\n protected _canPlaceInside(textBound: IBoundsLike, shapeBound: IAABBBounds) {\n if (!textBound || !shapeBound) {\n return false;\n }\n return shapeBound.encloses(textBound);\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"]}
@@ -11,7 +11,7 @@ export type LabelItem = {
11
11
  id?: string;
12
12
  data?: any;
13
13
  [key: string]: any;
14
- type?: string;
14
+ textType?: string;
15
15
  text?: string | string[] | number | number[] | IRichTextCharacter[];
16
16
  textAlign?: 'left' | 'right' | 'center' | 'start' | 'end';
17
17
  textBaseline?: 'top' | 'middle' | 'bottom' | 'alphabetic';
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/label/type.ts"],"names":[],"mappings":"","file":"type.js","sourcesContent":["import type {\n EasingType,\n IGraphic,\n IGroupGraphicAttribute,\n ITextGraphicAttribute,\n IRichTextGraphicAttribute,\n Text,\n TextAlignType,\n TextBaselineType,\n ILineGraphicAttribute,\n IRichTextCharacter,\n RichText\n} from '@visactor/vrender-core';\nimport type { IPointLike } from '@visactor/vutils';\n\nexport type LabelItemStateStyle<T> = {\n hover?: T;\n hover_reverse?: T;\n selected?: T;\n selected_reverse?: T;\n [key: string]: T;\n};\n\nexport type LabelItem = {\n // 用于动画\n id?: string;\n // 原始数据\n data?: any;\n [key: string]: any;\n // 文本类型:text, rich, html\n type?: string;\n /**\n * 文本内容,如果需要进行换行,则使用数组形式,如 ['abc', '123']\n * 支持富文本内容, 如textConfig, html\n */\n text?: string | string[] | number | number[] | IRichTextCharacter[];\n /**\n * 兼容ITextGraphicAttribute与IRichTextGraphicAttribute的textAlign属性\n */\n textAlign?: 'left' | 'right' | 'center' | 'start' | 'end';\n textBaseline?: 'top' | 'middle' | 'bottom' | 'alphabetic';\n} & Omit<Partial<ITextGraphicAttribute>, 'textAlign' | 'textBaseline'> &\n Omit<Partial<IRichTextGraphicAttribute>, 'textAlign' | 'textBaseline'>;\n// Omit<Partial<ITextGraphicAttribute>, 'text' | 'textAlign'> &\n// Omit<Partial<IRichTextGraphicAttribute>, 'text' | 'textAlign'>;\n\nexport interface BaseLabelAttrs extends IGroupGraphicAttribute {\n type: string;\n /**\n * 图元 group 名称\n */\n baseMarkGroupName: string;\n /**\n * @hack not recommend to use\n * @returns\n */\n getBaseMarks?: () => IGraphic[];\n /**\n * 是否开启选中交互\n * @default false\n */\n select?: boolean;\n /**\n * 是否开启 hover 交互\n * @default false\n */\n hover?: boolean;\n /**\n * 标签数据\n */\n data: LabelItem[];\n\n /** 文本样式,优先级低于 data */\n textStyle?: Partial<ITextGraphicAttribute>;\n\n /** 文本交互样式 */\n state?: LabelItemStateStyle<ITextGraphicAttribute>;\n\n /** 连线的交互样式 */\n labelLineState?: LabelItemStateStyle<ILineGraphicAttribute>;\n\n syncState?: boolean;\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 // 排序 or 删减\n dataFilter?: (data: LabelItem[]) => LabelItem[];\n\n /** 自定义布局函数\n * @description 当配置了 customLayoutFunc 后,默认布局逻辑将不再生效。(position/offset不生效)\n */\n customLayoutFunc?: (\n data: LabelItem[],\n getRelatedGraphic: (data: LabelItem) => IGraphic,\n getRelatedPoint?: (data: LabelItem) => IPointLike\n ) => (Text | RichText)[];\n\n /** 自定义标签躲避函数\n * @description 当配置了 customOverlapFunc 后,会根据 position 和 offset 进行初始布局。配置的防重叠逻辑(overlap)不生效。\n */\n customOverlapFunc?: (\n label: (Text | RichText)[],\n getRelatedGraphic: (data: LabelItem) => IGraphic,\n getRelatedPoint?: (data: LabelItem) => IPointLike\n ) => (Text | RichText)[];\n /**\n * 关闭交互效果\n * @default false\n */\n disableTriggerEvent?: boolean;\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 * @default []\n */\n avoidMarks?: string[] | IGraphic[];\n\n /**\n * 发生重叠后的躲避策略\n */\n strategy?: Strategy[];\n\n /**\n * 文字在防重叠计算中预留的边距。\n * @default 0\n */\n overlapPadding?: number;\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 * fillStrategy四种策略:\n * - base(baseMark色),\n * - invertBase(执行智能反色),\n * - similarBase(智能反色的补色),\n * - null(不执行智能反色,保持fill设置的颜色)\n * @default 'invertBase'\n */\n fillStrategy?: 'base' | 'invertBase' | 'similarBase' | 'null';\n /**\n * strokeStrategy的四种策略:\n * - base(baseMark色),\n * - invertBase(执行智能反色),\n * - similarBase(智能反色的补色),\n * - null(不执行智能反色,保持stroke设置的颜色)\n * @default 'base'\n */\n strokeStrategy?: 'base' | 'invertBase' | 'similarBase' | 'null';\n /**\n * 前景色与亮色具有对比度时,similarSeries使用该色\n * @default '#ffffff'\n */\n brightColor?: string;\n /**\n * 前景色与暗色具有对比度时,similarSeries使用该色\n * @default '#000000'\n */\n darkColor?: string;\n /**\n * label超出mark范围,也以mark作为背景色进行反色\n */\n outsideEnable?: boolean;\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 * @default 'top'\n */\n position?: Functional<\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'inside'\n | 'inside-top'\n | 'inside-bottom'\n | 'inside-right'\n | 'inside-left'\n | 'top-right'\n | 'top-left'\n | 'bottom-right'\n | 'bottom-left'\n >;\n}\n\nexport interface LineLabelAttrs extends BaseLabelAttrs {\n type: 'line';\n /**\n * 标签位置\n * @default 'end'\n */\n position?: Functional<'start' | 'end'>;\n}\n\nexport interface LineDataLabelAttrs extends BaseLabelAttrs {\n type: 'line-data';\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 PolygonLabelAttrs extends BaseLabelAttrs {\n type: 'polygon';\n /**\n * 标签位置\n * @default 'center'\n */\n position?: Functional<'center'>;\n}\n\nexport interface ArcLabelAttrs extends BaseLabelAttrs {\n type: 'arc';\n\n /**\n * 图元 group 名称\n */\n baseMarkGroupName: string;\n\n /**\n * 标签位置\n * @default 'outside'\n */\n position?: Functional<'inside' | 'outside' | 'inside-inner' | 'inside-outer'>;\n\n // 画布宽度\n width?: number;\n // 画布高度\n height?: number;\n\n /**\n * 是否允许标签重叠\n * @default false\n */\n coverEnable?: boolean;\n /**\n * 是否允许标签旋转\n * @default true\n */\n rotate?: boolean;\n\n /**\n * 文字与引导线间隔宽度\n * @default 5\n */\n spaceWidth?: number;\n /**\n * 标签旋转角度\n */\n angle?: number;\n /**\n * 标签旋转角度的偏移角度\n */\n offsetAngle?: number;\n /**\n * 标签相对于 `outerRadius` 的径向偏移,目前仅作用于 inside 标签\n */\n offsetRadius?: number;\n /**\n * 标签横向点对齐\n */\n textAlign?: TextAlignType;\n /**\n * 标签纵向点对齐\n */\n textBaseline?: TextBaselineType;\n /**\n * 扇区间标签的间隔\n * @default 6\n */\n layoutArcGap?: number;\n /** 标签引导线样式 */\n line?: IArcLabelLineSpec;\n /** 标签布局配置 */\n layout?: IArcLabelLayoutSpec;\n /** 标签引导线点集 */\n points?: IPoint[];\n /** 饼图扇区中心偏移 */\n centerOffset?: number;\n}\n\nexport interface IArcLabelLineSpec {\n /**\n * 是否显示引导线\n * @default true\n */\n visible?: boolean;\n /**\n * 引导线 line1 部分最小长度\n * @default 20\n */\n line1MinLength?: number;\n /**\n * 引导线 line2 部分最小长度\n * @default 10\n */\n line2MinLength?: number;\n /**\n * 引导线是否光滑\n * @default false\n */\n smooth?: boolean;\n /**\n * 引导线样式\n */\n style?: Partial<ILineGraphicAttribute>;\n}\n\nexport type ArcLabelAlignType = 'arc' | 'labelLine' | 'edge';\n\nexport type ArcLabelStrategyType = 'priority' | 'vertical' | 'none';\n\nexport interface IArcLabelLayoutSpec {\n /**\n * 标签对齐方式\n * @default 'arc'\n */\n textAlign?: ArcLabelAlignType;\n /** @deprecate 建议统一使用textAlign,后续将废除 */\n align?: ArcLabelAlignType;\n /**\n * 标签布局策略\n * @default 'priority'\n */\n strategy?: ArcLabelStrategyType;\n /**\n * 是否启用切线约束\n * @default true\n */\n tangentConstraint?: boolean;\n}\n\nexport interface DataLabelAttrs extends IGroupGraphicAttribute {\n dataLabels: (RectLabelAttrs | SymbolLabelAttrs | ArcLabelAttrs | LineDataLabelAttrs)[];\n /**\n * 防重叠的区域大小\n */\n size: { width: number; height: number };\n}\n\nexport type Functional<T> = T | ((data: any) => T);\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\nexport interface IPoint {\n x: number;\n y: number;\n}\n\nexport interface IPolarPoint {\n radius: number;\n angle: number;\n}\n\nexport type Quadrant = 1 | 2 | 3 | 4;\n\nexport type TextAlign = 'left' | 'right' | 'center';\n"]}
1
+ {"version":3,"sources":["../src/label/type.ts"],"names":[],"mappings":"","file":"type.js","sourcesContent":["import type {\n EasingType,\n IGraphic,\n IGroupGraphicAttribute,\n ITextGraphicAttribute,\n IRichTextGraphicAttribute,\n Text,\n TextAlignType,\n TextBaselineType,\n ILineGraphicAttribute,\n IRichTextCharacter,\n RichText\n} from '@visactor/vrender-core';\nimport type { IPointLike } from '@visactor/vutils';\n\nexport type LabelItemStateStyle<T> = {\n hover?: T;\n hover_reverse?: T;\n selected?: T;\n selected_reverse?: T;\n [key: string]: T;\n};\n\nexport type LabelItem = {\n // 用于动画\n id?: string;\n // 原始数据\n data?: any;\n [key: string]: any;\n // 文本类型:text, rich, html (区分于图元类型)\n textType?: string;\n /**\n * 文本内容,如果需要进行换行,则使用数组形式,如 ['abc', '123']\n * 支持富文本内容, 如textConfig, html\n */\n text?: string | string[] | number | number[] | IRichTextCharacter[];\n /**\n * 兼容ITextGraphicAttribute与IRichTextGraphicAttribute的textAlign属性\n */\n textAlign?: 'left' | 'right' | 'center' | 'start' | 'end';\n textBaseline?: 'top' | 'middle' | 'bottom' | 'alphabetic';\n} & Omit<Partial<ITextGraphicAttribute>, 'textAlign' | 'textBaseline'> &\n Omit<Partial<IRichTextGraphicAttribute>, 'textAlign' | 'textBaseline'>;\n// Omit<Partial<ITextGraphicAttribute>, 'text' | 'textAlign'> &\n// Omit<Partial<IRichTextGraphicAttribute>, 'text' | 'textAlign'>;\n\nexport interface BaseLabelAttrs extends IGroupGraphicAttribute {\n type: string;\n /**\n * 图元 group 名称\n */\n baseMarkGroupName: string;\n /**\n * @hack not recommend to use\n * @returns\n */\n getBaseMarks?: () => IGraphic[];\n /**\n * 是否开启选中交互\n * @default false\n */\n select?: boolean;\n /**\n * 是否开启 hover 交互\n * @default false\n */\n hover?: boolean;\n /**\n * 标签数据\n */\n data: LabelItem[];\n\n /** 文本样式,优先级低于 data */\n textStyle?: Partial<ITextGraphicAttribute>;\n\n /** 文本交互样式 */\n state?: LabelItemStateStyle<ITextGraphicAttribute>;\n\n /** 连线的交互样式 */\n labelLineState?: LabelItemStateStyle<ILineGraphicAttribute>;\n\n syncState?: boolean;\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 // 排序 or 删减\n dataFilter?: (data: LabelItem[]) => LabelItem[];\n\n /** 自定义布局函数\n * @description 当配置了 customLayoutFunc 后,默认布局逻辑将不再生效。(position/offset不生效)\n */\n customLayoutFunc?: (\n data: LabelItem[],\n getRelatedGraphic: (data: LabelItem) => IGraphic,\n getRelatedPoint?: (data: LabelItem) => IPointLike\n ) => (Text | RichText)[];\n\n /** 自定义标签躲避函数\n * @description 当配置了 customOverlapFunc 后,会根据 position 和 offset 进行初始布局。配置的防重叠逻辑(overlap)不生效。\n */\n customOverlapFunc?: (\n label: (Text | RichText)[],\n getRelatedGraphic: (data: LabelItem) => IGraphic,\n getRelatedPoint?: (data: LabelItem) => IPointLike\n ) => (Text | RichText)[];\n /**\n * 关闭交互效果\n * @default false\n */\n disableTriggerEvent?: boolean;\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 * @default []\n */\n avoidMarks?: string[] | IGraphic[];\n\n /**\n * 发生重叠后的躲避策略\n */\n strategy?: Strategy[];\n\n /**\n * 文字在防重叠计算中预留的边距。\n * @default 0\n */\n overlapPadding?: number;\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 * fillStrategy四种策略:\n * - base(baseMark色),\n * - invertBase(执行智能反色),\n * - similarBase(智能反色的补色),\n * - null(不执行智能反色,保持fill设置的颜色)\n * @default 'invertBase'\n */\n fillStrategy?: 'base' | 'invertBase' | 'similarBase' | 'null';\n /**\n * strokeStrategy的四种策略:\n * - base(baseMark色),\n * - invertBase(执行智能反色),\n * - similarBase(智能反色的补色),\n * - null(不执行智能反色,保持stroke设置的颜色)\n * @default 'base'\n */\n strokeStrategy?: 'base' | 'invertBase' | 'similarBase' | 'null';\n /**\n * 前景色与亮色具有对比度时,similarSeries使用该色\n * @default '#ffffff'\n */\n brightColor?: string;\n /**\n * 前景色与暗色具有对比度时,similarSeries使用该色\n * @default '#000000'\n */\n darkColor?: string;\n /**\n * label超出mark范围,也以mark作为背景色进行反色\n */\n outsideEnable?: boolean;\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 * @default 'top'\n */\n position?: Functional<\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'inside'\n | 'inside-top'\n | 'inside-bottom'\n | 'inside-right'\n | 'inside-left'\n | 'top-right'\n | 'top-left'\n | 'bottom-right'\n | 'bottom-left'\n >;\n}\n\nexport interface LineLabelAttrs extends BaseLabelAttrs {\n type: 'line';\n /**\n * 标签位置\n * @default 'end'\n */\n position?: Functional<'start' | 'end'>;\n}\n\nexport interface LineDataLabelAttrs extends BaseLabelAttrs {\n type: 'line-data';\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 PolygonLabelAttrs extends BaseLabelAttrs {\n type: 'polygon';\n /**\n * 标签位置\n * @default 'center'\n */\n position?: Functional<'center'>;\n}\n\nexport interface ArcLabelAttrs extends BaseLabelAttrs {\n type: 'arc';\n\n /**\n * 图元 group 名称\n */\n baseMarkGroupName: string;\n\n /**\n * 标签位置\n * @default 'outside'\n */\n position?: Functional<'inside' | 'outside' | 'inside-inner' | 'inside-outer'>;\n\n // 画布宽度\n width?: number;\n // 画布高度\n height?: number;\n\n /**\n * 是否允许标签重叠\n * @default false\n */\n coverEnable?: boolean;\n /**\n * 是否允许标签旋转\n * @default true\n */\n rotate?: boolean;\n\n /**\n * 文字与引导线间隔宽度\n * @default 5\n */\n spaceWidth?: number;\n /**\n * 标签旋转角度\n */\n angle?: number;\n /**\n * 标签旋转角度的偏移角度\n */\n offsetAngle?: number;\n /**\n * 标签相对于 `outerRadius` 的径向偏移,目前仅作用于 inside 标签\n */\n offsetRadius?: number;\n /**\n * 标签横向点对齐\n */\n textAlign?: TextAlignType;\n /**\n * 标签纵向点对齐\n */\n textBaseline?: TextBaselineType;\n /**\n * 扇区间标签的间隔\n * @default 6\n */\n layoutArcGap?: number;\n /** 标签引导线样式 */\n line?: IArcLabelLineSpec;\n /** 标签布局配置 */\n layout?: IArcLabelLayoutSpec;\n /** 标签引导线点集 */\n points?: IPoint[];\n /** 饼图扇区中心偏移 */\n centerOffset?: number;\n}\n\nexport interface IArcLabelLineSpec {\n /**\n * 是否显示引导线\n * @default true\n */\n visible?: boolean;\n /**\n * 引导线 line1 部分最小长度\n * @default 20\n */\n line1MinLength?: number;\n /**\n * 引导线 line2 部分最小长度\n * @default 10\n */\n line2MinLength?: number;\n /**\n * 引导线是否光滑\n * @default false\n */\n smooth?: boolean;\n /**\n * 引导线样式\n */\n style?: Partial<ILineGraphicAttribute>;\n}\n\nexport type ArcLabelAlignType = 'arc' | 'labelLine' | 'edge';\n\nexport type ArcLabelStrategyType = 'priority' | 'vertical' | 'none';\n\nexport interface IArcLabelLayoutSpec {\n /**\n * 标签对齐方式\n * @default 'arc'\n */\n textAlign?: ArcLabelAlignType;\n /** @deprecate 建议统一使用textAlign,后续将废除 */\n align?: ArcLabelAlignType;\n /**\n * 标签布局策略\n * @default 'priority'\n */\n strategy?: ArcLabelStrategyType;\n /**\n * 是否启用切线约束\n * @default true\n */\n tangentConstraint?: boolean;\n}\n\nexport interface DataLabelAttrs extends IGroupGraphicAttribute {\n dataLabels: (RectLabelAttrs | SymbolLabelAttrs | ArcLabelAttrs | LineDataLabelAttrs)[];\n /**\n * 防重叠的区域大小\n */\n size: { width: number; height: number };\n}\n\nexport type Functional<T> = T | ((data: any) => T);\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\nexport interface IPoint {\n x: number;\n y: number;\n}\n\nexport interface IPolarPoint {\n radius: number;\n angle: number;\n}\n\nexport type Quadrant = 1 | 2 | 3 | 4;\n\nexport type TextAlign = 'left' | 'right' | 'center';\n"]}
@@ -81,7 +81,7 @@ class Tooltip extends base_1.AbstractComponent {
81
81
  if ((0, util_1.isVisible)(itemAttr.shape) && itemGroup.createOrUpdateChild(`${itemGroupName}-shape`, Object.assign({
82
82
  visible: !0,
83
83
  x: itemAttr.shape.size / 2,
84
- y: itemAttr.shape.size / 2 + ((null !== (_a = itemAttr.key.lineHeight) && void 0 !== _a ? _a : itemAttr.key.fontSize) - itemAttr.shape.size) / 2
84
+ y: itemAttr.shape.size / 2 + ((null !== (_a = (0, vrender_core_1.calculateLineHeight)(itemAttr.key.lineHeight, itemAttr.key.fontSize)) && void 0 !== _a ? _a : itemAttr.key.fontSize) - itemAttr.shape.size) / 2
85
85
  }, itemAttr.shape), "symbol"), hasContentShape && (x += itemAttr.shape.size + itemAttr.shape.spacing),
86
86
  (0, util_1.isVisible)(itemAttr.key)) {
87
87
  let element;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tooltip/tooltip.ts"],"names":[],"mappings":"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","file":"tooltip.js","sourcesContent":["/**\n * @description 标题组件\n */\nimport type { IGroup, IText, IRichText, IRect, ISymbol, IRichTextCharacter } from '@visactor/vrender-core';\nimport { builtinSymbolsMap } from '@visactor/vrender-core';\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 { getRichTextAttribute, 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 | IRichText;\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 if (titleAttr.value.type === 'rich') {\n this._tooltipTitle = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: isVisible(titleAttr) && isVisible(titleAttr.value),\n width: titleAttr.value.width,\n height: titleAttr.value.height,\n wordBreak: titleAttr.value.wordBreak as any,\n textAlign: titleAttr.value.textAlign as any,\n textBaseline: titleAttr.value.textBaseline as any,\n singleLine: false,\n textConfig: titleAttr.value.text as IRichTextCharacter[],\n ...titleAttr.value\n },\n 'richtext'\n ) as IRichText;\n } else if (titleAttr.value.type === 'html') {\n this._tooltipTitle = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n html: {\n dom: titleAttr.value.text as string,\n container: '',\n width: 30,\n height: 30,\n style: {},\n ...titleAttr.value\n },\n visible: isVisible(titleAttr) && isVisible(titleAttr.value),\n width: titleAttr.value.width,\n height: titleAttr.value.height,\n wordBreak: titleAttr.value.wordBreak as any,\n textAlign: titleAttr.value.textAlign as any,\n textBaseline: titleAttr.value.textBaseline as any,\n singleLine: false,\n textConfig: [],\n ...titleAttr.value\n },\n 'richtext'\n ) as IRichText;\n } else if (titleAttr.value.multiLine) {\n this._tooltipTitle = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: isVisible(titleAttr) && isVisible(titleAttr.value),\n ...getRichTextAttribute(titleAttr.value)\n },\n 'richtext'\n ) as IRichText;\n } else {\n this._tooltipTitle = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n text: '',\n visible: isVisible(titleAttr) && isVisible(titleAttr.value),\n ...titleAttr.value\n },\n 'text'\n ) as IText;\n }\n\n // 调整标题的位置\n const titlePaddingLeft = isVisible(titleAttr.shape) ? titleAttr.shape.size + titleAttr.shape.spacing : 0;\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:\n itemAttr.shape.size / 2 +\n ((itemAttr.key.lineHeight ?? itemAttr.key.fontSize) - itemAttr.shape.size) / 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 let element: IRichText | IText;\n if (itemAttr.key.multiLine) {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_KEY_NAME_SUFFIX}`,\n {\n visible: true,\n ...getRichTextAttribute(itemAttr.key),\n textBaseline: 'top'\n },\n 'richtext'\n ) as IRichText;\n } else {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_KEY_NAME_SUFFIX}`,\n {\n visible: true,\n ...itemAttr.key,\n textBaseline: 'top'\n },\n 'text'\n ) as IText;\n }\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', 0);\n x += keyWidth + itemAttr.key.spacing;\n }\n\n if (isVisible(itemAttr.value)) {\n let element: IRichText | IText;\n if (itemAttr.value.multiLine) {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: true,\n ...getRichTextAttribute(itemAttr.value),\n textBaseline: 'top'\n },\n 'richtext'\n ) as IRichText;\n } else {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: true,\n ...itemAttr.value,\n textBaseline: 'top'\n },\n 'text'\n ) as IText;\n }\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', 0);\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"]}
1
+ {"version":3,"sources":["../src/tooltip/tooltip.ts"],"names":[],"mappings":"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","file":"tooltip.js","sourcesContent":["/**\n * @description 标题组件\n */\nimport type { IGroup, IText, IRichText, IRect, ISymbol, IRichTextCharacter } from '@visactor/vrender-core';\nimport { builtinSymbolsMap, calculateLineHeight } from '@visactor/vrender-core';\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 { getRichTextAttribute, 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 | IRichText;\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 if (titleAttr.value.type === 'rich') {\n this._tooltipTitle = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: isVisible(titleAttr) && isVisible(titleAttr.value),\n width: titleAttr.value.width,\n height: titleAttr.value.height,\n wordBreak: titleAttr.value.wordBreak as any,\n textAlign: titleAttr.value.textAlign as any,\n textBaseline: titleAttr.value.textBaseline as any,\n singleLine: false,\n textConfig: titleAttr.value.text as IRichTextCharacter[],\n ...titleAttr.value\n },\n 'richtext'\n ) as IRichText;\n } else if (titleAttr.value.type === 'html') {\n this._tooltipTitle = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n html: {\n dom: titleAttr.value.text as string,\n container: '',\n width: 30,\n height: 30,\n style: {},\n ...titleAttr.value\n },\n visible: isVisible(titleAttr) && isVisible(titleAttr.value),\n width: titleAttr.value.width,\n height: titleAttr.value.height,\n wordBreak: titleAttr.value.wordBreak as any,\n textAlign: titleAttr.value.textAlign as any,\n textBaseline: titleAttr.value.textBaseline as any,\n singleLine: false,\n textConfig: [],\n ...titleAttr.value\n },\n 'richtext'\n ) as IRichText;\n } else if (titleAttr.value.multiLine) {\n this._tooltipTitle = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: isVisible(titleAttr) && isVisible(titleAttr.value),\n ...getRichTextAttribute(titleAttr.value)\n },\n 'richtext'\n ) as IRichText;\n } else {\n this._tooltipTitle = this._tooltipTitleContainer.createOrUpdateChild(\n `${TOOLTIP_TITLE_NAME}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n text: '',\n visible: isVisible(titleAttr) && isVisible(titleAttr.value),\n ...titleAttr.value\n },\n 'text'\n ) as IText;\n }\n\n // 调整标题的位置\n const titlePaddingLeft = isVisible(titleAttr.shape) ? titleAttr.shape.size + titleAttr.shape.spacing : 0;\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:\n itemAttr.shape.size / 2 +\n ((calculateLineHeight(itemAttr.key.lineHeight, itemAttr.key.fontSize) ?? itemAttr.key.fontSize) -\n itemAttr.shape.size) /\n 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 let element: IRichText | IText;\n if (itemAttr.key.multiLine) {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_KEY_NAME_SUFFIX}`,\n {\n visible: true,\n ...getRichTextAttribute(itemAttr.key),\n textBaseline: 'top'\n },\n 'richtext'\n ) as IRichText;\n } else {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_KEY_NAME_SUFFIX}`,\n {\n visible: true,\n ...itemAttr.key,\n textBaseline: 'top'\n },\n 'text'\n ) as IText;\n }\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', 0);\n x += keyWidth + itemAttr.key.spacing;\n }\n\n if (isVisible(itemAttr.value)) {\n let element: IRichText | IText;\n if (itemAttr.value.multiLine) {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: true,\n ...getRichTextAttribute(itemAttr.value),\n textBaseline: 'top'\n },\n 'richtext'\n ) as IRichText;\n } else {\n element = itemGroup.createOrUpdateChild(\n `${itemGroupName}-${TOOLTIP_VALUE_NAME_SUFFIX}`,\n {\n visible: true,\n ...itemAttr.value,\n textBaseline: 'top'\n },\n 'text'\n ) as IText;\n }\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', 0);\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"]}