@visactor/vchart
Version:
charts lib based @visactor/VGrammar
523 lines (514 loc) • 29.8 kB
JavaScript
"use strict";
var __rest = this && this.__rest || function(s, e) {
var t = {};
for (var p in s) Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0 && (t[p] = s[p]);
if (null != s && "function" == typeof Object.getOwnPropertySymbols) {
var i = 0;
for (p = Object.getOwnPropertySymbols(s); i < p.length; i++) e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]) && (t[p[i]] = s[p[i]]);
}
return t;
};
Object.defineProperty(exports, "__esModule", {
value: !0
}), exports.CartesianAxis = void 0;
const vutils_1 = require("@visactor/vutils"), vutils_extension_1 = require("@visactor/vutils-extension"), util_1 = require("../../../util"), vscale_1 = require("@visactor/vscale"), factory_1 = require("../../../core/factory"), common_1 = require("./util/common"), event_1 = require("../../../constant/event"), layout_1 = require("../../../constant/layout"), axis_sync_1 = require("../../../plugin/components/axis-sync/axis-sync"), type_1 = require("../../interface/type"), util_2 = require("../util"), base_axis_1 = require("../base-axis"), vrender_core_1 = require("@visactor/vrender-core"), region_1 = require("../../../util/region"), CartesianAxisPlugin = [ axis_sync_1.AxisSyncPlugin ];
class CartesianAxis extends base_axis_1.AxisComponent {
getOrient() {
return this._orient;
}
getDefaultInteractive() {
return !0;
}
set autoIndentOnce(v) {
this._autoIndentOnce = v;
}
getScales() {
return this._scales;
}
constructor(spec, options) {
super(spec, options), this.type = type_1.ComponentTypeEnum.cartesianAxis, this.name = type_1.ComponentTypeEnum.cartesianAxis,
this._defaultBandPosition = .5, this._defaultBandInnerPadding = .1, this._defaultBandOuterPadding = .3,
this.layoutType = "region-relative", this.layoutZIndex = layout_1.LayoutZIndex.Axis,
this.layoutLevel = layout_1.LayoutLevel.Axis, this._orient = "left", this._autoIndentOnce = !1,
this._hasAutoIndent = !1, this._scales = [], this._tick = void 0, this._layoutCache = {
width: 0,
height: 0,
_lastComputeOutBounds: {
x1: 0,
x2: 0,
y1: 0,
y2: 0
}
}, this._innerOffset = {
top: 0,
bottom: 0,
left: 0,
right: 0
}, this.effect = {
scaleUpdate: params => {
this.computeData(null == params ? void 0 : params.value), (0, util_1.eachSeries)(this._regions, (s => {
const orient = this.getOrient();
(0, common_1.isXAxis)(orient) ? (0, util_2.shouldUpdateAxis)(s.getXAxisHelper(), this.axisHelper(), (0,
util_1.isValid)(this._seriesUserId) || (0, util_1.isValid)(this._seriesIndex)) && s.setXAxisHelper(this.axisHelper()) : (0,
common_1.isYAxis)(orient) ? (0, util_2.shouldUpdateAxis)(s.getYAxisHelper(), this.axisHelper(), (0,
util_1.isValid)(this._seriesUserId) || (0, util_1.isValid)(this._seriesIndex)) && s.setYAxisHelper(this.axisHelper()) : (0,
common_1.isZAxis)(orient) && (0, util_2.shouldUpdateAxis)(s.getZAxisHelper(), this.axisHelper(), (0,
util_1.isValid)(this._seriesUserId) || (0, util_1.isValid)(this._seriesIndex)) && s.setZAxisHelper(this.axisHelper());
}), {
userId: this._seriesUserId,
specIndex: this._seriesIndex
});
}
}, this._transformLayoutPosition = pos => {
let {x: x, y: y} = pos;
return (0, util_1.isValidNumber)(x) && (x += Number("left" === this._orient) * this.getLayoutRect().width),
(0, util_1.isValidNumber)(y) && (y += Number("top" === this._orient) * this.getLayoutRect().height),
{
x: x,
y: y
};
}, this._transformLayoutRect = result => {
if (!this._visible) return result;
const bounds = this._latestBounds.clone().translate(-this.getLayoutStartPoint().x, -this.getLayoutStartPoint().y);
switch (this._layout.layoutOrient) {
case "left":
this._layout.layoutRectLevelMap.width === layout_1.DEFAULT_LAYOUT_RECT_LEVEL && (result.width = bounds.x1 < 0 ? -bounds.x1 : 0);
break;
case "right":
this._layout.layoutRectLevelMap.width === layout_1.DEFAULT_LAYOUT_RECT_LEVEL && (result.width = bounds.x2 > 0 ? bounds.x2 : 0);
break;
case "top":
this._layout.layoutRectLevelMap.height === layout_1.DEFAULT_LAYOUT_RECT_LEVEL && (result.height = bounds.y1 < 0 ? -bounds.y1 : 0);
break;
case "bottom":
this._layout.layoutRectLevelMap.height === layout_1.DEFAULT_LAYOUT_RECT_LEVEL && (result.height = bounds.y2 > 0 ? bounds.y2 : 0);
}
return result.width = Math.ceil(result.width), result.height = Math.ceil(result.height),
this._layout.setRectInSpec(this._layoutCacheProcessing(result));
}, this._transformLayoutPadding = padding => ("left" === this.layoutOrient || "right" === this.layoutOrient ? (padding.top = 0,
padding.bottom = 0) : "top" !== this.layoutOrient && "bottom" !== this.layoutOrient || (padding.left = 0,
padding.right = 0), padding), this._updateAxisLayout = () => {
const startPoint = this.getLayoutStartPoint(), _a = this._getUpdateAttribute(!1), {grid: updateGridAttrs} = _a, updateAxisAttrs = __rest(_a, [ "grid" ]), axisAttrs = (0,
vutils_extension_1.mergeSpec)({
x: startPoint.x,
y: startPoint.y
}, this._axisStyle, updateAxisAttrs);
this._axisMark.setSimpleStyle(axisAttrs), this._gridMark && this._gridMark.setSimpleStyle((0,
vutils_extension_1.mergeSpec)({
x: startPoint.x,
y: startPoint.y
}, this._getGridAttributes(), updateGridAttrs));
}, this._fixAxisOnZero = () => {
const {onZero: onZero, visible: visible} = this._spec.domainLine;
if (this.visible && onZero && !1 !== visible) {
const {onZeroAxisId: onZeroAxisId, onZeroAxisIndex: onZeroAxisIndex} = this._spec.domainLine, axesComponents = this._option.getComponentsByKey("axes"), isX = (0,
common_1.isXAxis)(this.getOrient()), isValidAxis = item => {
var _a;
return (isX ? !(0, common_1.isXAxis)(item.getOrient()) : (0, common_1.isXAxis)(item.getOrient())) && (0,
vscale_1.isContinuous)(item.getScale().type) && (item.getTickData() ? null === (_a = item.getTickData().getLatestData()) || void 0 === _a ? void 0 : _a.find((d => 0 === d.value)) : item.getScale().domain()[0] <= 0 && (0,
vutils_1.last)(item.getScale().domain()) >= 0);
}, relativeAxes = axesComponents.filter((item => isValidAxis(item)));
if (relativeAxes.length) {
let bindAxis;
if ((0, util_1.isValid)(onZeroAxisId)) bindAxis = relativeAxes.find((axis => axis.id === onZeroAxisId)); else if ((0,
util_1.isValid)(onZeroAxisIndex)) {
const indexAxis = axesComponents[onZeroAxisIndex];
isValidAxis(indexAxis) && (bindAxis = indexAxis);
} else bindAxis = relativeAxes[0];
if (bindAxis) {
const axisMark = this._axisMark, position = bindAxis.valueToPosition(0);
isX ? axisMark.setSimpleStyle(Object.assign(Object.assign({}, axisMark.getSimpleStyle()), {
line: Object.assign(Object.assign({}, this._axisStyle.line), {
dy: "bottom" === this._orient ? -((bindAxis.getInverse() ? bindAxis.getScale().range()[1] : bindAxis.getScale().range()[0]) - position) : position
})
})) : axisMark.setSimpleStyle(Object.assign(Object.assign({}, axisMark.getSimpleStyle()), {
line: Object.assign(Object.assign({}, this._axisStyle.line), {
dx: "left" === this._orient ? position : -((bindAxis.getInverse() ? bindAxis.getScale().range()[0] : bindAxis.getScale().range()[1]) - position)
})
}));
}
}
}
}, this._orient = (0, common_1.getOrient)(spec, [ "z" ]), (0, common_1.isZAxis)(this._orient) && (this.layoutType = "absolute"),
this._dataSet = options.dataSet, this._coordinateType = "cartesian";
}
static getSpecInfo(chartSpec) {
const axesSpec = chartSpec[this.specKey];
if (!axesSpec) return null;
const isHorizontal = "horizontal" === chartSpec.direction;
if (!(0, util_1.isArray)(axesSpec)) {
if (!(0, util_2.isValidCartesianAxis)(axesSpec)) return null;
const {axisType: axisType, componentName: componentName} = (0, common_1.getCartesianAxisInfo)(axesSpec, isHorizontal);
return axesSpec.type = axisType, [ {
spec: axesSpec,
specPath: [ this.specKey ],
specInfoPath: [ "component", this.specKey, 0 ],
type: componentName
} ];
}
let valid = !0;
if (axesSpec.filter((s => "z" === s.orient))[0]) {
const xAxis = axesSpec.filter((s => "bottom" === s.orient))[0], yAxis = axesSpec.filter((s => (0,
common_1.isYAxis)(s.orient)))[0];
valid = 3 === axesSpec.length && xAxis && yAxis;
}
let axesSpecList = axesSpec.map(((spec, index) => ({
spec: spec,
index: index
})));
valid || (axesSpecList = axesSpecList.filter((({spec: spec}) => "z" !== spec.orient)));
const specInfos = [];
return axesSpecList.forEach((({spec: spec, index: index}) => {
if (!(0, util_2.isValidCartesianAxis)(spec)) return;
const {axisType: axisType, componentName: componentName} = (0, common_1.getCartesianAxisInfo)(spec, isHorizontal);
spec.type = axisType, specInfos.push({
spec: spec,
specPath: [ this.specKey, index ],
specInfoPath: [ "component", this.specKey, index ],
type: componentName
});
})), specInfos;
}
static createComponent(specInfo, options) {
const {spec: spec} = specInfo, others = __rest(specInfo, [ "spec" ]), C = factory_1.Factory.getComponentInKey(others.type);
return C ? new C(spec, Object.assign(Object.assign({}, options), others)) : (options.onError(`Component ${others.type} not found`),
null);
}
initLayout() {
super.initLayout(), this._layout.autoIndent = !1 !== this._spec.autoIndent, this._layout.layoutOrient = this._orient;
}
getNewScaleRange() {
const {width: width, height: height} = this.getLayoutRect(), {left: left, right: right, top: top, bottom: bottom} = this._innerOffset;
let newRange = [];
return (0, common_1.isXAxis)(this.getOrient()) ? (0, util_1.isValidNumber)(width) && (newRange = this._inverse ? [ width - right, left ] : [ left, width - right ]) : (0,
common_1.isZAxis)(this.getOrient()) ? (0, util_1.isValidNumber)(width) && (newRange = this._inverse ? [ width - right, left ] : [ left, width - right ],
this._scale.range(newRange)) : (0, util_1.isValidNumber)(height) && (newRange = this._inverse ? [ top, height - bottom ] : [ height - bottom, top ]),
newRange;
}
updateScaleRange() {
let isScaleChange = !1;
const newRange = this.getNewScaleRange(), range = this._scale.range();
return newRange.length === range.length && newRange.every(((value, index) => value === range[index])) ? isScaleChange = !1 : (isScaleChange = !0,
this._scale.range(newRange)), isScaleChange;
}
init(option) {
var _a;
super.init(option), null === (_a = this.pluginService) || void 0 === _a || _a.load(CartesianAxisPlugin.map((P => new P))),
this.callPlugin((plugin => {
this.pluginService && plugin.onInit && plugin.onInit(this.pluginService, this);
}));
}
setAttrFromSpec() {
var _a;
if (super.setAttrFromSpec(), this.visible) {
(0, common_1.isXAxis)(this.getOrient()) ? (0, util_1.isUndefined)(this._spec.maxHeight) && (this._spec.maxHeight = "30%") : (0,
util_1.isUndefined)(this._spec.maxWidth) && (this._spec.maxWidth = "30%");
const axisStyle = this._getAxisAttributes();
axisStyle.label.formatMethod = this._getLabelFormatMethod(), axisStyle.verticalFactor = "top" === this.getOrient() || "right" === this.getOrient() ? -1 : 1,
this._axisStyle = axisStyle;
}
this._tick = this._spec.tick;
const chartSpec = null === (_a = this._option.getChart()) || void 0 === _a ? void 0 : _a.getSpec();
this._inverse = (0, common_1.transformInverse)(this._spec, "horizontal" === (null == chartSpec ? void 0 : chartSpec.direction));
}
onLayoutStart(layoutRect, viewRect) {
if (super.onLayoutStart(layoutRect, viewRect), !(0, common_1.isZAxis)(this.getOrient()) && this._spec.innerOffset) {
const spec = this._spec;
(0, common_1.isYAxis)(this.getOrient()) ? [ "top", "bottom" ].forEach((orient => {
this._innerOffset[orient] = (0, util_1.calcLayoutNumber)(spec.innerOffset[orient], viewRect.height, viewRect);
})) : [ "left", "right" ].forEach((orient => {
this._innerOffset[orient] = (0, util_1.calcLayoutNumber)(spec.innerOffset[orient], viewRect.width, viewRect);
}));
}
}
getSeriesStatisticsField(s) {
let f;
return f = (0, common_1.isXAxis)(this.getOrient()) ? s.fieldX : (0, common_1.isZAxis)(this.getOrient()) ? s.fieldZ : s.fieldY,
(0, vscale_1.isContinuous)(this._scale.type) ? f : [ f[0] ];
}
_tickTransformOption() {
var _a, _b, _c, _d;
return Object.assign(Object.assign({}, super._tickTransformOption()), {
noDecimals: null === (_a = this._tick) || void 0 === _a ? void 0 : _a.noDecimals,
labelLastVisible: null === (_b = this._spec.label) || void 0 === _b ? void 0 : _b.lastVisible,
labelFirstVisible: null === (_c = this._spec.label) || void 0 === _c ? void 0 : _c.firstVisible,
labelFlush: null === (_d = this._spec.label) || void 0 === _d ? void 0 : _d.flush
});
}
axisHelper() {
return {
isContinuous: (0, vscale_1.isContinuous)(this._scale.type),
dataToPosition: this.dataToPosition.bind(this),
getScale: (depth = 0) => this._scales[depth],
getAxisType: () => this.type,
getAxisId: () => this.id,
isInverse: () => !0 === this._inverse,
getSpec: () => this._spec
};
}
afterCompile() {
var _a;
(null === (_a = this._axisMark) || void 0 === _a ? void 0 : _a.getProduct()) && this.event.on(event_1.HOOK_EVENT.AFTER_ELEMENT_ENCODE, (({mark: mark}) => {
if (mark === this._axisMark && !1 === this._isLayout && ((0, common_1.isXAxis)(this.getOrient()) ? this.callPlugin((plugin => {
this.pluginService && plugin.onDidLayoutHorizontal && plugin.onDidLayoutHorizontal(this.pluginService, this);
})) : this.callPlugin((plugin => {
this.pluginService && plugin.onDidLayoutVertical && plugin.onDidLayoutVertical(this.pluginService, this);
})), this._unitText)) {
const {x: x, y: y} = this.getLayoutStartPoint(), pos = (0, common_1.isXAxis)(this._orient) ? {
x: (0, util_1.maxInArr)(this._scale.range()) + x,
y: y
} : {
x: x,
y: (0, util_1.minInArr)(this._scale.range()) + y
};
this._unitText.setAttributes(pos);
}
})), this.callPlugin((plugin => {
this.pluginService && plugin.onDidCompile && plugin.onDidCompile(this.pluginService, this);
}));
}
collectScale() {
const scales = [];
return (0, util_1.eachSeries)(this._regions, (s => {
scales.push("left" === this.getOrient() || "right" === this.getOrient() ? s.scaleY : s.scaleX);
}), {
userId: this._seriesUserId,
specIndex: this._seriesIndex
}), scales;
}
collectSeriesField(depth, series) {
var _a, _b;
let field;
return field = depth > 0 ? null === (_b = null === (_a = series.getGroups()) || void 0 === _a ? void 0 : _a.fields) || void 0 === _b ? void 0 : _b[depth] : (0,
common_1.isXAxis)(this.getOrient()) ? series.getSpec().x2Field ? [ ...series.fieldX, series.fieldX2 ] : series.fieldX : (0,
common_1.isZAxis)(this.getOrient()) ? series.fieldZ : series.getSpec().y2Field ? [ ...series.fieldY, series.fieldY2 ] : series.fieldY,
field;
}
updateSeriesScale() {
const orient = this.getOrient();
(0, util_1.eachSeries)(this._regions, (s => {
(0, common_1.isXAxis)(orient) ? (0, util_2.shouldUpdateAxis)(s.getXAxisHelper(), this.axisHelper(), (0,
util_1.isValid)(this._seriesUserId) || (0, util_1.isValid)(this._seriesIndex)) && (s.setScaleX(this._scale),
s.setXAxisHelper(this.axisHelper())) : (0, common_1.isYAxis)(orient) ? (0, util_2.shouldUpdateAxis)(s.getYAxisHelper(), this.axisHelper(), (0,
util_1.isValid)(this._seriesUserId) || (0, util_1.isValid)(this._seriesIndex)) && (s.setScaleY(this._scale),
s.setYAxisHelper(this.axisHelper())) : (0, common_1.isZAxis)(orient) && (0, util_2.shouldUpdateAxis)(s.getZAxisHelper(), this.axisHelper(), (0,
util_1.isValid)(this._seriesUserId) || (0, util_1.isValid)(this._seriesIndex)) && (s.setScaleZ(this._scale),
s.setZAxisHelper(this.axisHelper()));
}), {
userId: this._seriesUserId,
specIndex: this._seriesIndex
});
}
getBoundsInRect(rect) {
var _a;
let result = {
x1: 0,
y1: 0,
x2: 0,
y2: 0
};
if (!this._visible) return result;
this._verticalLimitSize = (0, common_1.isXAxis)(this.getOrient()) ? rect.height : rect.width,
this.setLayoutRect(rect);
!this.updateScaleRange() && (0, util_1.isArray)(null === (_a = this.getTickData()) || void 0 === _a ? void 0 : _a.getLatestData()) || this.computeData("range");
const context = {
skipLayout: !1
}, isX = (0, common_1.isXAxis)(this.getOrient());
this.pluginService && (isX ? this.callPlugin((plugin => {
plugin.onWillLayoutHorizontal && plugin.onWillLayoutHorizontal(this.pluginService, context, this);
})) : this.callPlugin((plugin => {
plugin.onWillLayoutVertical && plugin.onWillLayoutVertical(this.pluginService, context, this);
})));
const product = this._axisMark.getProduct();
let hasBounds = !1;
if (!context.skipLayout) {
const attrs = this._getUpdateAttribute(!0), axisComponent = this._axisMark.getComponent(), spec = (0,
vutils_extension_1.mergeSpec)(Object.assign({}, this.getLayoutStartPoint()), this._axisStyle, attrs, {
line: {
visible: !1
}
});
let updateBounds = null == axisComponent ? void 0 : axisComponent.getBoundsWithoutRender(spec);
updateBounds && !updateBounds.empty() || (updateBounds = (new vutils_1.Bounds).set(spec.x, spec.y, spec.x, spec.y)),
hasBounds = !0, this._latestBounds = updateBounds, result = this._appendAxisUnit(updateBounds, isX);
}
return hasBounds || (this._latestBounds = product.AABBBounds), result;
}
positionToData(pos, isViewPos) {
const isX = (0, common_1.isXAxis)(this.getOrient());
isViewPos && (pos -= isX ? this.getLayoutStartPoint().x : this.getLayoutStartPoint().y),
this._innerOffset && (pos = isX ? (0, util_1.clamp)(pos, this._innerOffset.left, this.getLayoutRect().width - this._innerOffset.right) : (0,
util_1.clamp)(pos, this._innerOffset.top, this.getLayoutRect().height - this._innerOffset.bottom));
const range = this._scale.range();
return (pos - range[0]) * (pos - (0, vutils_1.last)(range)) > 0 ? null : this._scale.invert(pos);
}
_getTitleLimit(isX) {
var _a, _b, _c, _d, _e;
const titleSpec = this._spec.title;
if (titleSpec.visible && (0, util_1.isNil)(null === (_a = titleSpec.style) || void 0 === _a ? void 0 : _a.maxLineWidth)) {
const angle = null !== (_e = null !== (_c = null === (_b = this._axisStyle.title) || void 0 === _b ? void 0 : _b.angle) && void 0 !== _c ? _c : null === (_d = titleSpec.style) || void 0 === _d ? void 0 : _d.angle) && void 0 !== _e ? _e : 0;
if (isX) {
const width = this.getLayoutRect().width, cosValue = Math.abs(Math.cos(angle));
return cosValue < 1e-6 ? 1 / 0 : width / cosValue;
}
const height = this.getLayoutRect().height, sinValue = Math.abs(Math.sin(angle));
return sinValue < 1e-6 ? 1 / 0 : height / sinValue;
}
return null;
}
_getUpdateAttribute(ignoreGrid) {
let regionHeight = 0, regionWidth = 0;
if (!ignoreGrid) {
const regionSize = (0, region_1.getCombinedSizeOfRegions)(this.getRegions());
regionWidth = regionSize.width, regionHeight = regionSize.height;
}
const {width: width, height: height} = this.getLayoutRect(), isX = (0, common_1.isXAxis)(this._orient), isY = (0,
common_1.isYAxis)(this._orient);
let end = {
x: 0,
y: 0
}, gridLength = regionHeight, axisLength = width;
isX ? end = {
x: width,
y: 0
} : isY && (end = {
x: 0,
y: height
}, gridLength = regionWidth, axisLength = height);
const items = this.getLabelItems(axisLength), attrs = {
start: {
x: 0,
y: 0
},
end: end,
title: {
text: this._spec.title.text || this._dataFieldText,
maxWidth: this._getTitleLimit(isX)
},
items: items,
scale: this._scale.clone()
};
ignoreGrid || (attrs.grid = {
type: "line",
start: {
x: 0,
y: 0
},
end: end,
items: items[0],
verticalFactor: this._axisStyle.verticalFactor,
length: gridLength
});
let verticalMinSize = isX ? this.layout.minHeight : this.layout.minWidth;
return (isX && this._layout.layoutRectLevelMap.height === layout_1.USER_LAYOUT_RECT_LEVEL || isY && this._layout.layoutRectLevelMap.width === layout_1.USER_LAYOUT_RECT_LEVEL) && (verticalMinSize = this._verticalLimitSize),
attrs.verticalLimitSize = this._verticalLimitSize, attrs.verticalMinSize = verticalMinSize,
attrs.label = {
overflowLimitLength: this._getLabelOverflowLimit(isX)
}, this._afterUpdateAttribute ? this._afterUpdateAttribute(attrs, ignoreGrid) : attrs;
}
getLabelItems(length) {
var _a;
const tickLatestData = null === (_a = this.getTickData()) || void 0 === _a ? void 0 : _a.getLatestData();
return tickLatestData && tickLatestData.length ? [ tickLatestData.map((obj => {
const normalizedValue = this._getNormalizedValue([ obj.value ], length);
return (0, util_2.getAxisItem)(obj.value, normalizedValue);
})).filter((entry => {
const {value: value, rawValue: rawValue} = entry, domain = this._scale.domain();
return "log" === this.getSpec().type ? value >= 0 && value <= 1 : (0, vscale_1.isContinuous)(this._scale.type) ? rawValue >= domain[0] && rawValue <= (0,
vutils_1.last)(domain) : domain.includes(rawValue);
})) ] : [];
}
initEvent() {
super.initEvent(), this.visible && (this.event.on(event_1.ChartEvent.layoutEnd, this._updateAxisLayout),
this.event.on(event_1.ChartEvent.layoutEnd, this._fixAxisOnZero), this.event.on(event_1.ChartEvent.layoutRectUpdate, (() => {
this._clearLayoutCache();
})));
}
_getNormalizedValue(values, length) {
return 0 === length ? 0 : this.dataToPosition(values) / length;
}
_layoutCacheProcessing(rect) {
return [ "width", "height" ].forEach((key => {
rect[key] < this._layoutCache[key] ? rect[key] = this._layoutCache[key] : this._layoutCache[key] = rect[key];
})), this._autoIndentOnce && this._hasAutoIndent ? [ "x1", "x2", "y1", "y2" ].forEach((key => {
this.layout.getLastComputeOutBounds()[key] = this._layoutCache._lastComputeOutBounds[key];
})) : (this._hasAutoIndent = !0, [ "x1", "x2", "y1", "y2" ].forEach((key => {
this.layout.getLastComputeOutBounds()[key] < this._layoutCache._lastComputeOutBounds[key] ? this.layout.getLastComputeOutBounds()[key] = this._layoutCache._lastComputeOutBounds[key] : this._layoutCache._lastComputeOutBounds[key] = this.layout.getLastComputeOutBounds()[key];
}))), rect;
}
reInit(spec) {
super.reInit(spec), this._clearLayoutCache();
}
_clearLayoutCache() {
this._hasAutoIndent = !1, this._layoutCache.width = 0, this._layoutCache.height = 0,
this._layoutCache._lastComputeOutBounds = {
x1: 0,
x2: 0,
y1: 0,
y2: 0
};
}
onDataUpdate() {
this._clearLayoutCache();
}
_appendAxisUnit(bounds, isX) {
var _a;
if (this._spec.unit && this._spec.unit.visible) {
const {text: text, style: style} = this._spec.unit;
let pos, unitTextStyle;
const {x: x, y: y} = this.getLayoutStartPoint();
isX ? (pos = {
x: (0, util_1.maxInArr)(this._scale.range()) + x,
y: y
}, unitTextStyle = {
textAlign: "left",
textBaseline: "middle"
}) : (pos = {
x: x,
y: (0, util_1.minInArr)(this._scale.range()) + y
}, unitTextStyle = {
textAlign: "left" === this._orient ? "left" : "right",
textBaseline: "bottom"
}), unitTextStyle = Object.assign(Object.assign(Object.assign({}, unitTextStyle), style), {
x: pos.x,
y: pos.y,
text: text
}), this._unitText ? this._unitText.setAttributes(unitTextStyle) : (this._unitText = (0,
vrender_core_1.createText)(unitTextStyle), this._unitText.name = "axis-unit", null === (_a = this.getContainer()) || void 0 === _a || _a.add(this._unitText));
const textBounds = this._unitText.AABBBounds;
isX ? (bounds.x2 += textBounds.x2 > bounds.x2 ? textBounds.x2 - bounds.x2 : 0, bounds.y2 += textBounds.y2 > bounds.y2 ? textBounds.y2 - bounds.y2 : 0) : (bounds.x1 += textBounds.x1 < bounds.x1 ? textBounds.x1 - bounds.x1 : 0,
bounds.y1 += textBounds.y1 < bounds.y1 ? textBounds.y1 - bounds.y1 : 0);
}
return bounds;
}
_getNeedClearVRenderComponents() {
return this._unitText ? [ this._unitText ] : [];
}
_getLabelOverflowLimit(isX) {
var _a, _b;
if (isX && !1 !== (null === (_a = this._spec.label) || void 0 === _a ? void 0 : _a.visible) && !0 === (null === (_b = this._spec.label) || void 0 === _b ? void 0 : _b.autoLimit)) {
const axesComponents = this._option.getComponentsByKey("axes"), relativeRegions = this.getRegions(), relativeAxes = axesComponents.filter((item => {
const orient = item.getOrient();
return ("left" === orient || "right" === orient) && item.getRegions().some((region => relativeRegions.includes(region)));
}));
let leftLimitLength = 0, rightLimitLength = 0;
const startX = this.getLayoutStartPoint().x, endX = startX + this.getLayoutRect().width;
return relativeAxes.forEach((axis => {
const relativeStartX = axis.getLayoutStartPoint().x;
if ("left" === axis.getOrient() && relativeStartX === startX) {
const leftAxisWidth = axis.getLayoutRect().width;
leftLimitLength = Math.max(leftLimitLength, leftAxisWidth);
} else if (relativeStartX === endX) {
const rightAxisWidth = axis.getLayoutRect().width;
rightLimitLength = Math.max(rightLimitLength, rightAxisWidth);
}
})), {
left: leftLimitLength,
right: rightLimitLength
};
}
}
}
exports.CartesianAxis = CartesianAxis, CartesianAxis.type = type_1.ComponentTypeEnum.cartesianAxis,
CartesianAxis.specKey = "axes";
//# sourceMappingURL=axis.js.map