@visactor/vrender-components 1.1.0-alpha.0 → 1.1.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/cjs/axis/base.js +17 -12
  2. package/cjs/axis/base.js.map +1 -1
  3. package/cjs/axis/circle.js +3 -3
  4. package/cjs/axis/circle.js.map +1 -1
  5. package/cjs/axis/grid/base.js +5 -5
  6. package/cjs/axis/grid/base.js.map +1 -1
  7. package/cjs/axis/line.js +6 -6
  8. package/cjs/axis/line.js.map +1 -1
  9. package/cjs/brush/brush.d.ts +1 -0
  10. package/cjs/brush/brush.js +24 -10
  11. package/cjs/brush/brush.js.map +1 -1
  12. package/cjs/brush/type.d.ts +3 -1
  13. package/cjs/brush/type.js.map +1 -1
  14. package/cjs/core/base.js +2 -2
  15. package/cjs/core/base.js.map +1 -1
  16. package/cjs/crosshair/rect.js +2 -1
  17. package/cjs/crosshair/sector.js +1 -2
  18. package/cjs/data-zoom/config.d.ts +10 -0
  19. package/cjs/data-zoom/config.js +10 -1
  20. package/cjs/data-zoom/config.js.map +1 -1
  21. package/cjs/data-zoom/interaction.js +1 -1
  22. package/cjs/data-zoom/interaction.js.map +1 -1
  23. package/cjs/data-zoom/renderer.js +44 -24
  24. package/cjs/data-zoom/renderer.js.map +1 -1
  25. package/cjs/empty-tip/empty-tip.js.map +1 -1
  26. package/cjs/index.d.ts +1 -1
  27. package/cjs/index.js +1 -1
  28. package/cjs/index.js.map +1 -1
  29. package/cjs/label/base.js +27 -7
  30. package/cjs/label/base.js.map +1 -1
  31. package/cjs/label/type.d.ts +1 -1
  32. package/cjs/label/type.js.map +1 -1
  33. package/cjs/legend/base.js +2 -2
  34. package/cjs/legend/base.js.map +1 -1
  35. package/cjs/legend/discrete/discrete.js +10 -10
  36. package/cjs/legend/discrete/discrete.js.map +1 -1
  37. package/cjs/legend/size/size.js +3 -3
  38. package/cjs/legend/size/size.js.map +1 -1
  39. package/cjs/marker/arc-area.js +2 -2
  40. package/cjs/marker/arc-area.js.map +1 -1
  41. package/cjs/marker/area.js +2 -2
  42. package/cjs/marker/area.js.map +1 -1
  43. package/cjs/marker/base.js +4 -4
  44. package/cjs/marker/base.js.map +1 -1
  45. package/cjs/marker/point.d.ts +1 -1
  46. package/cjs/marker/point.js +6 -6
  47. package/cjs/marker/point.js.map +1 -1
  48. package/cjs/pager/pager.js +5 -5
  49. package/cjs/pager/pager.js.map +1 -1
  50. package/cjs/player/base-player.d.ts +1 -0
  51. package/cjs/player/base-player.js +3 -0
  52. package/cjs/player/base-player.js.map +1 -1
  53. package/cjs/poptip/index.d.ts +1 -1
  54. package/cjs/poptip/index.js +2 -11
  55. package/cjs/poptip/index.js.map +1 -1
  56. package/cjs/poptip/module.d.ts +2 -0
  57. package/cjs/poptip/module.js +16 -6
  58. package/cjs/poptip/module.js.map +1 -1
  59. package/cjs/poptip/poptip-plugin.js.map +1 -1
  60. package/cjs/poptip/register.js +1 -1
  61. package/cjs/poptip/register.js.map +1 -1
  62. package/cjs/scrollbar/module.d.ts +2 -0
  63. package/cjs/scrollbar/module.js +12 -4
  64. package/cjs/scrollbar/module.js.map +1 -1
  65. package/cjs/scrollbar/scrollbar.d.ts +1 -0
  66. package/cjs/scrollbar/scrollbar.js +12 -8
  67. package/cjs/scrollbar/scrollbar.js.map +1 -1
  68. package/cjs/scrollbar/type.d.ts +1 -0
  69. package/cjs/scrollbar/type.js.map +1 -1
  70. package/cjs/segment/arc-segment.js +2 -2
  71. package/cjs/segment/arc-segment.js.map +1 -1
  72. package/cjs/segment/segment.js +5 -5
  73. package/cjs/segment/segment.js.map +1 -1
  74. package/cjs/slider/slider.d.ts +2 -0
  75. package/cjs/slider/slider.js +32 -19
  76. package/cjs/slider/slider.js.map +1 -1
  77. package/cjs/slider/type.d.ts +14 -3
  78. package/cjs/slider/type.js.map +1 -1
  79. package/cjs/table-series-number/event-manager.js.map +1 -1
  80. package/cjs/util/graphic-creator.d.ts +14 -0
  81. package/cjs/util/graphic-creator.js +22 -0
  82. package/cjs/util/graphic-creator.js.map +1 -0
  83. package/cjs/util/text.js +3 -3
  84. package/cjs/util/text.js.map +1 -1
  85. package/dist/index.es.js +10689 -10221
  86. package/es/axis/base.js +11 -4
  87. package/es/axis/base.js.map +1 -1
  88. package/es/axis/circle.js +1 -1
  89. package/es/axis/circle.js.map +1 -1
  90. package/es/axis/grid/base.js +1 -1
  91. package/es/axis/grid/base.js.map +1 -1
  92. package/es/axis/line.js +1 -1
  93. package/es/axis/line.js.map +1 -1
  94. package/es/brush/brush.d.ts +1 -0
  95. package/es/brush/brush.js +23 -9
  96. package/es/brush/brush.js.map +1 -1
  97. package/es/brush/type.d.ts +3 -1
  98. package/es/brush/type.js.map +1 -1
  99. package/es/core/base.js +2 -2
  100. package/es/core/base.js.map +1 -1
  101. package/es/crosshair/rect.js +2 -1
  102. package/es/crosshair/sector.js +1 -2
  103. package/es/data-zoom/config.d.ts +10 -0
  104. package/es/data-zoom/config.js +11 -0
  105. package/es/data-zoom/config.js.map +1 -1
  106. package/es/data-zoom/interaction.js +1 -1
  107. package/es/data-zoom/interaction.js.map +1 -1
  108. package/es/data-zoom/renderer.js +45 -25
  109. package/es/data-zoom/renderer.js.map +1 -1
  110. package/es/empty-tip/empty-tip.js.map +1 -1
  111. package/es/index.d.ts +1 -1
  112. package/es/index.js +1 -1
  113. package/es/index.js.map +1 -1
  114. package/es/label/base.js +28 -6
  115. package/es/label/base.js.map +1 -1
  116. package/es/label/type.d.ts +1 -1
  117. package/es/label/type.js.map +1 -1
  118. package/es/legend/base.js +1 -1
  119. package/es/legend/base.js.map +1 -1
  120. package/es/legend/discrete/discrete.js +1 -1
  121. package/es/legend/discrete/discrete.js.map +1 -1
  122. package/es/legend/size/size.js +1 -1
  123. package/es/legend/size/size.js.map +1 -1
  124. package/es/marker/arc-area.js +1 -1
  125. package/es/marker/arc-area.js.map +1 -1
  126. package/es/marker/area.js +1 -1
  127. package/es/marker/area.js.map +1 -1
  128. package/es/marker/base.js +1 -1
  129. package/es/marker/base.js.map +1 -1
  130. package/es/marker/point.d.ts +1 -1
  131. package/es/marker/point.js +1 -1
  132. package/es/marker/point.js.map +1 -1
  133. package/es/pager/pager.js +1 -1
  134. package/es/pager/pager.js.map +1 -1
  135. package/es/player/base-player.d.ts +1 -0
  136. package/es/player/base-player.js +3 -0
  137. package/es/player/base-player.js.map +1 -1
  138. package/es/poptip/index.d.ts +1 -1
  139. package/es/poptip/index.js +1 -1
  140. package/es/poptip/index.js.map +1 -1
  141. package/es/poptip/module.d.ts +2 -0
  142. package/es/poptip/module.js +14 -4
  143. package/es/poptip/module.js.map +1 -1
  144. package/es/poptip/poptip-plugin.js.map +1 -1
  145. package/es/poptip/register.js +0 -2
  146. package/es/poptip/register.js.map +1 -1
  147. package/es/scrollbar/module.d.ts +2 -0
  148. package/es/scrollbar/module.js +11 -3
  149. package/es/scrollbar/module.js.map +1 -1
  150. package/es/scrollbar/scrollbar.d.ts +1 -0
  151. package/es/scrollbar/scrollbar.js +9 -8
  152. package/es/scrollbar/scrollbar.js.map +1 -1
  153. package/es/scrollbar/type.d.ts +1 -0
  154. package/es/scrollbar/type.js.map +1 -1
  155. package/es/segment/arc-segment.js +1 -1
  156. package/es/segment/arc-segment.js.map +1 -1
  157. package/es/segment/segment.js +1 -1
  158. package/es/segment/segment.js.map +1 -1
  159. package/es/slider/slider.d.ts +2 -0
  160. package/es/slider/slider.js +24 -9
  161. package/es/slider/slider.js.map +1 -1
  162. package/es/slider/type.d.ts +14 -3
  163. package/es/slider/type.js.map +1 -1
  164. package/es/table-series-number/event-manager.js.map +1 -1
  165. package/es/util/graphic-creator.d.ts +14 -0
  166. package/es/util/graphic-creator.js +18 -0
  167. package/es/util/graphic-creator.js.map +1 -0
  168. package/es/util/text.js +3 -1
  169. package/es/util/text.js.map +1 -1
  170. package/package.json +11 -10
package/cjs/axis/line.js CHANGED
@@ -14,7 +14,7 @@ Object.defineProperty(exports, "__esModule", {
14
14
  value: !0
15
15
  }), exports.LineAxis = void 0;
16
16
 
17
- const vutils_1 = require("@visactor/vutils"), vrender_core_1 = require("@visactor/vrender-core"), segment_1 = require("../segment"), matrix_1 = require("../util/matrix"), tag_1 = require("../tag"), base_1 = require("./base"), config_1 = require("./config"), constant_1 = require("./constant"), util_1 = require("../util"), auto_hide_1 = require("./overlap/auto-hide"), auto_rotate_1 = require("./overlap/auto-rotate"), auto_limit_1 = require("./overlap/auto-limit"), auto_wrap_1 = require("./overlap/auto-wrap"), align_1 = require("../util/align"), line_1 = require("./mixin/line"), register_1 = require("./register"), util_2 = require("./util");
17
+ const vutils_1 = require("@visactor/vutils"), graphic_creator_1 = require("../util/graphic-creator"), segment_1 = require("../segment"), matrix_1 = require("../util/matrix"), tag_1 = require("../tag"), base_1 = require("./base"), config_1 = require("./config"), constant_1 = require("./constant"), util_1 = require("../util"), auto_hide_1 = require("./overlap/auto-hide"), auto_rotate_1 = require("./overlap/auto-rotate"), auto_limit_1 = require("./overlap/auto-limit"), auto_wrap_1 = require("./overlap/auto-wrap"), align_1 = require("../util/align"), line_1 = require("./mixin/line"), register_1 = require("./register"), util_2 = require("./util");
18
18
 
19
19
  (0, register_1.loadLineAxisComponent)();
20
20
 
@@ -49,17 +49,17 @@ class LineAxis extends base_1.AxisBase {
49
49
  super._renderInner(container), this._breaks && this._breaks.length && this._breaks.forEach(((b, index) => {
50
50
  const {startPoint: startPoint, endPoint: endPoint, breakSymbol: breakSymbol, rawRange: rawRange} = b;
51
51
  if (!1 !== (null == breakSymbol ? void 0 : breakSymbol.visible)) {
52
- const axisBreakGroup = vrender_core_1.graphicCreator.group({
52
+ const axisBreakGroup = graphic_creator_1.graphicCreator.group({
53
53
  zIndex: constant_1.TopZIndex
54
54
  });
55
55
  axisBreakGroup.name = constant_1.AXIS_ELEMENT_NAME.axisBreak, axisBreakGroup.id = this._getNodeId(`${constant_1.AXIS_ELEMENT_NAME.axisBreak}-${index}`),
56
56
  axisBreakGroup.data = rawRange;
57
- const symbolStyle = (0, util_2.getAxisBreakSymbolAttrs)(breakSymbol), shape1 = vrender_core_1.graphicCreator.symbol(Object.assign({
57
+ const symbolStyle = (0, util_2.getAxisBreakSymbolAttrs)(breakSymbol), shape1 = graphic_creator_1.graphicCreator.symbol(Object.assign({
58
58
  x: startPoint.x,
59
59
  y: startPoint.y
60
60
  }, symbolStyle));
61
61
  shape1.name = constant_1.AXIS_ELEMENT_NAME.axisBreakSymbol;
62
- const shape2 = vrender_core_1.graphicCreator.symbol(Object.assign({
62
+ const shape2 = graphic_creator_1.graphicCreator.symbol(Object.assign({
63
63
  x: endPoint.x,
64
64
  y: endPoint.y
65
65
  }, symbolStyle));
@@ -69,7 +69,7 @@ class LineAxis extends base_1.AxisBase {
69
69
  }));
70
70
  const {panel: panel} = this.attribute;
71
71
  if (panel && panel.visible) {
72
- const axisContainer = this.axisContainer, axisContainerBounds = axisContainer.AABBBounds, bgRect = vrender_core_1.graphicCreator.rect(Object.assign({
72
+ const axisContainer = this.axisContainer, axisContainerBounds = axisContainer.AABBBounds, bgRect = graphic_creator_1.graphicCreator.rect(Object.assign({
73
73
  x: axisContainerBounds.x1,
74
74
  y: axisContainerBounds.y1,
75
75
  width: axisContainerBounds.width(),
@@ -324,7 +324,7 @@ class LineAxis extends base_1.AxisBase {
324
324
  y = axisLabelContainerBounds.y1) : "top" === orient ? (x = axisLabelContainerBounds.x1,
325
325
  y = axisLabelContainerBounds.y2 - axisLabelContainerSize) : "bottom" === orient && (x = axisLabelContainerBounds.x1,
326
326
  y = axisLabelContainerBounds.y1);
327
- const bgRect = vrender_core_1.graphicCreator.rect({
327
+ const bgRect = graphic_creator_1.graphicCreator.rect({
328
328
  x: x,
329
329
  y: y,
330
330
  width: isHorizontal ? axisLabelContainerBounds.width() : axisLabelContainerSize,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/axis/line.ts"],"names":[],"mappings":"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","file":"line.js","sourcesContent":["/**\n * @description 直线型坐标轴\n */\n// eslint-disable-next-line no-duplicate-imports\nimport {\n get,\n isNil,\n merge,\n isNumberClose,\n isEmpty,\n isFunction,\n isValidNumber,\n isValid,\n normalizePadding,\n mixin,\n last as peek\n} from '@visactor/vutils';\nimport { graphicCreator } from '@visactor/vrender-core';\n// eslint-disable-next-line no-duplicate-imports\nimport type {\n TextAlignType,\n IGroup,\n INode,\n IText,\n TextBaselineType,\n ITextGraphicAttribute\n} from '@visactor/vrender-core';\nimport type { SegmentAttributes } from '../segment';\n// eslint-disable-next-line no-duplicate-imports\nimport { Segment } from '../segment';\nimport { angleTo } from '../util/matrix';\nimport { Tag, type TagAttributes } from '../tag';\nimport type {\n LineAttributes,\n LineAxisAttributes,\n TitleAttributes,\n AxisItem,\n TransformedAxisBreak,\n LabelHoverOnAxisAttributes\n} from './type';\nimport { AxisBase } from './base';\nimport { DEFAULT_AXIS_THEME } from './config';\nimport { AXIS_ELEMENT_NAME, DEFAULT_STATES, TopZIndex } from './constant';\nimport { measureTextSize } from '../util';\nimport { autoHide as autoHideFunc } from './overlap/auto-hide';\nimport { autoRotate as autoRotateFunc, getXAxisLabelAlign, getYAxisLabelAlign } from './overlap/auto-rotate';\nimport { autoLimit as autoLimitFunc } from './overlap/auto-limit';\nimport { autoWrap as autoWrapFunc } from './overlap/auto-wrap';\n\nimport { alignAxisLabels } from '../util/align';\nimport { LineAxisMixin } from './mixin/line';\nimport type { ComponentOptions } from '../interface';\nimport { loadLineAxisComponent } from './register';\nimport { getAxisBreakSymbolAttrs } from './util';\n\nloadLineAxisComponent();\nexport interface LineAxis\n extends Pick<LineAxisMixin, 'isInValidValue' | 'getTickCoord' | 'getVerticalVector' | 'getRelativeVector'>,\n AxisBase<LineAxisAttributes> {}\n\nexport class LineAxis extends AxisBase<LineAxisAttributes> {\n static defaultAttributes = DEFAULT_AXIS_THEME;\n private _breaks: TransformedAxisBreak[];\n private labelHoverOnAxisGroup: Tag | null = null;\n constructor(attributes: LineAxisAttributes, options?: ComponentOptions) {\n if (attributes.labelHoverOnAxis) {\n attributes.labelHoverOnAxis.textStyle = Object.assign(\n {},\n attributes.label.style,\n attributes.labelHoverOnAxis.textStyle\n );\n if (attributes.labelHoverOnAxis.space === undefined) {\n const { padding = 2 } = attributes.labelHoverOnAxis;\n const parsedPadding = normalizePadding(padding as any);\n const toDiffPadding =\n attributes.orient === 'bottom'\n ? parsedPadding[0]\n : attributes.orient === 'left'\n ? parsedPadding[1]\n : attributes.orient === 'top'\n ? parsedPadding[2]\n : parsedPadding[3];\n const space = (attributes.label.space ?? LineAxis.defaultAttributes.label.space) - toDiffPadding;\n attributes.labelHoverOnAxis.space = space;\n }\n }\n super(options?.skipDefault ? attributes : merge({}, LineAxis.defaultAttributes, attributes), options);\n }\n\n protected _renderInner(container: IGroup) {\n this._breaks = null; // 置空,防止轴更新时缓存了旧值\n if (this.attribute.breaks && this.attribute.breaks.length) {\n const transformedBreaks = [];\n for (let index = 0; index < this.attribute.breaks.length; index++) {\n const aBreak = this.attribute.breaks[index];\n const { range, breakSymbol, rawRange } = aBreak;\n transformedBreaks.push({\n startPoint: this.getTickCoord(range[0]),\n endPoint: this.getTickCoord(range[1]),\n range,\n breakSymbol,\n rawRange\n });\n }\n this._breaks = transformedBreaks;\n }\n super._renderInner(container);\n\n // 渲染 break symbol\n if (this._breaks && this._breaks.length) {\n this._breaks.forEach((b, index) => {\n const { startPoint, endPoint, breakSymbol, rawRange } = b;\n\n if (breakSymbol?.visible !== false) {\n const axisBreakGroup = graphicCreator.group({\n zIndex: TopZIndex // 层级需要高于轴线\n });\n axisBreakGroup.name = AXIS_ELEMENT_NAME.axisBreak;\n axisBreakGroup.id = this._getNodeId(`${AXIS_ELEMENT_NAME.axisBreak}-${index}`);\n axisBreakGroup.data = rawRange;\n const symbolStyle = getAxisBreakSymbolAttrs(breakSymbol);\n const shape1 = graphicCreator.symbol({\n x: startPoint.x,\n y: startPoint.y,\n ...symbolStyle\n });\n shape1.name = AXIS_ELEMENT_NAME.axisBreakSymbol;\n const shape2 = graphicCreator.symbol({\n x: endPoint.x,\n y: endPoint.y,\n ...symbolStyle\n });\n shape2.name = AXIS_ELEMENT_NAME.axisBreakSymbol;\n\n axisBreakGroup.add(shape1);\n axisBreakGroup.add(shape2);\n\n container.add(axisBreakGroup);\n }\n });\n }\n\n const { panel } = this.attribute;\n\n // TODO: 目前是通过包围盒绘制,在一些情况下会有那问题,比如圆弧轴、带了箭头的坐标轴等\n // 坐标轴主体 panel\n if (panel && panel.visible) {\n const axisContainer = this.axisContainer;\n const axisContainerBounds = axisContainer.AABBBounds;\n const bgRect = graphicCreator.rect({\n x: axisContainerBounds.x1,\n y: axisContainerBounds.y1,\n width: axisContainerBounds.width(),\n height: axisContainerBounds.height(),\n ...panel.style\n });\n bgRect.name = AXIS_ELEMENT_NAME.background;\n bgRect.id = this._getNodeId('background');\n\n bgRect.states = merge({}, DEFAULT_STATES, panel.state ?? {});\n axisContainer.insertBefore(bgRect, axisContainer.firstChild);\n }\n const { labelHoverOnAxis } = this.attribute;\n if (labelHoverOnAxis && labelHoverOnAxis.visible) {\n this.renderLabelHoverOnAxis();\n }\n }\n protected renderLabelHoverOnAxis() {\n const hoverOnLabelAttributes = this.getLabelHoverOnAxisAttribute();\n const hoverOnLabel = new Tag({\n ...hoverOnLabelAttributes\n });\n hoverOnLabel.name = AXIS_ELEMENT_NAME.title;\n hoverOnLabel.id = this._getNodeId('hover-on-label');\n this.labelHoverOnAxisGroup = hoverOnLabel;\n // hoverOnLabel.setAttributes({ globalZIndex: 1 });\n this.axisContainer.add(hoverOnLabel as unknown as INode);\n }\n\n protected renderLine(container: IGroup): void {\n const { start, end, line } = this.attribute as LineAxisAttributes;\n const { startSymbol, endSymbol, style, state, ...restLineAttrs } = line as LineAttributes;\n\n const lineAttrs = {\n startSymbol,\n endSymbol,\n lineStyle: style,\n ...restLineAttrs\n } as SegmentAttributes;\n\n if (this._breaks && this._breaks.length) {\n // 配置了轴截断\n const linePoints = [];\n let lastStartPoint = start;\n this._breaks.forEach(b => {\n const { startPoint, endPoint } = b;\n linePoints.push([lastStartPoint, startPoint]);\n lastStartPoint = endPoint;\n });\n linePoints.push([lastStartPoint, end]);\n lineAttrs.points = linePoints;\n lineAttrs.multiSegment = true;\n } else {\n lineAttrs.points = [start, end];\n }\n\n if (!isEmpty(state)) {\n lineAttrs.state = {\n line: merge({}, DEFAULT_STATES, state),\n symbol: merge({}, DEFAULT_STATES, state)\n };\n }\n\n const axisLineGroup = new Segment(lineAttrs);\n axisLineGroup.name = AXIS_ELEMENT_NAME.line;\n axisLineGroup.id = this._getNodeId('line');\n container.add(axisLineGroup as unknown as INode);\n }\n\n protected getTextAlign(vector: number[]): TextAlignType {\n let align: TextAlignType = 'center';\n\n if (isNumberClose(vector[0], 0)) {\n if (isNumberClose(vector[1], 0)) {\n if (Object.is(vector[1], -0)) {\n align = 'start';\n } else if (Object.is(vector[0], -0)) {\n align = 'end';\n }\n } else {\n align = 'center';\n }\n } else if (vector[0] > 0) {\n align = 'start';\n } else if (vector[0] < 0) {\n align = 'end';\n }\n return align;\n }\n\n // TODO: 太 hack 了,需要静心优化\n protected getTitleAttribute() {\n const {\n position = 'middle',\n space = 4,\n textStyle = {},\n autoRotate = true,\n shape,\n background,\n state = {},\n maxWidth,\n ...restAttrs\n } = this.attribute.title as TitleAttributes;\n let percent = 0.5;\n if (position === 'start') {\n percent = 0;\n } else if (position === 'end') {\n percent = 1;\n }\n const { verticalFactor = 1 } = this.attribute;\n const factor = -1 * verticalFactor;\n const point = this.getTickCoord(percent);\n const axisVector = this.getRelativeVector();\n // HACK;\n let labelLength = 0;\n if (this.attribute.label?.visible && this.attribute.label.inside === false) {\n const space = +get(this.attribute, 'label.space', 4);\n labelLength += space;\n const layerCount = Object.keys(this.axisLabelLayerSize).length;\n if (axisVector[1] === 0) {\n const labelBoundsHeight = this.axisLabelsContainer ? this.axisLabelsContainer.AABBBounds.height() : 0;\n if (isFinite(labelBoundsHeight)) {\n labelLength += labelBoundsHeight + (layerCount - 1) * space;\n } else {\n labelLength = 0;\n }\n } else {\n if (axisVector[0] === 0) {\n if (\n this.axisLabelsContainer &&\n this.axisLabelsContainer.AABBBounds &&\n !this.axisLabelsContainer.AABBBounds.empty()\n ) {\n const baseX = this.axisLabelLayerSize[0].labelPos;\n const bounds = this.axisLabelsContainer.AABBBounds;\n\n labelLength +=\n (factor === 1\n ? bounds.x2 > baseX\n ? Math.min(bounds.x2 - baseX, bounds.width())\n : 0\n : bounds.x1 < baseX\n ? Math.min(baseX - bounds.x1, bounds.width())\n : 0) +\n (layerCount - 1) * space;\n } else {\n labelLength = 0;\n }\n } else {\n // 发生了旋转\n Object.keys(this.axisLabelLayerSize).forEach((layer, index) => {\n labelLength += this.axisLabelLayerSize[layer].width + (index > 0 ? space : 0);\n });\n }\n }\n }\n\n // 标题都默认朝外\n let tickLength = 0;\n if (this.attribute.tick?.visible && this.attribute.tick.inside === false) {\n tickLength = this.attribute.tick.length || 4;\n }\n if (this.attribute.subTick?.visible && this.attribute.subTick.inside === false) {\n tickLength = Math.max(tickLength, this.attribute.subTick.length || 2);\n }\n\n const offset = tickLength + labelLength + space;\n const actualOffset = this.getActualOffset(offset);\n const titlePoint = this.getVerticalCoord(point, actualOffset, false); // 标题的点\n const vector = this.getVerticalVector(actualOffset, false, { x: 0, y: 0 });\n\n let { angle } = restAttrs; // 用户设置的是角度\n let textAlign;\n if (position === 'start') {\n textAlign = 'start';\n } else if (position === 'end') {\n textAlign = 'end';\n } else {\n textAlign = 'center';\n }\n let textBaseline;\n if (isNil(angle) && autoRotate) {\n const v1: [number, number] = [1, 0]; // 水平方向的向量\n const radian = angleTo(axisVector, v1, true);\n angle = radian;\n const { verticalFactor = 1 } = this.attribute;\n const factor = -1 * verticalFactor;\n if (factor === 1) {\n textBaseline = 'bottom';\n } else {\n textBaseline = 'top';\n }\n } else {\n // if (isValid(angle)) {\n // angle = degreeToRadian(angle);\n // }\n textAlign = this.getTextAlign(vector as number[]);\n textBaseline = this.getTextBaseline(vector as number[], false);\n }\n\n // 计算标题缩略\n let maxTagWidth = maxWidth;\n if (isNil(maxTagWidth)) {\n const { verticalLimitSize, verticalMinSize, orient } = this.attribute;\n const limitSize = Math.min(verticalLimitSize || Infinity, verticalMinSize || Infinity);\n if (isValidNumber(limitSize)) {\n const isX = orient === 'bottom' || orient === 'top';\n if (isX) {\n if (angle !== Math.PI / 2) {\n const cosValue = Math.abs(Math.cos(angle ?? 0));\n maxTagWidth = cosValue < 1e-6 ? Infinity : this.attribute.end.x / cosValue;\n } else {\n maxTagWidth = limitSize - actualOffset;\n }\n } else {\n if (angle && angle !== 0) {\n const sinValue = Math.abs(Math.sin(angle));\n maxTagWidth = sinValue < 1e-6 ? Infinity : this.attribute.end.y / sinValue;\n } else {\n maxTagWidth = limitSize - actualOffset;\n }\n }\n }\n }\n\n const attrs: TagAttributes = {\n ...titlePoint,\n ...restAttrs,\n maxWidth: maxTagWidth,\n textStyle: {\n // @ts-ignore\n textAlign,\n // @ts-ignore\n textBaseline,\n ...textStyle\n },\n state: {\n text: merge({}, DEFAULT_STATES, state.text),\n shape: merge({}, DEFAULT_STATES, state.shape),\n panel: merge({}, DEFAULT_STATES, state.background)\n }\n };\n attrs.angle = angle;\n\n if (shape && shape.visible) {\n attrs.shape = {\n visible: true,\n ...shape.style\n };\n if (shape.space) {\n attrs.space = shape.space;\n }\n }\n\n if (background && background.visible) {\n attrs.panel = {\n visible: true,\n ...background.style\n };\n }\n\n return attrs;\n }\n\n protected getLabelHoverOnAxisAttribute() {\n const { orient } = this.attribute;\n const {\n position = 0,\n space = 4,\n autoRotate = true,\n textStyle = {},\n background = {},\n formatMethod,\n text: textContent = '' as string,\n maxWidth,\n ...restAttrs\n } = this.attribute.labelHoverOnAxis as LabelHoverOnAxisAttributes;\n const point = this.getTickCoord(0);\n /** 指定的位置position与轴的方位有关系 */\n if (orient === 'bottom' || orient === 'top') {\n point.x = position;\n } else {\n point.y = position;\n }\n\n // HACK;\n\n // 计算悬浮标签的偏移量(距离轴线的距离)\n let tickLength = 0;\n if (this.attribute.tick?.visible && this.attribute.tick.inside === false) {\n tickLength = this.attribute.tick.length || 4;\n }\n if (this.attribute.subTick?.visible && this.attribute.subTick.inside === false) {\n tickLength = Math.max(tickLength, this.attribute.subTick.length || 2);\n }\n const labelLength = 0;\n const offset = tickLength + labelLength + space;\n const labelPoint = this.getVerticalCoord(point, offset, false);\n const vector = this.getVerticalVector(offset, false, { x: 0, y: 0 });\n\n let { angle } = restAttrs; // 用户设置的是角度\n let textAlign = 'center';\n\n let textBaseline;\n if (isNil(angle) && autoRotate) {\n const axisVector = this.getRelativeVector();\n const v1: [number, number] = [1, 0]; // 水平方向的向量\n const radian = angleTo(axisVector, v1, true);\n angle = radian;\n const { verticalFactor = 1 } = this.attribute;\n const factor = -1 * verticalFactor;\n if (factor === 1) {\n textBaseline = 'bottom';\n } else {\n textBaseline = 'top';\n }\n } else {\n const { textAlign: textAlign2, textBaseline: textBaseline2 } = this.getLabelAlign(\n vector,\n false,\n (textStyle as ITextGraphicAttribute).angle\n );\n textAlign = textAlign2;\n textBaseline = textBaseline2;\n // textBaseline = this.getTextBaseline(vector as number[], false);\n }\n\n // 计算悬浮标签的缩略\n const maxTagWidth = maxWidth; // maxWidth;\n // if (isNil(maxTagWidth)) {\n // const { verticalLimitSize, verticalMinSize, orient } = this.attribute;\n // const limitSize = Math.min(verticalLimitSize || Infinity, verticalMinSize || Infinity);\n // if (isValidNumber(limitSize)) {\n // const isX = orient === 'bottom' || orient === 'top';\n // if (isX) {\n // if (angle !== Math.PI / 2) {\n // const cosValue = Math.abs(Math.cos(angle ?? 0));\n // maxTagWidth = cosValue < 1e-6 ? Infinity : this.attribute.end.x / cosValue;\n // } else {\n // maxTagWidth = limitSize - offset;\n // }\n // } else {\n // if (angle && angle !== 0) {\n // const sinValue = Math.abs(Math.sin(angle));\n // maxTagWidth = sinValue < 1e-6 ? Infinity : this.attribute.end.y / sinValue;\n // } else {\n // maxTagWidth = limitSize - offset;\n // }\n // }\n // }\n // }\n const text = formatMethod ? formatMethod(textContent as string) : (textContent as string);\n const attrs: TagAttributes = {\n ...labelPoint,\n ...restAttrs,\n maxWidth: maxTagWidth,\n textStyle: {\n // @ts-ignore\n textAlign,\n // @ts-ignore\n textBaseline,\n\n ...textStyle\n },\n text\n };\n attrs.angle = angle;\n\n if (background && background.visible) {\n attrs.panel = {\n visible: true,\n ...(restAttrs as any).panel,\n ...background.style\n };\n }\n\n return attrs;\n }\n\n protected getTextBaseline(vector: number[], inside?: boolean): TextBaselineType {\n let base: TextBaselineType = 'middle';\n const { verticalFactor = 1 } = this.attribute;\n const factor = (inside ? 1 : -1) * verticalFactor;\n if (isNumberClose(vector[1], 0)) {\n if (isNumberClose(vector[0], 0) && !Object.is(vector[0], -0) && !Object.is(vector[1], -0)) {\n base = factor === 1 ? 'bottom' : 'top';\n } else {\n base = 'middle';\n }\n } else if (vector[1] > 0) {\n base = 'top';\n } else if (vector[1] < 0) {\n base = 'bottom';\n }\n return base;\n }\n\n protected getLabelAlign(\n vector: [number, number],\n inside?: boolean,\n angle?: number\n ): { textAlign: TextAlignType; textBaseline: TextBaselineType } {\n const orient = this.attribute.orient;\n const isCartesian = ['top', 'bottom', 'right', 'left'].includes(orient);\n // 目前的向量方法暂无法返回正确的笛卡尔坐标轴下文本旋转后的问题,所以通过这种方法判断,保证旋转后 textAlign 和 textBaseline 也正确\n if (isCartesian || (vector[0] === 0 && vector[1] === 0)) {\n if (orient === 'top' || orient === 'bottom') {\n return getXAxisLabelAlign(inside ? (orient === 'bottom' ? 'top' : 'bottom') : orient, angle);\n }\n if (orient === 'left' || orient === 'right') {\n return getYAxisLabelAlign(inside ? (orient === 'left' ? 'right' : 'left') : orient, angle);\n }\n }\n\n return {\n textAlign: this.getTextAlign(vector),\n textBaseline: this.getTextBaseline(vector, inside)\n };\n }\n\n protected beforeLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void {\n const { flush = false } = this.attribute.label || {};\n if (flush && labelShapes.length) {\n // 首尾标签向内偏移\n const { orient, start: axisStart, end: axisEnd } = this.attribute;\n const isX = orient === 'bottom' || orient === 'top';\n const first = labelShapes[0];\n const last = peek(labelShapes);\n const isInverse = isX ? first.attribute.x > last.attribute.x : first.attribute.y < last.attribute.y;\n if (isX) {\n const leftMostLabel = isInverse ? last : first;\n const rightMostLabel = isInverse ? first : last;\n const left = axisStart.x;\n const right = axisEnd.x;\n const leftBound = leftMostLabel.AABBBounds.x1;\n const rightBound = rightMostLabel.AABBBounds.x2;\n\n if (leftBound < left) {\n const angle = leftMostLabel.attribute.angle;\n\n if (angle) {\n leftMostLabel.setAttributes({ dx: (leftMostLabel.attribute.dx ?? 0) + left - leftBound });\n } else {\n leftMostLabel.setAttributes({\n x: left,\n textAlign: 'left'\n });\n }\n }\n\n if (rightBound > right) {\n const angle = rightMostLabel.attribute.angle;\n\n if (angle) {\n rightMostLabel.setAttributes({ dx: (rightMostLabel.attribute.dx ?? 0) + right - rightBound });\n } else {\n rightMostLabel.setAttributes({\n x: right,\n textAlign: 'right'\n });\n }\n }\n } else {\n const bottomMostLabel = isInverse ? last : first;\n const topMostLabel = isInverse ? first : last;\n const bottomBound = bottomMostLabel.AABBBounds.y2;\n const topBound = topMostLabel.AABBBounds.y1;\n const top = axisStart.y;\n const bottom = axisEnd.y;\n\n if (topBound < top) {\n const angle = topMostLabel.attribute.angle;\n\n if (angle) {\n // has rotate\n topMostLabel.setAttributes({\n dy: (topMostLabel.attribute.dy ?? 0) + top - topBound\n });\n } else {\n topMostLabel.setAttributes({\n y: top,\n textBaseline: 'top'\n });\n }\n }\n\n if (bottomBound > bottom) {\n const angle = bottomMostLabel.attribute.angle;\n\n if (angle) {\n bottomMostLabel.setAttributes({\n dy: (bottomMostLabel.attribute.dy ?? 0) + bottom - bottomBound\n });\n } else {\n bottomMostLabel.setAttributes({\n y: bottom,\n textBaseline: 'bottom'\n });\n }\n }\n }\n }\n\n return;\n }\n protected handleLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void {\n if (isEmpty(labelShapes)) {\n return;\n }\n\n const { verticalLimitSize, label, orient } = this.attribute;\n const limitLength = this._getAxisLabelLimitLength(verticalLimitSize, layerCount);\n\n const {\n layoutFunc,\n autoRotate,\n autoRotateAngle,\n autoLimit,\n limitEllipsis,\n autoHide,\n autoHideMethod,\n autoHideSeparation,\n lastVisible,\n firstVisible,\n autoWrap,\n overflowLimitLength\n } = label;\n\n if (isFunction(layoutFunc)) {\n // 自定义布局\n layoutFunc(labelShapes, labelData, layer, this);\n } else {\n // order: autoRotate Or autoRotate -> autoLimit -> autoHide\n // priority: autoRotate > autoWrap\n if (autoRotate) {\n autoRotateFunc(labelShapes, {\n labelRotateAngle: autoRotateAngle,\n orient\n });\n } else if (autoWrap) {\n const isVertical = orient === 'left' || orient === 'right';\n const axisLength = isVertical\n ? Math.abs(this.attribute.start.y - this.attribute.end.y)\n : Math.abs(this.attribute.start.x - this.attribute.end.x);\n autoWrapFunc(labelShapes, { orient, limitLength, axisLength, ellipsis: limitEllipsis });\n }\n\n // autoWrap has computed width & height limit\n if (!autoWrap && autoLimit && isValidNumber(limitLength) && limitLength > 0) {\n const isVertical = orient === 'left' || orient === 'right';\n const axisLength = isVertical\n ? Math.abs(this.attribute.start.y - this.attribute.end.y)\n : Math.abs(this.attribute.start.x - this.attribute.end.x);\n\n const verticalLimitLength = isVertical\n ? axisLength / labelShapes.length\n : !autoHide && !autoRotate\n ? axisLength / labelShapes.length\n : Infinity;\n\n autoLimitFunc(labelShapes, {\n limitLength,\n verticalLimitLength,\n ellipsis: limitEllipsis,\n orient,\n axisLength,\n overflowLimitLength\n });\n }\n if (autoHide) {\n autoHideFunc(labelShapes, {\n orient,\n method: autoHideMethod,\n separation: autoHideSeparation,\n lastVisible,\n firstVisible\n });\n }\n }\n }\n\n protected afterLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ) {\n const { verticalLimitSize, orient } = this.attribute;\n\n // 处理 verticalMinSize,根据 verticalMinSize 调整 labelContainer 的大小\n const isHorizontal = orient === 'bottom' || orient === 'top';\n const axisLabelContainerBounds = labelContainer.AABBBounds;\n let axisLabelContainerSize = isHorizontal ? axisLabelContainerBounds.height() : axisLabelContainerBounds.width();\n const { verticalMinSize } = this.attribute;\n\n if (isValidNumber(verticalMinSize) && (!isValidNumber(verticalLimitSize) || verticalMinSize <= verticalLimitSize)) {\n const minSize = this._getAxisLabelLimitLength(verticalMinSize, layerCount);\n axisLabelContainerSize = Math.max(axisLabelContainerSize, minSize);\n\n let x;\n let y;\n if (orient === 'left') {\n x = axisLabelContainerBounds.x2 - axisLabelContainerSize;\n y = axisLabelContainerBounds.y1;\n } else if (orient === 'right') {\n x = axisLabelContainerBounds.x1;\n y = axisLabelContainerBounds.y1;\n } else if (orient === 'top') {\n x = axisLabelContainerBounds.x1;\n y = axisLabelContainerBounds.y2 - axisLabelContainerSize;\n } else if (orient === 'bottom') {\n x = axisLabelContainerBounds.x1;\n y = axisLabelContainerBounds.y1;\n }\n\n const bgRect = graphicCreator.rect({\n x,\n y,\n width: isHorizontal ? axisLabelContainerBounds.width() : axisLabelContainerSize,\n height: isHorizontal ? axisLabelContainerSize : axisLabelContainerBounds.height(),\n pickable: false\n });\n bgRect.name = AXIS_ELEMENT_NAME.axisLabelBackground;\n bgRect.id = this._getNodeId('axis-label-background');\n labelContainer.insertBefore(bgRect, labelContainer.firstChild);\n }\n\n // 处理 align,进行整体的对齐操作\n if (isValid(this.attribute.label.containerAlign)) {\n let start;\n if (orient === 'left') {\n start = axisLabelContainerBounds.x2 - axisLabelContainerSize;\n } else if (orient === 'right') {\n start = axisLabelContainerBounds.x1;\n } else if (orient === 'top') {\n start = axisLabelContainerBounds.y2 - axisLabelContainerSize;\n } else if (orient === 'bottom') {\n start = axisLabelContainerBounds.y1;\n }\n\n alignAxisLabels(labelShapes, start, axisLabelContainerSize, orient, this.attribute.label.containerAlign);\n }\n }\n\n private _getAxisLabelLimitLength(limitSize: number, layerCount: number): number {\n const { label, title, line, tick } = this.attribute;\n const labelSpace = label.space ?? 4;\n let limitLength = limitSize;\n let titleHeight = 0;\n let titleSpacing = 0;\n const axisLineWidth = line && line.visible ? line.style.lineWidth ?? 1 : 0;\n const tickLength = tick && tick.visible ? tick.length ?? 4 : 0;\n if (title && title.visible && typeof title.text === 'string') {\n titleHeight = measureTextSize(title.text, title.textStyle, this.stage?.getTheme()?.text).height;\n const padding = normalizePadding(title.padding);\n titleSpacing = title.space + padding[0] + padding[2];\n }\n if (limitLength) {\n limitLength = (limitLength - labelSpace - titleSpacing - titleHeight - axisLineWidth - tickLength) / layerCount;\n }\n return limitLength;\n }\n /** 显示交互中的悬浮标签 */\n showLabelHoverOnAxis(position: number, text: string, adjustPosition: boolean = true) {\n if (this.attribute.labelHoverOnAxis) {\n const preContainerBounds = this.axisContainer.AABBBounds;\n const preWidth = preContainerBounds.width();\n const preHeight = preContainerBounds.height();\n const preX1 = preContainerBounds.x1;\n const preY1 = preContainerBounds.y1;\n const preX2 = preContainerBounds.x2;\n const preY2 = preContainerBounds.y2;\n if (this.labelHoverOnAxisGroup) {\n const { formatMethod } = this.attribute.labelHoverOnAxis as LabelHoverOnAxisAttributes;\n const textStr = formatMethod ? formatMethod(text) : text;\n this.labelHoverOnAxisGroup.setAttribute('text', textStr);\n this.labelHoverOnAxisGroup.setAttribute('visible', true);\n this.labelHoverOnAxisGroup.setAttribute('visibleAll', true);\n if (this.attribute.orient === 'left' || this.attribute.orient === 'right') {\n this.labelHoverOnAxisGroup.setAttributes({\n y: position\n });\n } else {\n this.labelHoverOnAxisGroup.setAttributes({\n x: position\n });\n }\n } else {\n this.attribute.labelHoverOnAxis.visible = true;\n this.attribute.labelHoverOnAxis.position = position;\n this.attribute.labelHoverOnAxis.text = text;\n this.renderLabelHoverOnAxis();\n }\n if (adjustPosition) {\n //防止死循环\n const afterContainerBounds = this.axisContainer.AABBBounds;\n const afterWidth = afterContainerBounds.width();\n const afterHeight = afterContainerBounds.height();\n const diffWidth = afterWidth - preWidth;\n const diffHeight = afterHeight - preHeight;\n if (diffWidth > 0 && (this.attribute.orient === 'top' || this.attribute.orient === 'bottom')) {\n if (afterContainerBounds.x1 < preX1) {\n this.showLabelHoverOnAxis(position + diffWidth, text, false);\n } else if (afterContainerBounds.x2 > preX2) {\n this.showLabelHoverOnAxis(position - diffWidth, text, false);\n }\n }\n if (diffHeight > 0 && (this.attribute.orient === 'left' || this.attribute.orient === 'right')) {\n if (afterContainerBounds.y1 < preY1) {\n this.showLabelHoverOnAxis(position + diffHeight, text, false);\n } else if (afterContainerBounds.y2 > preY2) {\n this.showLabelHoverOnAxis(position - diffHeight, text, false);\n }\n }\n }\n }\n }\n /** 隐藏交互中的悬浮标签 */\n hideLabelHoverOnAxis() {\n if (this.attribute.labelHoverOnAxis && this.labelHoverOnAxisGroup) {\n this.labelHoverOnAxisGroup.setAttributes({\n visible: false,\n visibleAll: false\n });\n }\n }\n\n getActualOffset(offset: number): number {\n const orient = this.attribute.orient;\n const isVertical = orient === 'left' || orient === 'right';\n if (!isVertical) {\n return offset;\n }\n\n if (this.attribute.width) {\n return this.attribute.width;\n }\n if (this.attribute.maxWidth) {\n offset = Math.min(offset, this.attribute.maxWidth);\n }\n if (this.attribute.minWidth) {\n offset = Math.max(offset, this.attribute.minWidth);\n }\n return offset;\n }\n\n release(): void {\n super.release();\n this._breaks = null;\n }\n}\n\nmixin(LineAxis, LineAxisMixin);\n"]}
1
+ {"version":3,"sources":["../src/axis/line.ts"],"names":[],"mappings":"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","file":"line.js","sourcesContent":["/**\n * @description 直线型坐标轴\n */\n// eslint-disable-next-line no-duplicate-imports\nimport {\n get,\n isNil,\n merge,\n isNumberClose,\n isEmpty,\n isFunction,\n isValidNumber,\n isValid,\n normalizePadding,\n mixin,\n last as peek\n} from '@visactor/vutils';\nimport { graphicCreator } from '../util/graphic-creator';\n// eslint-disable-next-line no-duplicate-imports\nimport type {\n TextAlignType,\n IGroup,\n INode,\n IText,\n TextBaselineType,\n ITextGraphicAttribute\n} from '@visactor/vrender-core';\nimport type { SegmentAttributes } from '../segment';\n// eslint-disable-next-line no-duplicate-imports\nimport { Segment } from '../segment';\nimport { angleTo } from '../util/matrix';\nimport { Tag, type TagAttributes } from '../tag';\nimport type {\n LineAttributes,\n LineAxisAttributes,\n TitleAttributes,\n AxisItem,\n TransformedAxisBreak,\n LabelHoverOnAxisAttributes\n} from './type';\nimport { AxisBase } from './base';\nimport { DEFAULT_AXIS_THEME } from './config';\nimport { AXIS_ELEMENT_NAME, DEFAULT_STATES, TopZIndex } from './constant';\nimport { measureTextSize } from '../util';\nimport { autoHide as autoHideFunc } from './overlap/auto-hide';\nimport { autoRotate as autoRotateFunc, getXAxisLabelAlign, getYAxisLabelAlign } from './overlap/auto-rotate';\nimport { autoLimit as autoLimitFunc } from './overlap/auto-limit';\nimport { autoWrap as autoWrapFunc } from './overlap/auto-wrap';\n\nimport { alignAxisLabels } from '../util/align';\nimport { LineAxisMixin } from './mixin/line';\nimport type { ComponentOptions } from '../interface';\nimport { loadLineAxisComponent } from './register';\nimport { getAxisBreakSymbolAttrs } from './util';\n\nloadLineAxisComponent();\nexport interface LineAxis\n extends Pick<LineAxisMixin, 'isInValidValue' | 'getTickCoord' | 'getVerticalVector' | 'getRelativeVector'>,\n AxisBase<LineAxisAttributes> {}\n\nexport class LineAxis extends AxisBase<LineAxisAttributes> {\n static defaultAttributes = DEFAULT_AXIS_THEME;\n private _breaks: TransformedAxisBreak[];\n private labelHoverOnAxisGroup: Tag | null = null;\n constructor(attributes: LineAxisAttributes, options?: ComponentOptions) {\n if (attributes.labelHoverOnAxis) {\n attributes.labelHoverOnAxis.textStyle = Object.assign(\n {},\n attributes.label.style,\n attributes.labelHoverOnAxis.textStyle\n );\n if (attributes.labelHoverOnAxis.space === undefined) {\n const { padding = 2 } = attributes.labelHoverOnAxis;\n const parsedPadding = normalizePadding(padding as any);\n const toDiffPadding =\n attributes.orient === 'bottom'\n ? parsedPadding[0]\n : attributes.orient === 'left'\n ? parsedPadding[1]\n : attributes.orient === 'top'\n ? parsedPadding[2]\n : parsedPadding[3];\n const space = (attributes.label.space ?? LineAxis.defaultAttributes.label.space) - toDiffPadding;\n attributes.labelHoverOnAxis.space = space;\n }\n }\n super(options?.skipDefault ? attributes : merge({}, LineAxis.defaultAttributes, attributes), options);\n }\n\n protected _renderInner(container: IGroup) {\n this._breaks = null; // 置空,防止轴更新时缓存了旧值\n if (this.attribute.breaks && this.attribute.breaks.length) {\n const transformedBreaks = [];\n for (let index = 0; index < this.attribute.breaks.length; index++) {\n const aBreak = this.attribute.breaks[index];\n const { range, breakSymbol, rawRange } = aBreak;\n transformedBreaks.push({\n startPoint: this.getTickCoord(range[0]),\n endPoint: this.getTickCoord(range[1]),\n range,\n breakSymbol,\n rawRange\n });\n }\n this._breaks = transformedBreaks;\n }\n super._renderInner(container);\n\n // 渲染 break symbol\n if (this._breaks && this._breaks.length) {\n this._breaks.forEach((b, index) => {\n const { startPoint, endPoint, breakSymbol, rawRange } = b;\n\n if (breakSymbol?.visible !== false) {\n const axisBreakGroup = graphicCreator.group({\n zIndex: TopZIndex // 层级需要高于轴线\n });\n axisBreakGroup.name = AXIS_ELEMENT_NAME.axisBreak;\n axisBreakGroup.id = this._getNodeId(`${AXIS_ELEMENT_NAME.axisBreak}-${index}`);\n axisBreakGroup.data = rawRange;\n const symbolStyle = getAxisBreakSymbolAttrs(breakSymbol);\n const shape1 = graphicCreator.symbol({\n x: startPoint.x,\n y: startPoint.y,\n ...symbolStyle\n });\n shape1.name = AXIS_ELEMENT_NAME.axisBreakSymbol;\n const shape2 = graphicCreator.symbol({\n x: endPoint.x,\n y: endPoint.y,\n ...symbolStyle\n });\n shape2.name = AXIS_ELEMENT_NAME.axisBreakSymbol;\n\n axisBreakGroup.add(shape1);\n axisBreakGroup.add(shape2);\n\n container.add(axisBreakGroup);\n }\n });\n }\n\n const { panel } = this.attribute;\n\n // TODO: 目前是通过包围盒绘制,在一些情况下会有那问题,比如圆弧轴、带了箭头的坐标轴等\n // 坐标轴主体 panel\n if (panel && panel.visible) {\n const axisContainer = this.axisContainer;\n const axisContainerBounds = axisContainer.AABBBounds;\n const bgRect = graphicCreator.rect({\n x: axisContainerBounds.x1,\n y: axisContainerBounds.y1,\n width: axisContainerBounds.width(),\n height: axisContainerBounds.height(),\n ...panel.style\n });\n bgRect.name = AXIS_ELEMENT_NAME.background;\n bgRect.id = this._getNodeId('background');\n\n bgRect.states = merge({}, DEFAULT_STATES, panel.state ?? {});\n axisContainer.insertBefore(bgRect, axisContainer.firstChild);\n }\n const { labelHoverOnAxis } = this.attribute;\n if (labelHoverOnAxis && labelHoverOnAxis.visible) {\n this.renderLabelHoverOnAxis();\n }\n }\n protected renderLabelHoverOnAxis() {\n const hoverOnLabelAttributes = this.getLabelHoverOnAxisAttribute();\n const hoverOnLabel = new Tag({\n ...hoverOnLabelAttributes\n });\n hoverOnLabel.name = AXIS_ELEMENT_NAME.title;\n hoverOnLabel.id = this._getNodeId('hover-on-label');\n this.labelHoverOnAxisGroup = hoverOnLabel;\n // hoverOnLabel.setAttributes({ globalZIndex: 1 });\n this.axisContainer.add(hoverOnLabel as unknown as INode);\n }\n\n protected renderLine(container: IGroup): void {\n const { start, end, line } = this.attribute as LineAxisAttributes;\n const { startSymbol, endSymbol, style, state, ...restLineAttrs } = line as LineAttributes;\n\n const lineAttrs = {\n startSymbol,\n endSymbol,\n lineStyle: style,\n ...restLineAttrs\n } as SegmentAttributes;\n\n if (this._breaks && this._breaks.length) {\n // 配置了轴截断\n const linePoints = [];\n let lastStartPoint = start;\n this._breaks.forEach(b => {\n const { startPoint, endPoint } = b;\n linePoints.push([lastStartPoint, startPoint]);\n lastStartPoint = endPoint;\n });\n linePoints.push([lastStartPoint, end]);\n lineAttrs.points = linePoints;\n lineAttrs.multiSegment = true;\n } else {\n lineAttrs.points = [start, end];\n }\n\n if (!isEmpty(state)) {\n lineAttrs.state = {\n line: merge({}, DEFAULT_STATES, state),\n symbol: merge({}, DEFAULT_STATES, state)\n };\n }\n\n const axisLineGroup = new Segment(lineAttrs);\n axisLineGroup.name = AXIS_ELEMENT_NAME.line;\n axisLineGroup.id = this._getNodeId('line');\n container.add(axisLineGroup as unknown as INode);\n }\n\n protected getTextAlign(vector: number[]): TextAlignType {\n let align: TextAlignType = 'center';\n\n if (isNumberClose(vector[0], 0)) {\n if (isNumberClose(vector[1], 0)) {\n if (Object.is(vector[1], -0)) {\n align = 'start';\n } else if (Object.is(vector[0], -0)) {\n align = 'end';\n }\n } else {\n align = 'center';\n }\n } else if (vector[0] > 0) {\n align = 'start';\n } else if (vector[0] < 0) {\n align = 'end';\n }\n return align;\n }\n\n // TODO: 太 hack 了,需要静心优化\n protected getTitleAttribute() {\n const {\n position = 'middle',\n space = 4,\n textStyle = {},\n autoRotate = true,\n shape,\n background,\n state = {},\n maxWidth,\n ...restAttrs\n } = this.attribute.title as TitleAttributes;\n let percent = 0.5;\n if (position === 'start') {\n percent = 0;\n } else if (position === 'end') {\n percent = 1;\n }\n const { verticalFactor = 1 } = this.attribute;\n const factor = -1 * verticalFactor;\n const point = this.getTickCoord(percent);\n const axisVector = this.getRelativeVector();\n // HACK;\n let labelLength = 0;\n if (this.attribute.label?.visible && this.attribute.label.inside === false) {\n const space = +get(this.attribute, 'label.space', 4);\n labelLength += space;\n const layerCount = Object.keys(this.axisLabelLayerSize).length;\n if (axisVector[1] === 0) {\n const labelBoundsHeight = this.axisLabelsContainer ? this.axisLabelsContainer.AABBBounds.height() : 0;\n if (isFinite(labelBoundsHeight)) {\n labelLength += labelBoundsHeight + (layerCount - 1) * space;\n } else {\n labelLength = 0;\n }\n } else {\n if (axisVector[0] === 0) {\n if (\n this.axisLabelsContainer &&\n this.axisLabelsContainer.AABBBounds &&\n !this.axisLabelsContainer.AABBBounds.empty()\n ) {\n const baseX = this.axisLabelLayerSize[0].labelPos;\n const bounds = this.axisLabelsContainer.AABBBounds;\n\n labelLength +=\n (factor === 1\n ? bounds.x2 > baseX\n ? Math.min(bounds.x2 - baseX, bounds.width())\n : 0\n : bounds.x1 < baseX\n ? Math.min(baseX - bounds.x1, bounds.width())\n : 0) +\n (layerCount - 1) * space;\n } else {\n labelLength = 0;\n }\n } else {\n // 发生了旋转\n Object.keys(this.axisLabelLayerSize).forEach((layer, index) => {\n labelLength += this.axisLabelLayerSize[layer].width + (index > 0 ? space : 0);\n });\n }\n }\n }\n\n // 标题都默认朝外\n let tickLength = 0;\n if (this.attribute.tick?.visible && this.attribute.tick.inside === false) {\n tickLength = this.attribute.tick.length || 4;\n }\n if (this.attribute.subTick?.visible && this.attribute.subTick.inside === false) {\n tickLength = Math.max(tickLength, this.attribute.subTick.length || 2);\n }\n\n const offset = tickLength + labelLength + space;\n const actualOffset = this.getActualOffset(offset);\n const titlePoint = this.getVerticalCoord(point, actualOffset, false); // 标题的点\n const vector = this.getVerticalVector(actualOffset, false, { x: 0, y: 0 });\n\n let { angle } = restAttrs; // 用户设置的是角度\n let textAlign;\n if (position === 'start') {\n textAlign = 'start';\n } else if (position === 'end') {\n textAlign = 'end';\n } else {\n textAlign = 'center';\n }\n let textBaseline;\n if (isNil(angle) && autoRotate) {\n const v1: [number, number] = [1, 0]; // 水平方向的向量\n const radian = angleTo(axisVector, v1, true);\n angle = radian;\n const { verticalFactor = 1 } = this.attribute;\n const factor = -1 * verticalFactor;\n if (factor === 1) {\n textBaseline = 'bottom';\n } else {\n textBaseline = 'top';\n }\n } else {\n // if (isValid(angle)) {\n // angle = degreeToRadian(angle);\n // }\n textAlign = this.getTextAlign(vector as number[]);\n textBaseline = this.getTextBaseline(vector as number[], false);\n }\n\n // 计算标题缩略\n let maxTagWidth = maxWidth;\n if (isNil(maxTagWidth)) {\n const { verticalLimitSize, verticalMinSize, orient } = this.attribute;\n const limitSize = Math.min(verticalLimitSize || Infinity, verticalMinSize || Infinity);\n if (isValidNumber(limitSize)) {\n const isX = orient === 'bottom' || orient === 'top';\n if (isX) {\n if (angle !== Math.PI / 2) {\n const cosValue = Math.abs(Math.cos(angle ?? 0));\n maxTagWidth = cosValue < 1e-6 ? Infinity : this.attribute.end.x / cosValue;\n } else {\n maxTagWidth = limitSize - actualOffset;\n }\n } else {\n if (angle && angle !== 0) {\n const sinValue = Math.abs(Math.sin(angle));\n maxTagWidth = sinValue < 1e-6 ? Infinity : this.attribute.end.y / sinValue;\n } else {\n maxTagWidth = limitSize - actualOffset;\n }\n }\n }\n }\n\n const attrs: TagAttributes = {\n ...titlePoint,\n ...restAttrs,\n maxWidth: maxTagWidth,\n textStyle: {\n // @ts-ignore\n textAlign,\n // @ts-ignore\n textBaseline,\n ...textStyle\n },\n state: {\n text: merge({}, DEFAULT_STATES, state.text),\n shape: merge({}, DEFAULT_STATES, state.shape),\n panel: merge({}, DEFAULT_STATES, state.background)\n }\n };\n attrs.angle = angle;\n\n if (shape && shape.visible) {\n attrs.shape = {\n visible: true,\n ...shape.style\n };\n if (shape.space) {\n attrs.space = shape.space;\n }\n }\n\n if (background && background.visible) {\n attrs.panel = {\n visible: true,\n ...background.style\n };\n }\n\n return attrs;\n }\n\n protected getLabelHoverOnAxisAttribute() {\n const { orient } = this.attribute;\n const {\n position = 0,\n space = 4,\n autoRotate = true,\n textStyle = {},\n background = {},\n formatMethod,\n text: textContent = '' as string,\n maxWidth,\n ...restAttrs\n } = this.attribute.labelHoverOnAxis as LabelHoverOnAxisAttributes;\n const point = this.getTickCoord(0);\n /** 指定的位置position与轴的方位有关系 */\n if (orient === 'bottom' || orient === 'top') {\n point.x = position;\n } else {\n point.y = position;\n }\n\n // HACK;\n\n // 计算悬浮标签的偏移量(距离轴线的距离)\n let tickLength = 0;\n if (this.attribute.tick?.visible && this.attribute.tick.inside === false) {\n tickLength = this.attribute.tick.length || 4;\n }\n if (this.attribute.subTick?.visible && this.attribute.subTick.inside === false) {\n tickLength = Math.max(tickLength, this.attribute.subTick.length || 2);\n }\n const labelLength = 0;\n const offset = tickLength + labelLength + space;\n const labelPoint = this.getVerticalCoord(point, offset, false);\n const vector = this.getVerticalVector(offset, false, { x: 0, y: 0 });\n\n let { angle } = restAttrs; // 用户设置的是角度\n let textAlign = 'center';\n\n let textBaseline;\n if (isNil(angle) && autoRotate) {\n const axisVector = this.getRelativeVector();\n const v1: [number, number] = [1, 0]; // 水平方向的向量\n const radian = angleTo(axisVector, v1, true);\n angle = radian;\n const { verticalFactor = 1 } = this.attribute;\n const factor = -1 * verticalFactor;\n if (factor === 1) {\n textBaseline = 'bottom';\n } else {\n textBaseline = 'top';\n }\n } else {\n const { textAlign: textAlign2, textBaseline: textBaseline2 } = this.getLabelAlign(\n vector,\n false,\n (textStyle as ITextGraphicAttribute).angle\n );\n textAlign = textAlign2;\n textBaseline = textBaseline2;\n // textBaseline = this.getTextBaseline(vector as number[], false);\n }\n\n // 计算悬浮标签的缩略\n const maxTagWidth = maxWidth; // maxWidth;\n // if (isNil(maxTagWidth)) {\n // const { verticalLimitSize, verticalMinSize, orient } = this.attribute;\n // const limitSize = Math.min(verticalLimitSize || Infinity, verticalMinSize || Infinity);\n // if (isValidNumber(limitSize)) {\n // const isX = orient === 'bottom' || orient === 'top';\n // if (isX) {\n // if (angle !== Math.PI / 2) {\n // const cosValue = Math.abs(Math.cos(angle ?? 0));\n // maxTagWidth = cosValue < 1e-6 ? Infinity : this.attribute.end.x / cosValue;\n // } else {\n // maxTagWidth = limitSize - offset;\n // }\n // } else {\n // if (angle && angle !== 0) {\n // const sinValue = Math.abs(Math.sin(angle));\n // maxTagWidth = sinValue < 1e-6 ? Infinity : this.attribute.end.y / sinValue;\n // } else {\n // maxTagWidth = limitSize - offset;\n // }\n // }\n // }\n // }\n const text = formatMethod ? formatMethod(textContent as string) : (textContent as string);\n const attrs: TagAttributes = {\n ...labelPoint,\n ...restAttrs,\n maxWidth: maxTagWidth,\n textStyle: {\n // @ts-ignore\n textAlign,\n // @ts-ignore\n textBaseline,\n\n ...textStyle\n },\n text\n };\n attrs.angle = angle;\n\n if (background && background.visible) {\n attrs.panel = {\n visible: true,\n ...(restAttrs as any).panel,\n ...background.style\n };\n }\n\n return attrs;\n }\n\n protected getTextBaseline(vector: number[], inside?: boolean): TextBaselineType {\n let base: TextBaselineType = 'middle';\n const { verticalFactor = 1 } = this.attribute;\n const factor = (inside ? 1 : -1) * verticalFactor;\n if (isNumberClose(vector[1], 0)) {\n if (isNumberClose(vector[0], 0) && !Object.is(vector[0], -0) && !Object.is(vector[1], -0)) {\n base = factor === 1 ? 'bottom' : 'top';\n } else {\n base = 'middle';\n }\n } else if (vector[1] > 0) {\n base = 'top';\n } else if (vector[1] < 0) {\n base = 'bottom';\n }\n return base;\n }\n\n protected getLabelAlign(\n vector: [number, number],\n inside?: boolean,\n angle?: number\n ): { textAlign: TextAlignType; textBaseline: TextBaselineType } {\n const orient = this.attribute.orient;\n const isCartesian = ['top', 'bottom', 'right', 'left'].includes(orient);\n // 目前的向量方法暂无法返回正确的笛卡尔坐标轴下文本旋转后的问题,所以通过这种方法判断,保证旋转后 textAlign 和 textBaseline 也正确\n if (isCartesian || (vector[0] === 0 && vector[1] === 0)) {\n if (orient === 'top' || orient === 'bottom') {\n return getXAxisLabelAlign(inside ? (orient === 'bottom' ? 'top' : 'bottom') : orient, angle);\n }\n if (orient === 'left' || orient === 'right') {\n return getYAxisLabelAlign(inside ? (orient === 'left' ? 'right' : 'left') : orient, angle);\n }\n }\n\n return {\n textAlign: this.getTextAlign(vector),\n textBaseline: this.getTextBaseline(vector, inside)\n };\n }\n\n protected beforeLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void {\n const { flush = false } = this.attribute.label || {};\n if (flush && labelShapes.length) {\n // 首尾标签向内偏移\n const { orient, start: axisStart, end: axisEnd } = this.attribute;\n const isX = orient === 'bottom' || orient === 'top';\n const first = labelShapes[0];\n const last = peek(labelShapes);\n const isInverse = isX ? first.attribute.x > last.attribute.x : first.attribute.y < last.attribute.y;\n if (isX) {\n const leftMostLabel = isInverse ? last : first;\n const rightMostLabel = isInverse ? first : last;\n const left = axisStart.x;\n const right = axisEnd.x;\n const leftBound = leftMostLabel.AABBBounds.x1;\n const rightBound = rightMostLabel.AABBBounds.x2;\n\n if (leftBound < left) {\n const angle = leftMostLabel.attribute.angle;\n\n if (angle) {\n leftMostLabel.setAttributes({ dx: (leftMostLabel.attribute.dx ?? 0) + left - leftBound });\n } else {\n leftMostLabel.setAttributes({\n x: left,\n textAlign: 'left'\n });\n }\n }\n\n if (rightBound > right) {\n const angle = rightMostLabel.attribute.angle;\n\n if (angle) {\n rightMostLabel.setAttributes({ dx: (rightMostLabel.attribute.dx ?? 0) + right - rightBound });\n } else {\n rightMostLabel.setAttributes({\n x: right,\n textAlign: 'right'\n });\n }\n }\n } else {\n const bottomMostLabel = isInverse ? last : first;\n const topMostLabel = isInverse ? first : last;\n const bottomBound = bottomMostLabel.AABBBounds.y2;\n const topBound = topMostLabel.AABBBounds.y1;\n const top = axisStart.y;\n const bottom = axisEnd.y;\n\n if (topBound < top) {\n const angle = topMostLabel.attribute.angle;\n\n if (angle) {\n // has rotate\n topMostLabel.setAttributes({\n dy: (topMostLabel.attribute.dy ?? 0) + top - topBound\n });\n } else {\n topMostLabel.setAttributes({\n y: top,\n textBaseline: 'top'\n });\n }\n }\n\n if (bottomBound > bottom) {\n const angle = bottomMostLabel.attribute.angle;\n\n if (angle) {\n bottomMostLabel.setAttributes({\n dy: (bottomMostLabel.attribute.dy ?? 0) + bottom - bottomBound\n });\n } else {\n bottomMostLabel.setAttributes({\n y: bottom,\n textBaseline: 'bottom'\n });\n }\n }\n }\n }\n\n return;\n }\n protected handleLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ): void {\n if (isEmpty(labelShapes)) {\n return;\n }\n\n const { verticalLimitSize, label, orient } = this.attribute;\n const limitLength = this._getAxisLabelLimitLength(verticalLimitSize, layerCount);\n\n const {\n layoutFunc,\n autoRotate,\n autoRotateAngle,\n autoLimit,\n limitEllipsis,\n autoHide,\n autoHideMethod,\n autoHideSeparation,\n lastVisible,\n firstVisible,\n autoWrap,\n overflowLimitLength\n } = label;\n\n if (isFunction(layoutFunc)) {\n // 自定义布局\n layoutFunc(labelShapes, labelData, layer, this);\n } else {\n // order: autoRotate Or autoRotate -> autoLimit -> autoHide\n // priority: autoRotate > autoWrap\n if (autoRotate) {\n autoRotateFunc(labelShapes, {\n labelRotateAngle: autoRotateAngle,\n orient\n });\n } else if (autoWrap) {\n const isVertical = orient === 'left' || orient === 'right';\n const axisLength = isVertical\n ? Math.abs(this.attribute.start.y - this.attribute.end.y)\n : Math.abs(this.attribute.start.x - this.attribute.end.x);\n autoWrapFunc(labelShapes, { orient, limitLength, axisLength, ellipsis: limitEllipsis });\n }\n\n // autoWrap has computed width & height limit\n if (!autoWrap && autoLimit && isValidNumber(limitLength) && limitLength > 0) {\n const isVertical = orient === 'left' || orient === 'right';\n const axisLength = isVertical\n ? Math.abs(this.attribute.start.y - this.attribute.end.y)\n : Math.abs(this.attribute.start.x - this.attribute.end.x);\n\n const verticalLimitLength = isVertical\n ? axisLength / labelShapes.length\n : !autoHide && !autoRotate\n ? axisLength / labelShapes.length\n : Infinity;\n\n autoLimitFunc(labelShapes, {\n limitLength,\n verticalLimitLength,\n ellipsis: limitEllipsis,\n orient,\n axisLength,\n overflowLimitLength\n });\n }\n if (autoHide) {\n autoHideFunc(labelShapes, {\n orient,\n method: autoHideMethod,\n separation: autoHideSeparation,\n lastVisible,\n firstVisible\n });\n }\n }\n }\n\n protected afterLabelsOverlap(\n labelShapes: IText[],\n labelData: AxisItem[],\n labelContainer: IGroup,\n layer: number,\n layerCount: number\n ) {\n const { verticalLimitSize, orient } = this.attribute;\n\n // 处理 verticalMinSize,根据 verticalMinSize 调整 labelContainer 的大小\n const isHorizontal = orient === 'bottom' || orient === 'top';\n const axisLabelContainerBounds = labelContainer.AABBBounds;\n let axisLabelContainerSize = isHorizontal ? axisLabelContainerBounds.height() : axisLabelContainerBounds.width();\n const { verticalMinSize } = this.attribute;\n\n if (isValidNumber(verticalMinSize) && (!isValidNumber(verticalLimitSize) || verticalMinSize <= verticalLimitSize)) {\n const minSize = this._getAxisLabelLimitLength(verticalMinSize, layerCount);\n axisLabelContainerSize = Math.max(axisLabelContainerSize, minSize);\n\n let x;\n let y;\n if (orient === 'left') {\n x = axisLabelContainerBounds.x2 - axisLabelContainerSize;\n y = axisLabelContainerBounds.y1;\n } else if (orient === 'right') {\n x = axisLabelContainerBounds.x1;\n y = axisLabelContainerBounds.y1;\n } else if (orient === 'top') {\n x = axisLabelContainerBounds.x1;\n y = axisLabelContainerBounds.y2 - axisLabelContainerSize;\n } else if (orient === 'bottom') {\n x = axisLabelContainerBounds.x1;\n y = axisLabelContainerBounds.y1;\n }\n\n const bgRect = graphicCreator.rect({\n x,\n y,\n width: isHorizontal ? axisLabelContainerBounds.width() : axisLabelContainerSize,\n height: isHorizontal ? axisLabelContainerSize : axisLabelContainerBounds.height(),\n pickable: false\n });\n bgRect.name = AXIS_ELEMENT_NAME.axisLabelBackground;\n bgRect.id = this._getNodeId('axis-label-background');\n labelContainer.insertBefore(bgRect, labelContainer.firstChild);\n }\n\n // 处理 align,进行整体的对齐操作\n if (isValid(this.attribute.label.containerAlign)) {\n let start;\n if (orient === 'left') {\n start = axisLabelContainerBounds.x2 - axisLabelContainerSize;\n } else if (orient === 'right') {\n start = axisLabelContainerBounds.x1;\n } else if (orient === 'top') {\n start = axisLabelContainerBounds.y2 - axisLabelContainerSize;\n } else if (orient === 'bottom') {\n start = axisLabelContainerBounds.y1;\n }\n\n alignAxisLabels(labelShapes, start, axisLabelContainerSize, orient, this.attribute.label.containerAlign);\n }\n }\n\n private _getAxisLabelLimitLength(limitSize: number, layerCount: number): number {\n const { label, title, line, tick } = this.attribute;\n const labelSpace = label.space ?? 4;\n let limitLength = limitSize;\n let titleHeight = 0;\n let titleSpacing = 0;\n const axisLineWidth = line && line.visible ? line.style.lineWidth ?? 1 : 0;\n const tickLength = tick && tick.visible ? tick.length ?? 4 : 0;\n if (title && title.visible && typeof title.text === 'string') {\n titleHeight = measureTextSize(title.text, title.textStyle, this.stage?.getTheme()?.text).height;\n const padding = normalizePadding(title.padding);\n titleSpacing = title.space + padding[0] + padding[2];\n }\n if (limitLength) {\n limitLength = (limitLength - labelSpace - titleSpacing - titleHeight - axisLineWidth - tickLength) / layerCount;\n }\n return limitLength;\n }\n /** 显示交互中的悬浮标签 */\n showLabelHoverOnAxis(position: number, text: string, adjustPosition: boolean = true) {\n if (this.attribute.labelHoverOnAxis) {\n const preContainerBounds = this.axisContainer.AABBBounds;\n const preWidth = preContainerBounds.width();\n const preHeight = preContainerBounds.height();\n const preX1 = preContainerBounds.x1;\n const preY1 = preContainerBounds.y1;\n const preX2 = preContainerBounds.x2;\n const preY2 = preContainerBounds.y2;\n if (this.labelHoverOnAxisGroup) {\n const { formatMethod } = this.attribute.labelHoverOnAxis as LabelHoverOnAxisAttributes;\n const textStr = formatMethod ? formatMethod(text) : text;\n this.labelHoverOnAxisGroup.setAttribute('text', textStr);\n this.labelHoverOnAxisGroup.setAttribute('visible', true);\n this.labelHoverOnAxisGroup.setAttribute('visibleAll', true);\n if (this.attribute.orient === 'left' || this.attribute.orient === 'right') {\n this.labelHoverOnAxisGroup.setAttributes({\n y: position\n });\n } else {\n this.labelHoverOnAxisGroup.setAttributes({\n x: position\n });\n }\n } else {\n this.attribute.labelHoverOnAxis.visible = true;\n this.attribute.labelHoverOnAxis.position = position;\n this.attribute.labelHoverOnAxis.text = text;\n this.renderLabelHoverOnAxis();\n }\n if (adjustPosition) {\n //防止死循环\n const afterContainerBounds = this.axisContainer.AABBBounds;\n const afterWidth = afterContainerBounds.width();\n const afterHeight = afterContainerBounds.height();\n const diffWidth = afterWidth - preWidth;\n const diffHeight = afterHeight - preHeight;\n if (diffWidth > 0 && (this.attribute.orient === 'top' || this.attribute.orient === 'bottom')) {\n if (afterContainerBounds.x1 < preX1) {\n this.showLabelHoverOnAxis(position + diffWidth, text, false);\n } else if (afterContainerBounds.x2 > preX2) {\n this.showLabelHoverOnAxis(position - diffWidth, text, false);\n }\n }\n if (diffHeight > 0 && (this.attribute.orient === 'left' || this.attribute.orient === 'right')) {\n if (afterContainerBounds.y1 < preY1) {\n this.showLabelHoverOnAxis(position + diffHeight, text, false);\n } else if (afterContainerBounds.y2 > preY2) {\n this.showLabelHoverOnAxis(position - diffHeight, text, false);\n }\n }\n }\n }\n }\n /** 隐藏交互中的悬浮标签 */\n hideLabelHoverOnAxis() {\n if (this.attribute.labelHoverOnAxis && this.labelHoverOnAxisGroup) {\n this.labelHoverOnAxisGroup.setAttributes({\n visible: false,\n visibleAll: false\n });\n }\n }\n\n getActualOffset(offset: number): number {\n const orient = this.attribute.orient;\n const isVertical = orient === 'left' || orient === 'right';\n if (!isVertical) {\n return offset;\n }\n\n if (this.attribute.width) {\n return this.attribute.width;\n }\n if (this.attribute.maxWidth) {\n offset = Math.min(offset, this.attribute.maxWidth);\n }\n if (this.attribute.minWidth) {\n offset = Math.max(offset, this.attribute.minWidth);\n }\n return offset;\n }\n\n release(): void {\n super.release();\n this._breaks = null;\n }\n}\n\nmixin(LineAxis, LineAxisMixin);\n"]}
@@ -62,6 +62,7 @@ export declare class Brush extends AbstractComponent<Required<BrushAttributes>>
62
62
  private _addBrushMask;
63
63
  private _isPosInBrushMask;
64
64
  private _outOfInteractiveRange;
65
+ private _beforeBrushEvent;
65
66
  private _dispatchBrushEvent;
66
67
  private _clearMask;
67
68
  private _isEmptyMask;
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  }), exports.Brush = void 0;
6
6
 
7
- const vrender_core_1 = require("@visactor/vrender-core"), vutils_1 = require("@visactor/vutils"), base_1 = require("../core/base"), type_1 = require("./type"), config_1 = require("./config"), register_1 = require("./register"), delayMap = {
7
+ const graphic_creator_1 = require("../util/graphic-creator"), vutils_1 = require("@visactor/vutils"), base_1 = require("../core/base"), type_1 = require("./type"), config_1 = require("./config"), register_1 = require("./register"), delayMap = {
8
8
  debounce: vutils_1.debounce,
9
9
  throttle: vutils_1.throttle
10
10
  };
@@ -18,6 +18,8 @@ class Brush extends base_1.AbstractComponent {
18
18
  this._activeMoveState = !1, this._operatingMaskMoveDx = 0, this._operatingMaskMoveDy = 0,
19
19
  this._operatingMaskMoveRangeX = [ -1 / 0, 1 / 0 ], this._operatingMaskMoveRangeY = [ -1 / 0, 1 / 0 ],
20
20
  this._brushMaskAABBBoundsDict = {}, this._firstUpdate = !0, this._onBrushStart = e => {
21
+ if (!1 === this.attribute.interactive) return;
22
+ if (!1 === this._beforeBrushEvent(e)) return;
21
23
  const {updateTrigger: updateTrigger = config_1.DEFAULT_BRUSH_ATTRIBUTES.updateTrigger, endTrigger: endTrigger = config_1.DEFAULT_BRUSH_ATTRIBUTES.endTrigger, brushMoved: brushMoved = !0} = this.attribute;
22
24
  (0, vutils_1.array)(updateTrigger).forEach((t => this.stage.addEventListener(t, this._onBrushingWithDelay))),
23
25
  (0, vutils_1.array)(endTrigger).forEach((t => this.stage.addEventListener(t, this._onBrushEnd))),
@@ -25,16 +27,18 @@ class Brush extends base_1.AbstractComponent {
25
27
  this._activeDrawState = !this._activeMoveState, this._startPos = this.eventPosToStagePos(e),
26
28
  this._cacheDrawPoints = [ this._startPos ];
27
29
  }, this._onBrushing = e => {
28
- this._outOfInteractiveRange(e) || (e.stopPropagation(), this._firstUpdate ? (this._activeDrawState && this._initDraw(e),
29
- this._activeMoveState && this._initMove(e), this._firstUpdate = !1) : (this._activeDrawState && this._drawing(e),
30
- this._activeMoveState && this._moving(e)));
30
+ !1 !== this.attribute.interactive && !1 !== this._beforeBrushEvent(e) && (this._outOfInteractiveRange(e) || (e.stopPropagation(),
31
+ this._firstUpdate ? (this._activeDrawState && this._initDraw(e), this._activeMoveState && this._initMove(e),
32
+ this._firstUpdate = !1) : (this._activeDrawState && this._drawing(e), this._activeMoveState && this._moving(e))));
31
33
  }, this._onBrushingWithDelay = 0 === this.attribute.delayTime ? this._onBrushing : delayMap[this.attribute.delayType](this._onBrushing, this.attribute.delayTime),
32
34
  this._onBrushEnd = e => {
33
- this._releaseBrushUpdateEvents(), e.preventDefault(), this._activeDrawState && this._drawEnd(e),
34
- this._activeMoveState && this._moveEnd(e), this._activeDrawState = !1, this._activeMoveState = !1;
35
+ !1 !== this.attribute.interactive && (this._releaseBrushUpdateEvents(), e.preventDefault(),
36
+ this._activeDrawState && this._drawEnd(e), this._activeMoveState && this._moveEnd(e),
37
+ this._activeDrawState = !1, this._activeMoveState = !1);
35
38
  }, this._onBrushClear = e => {
36
- e.preventDefault(), this._isEmptyMask() || (this._clearMask(), this._dispatchBrushEvent(type_1.IOperateType.brushClear, e)),
37
- this._activeDrawState = !1, this._activeMoveState = !1;
39
+ !1 !== this.attribute.interactive && !1 !== this._beforeBrushEvent(e) && (e.preventDefault(),
40
+ this._isEmptyMask() || (this._clearMask(), this._dispatchBrushEvent(type_1.IOperateType.brushClear, e)),
41
+ this._activeDrawState = !1, this._activeMoveState = !1);
38
42
  };
39
43
  }
40
44
  _bindBrushEvents() {
@@ -44,12 +48,14 @@ class Brush extends base_1.AbstractComponent {
44
48
  (0, vutils_1.array)(resetTrigger).forEach((t => this.stage.addEventListener(t, this._onBrushClear)));
45
49
  }
46
50
  _initDraw(e) {
51
+ if (!1 === this.attribute.interactive) return;
47
52
  const {brushMode: brushMode} = this.attribute, pos = this.eventPosToStagePos(e);
48
53
  this._cacheDrawPoints.push(pos), "single" === brushMode && this._clearMask(), this._addBrushMask(),
49
54
  this._dispatchBrushEvent(type_1.IOperateType.drawStart, e), this._activeBrushState = !1;
50
55
  }
51
56
  _initMove(e) {
52
57
  var _a, _b;
58
+ if (!1 === this.attribute.interactive) return;
53
59
  this._cacheMovePoint = this.eventPosToStagePos(e), this._operatingMaskMoveDx = null !== (_a = this._operatingMask.attribute.dx) && void 0 !== _a ? _a : 0,
54
60
  this._operatingMaskMoveDy = null !== (_b = this._operatingMask.attribute.dy) && void 0 !== _b ? _b : 0;
55
61
  const {interactiveRange: interactiveRange} = this.attribute, {minY: minY = -1 / 0, maxY: maxY = 1 / 0, minX: minX = -1 / 0, maxX: maxX = 1 / 0} = interactiveRange, {x1: x1, x2: x2, y1: y1, y2: y2} = this._operatingMask.globalAABBBounds, minMoveStepX = minX - x1, maxMoveStepX = maxX - x2, minMoveStepY = minY - y1, maxMoveStepY = maxY - y2;
@@ -58,6 +64,7 @@ class Brush extends base_1.AbstractComponent {
58
64
  }
59
65
  _drawing(e) {
60
66
  var _a;
67
+ if (!1 === this.attribute.interactive) return;
61
68
  const pos = this.eventPosToStagePos(e), {brushType: brushType, sizeThreshold: sizeThreshold = config_1.DEFAULT_SIZE_THRESHOLD} = this.attribute, cacheLength = this._cacheDrawPoints.length;
62
69
  if (cacheLength > 0) {
63
70
  const lastPos = null !== (_a = this._cacheDrawPoints[this._cacheDrawPoints.length - 1]) && void 0 !== _a ? _a : {};
@@ -71,6 +78,7 @@ class Brush extends base_1.AbstractComponent {
71
78
  this._dispatchBrushEvent(type_1.IOperateType.brushActive, e)));
72
79
  }
73
80
  _moving(e) {
81
+ if (!1 === this.attribute.interactive) return;
74
82
  const startPos = this._cacheMovePoint, pos = this.eventPosToStagePos(e);
75
83
  if (pos.x === (null == startPos ? void 0 : startPos.x) && pos.y === (null == startPos ? void 0 : startPos.y)) return;
76
84
  const moveStepX = pos.x - startPos.x, moveStepY = pos.y - startPos.y, moveX = Math.min(this._operatingMaskMoveRangeX[1], Math.max(this._operatingMaskMoveRangeX[0], moveStepX)) + this._operatingMaskMoveDx, moveY = Math.min(this._operatingMaskMoveRangeY[1], Math.max(this._operatingMaskMoveRangeY[0], moveStepY)) + this._operatingMaskMoveDy;
@@ -81,6 +89,7 @@ class Brush extends base_1.AbstractComponent {
81
89
  this._dispatchBrushEvent(type_1.IOperateType.moving, e);
82
90
  }
83
91
  _drawEnd(e) {
92
+ if (!1 === this.attribute.interactive) return;
84
93
  const {removeOnClick: removeOnClick = !0, sizeThreshold: sizeThreshold = config_1.DEFAULT_SIZE_THRESHOLD} = this.attribute;
85
94
  if (this._outOfInteractiveRange(e)) this._isEmptyMask() || (this._clearMask(), this._dispatchBrushEvent(type_1.IOperateType.brushClear, e)); else {
86
95
  const {x: x1, y: y1} = this._startPos, {x: x2, y: y2} = this.eventPosToStagePos(e);
@@ -92,7 +101,8 @@ class Brush extends base_1.AbstractComponent {
92
101
  }
93
102
  }
94
103
  _moveEnd(e) {
95
- this._operatingMask && this._operatingMask.setAttribute("pickable", !1), this._dispatchBrushEvent(type_1.IOperateType.moveEnd, e);
104
+ !1 !== this.attribute.interactive && (this._operatingMask && this._operatingMask.setAttribute("pickable", !1),
105
+ this._dispatchBrushEvent(type_1.IOperateType.moveEnd, e));
96
106
  }
97
107
  render() {
98
108
  this._bindBrushEvents();
@@ -148,7 +158,7 @@ class Brush extends base_1.AbstractComponent {
148
158
  }
149
159
  _addBrushMask() {
150
160
  var _a;
151
- const {brushStyle: brushStyle, hasMask: hasMask} = this.attribute, brushMask = vrender_core_1.graphicCreator.polygon(Object.assign(Object.assign({
161
+ const {brushStyle: brushStyle, hasMask: hasMask} = this.attribute, brushMask = graphic_creator_1.graphicCreator.polygon(Object.assign(Object.assign({
152
162
  points: (0, vutils_1.cloneDeep)(this._cacheDrawPoints),
153
163
  cursor: "move",
154
164
  pickable: !1
@@ -174,6 +184,10 @@ class Brush extends base_1.AbstractComponent {
174
184
  const {interactiveRange: interactiveRange} = this.attribute, {minY: minY = -1 / 0, maxY: maxY = 1 / 0, minX: minX = -1 / 0, maxX: maxX = 1 / 0} = interactiveRange, pos = this.eventPosToStagePos(e);
175
185
  return pos.x > maxX || pos.x < minX || pos.y > maxY || pos.y < minY;
176
186
  }
187
+ _beforeBrushEvent(e) {
188
+ var _a, _b;
189
+ return null === (_b = (_a = this.attribute).beforeBrushChange) || void 0 === _b ? void 0 : _b.call(_a, e);
190
+ }
177
191
  _dispatchBrushEvent(operateType, e) {
178
192
  this._dispatchEvent(operateType, {
179
193
  operateMask: this._operatingMask,