@visactor/vrender-components 0.13.9-alpha.5 → 0.13.9-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/label/base.d.ts +1 -2
- package/cjs/label/base.js +22 -61
- package/cjs/label/base.js.map +1 -1
- package/cjs/label/dataLabel.js +2 -3
- package/cjs/label/dataLabel.js.map +1 -1
- package/cjs/label/index.d.ts +0 -1
- package/cjs/label/index.js +1 -2
- package/cjs/label/index.js.map +1 -1
- package/cjs/label/overlap/bitmap.d.ts +1 -1
- package/cjs/label/overlap/bitmap.js +2 -0
- package/cjs/label/overlap/bitmap.js.map +1 -1
- package/cjs/label/type.d.ts +1 -41
- package/cjs/label/type.js.map +1 -1
- package/cjs/link-path/type.js +2 -1
- package/cjs/marker/base.js +1 -2
- package/cjs/player/base-player.js +1 -1
- package/cjs/player/constant.js +1 -1
- package/dist/index.js +32 -843
- package/dist/index.min.js +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/label/base.d.ts +1 -2
- package/es/label/base.js +22 -61
- package/es/label/base.js.map +1 -1
- package/es/label/dataLabel.js +1 -4
- package/es/label/dataLabel.js.map +1 -1
- package/es/label/index.d.ts +0 -1
- package/es/label/index.js +0 -2
- package/es/label/index.js.map +1 -1
- package/es/label/overlap/bitmap.d.ts +1 -1
- package/es/label/overlap/bitmap.js +2 -0
- package/es/label/overlap/bitmap.js.map +1 -1
- package/es/label/type.d.ts +1 -41
- package/es/label/type.js.map +1 -1
- package/es/link-path/type.js +2 -1
- package/es/marker/base.js +1 -2
- package/es/player/base-player.js +1 -1
- package/es/player/constant.js +1 -1
- package/package.json +2 -2
- package/cjs/label/arc.d.ts +0 -69
- package/cjs/label/arc.js +0 -397
- package/cjs/label/arc.js.map +0 -1
- package/cjs/label/util.d.ts +0 -12
- package/cjs/label/util.js +0 -113
- package/cjs/label/util.js.map +0 -1
- package/es/label/arc.d.ts +0 -69
- package/es/label/arc.js +0 -387
- package/es/label/arc.js.map +0 -1
- package/es/label/util.d.ts +0 -12
- package/es/label/util.js +0 -99
- package/es/label/util.js.map +0 -1
package/es/label/type.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["label/type.ts"],"names":[],"mappings":"","file":"type.js","sourcesContent":["import type {
|
|
1
|
+
{"version":3,"sources":["label/type.ts"],"names":[],"mappings":"","file":"type.js","sourcesContent":["import type { EasingType, IGraphic, IGroupGraphicAttribute, ITextGraphicAttribute, Text } from '@visactor/vrender';\n\nexport type LabelItemStateStyle<T> = {\n hover?: T;\n hover_reverse?: T;\n selected?: T;\n selected_reverse?: T;\n};\n\nexport type LabelItem = {\n // 用于动画\n id?: string;\n // 原始数据\n data?: any;\n [key: string]: any;\n} & ITextGraphicAttribute;\n\nexport interface BaseLabelAttrs extends IGroupGraphicAttribute {\n type: string;\n /**\n * 图元 group 名称\n */\n baseMarkGroupName: string;\n /**\n * 是否开启选中交互\n * @default false\n */\n select?: boolean;\n /**\n * 是否开启 hover 交互\n * @default false\n */\n hover?: boolean;\n /**\n * 标签数据\n */\n data: LabelItem[];\n\n /** 文本样式,优先级低于 data */\n textStyle?: Partial<ITextGraphicAttribute>;\n\n /** 文本交互样式 */\n state?: LabelItemStateStyle<ITextGraphicAttribute>;\n\n /** 标签默认位置 */\n position?: Functional<string>;\n\n /** 偏移量 */\n offset?: number;\n\n /** 是否开启防重叠\n * @default true\n */\n overlap?: OverlapAttrs | false;\n\n /** 智能反色 */\n smartInvert?: SmartInvertAttrs | false;\n\n /** 动画配置 */\n animation?: ILabelAnimation | false;\n\n // 排序 or 删减\n dataFilter?: (data: LabelItem[]) => LabelItem[];\n\n /** 自定义布局函数\n * @description 当配置了 customLayoutFunc 后,默认布局和防重叠逻辑将不再生效。(overlap/position/offset不生效)\n */\n customLayoutFunc?: (data: LabelItem[], getRelatedGraphic: (data: LabelItem) => IGraphic) => Text[];\n\n /** 自定义标签躲避函数\n * @description 当配置了 customOverlapFunc 后,会根据 position 和 offset 进行初始布局。配置的防重叠逻辑(overlap)不生效。\n */\n customOverlapFunc?: (label: Text[], getRelatedGraphic: (data: LabelItem) => IGraphic) => Text[];\n}\n\nexport interface OverlapAttrs {\n /**\n * 防重叠的区域大小\n */\n size?: { width: number; height: number };\n\n /**\n * 发生重叠后,是否隐藏标签\n * @default true\n */\n hideOnHit?: boolean;\n\n /**\n * 是否约束标签在指定 size 的范围内。开启后若标签被区域裁剪,会向内收缩。\n * @default true\n */\n clampForce?: boolean;\n\n /**\n * 是否躲避基础图元\n * @default false\n */\n avoidBaseMark?: boolean;\n\n /**\n * 发生重叠后的躲避策略\n */\n strategy?: Strategy[];\n}\n\nexport interface SmartInvertAttrs {\n /**\n * 文本类型\n * 包含普通文本和大文本,对应不同的对比度标准,label默认为普通文本\n * 'normalText' | 'largeText'\n * @default 'normalText'\n */\n textType?: string;\n /**\n * 自定义对比度阈值\n */\n contrastRatiosThreshold?: number;\n /**\n * 自定义备选label颜色\n */\n alternativeColors?: string | string[];\n}\n\nexport type PositionStrategy = {\n /**\n * 可选位置策略。\n * 若默认位置没有足够的空间放置标签,则考虑 position 内的备选位置。\n */\n type: 'position';\n position?: Functional<LabelPosition[]>;\n};\n\nexport type BoundStrategy = {\n /**\n * 标签配置在图形内部时使用。\n * 当图形大小不足以放下标签,则考虑 position 内的备选位置。\n */\n type: 'bound';\n position?: Functional<LabelPosition[]>;\n};\n\nexport type MoveYStrategy = {\n /**\n * 可选位置策略。\n * 若默认位置没有足够的空间放置标签,则根据 offset 在Y方向上寻找位置。\n */\n type: 'moveY';\n /**\n * Y方向上的尝试的位置偏移量\n */\n offset: Functional<number[]>;\n};\n\nexport type MoveXStrategy = {\n /**\n * 可选位置策略。\n * 若默认位置没有足够的空间放置标签,则根据 offset 在X方向上寻找位置。\n */\n type: 'moveX';\n /**\n * X方向上的尝试的位置偏移量\n */\n offset: Functional<number[]>;\n};\n\nexport type Strategy = PositionStrategy | BoundStrategy | MoveYStrategy | MoveXStrategy;\n\nexport type LabelPosition = SymbolLabelAttrs['position'] | RectLabelAttrs['position'];\n\nexport interface SymbolLabelAttrs extends BaseLabelAttrs {\n type: 'symbol';\n\n /**\n * 标签位置\n * @default 'top'\n */\n position?: Functional<\n 'top' | 'bottom' | 'left' | 'right' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'center'\n >;\n}\n\nexport interface RectLabelAttrs extends BaseLabelAttrs {\n type: 'rect';\n\n /**\n * 图元 group 名称\n */\n baseMarkGroupName: string;\n\n /**\n * 标签位置\n * @default 'top'\n */\n position?: Functional<\n 'top' | 'bottom' | 'left' | 'right' | 'inside' | 'inside-top' | 'inside-bottom' | 'inside-right' | 'inside-left'\n >;\n}\n\nexport interface LineLabelAttrs extends BaseLabelAttrs {\n type: 'line';\n\n /**\n * 图元 group 名称\n */\n baseMarkGroupName: string;\n\n /**\n * 标签位置\n * @default 'end'\n */\n position?: Functional<'start' | 'end'>;\n}\n\nexport interface DataLabelAttrs extends IGroupGraphicAttribute {\n dataLabels: (RectLabelAttrs | SymbolLabelAttrs)[];\n /**\n * 防重叠的区域大小\n */\n size: { width: number; height: number };\n}\n\nexport type Functional<T> = T | ((data: any) => T);\n\nexport interface ILabelAnimation {\n mode?: 'same-time' | 'after' | 'after-all';\n duration?: number;\n delay?: number;\n easing?: EasingType;\n /** 是否开启 increaseCount 动画\n * @default true\n */\n increaseEffect?: boolean;\n}\n"]}
|
package/es/link-path/type.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export { };
|
|
1
|
+
export { };
|
|
2
|
+
//# sourceMappingURL=type.js.map
|
package/es/marker/base.js
CHANGED
package/es/player/base-player.js
CHANGED
package/es/player/constant.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@visactor/vrender-components",
|
|
3
|
-
"version": "0.13.9-
|
|
3
|
+
"version": "0.13.9-beta.1",
|
|
4
4
|
"description": "components library for dp visualization",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "cjs/index.js",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"dist"
|
|
13
13
|
],
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@visactor/vrender": "0.13.8-
|
|
15
|
+
"@visactor/vrender": "0.13.8-beta.1",
|
|
16
16
|
"@visactor/vutils": "~0.13.0",
|
|
17
17
|
"@visactor/vscale": "~0.13.0",
|
|
18
18
|
"inversify": "6.0.1"
|
package/cjs/label/arc.d.ts
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import type { IBoundsLike } from '@visactor/vutils';
|
|
2
|
-
import { LabelBase } from './base';
|
|
3
|
-
import type { ArcLabelAttrs, IPoint, Quadrant } from './type';
|
|
4
|
-
import type { BaseLabelAttrs } from './type';
|
|
5
|
-
import type { TextAlignType, TextBaselineType } from '@visactor/vrender';
|
|
6
|
-
import type { IGraphic } from '@visactor/vrender';
|
|
7
|
-
export declare class ArcInfo {
|
|
8
|
-
key: string;
|
|
9
|
-
refDatum: any;
|
|
10
|
-
center: IPoint;
|
|
11
|
-
outerCenter: IPoint;
|
|
12
|
-
labelSize: {
|
|
13
|
-
width: number;
|
|
14
|
-
height: number;
|
|
15
|
-
};
|
|
16
|
-
labelPosition: IPoint;
|
|
17
|
-
labelLimit: number;
|
|
18
|
-
labelVisible: boolean;
|
|
19
|
-
lastLabelY: number;
|
|
20
|
-
labelYRange: [number, number];
|
|
21
|
-
labelText: string | string[];
|
|
22
|
-
pointA: IPoint;
|
|
23
|
-
pointB: IPoint;
|
|
24
|
-
pointC: IPoint;
|
|
25
|
-
quadrant: Quadrant;
|
|
26
|
-
radian: number;
|
|
27
|
-
middleAngle: number;
|
|
28
|
-
k: number;
|
|
29
|
-
textAlign: TextAlignType;
|
|
30
|
-
textBaseline: TextBaselineType;
|
|
31
|
-
angle: number;
|
|
32
|
-
constructor(refDatum: any, center: IPoint, outerCenter: IPoint, quadrant: Quadrant, radian: number, middleAngle: number);
|
|
33
|
-
getLabelBounds(): IBoundsLike;
|
|
34
|
-
}
|
|
35
|
-
export declare class ArcLabel extends LabelBase<ArcLabelAttrs> {
|
|
36
|
-
name: string;
|
|
37
|
-
static defaultAttributes: Partial<ArcLabelAttrs>;
|
|
38
|
-
private _ellipsisWidth;
|
|
39
|
-
private _arcLeft;
|
|
40
|
-
private _arcRight;
|
|
41
|
-
constructor(attributes: ArcLabelAttrs);
|
|
42
|
-
protected labeling(textBounds: IBoundsLike, graphicBounds: IBoundsLike, position: string, offset: number, graphicAttributes: any, textData: any, width: number, height: number, attribute: any): {
|
|
43
|
-
x: number;
|
|
44
|
-
y: number;
|
|
45
|
-
} | undefined;
|
|
46
|
-
protected layoutArcLabels(position: BaseLabelAttrs['position'], attribute: any, currentMarks?: IGraphic[]): ArcInfo[];
|
|
47
|
-
private _layoutInsideLabels;
|
|
48
|
-
private _layoutOutsideLabels;
|
|
49
|
-
private _computeX;
|
|
50
|
-
private _computeAlignOffset;
|
|
51
|
-
private _computeAlign;
|
|
52
|
-
private _getFormatLabelText;
|
|
53
|
-
private _adjustY;
|
|
54
|
-
private _shiftY;
|
|
55
|
-
private _findNextVisibleIndex;
|
|
56
|
-
private _computePointB;
|
|
57
|
-
private _storeY;
|
|
58
|
-
private _computeYRange;
|
|
59
|
-
private _computeLayoutRadius;
|
|
60
|
-
private _findNeighborIndex;
|
|
61
|
-
private _twoWayShift;
|
|
62
|
-
private _restoreY;
|
|
63
|
-
private _checkYRange;
|
|
64
|
-
private _coverLabels;
|
|
65
|
-
protected computeRadius(r: number, width?: number, height?: number, k?: number): number;
|
|
66
|
-
protected computeLayoutRadius(width: number, height: number): number;
|
|
67
|
-
private computeLayoutOuterRadius;
|
|
68
|
-
private computeDatumRadius;
|
|
69
|
-
}
|
package/cjs/label/arc.js
DELETED
|
@@ -1,397 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: !0
|
|
5
|
-
}), exports.ArcLabel = exports.ArcInfo = void 0;
|
|
6
|
-
|
|
7
|
-
const vutils_1 = require("@visactor/vutils"), base_1 = require("./base"), vutils_2 = require("@visactor/vutils"), util_1 = require("./util");
|
|
8
|
-
|
|
9
|
-
class ArcInfo {
|
|
10
|
-
constructor(refDatum, center, outerCenter, quadrant, radian, middleAngle) {
|
|
11
|
-
this.refDatum = refDatum, this.center = center, this.outerCenter = outerCenter,
|
|
12
|
-
this.quadrant = quadrant, this.radian = radian, this.middleAngle = middleAngle,
|
|
13
|
-
this.labelVisible = !0, this.labelLimit = 0;
|
|
14
|
-
}
|
|
15
|
-
getLabelBounds() {
|
|
16
|
-
return this.labelPosition && this.labelSize ? {
|
|
17
|
-
x1: this.labelPosition.x - this.labelSize.width / 2,
|
|
18
|
-
y1: this.labelPosition.y - this.labelSize.height / 2,
|
|
19
|
-
x2: this.labelPosition.x + this.labelSize.width / 2,
|
|
20
|
-
y2: this.labelPosition.y + this.labelSize.height / 2
|
|
21
|
-
} : {
|
|
22
|
-
x1: 0,
|
|
23
|
-
x2: 0,
|
|
24
|
-
y1: 0,
|
|
25
|
-
y2: 0
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
exports.ArcInfo = ArcInfo;
|
|
31
|
-
|
|
32
|
-
class ArcLabel extends base_1.LabelBase {
|
|
33
|
-
constructor(attributes) {
|
|
34
|
-
super((0, vutils_1.merge)({}, ArcLabel.defaultAttributes, attributes)), this.name = "arc-label",
|
|
35
|
-
this._ellipsisWidth = 0, this._arcLeft = new Map, this._arcRight = new Map;
|
|
36
|
-
}
|
|
37
|
-
labeling(textBounds, graphicBounds, position = "outside", offset = 0, graphicAttributes, textData, width, height, attribute) {
|
|
38
|
-
var _a, _b;
|
|
39
|
-
if (!textBounds || !graphicBounds) return;
|
|
40
|
-
const radiusRatio = this.computeLayoutOuterRadius(graphicAttributes.outerRadius, width, height), radius = this.computeRadius(radiusRatio, width, height), center = {
|
|
41
|
-
x: null !== (_a = null == graphicAttributes ? void 0 : graphicAttributes.x) && void 0 !== _a ? _a : 0,
|
|
42
|
-
y: null !== (_b = null == graphicAttributes ? void 0 : graphicAttributes.y) && void 0 !== _b ? _b : 0
|
|
43
|
-
}, item = textData, arcMiddleAngle = (graphicAttributes.startAngle + graphicAttributes.endAngle) / 2, intervalAngle = graphicAttributes.endAngle - graphicAttributes.startAngle, arcQuadrant = (0,
|
|
44
|
-
util_1.computeQuadrant)(graphicAttributes.endAngle - intervalAngle / 2), arcMiddle = (0,
|
|
45
|
-
util_1.circlePoint)(center.x, center.y, graphicAttributes.outerRadius, arcMiddleAngle), outerArcMiddle = (0,
|
|
46
|
-
util_1.circlePoint)(center.x, center.y, radius + attribute.line.line1MinLength, arcMiddleAngle), arc = new ArcInfo(item, arcMiddle, outerArcMiddle, arcQuadrant, intervalAngle, arcMiddleAngle);
|
|
47
|
-
arc.pointA = (0, util_1.circlePoint)(center.x, center.y, this.computeDatumRadius(2 * center.x, 2 * center.y, graphicAttributes.outerRadius), arc.middleAngle),
|
|
48
|
-
arc.labelSize = {
|
|
49
|
-
width: textBounds.x2 - textBounds.x1,
|
|
50
|
-
height: textBounds.y2 - textBounds.y1
|
|
51
|
-
}, (0, util_1.isQuadrantRight)(arc.quadrant) ? (arc.textAlign = "left", arc.textBaseline = "middle",
|
|
52
|
-
this._arcRight.set(arc.refDatum, arc)) : (0, util_1.isQuadrantLeft)(arc.quadrant) && (arc.textAlign = "right",
|
|
53
|
-
arc.textBaseline = "middle", this._arcLeft.set(arc.refDatum, arc));
|
|
54
|
-
}
|
|
55
|
-
layoutArcLabels(position, attribute, currentMarks) {
|
|
56
|
-
const leftArcs = Array.from(this._arcLeft.values()), rightArcs = Array.from(this._arcRight.values()), arcs = [];
|
|
57
|
-
return "inside" === position ? (arcs.push(...this._layoutInsideLabels(rightArcs, attribute, currentMarks)),
|
|
58
|
-
arcs.push(...this._layoutInsideLabels(leftArcs, attribute, currentMarks))) : (arcs.push(...this._layoutOutsideLabels(rightArcs, attribute, currentMarks)),
|
|
59
|
-
arcs.push(...this._layoutOutsideLabels(leftArcs, attribute, currentMarks))), arcs;
|
|
60
|
-
}
|
|
61
|
-
_layoutInsideLabels(arcs, attribute, currentMarks) {
|
|
62
|
-
var _a, _b, _c, _d;
|
|
63
|
-
const center = {
|
|
64
|
-
x: null !== (_b = null === (_a = currentMarks[0].attribute) || void 0 === _a ? void 0 : _a.x) && void 0 !== _b ? _b : 0,
|
|
65
|
-
y: null !== (_d = null === (_c = currentMarks[0].attribute) || void 0 === _c ? void 0 : _c.y) && void 0 !== _d ? _d : 0
|
|
66
|
-
}, innerRadiusRatio = this.computeLayoutOuterRadius(currentMarks[0].attribute.innerRadius, attribute.width, attribute.height), outerRadiusRatio = this.computeLayoutOuterRadius(currentMarks[0].attribute.outerRadius, attribute.width, attribute.height), labelConfig = attribute, spaceWidth = labelConfig.spaceWidth;
|
|
67
|
-
return arcs.forEach((arc => {
|
|
68
|
-
const {labelSize: labelSize, radian: radian} = arc, innerRadius = this.computeRadius(innerRadiusRatio, attribute.width, attribute.height, 1), outerRadius = this.computeRadius(outerRadiusRatio, attribute.width, attribute.height, 1);
|
|
69
|
-
let limit;
|
|
70
|
-
if (radian < (0, util_1.connectLineRadian)(outerRadius, labelSize.height)) limit = 0; else {
|
|
71
|
-
let minRadius;
|
|
72
|
-
minRadius = radian >= Math.PI ? innerRadius : Math.max(innerRadius, labelSize.height / 2 / Math.tan(radian / 2)),
|
|
73
|
-
limit = outerRadius - minRadius - spaceWidth;
|
|
74
|
-
}
|
|
75
|
-
!0 !== (null == labelConfig ? void 0 : labelConfig.rotate) && (limit = outerRadius - spaceWidth);
|
|
76
|
-
const text = this._getFormatLabelText(arc.refDatum, limit);
|
|
77
|
-
arc.labelText = text;
|
|
78
|
-
const labelWidth = Math.min(limit, arc.labelSize.width), align = this._computeAlign(arc, attribute), labelRadius = outerRadius - spaceWidth - ("left" === align ? labelWidth : "right" === align ? 0 : labelWidth / 2);
|
|
79
|
-
arc.labelPosition = (0, util_1.circlePoint)(center.x, center.y, labelRadius, arc.middleAngle),
|
|
80
|
-
arc.labelLimit = labelWidth, (0, vutils_2.isGreater)(labelWidth, 0) || (arc.labelVisible = !1),
|
|
81
|
-
arc.textAlign = "center", arc.textBaseline = "middle", arc.angle = arc.middleAngle;
|
|
82
|
-
})), arcs;
|
|
83
|
-
}
|
|
84
|
-
_layoutOutsideLabels(arcs, attribute, currentMarks) {
|
|
85
|
-
var _a, _b, _c, _d, _e;
|
|
86
|
-
const center_x = null !== (_b = null === (_a = currentMarks[0].attribute) || void 0 === _a ? void 0 : _a.x) && void 0 !== _b ? _b : 0, height = 2 * (null !== (_d = null === (_c = currentMarks[0].attribute) || void 0 === _c ? void 0 : _c.y) && void 0 !== _d ? _d : 0), line2MinLength = attribute.line.line2MinLength, labelLayout = attribute.layout, spaceWidth = attribute.spaceWidth;
|
|
87
|
-
if (arcs.forEach((arc => {
|
|
88
|
-
const direction = (0, util_1.isQuadrantLeft)(arc.quadrant) ? -1 : 1;
|
|
89
|
-
arc.labelPosition = {
|
|
90
|
-
x: arc.outerCenter.x + direction * (arc.labelSize.width / 2 + line2MinLength + spaceWidth),
|
|
91
|
-
y: arc.outerCenter.y
|
|
92
|
-
};
|
|
93
|
-
})), arcs.sort(((a, b) => a.labelPosition.y - b.labelPosition.y)), !1 !== attribute.coverEnable || "none" === labelLayout.strategy) {
|
|
94
|
-
for (const arc of arcs) {
|
|
95
|
-
const {labelPosition: labelPosition, labelSize: labelSize} = arc;
|
|
96
|
-
arc.labelLimit = labelSize.width, arc.pointB = (0, util_1.isQuadrantLeft)(arc.quadrant) ? {
|
|
97
|
-
x: labelPosition.x + labelSize.width / 2 + line2MinLength + spaceWidth,
|
|
98
|
-
y: labelPosition.y
|
|
99
|
-
} : {
|
|
100
|
-
x: labelPosition.x - labelSize.width / 2 - line2MinLength - spaceWidth,
|
|
101
|
-
y: labelPosition.y
|
|
102
|
-
}, this._computeX(arc, attribute, currentMarks);
|
|
103
|
-
}
|
|
104
|
-
!1 === attribute.coverEnable && "none" === labelLayout.strategy && this._coverLabels(arcs);
|
|
105
|
-
} else {
|
|
106
|
-
const maxLabels = height / ((null === (_e = attribute.textStyle) || void 0 === _e ? void 0 : _e.fontSize) || 16);
|
|
107
|
-
this._adjustY(arcs, maxLabels, attribute, currentMarks);
|
|
108
|
-
const {minY: minY, maxY: maxY} = arcs.reduce(((yInfo, arc) => {
|
|
109
|
-
const {y1: y1, y2: y2} = arc.getLabelBounds();
|
|
110
|
-
return yInfo.minY = Math.max(0, Math.min(y1, yInfo.minY)), yInfo.maxY = Math.min(height, Math.max(y2, yInfo.maxY)),
|
|
111
|
-
yInfo;
|
|
112
|
-
}), {
|
|
113
|
-
minY: 1 / 0,
|
|
114
|
-
maxY: -1 / 0
|
|
115
|
-
}), halfY = Math.max(Math.abs(height / 2 - minY), Math.abs(maxY - height / 2)), r = this._computeLayoutRadius(halfY, attribute, currentMarks);
|
|
116
|
-
for (const arc of arcs) this._computePointB(arc, r, attribute, currentMarks), this._computeX(arc, attribute, currentMarks);
|
|
117
|
-
}
|
|
118
|
-
const width = 2 * center_x;
|
|
119
|
-
return arcs.forEach((arc => {
|
|
120
|
-
arc.labelVisible && ((0, vutils_2.isLess)(arc.pointB.x, line2MinLength + spaceWidth) || (0,
|
|
121
|
-
vutils_2.isGreater)(arc.pointB.x, width - line2MinLength - spaceWidth)) && (arc.labelVisible = !1),
|
|
122
|
-
arc.angle = 0;
|
|
123
|
-
})), arcs;
|
|
124
|
-
}
|
|
125
|
-
_computeX(arc, attribute, currentMarks) {
|
|
126
|
-
var _a, _b, _c, _d, _e;
|
|
127
|
-
const center_x = null !== (_b = null === (_a = currentMarks[0].attribute) || void 0 === _a ? void 0 : _a.x) && void 0 !== _b ? _b : 0, plotLayout_width = 2 * center_x, radiusRatio = (_d = null === (_c = currentMarks[0].attribute) || void 0 === _c ? void 0 : _c.y,
|
|
128
|
-
this.computeLayoutOuterRadius(currentMarks[0].attribute.outerRadius, attribute.width, attribute.height)), line1MinLength = attribute.line.line1MinLength, line2MinLength = attribute.line.line2MinLength, labelLayoutAlign = null === (_e = attribute.layout) || void 0 === _e ? void 0 : _e.align, spaceWidth = attribute.spaceWidth, align = this._computeAlign(arc, attribute), {labelPosition: labelPosition, quadrant: quadrant, pointB: pointB} = arc;
|
|
129
|
-
(0, vutils_2.isValidNumber)(pointB.x * pointB.y) || (arc.pointC = {
|
|
130
|
-
x: NaN,
|
|
131
|
-
y: NaN
|
|
132
|
-
}, labelPosition.x = NaN, arc.labelLimit = 0);
|
|
133
|
-
const radius = this.computeRadius(radiusRatio, attribute.width, attribute.height), flag = (0,
|
|
134
|
-
util_1.isQuadrantLeft)(quadrant) ? -1 : 1;
|
|
135
|
-
let cx = 0;
|
|
136
|
-
let limit = (flag > 0 ? plotLayout_width - pointB.x : pointB.x) - line2MinLength - spaceWidth;
|
|
137
|
-
"labelLine" === labelLayoutAlign && (cx = (radius + line1MinLength + line2MinLength) * flag + center_x,
|
|
138
|
-
limit = (flag > 0 ? plotLayout_width - cx : cx) - spaceWidth);
|
|
139
|
-
const text = this._getFormatLabelText(arc.refDatum, limit);
|
|
140
|
-
arc.labelText = text;
|
|
141
|
-
let labelWidth = Math.min(limit, arc.labelSize.width);
|
|
142
|
-
switch (labelLayoutAlign) {
|
|
143
|
-
case "labelLine":
|
|
144
|
-
break;
|
|
145
|
-
|
|
146
|
-
case "edge":
|
|
147
|
-
cx = flag > 0 ? plotLayout_width - labelWidth - spaceWidth : labelWidth + spaceWidth;
|
|
148
|
-
break;
|
|
149
|
-
|
|
150
|
-
default:
|
|
151
|
-
cx = pointB.x + flag * line2MinLength;
|
|
152
|
-
}
|
|
153
|
-
if (labelWidth = Math.max(this._ellipsisWidth, labelWidth), arc.pointC = {
|
|
154
|
-
x: cx,
|
|
155
|
-
y: labelPosition.y
|
|
156
|
-
}, "edge" === labelLayoutAlign) {
|
|
157
|
-
const alignOffset = this._computeAlignOffset(align, labelWidth, -flag);
|
|
158
|
-
labelPosition.x = flag > 0 ? plotLayout_width + alignOffset : alignOffset;
|
|
159
|
-
} else {
|
|
160
|
-
const alignOffset = this._computeAlignOffset(align, labelWidth, flag);
|
|
161
|
-
labelPosition.x = cx + alignOffset + flag * spaceWidth;
|
|
162
|
-
}
|
|
163
|
-
arc.labelLimit = labelWidth;
|
|
164
|
-
}
|
|
165
|
-
_computeAlignOffset(align, labelWidth, alignFlag) {
|
|
166
|
-
switch (align) {
|
|
167
|
-
case "left":
|
|
168
|
-
return alignFlag < 0 ? -labelWidth : 0;
|
|
169
|
-
|
|
170
|
-
case "right":
|
|
171
|
-
return alignFlag < 0 ? 0 : labelWidth;
|
|
172
|
-
|
|
173
|
-
default:
|
|
174
|
-
return labelWidth / 2 * alignFlag;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
_computeAlign(arc, attribute) {
|
|
178
|
-
var _a, _b, _c, _d, _e, _f;
|
|
179
|
-
const labelConfig = attribute, textAlign = null !== (_b = null === (_a = labelConfig.textStyle) || void 0 === _a ? void 0 : _a.textAlign) && void 0 !== _b ? _b : null === (_c = labelConfig.textStyle) || void 0 === _c ? void 0 : _c.align, layoutAlign = null !== (_e = null === (_d = labelConfig.layout) || void 0 === _d ? void 0 : _d.textAlign) && void 0 !== _e ? _e : null === (_f = labelConfig.layout) || void 0 === _f ? void 0 : _f.align;
|
|
180
|
-
return "inside" !== labelConfig.position ? (0, vutils_2.isNil)(textAlign) || "auto" === textAlign ? "edge" === layoutAlign ? (0,
|
|
181
|
-
util_1.isQuadrantLeft)(arc.quadrant) ? "left" : "right" : (0, util_1.isQuadrantLeft)(arc.quadrant) ? "right" : "left" : textAlign : (0,
|
|
182
|
-
vutils_2.isNil)(textAlign) || "auto" === textAlign ? "center" : textAlign;
|
|
183
|
-
}
|
|
184
|
-
_getFormatLabelText(value, limit) {
|
|
185
|
-
return value.text;
|
|
186
|
-
}
|
|
187
|
-
_adjustY(arcs, maxLabels, attribute, currentMarks) {
|
|
188
|
-
var _a, _b, _c, _d;
|
|
189
|
-
_b = null === (_a = currentMarks[0].attribute) || void 0 === _a ? void 0 : _a.x;
|
|
190
|
-
const plotRect_height = 2 * (null !== (_d = null === (_c = currentMarks[0].attribute) || void 0 === _c ? void 0 : _c.y) && void 0 !== _d ? _d : 0), labelLayout = attribute.layout;
|
|
191
|
-
if ("vertical" === labelLayout.strategy) {
|
|
192
|
-
let delta, lastY = 0;
|
|
193
|
-
const len = arcs.length;
|
|
194
|
-
if (len <= 0) return;
|
|
195
|
-
for (let i = 0; i < len; i++) {
|
|
196
|
-
const {y1: y1} = arcs[i].getLabelBounds();
|
|
197
|
-
if (delta = y1 - lastY, (0, vutils_2.isLess)(delta, 0)) {
|
|
198
|
-
const index = this._shiftY(arcs, i, len - 1, -delta);
|
|
199
|
-
this._shiftY(arcs, index, 0, delta / 2);
|
|
200
|
-
}
|
|
201
|
-
const {y2: y2} = arcs[i].getLabelBounds();
|
|
202
|
-
lastY = y2;
|
|
203
|
-
}
|
|
204
|
-
const {y1: firstY1} = arcs[0].getLabelBounds();
|
|
205
|
-
delta = firstY1 - 0, (0, vutils_2.isLess)(delta, 0) && this._shiftY(arcs, 0, len - 1, -delta);
|
|
206
|
-
for (let i = arcs.length - 1; i >= 0 && arcs[i].getLabelBounds().y2 > plotRect_height; i--) arcs[i].labelVisible = !1;
|
|
207
|
-
} else if ("none" !== labelLayout.strategy) {
|
|
208
|
-
const priorityArcs = arcs.map(((arc, i) => ({
|
|
209
|
-
arc: arc,
|
|
210
|
-
originIndex: i,
|
|
211
|
-
priorityIndex: 0
|
|
212
|
-
})));
|
|
213
|
-
priorityArcs.sort(((a, b) => b.arc.radian - a.arc.radian)), priorityArcs.forEach(((priorityArc, i) => {
|
|
214
|
-
priorityArc.priorityIndex = i, priorityArc.arc.labelVisible = !1;
|
|
215
|
-
}));
|
|
216
|
-
let topLabelIndex = 1 / 0, bottomLabelIndex = -1 / 0;
|
|
217
|
-
for (let i = 0; i < maxLabels && i < arcs.length; i++) {
|
|
218
|
-
this._storeY(arcs);
|
|
219
|
-
const arc = priorityArcs[i].arc;
|
|
220
|
-
this._computeYRange(arc, attribute, currentMarks), arc.labelVisible = !0;
|
|
221
|
-
const curY = arc.labelPosition.y, {lastIndex: lastIndex, nextIndex: nextIndex} = this._findNeighborIndex(arcs, priorityArcs[i]), lastArc = arcs[lastIndex], nextArc = arcs[nextIndex];
|
|
222
|
-
if (-1 === lastIndex && -1 !== nextIndex) {
|
|
223
|
-
const nextY = nextArc.labelPosition.y;
|
|
224
|
-
curY > nextY ? arc.labelPosition.y = nextY - nextArc.labelSize.height / 2 - arc.labelSize.height / 2 : this._twoWayShift(arcs, arc, nextArc, nextIndex);
|
|
225
|
-
} else if (-1 !== lastIndex && -1 === nextIndex) {
|
|
226
|
-
const lastY = lastArc.labelPosition.y;
|
|
227
|
-
curY < lastY ? arc.labelPosition.y = lastY + lastArc.labelSize.height / 2 + arc.labelSize.height / 2 : this._twoWayShift(arcs, lastArc, arc, priorityArcs[i].originIndex);
|
|
228
|
-
} else if (-1 !== lastIndex && -1 !== nextIndex) {
|
|
229
|
-
const lastY = lastArc.labelPosition.y, nextY = nextArc.labelPosition.y;
|
|
230
|
-
curY > nextY ? (arc.labelPosition.y = nextY - nextArc.labelSize.height / 2 - arc.labelSize.height / 2,
|
|
231
|
-
this._twoWayShift(arcs, lastArc, arc, priorityArcs[i].originIndex)) : curY < lastY ? (arc.labelPosition.y = lastY + lastArc.labelSize.height / 2 + arc.labelSize.height / 2,
|
|
232
|
-
this._twoWayShift(arcs, arc, nextArc, nextIndex)) : (this._twoWayShift(arcs, lastArc, arc, priorityArcs[i].originIndex),
|
|
233
|
-
this._twoWayShift(arcs, arc, nextArc, nextIndex));
|
|
234
|
-
}
|
|
235
|
-
const nextTopIndex = Math.min(topLabelIndex, priorityArcs[i].originIndex), nextBottomIndex = Math.max(bottomLabelIndex, priorityArcs[i].originIndex);
|
|
236
|
-
let delta;
|
|
237
|
-
if (delta = arcs[nextBottomIndex].getLabelBounds().y2 - plotRect_height, (0, vutils_2.isGreater)(delta, 0) && this._shiftY(arcs, nextBottomIndex, 0, -delta),
|
|
238
|
-
delta = arcs[nextTopIndex].getLabelBounds().y1 - 0, (0, vutils_2.isLess)(delta, 0) && this._shiftY(arcs, nextTopIndex, arcs.length - 1, -delta),
|
|
239
|
-
delta = arcs[nextBottomIndex].getLabelBounds().y2 - plotRect_height, (0, vutils_2.isGreater)(delta, 0)) {
|
|
240
|
-
arc.labelVisible = !1, this._restoreY(arcs);
|
|
241
|
-
break;
|
|
242
|
-
}
|
|
243
|
-
labelLayout.tangentConstraint && !this._checkYRange(arcs) ? (arc.labelVisible = !1,
|
|
244
|
-
this._restoreY(arcs)) : (topLabelIndex = nextTopIndex, bottomLabelIndex = nextBottomIndex);
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
_shiftY(arcs, start, end, delta) {
|
|
249
|
-
const direction = start < end ? 1 : -1;
|
|
250
|
-
let index = start;
|
|
251
|
-
for (;-1 !== index; ) {
|
|
252
|
-
arcs[index].labelPosition.y += delta;
|
|
253
|
-
const nextIndex = this._findNextVisibleIndex(arcs, index, end, direction);
|
|
254
|
-
if (nextIndex >= 0 && nextIndex < arcs.length) {
|
|
255
|
-
const {y1: curY1, y2: curY2} = arcs[index].getLabelBounds(), {y1: nextY1, y2: nextY2} = arcs[nextIndex].getLabelBounds();
|
|
256
|
-
if (direction > 0 && curY2 < nextY1 || direction < 0 && curY1 > nextY2) return index;
|
|
257
|
-
}
|
|
258
|
-
index = nextIndex;
|
|
259
|
-
}
|
|
260
|
-
return end;
|
|
261
|
-
}
|
|
262
|
-
_findNextVisibleIndex(arcs, start, end, direction) {
|
|
263
|
-
const diff = (end - start) * direction;
|
|
264
|
-
for (let i = 1; i <= diff; i++) {
|
|
265
|
-
const index = start + i * direction;
|
|
266
|
-
if (arcs[index].labelVisible) return index;
|
|
267
|
-
}
|
|
268
|
-
return -1;
|
|
269
|
-
}
|
|
270
|
-
_computePointB(arc, r, attribute, currentMarks) {
|
|
271
|
-
var _a, _b, _c, _d;
|
|
272
|
-
const labelConfig = attribute, radiusRatio = this.computeLayoutOuterRadius(currentMarks[0].attribute.outerRadius, attribute.width, attribute.height), line1MinLength = labelConfig.line.line1MinLength;
|
|
273
|
-
if ("none" === labelConfig.layout.strategy) arc.pointB = {
|
|
274
|
-
x: arc.outerCenter.x,
|
|
275
|
-
y: arc.outerCenter.y
|
|
276
|
-
}; else {
|
|
277
|
-
const center = {
|
|
278
|
-
x: null !== (_b = null === (_a = currentMarks[0].attribute) || void 0 === _a ? void 0 : _a.x) && void 0 !== _b ? _b : 0,
|
|
279
|
-
y: null !== (_d = null === (_c = currentMarks[0].attribute) || void 0 === _c ? void 0 : _c.y) && void 0 !== _d ? _d : 0
|
|
280
|
-
}, radius = this.computeRadius(radiusRatio, attribute.width, attribute.height), {labelPosition: labelPosition, quadrant: quadrant} = arc, rd = r - Math.max(radius + line1MinLength, currentMarks[0].attribute.outerRadius), x = Math.sqrt(r ** 2 - Math.abs(center.y - labelPosition.y) ** 2) - rd;
|
|
281
|
-
(0, vutils_2.isValidNumber)(x) ? arc.pointB = {
|
|
282
|
-
x: center.x + x * ((0, util_1.isQuadrantLeft)(quadrant) ? -1 : 1),
|
|
283
|
-
y: labelPosition.y
|
|
284
|
-
} : arc.pointB = {
|
|
285
|
-
x: NaN,
|
|
286
|
-
y: NaN
|
|
287
|
-
};
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
_storeY(arcs) {
|
|
291
|
-
for (const arc of arcs) arc.labelVisible && (arc.lastLabelY = arc.labelPosition.y);
|
|
292
|
-
}
|
|
293
|
-
_computeYRange(arc, attribute, currentMarks) {
|
|
294
|
-
var _a, _b, _c, _d;
|
|
295
|
-
const plotRect = {
|
|
296
|
-
width: 2 * (null !== (_b = null === (_a = currentMarks[0].attribute) || void 0 === _a ? void 0 : _a.x) && void 0 !== _b ? _b : 0),
|
|
297
|
-
height: 2 * (null !== (_d = null === (_c = currentMarks[0].attribute) || void 0 === _c ? void 0 : _c.y) && void 0 !== _d ? _d : 0)
|
|
298
|
-
}, radiusRatio = this.computeLayoutOuterRadius(currentMarks[0].attribute.outerRadius, attribute.width, attribute.height), line1MinLength = attribute.line.line1MinLength, {width: width, height: height} = plotRect, radius = this.computeRadius(radiusRatio, attribute.width, attribute.height), r = this._computeLayoutRadius(height / 2, attribute, currentMarks), cx = Math.abs(arc.center.x - width / 2), cy = arc.center.y - height / 2;
|
|
299
|
-
let a, b, c;
|
|
300
|
-
if ((0, vutils_2.isNumberClose)(width / 2, cx)) a = 0, b = 1, c = -cy; else if ((0,
|
|
301
|
-
vutils_2.isNumberClose)(height / 2, cy)) a = 1, b = 0, c = -cx; else {
|
|
302
|
-
const k = -1 / (cy / cx);
|
|
303
|
-
a = k, b = -1, c = cy - k * cx;
|
|
304
|
-
}
|
|
305
|
-
const points = (0, util_1.lineCirclePoints)(a, b, c, line1MinLength + radius - r, 0, r);
|
|
306
|
-
if (points.length < 2) return;
|
|
307
|
-
let min, max;
|
|
308
|
-
points[0].x > points[1].x && points.reverse(), points[0].x < 0 ? (0, vutils_2.isNumberClose)(points[0].y, points[1].y) ? Math.abs(arc.middleAngle) < Math.PI / 2 ? (min = 0,
|
|
309
|
-
max = points[1].y + height / 2) : (min = points[1].y + height / 2, max = height) : points[0].y < points[1].y ? (min = 0,
|
|
310
|
-
max = points[1].y + height / 2) : (min = points[1].y + height / 2, max = plotRect.height) : (min = Math.min(points[0].y, points[1].y) + height / 2,
|
|
311
|
-
max = Math.max(points[0].y, points[1].y) + height / 2), arc.labelYRange = [ min, max ];
|
|
312
|
-
}
|
|
313
|
-
_computeLayoutRadius(halfYLength, attribute, currentMarks) {
|
|
314
|
-
const labelConfig = attribute, layoutArcGap = labelConfig.layoutArcGap, line1MinLength = labelConfig.line.line1MinLength, radiusRatio = this.computeLayoutOuterRadius(currentMarks[0].attribute.outerRadius, attribute.width, attribute.height), outerR = this.computeRadius(radiusRatio, attribute.width, attribute.height) + line1MinLength, a = outerR - layoutArcGap;
|
|
315
|
-
return Math.max((a ** 2 + halfYLength ** 2) / (2 * a), outerR);
|
|
316
|
-
}
|
|
317
|
-
_findNeighborIndex(arcs, priorityArc) {
|
|
318
|
-
const index = priorityArc.originIndex;
|
|
319
|
-
let lastIndex = -1, nextIndex = -1;
|
|
320
|
-
for (let i = index - 1; i >= 0; i--) if (arcs[i].labelVisible) {
|
|
321
|
-
lastIndex = i;
|
|
322
|
-
break;
|
|
323
|
-
}
|
|
324
|
-
for (let i = index + 1; i < arcs.length; i++) if (arcs[i].labelVisible) {
|
|
325
|
-
nextIndex = i;
|
|
326
|
-
break;
|
|
327
|
-
}
|
|
328
|
-
return {
|
|
329
|
-
lastIndex: lastIndex,
|
|
330
|
-
nextIndex: nextIndex
|
|
331
|
-
};
|
|
332
|
-
}
|
|
333
|
-
_twoWayShift(arcs, lastArc, nextArc, nextIndex) {
|
|
334
|
-
const delta = nextArc.getLabelBounds().y1 - lastArc.getLabelBounds().y2;
|
|
335
|
-
if ((0, vutils_2.isLess)(delta, 0)) {
|
|
336
|
-
const i = this._shiftY(arcs, nextIndex, arcs.length - 1, -delta);
|
|
337
|
-
this._shiftY(arcs, i, 0, delta / 2);
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
_restoreY(arcs) {
|
|
341
|
-
for (const arc of arcs) arc.labelVisible && (arc.labelPosition.y = arc.lastLabelY);
|
|
342
|
-
}
|
|
343
|
-
_checkYRange(arcs) {
|
|
344
|
-
for (const arc of arcs) {
|
|
345
|
-
const {labelYRange: labelYRange, labelPosition: labelPosition} = arc;
|
|
346
|
-
if (arc.labelVisible && labelYRange && ((0, vutils_2.isLess)(labelPosition.y, labelYRange[0]) || (0,
|
|
347
|
-
vutils_2.isGreater)(labelPosition.y, labelYRange[1]))) return !1;
|
|
348
|
-
}
|
|
349
|
-
return !0;
|
|
350
|
-
}
|
|
351
|
-
_coverLabels(arcs) {
|
|
352
|
-
if (arcs.length <= 1) return;
|
|
353
|
-
let lastBounds = arcs[0].getLabelBounds();
|
|
354
|
-
for (let i = 1; i < arcs.length; i++) {
|
|
355
|
-
const bounds = arcs[i].getLabelBounds();
|
|
356
|
-
(0, util_1.checkBoundsOverlap)(lastBounds, bounds) ? arcs[i].labelVisible = !1 : lastBounds = bounds;
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
computeRadius(r, width, height, k) {
|
|
360
|
-
return this.computeLayoutRadius(width || 0, height || 0) * r * ((0, vutils_2.isNil)(k) ? 1 : k);
|
|
361
|
-
}
|
|
362
|
-
computeLayoutRadius(width, height) {
|
|
363
|
-
return Math.min(width / 2, height / 2);
|
|
364
|
-
}
|
|
365
|
-
computeLayoutOuterRadius(r, width, height) {
|
|
366
|
-
return r / (Math.min(width, height) / 2);
|
|
367
|
-
}
|
|
368
|
-
computeDatumRadius(width, height, outerRadius) {
|
|
369
|
-
const outerRadiusRatio = this.computeLayoutOuterRadius(outerRadius, width, height);
|
|
370
|
-
return this.computeLayoutRadius(width || 0, height || 0) * outerRadiusRatio;
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
exports.ArcLabel = ArcLabel, ArcLabel.defaultAttributes = {
|
|
375
|
-
coverEnable: !1,
|
|
376
|
-
spaceWidth: 5,
|
|
377
|
-
layoutArcGap: 6,
|
|
378
|
-
textStyle: {
|
|
379
|
-
visible: !0,
|
|
380
|
-
fontSize: 14,
|
|
381
|
-
fontWeight: "normal",
|
|
382
|
-
fillOpacity: 1
|
|
383
|
-
},
|
|
384
|
-
position: "outside",
|
|
385
|
-
offset: 0,
|
|
386
|
-
line: {
|
|
387
|
-
visible: !0,
|
|
388
|
-
line1MinLength: 20,
|
|
389
|
-
line2MinLength: 10
|
|
390
|
-
},
|
|
391
|
-
layout: {
|
|
392
|
-
align: "arc",
|
|
393
|
-
strategy: "priority",
|
|
394
|
-
tangentConstraint: !0
|
|
395
|
-
}
|
|
396
|
-
};
|
|
397
|
-
//# sourceMappingURL=arc.js.map
|