@visactor/vchart-extension 2.0.15 → 2.0.16-alpha.0
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/build/index.js +592 -11
- package/build/index.min.js +2 -2
- package/cjs/charts/conversion-funnel/arrow-data-transform.js +0 -1
- package/cjs/charts/funnel-3d/chart.js +2 -1
- package/cjs/charts/histogram-3d/chart.js +1 -1
- package/cjs/charts/image-cloud/image-cloud-transformer.js +1 -1
- package/cjs/charts/ranking-bar/ranking-bar.d.ts +1 -1
- package/cjs/charts/ranking-bar/ranking-bar.js.map +1 -1
- package/cjs/charts/ranking-list/constant.d.ts +1 -1
- package/cjs/charts/ranking-list/constant.js.map +1 -1
- package/cjs/charts/ranking-list/ranking-list.d.ts +1 -1
- package/cjs/charts/ranking-list/ranking-list.js.map +1 -1
- package/cjs/charts/sequence-scatter-kde/sequence-scatter-kde-transformer.js.map +1 -1
- package/cjs/charts/sequence-scatter-kde/sequence-scatter-kde.d.ts +1 -1
- package/cjs/charts/sequence-scatter-kde/sequence-scatter-kde.js.map +1 -1
- package/cjs/charts/sequence-scatter-link/sequence-scatter-link-transformer.js +1 -1
- package/cjs/charts/sequence-scatter-link/sequence-scatter-link-transformer.js.map +1 -1
- package/cjs/charts/sequence-scatter-link/sequence-scatter-link.d.ts +1 -1
- package/cjs/charts/sequence-scatter-link/sequence-scatter-link.js.map +1 -1
- package/cjs/charts/sequence-scatter-pixel/sequence-scatter-pixel-transformer.js.map +1 -1
- package/cjs/charts/sequence-scatter-pixel/sequence-scatter-pixel.d.ts +1 -1
- package/cjs/charts/sequence-scatter-pixel/sequence-scatter-pixel.js.map +1 -1
- package/cjs/charts/sequence-scatter-pixel/utils.d.ts +1 -1
- package/cjs/charts/sequence-scatter-pixel/utils.js.map +1 -1
- package/cjs/charts/timeline/index.d.ts +4 -0
- package/cjs/charts/timeline/index.js +31 -0
- package/cjs/charts/timeline/index.js.map +1 -0
- package/cjs/charts/timeline/interface.d.ts +7 -0
- package/cjs/charts/timeline/interface.js +6 -0
- package/cjs/charts/timeline/interface.js.map +1 -0
- package/cjs/charts/timeline/series/constant.d.ts +1 -0
- package/cjs/charts/timeline/series/constant.js +6 -0
- package/cjs/charts/timeline/series/constant.js.map +1 -0
- package/cjs/charts/timeline/series/event-series.d.ts +53 -0
- package/cjs/charts/timeline/series/event-series.js +339 -0
- package/cjs/charts/timeline/series/event-series.js.map +1 -0
- package/cjs/charts/timeline/series/interface.d.ts +28 -0
- package/cjs/charts/timeline/series/interface.js +6 -0
- package/cjs/charts/timeline/series/interface.js.map +1 -0
- package/cjs/charts/timeline/series/theme.d.ts +2 -0
- package/cjs/charts/timeline/series/theme.js +43 -0
- package/cjs/charts/timeline/series/theme.js.map +1 -0
- package/cjs/charts/timeline/timeline-transformer.d.ts +10 -0
- package/cjs/charts/timeline/timeline-transformer.js +84 -0
- package/cjs/charts/timeline/timeline-transformer.js.map +1 -0
- package/cjs/charts/timeline/timeline.d.ts +12 -0
- package/cjs/charts/timeline/timeline.js +25 -0
- package/cjs/charts/timeline/timeline.js.map +1 -0
- package/cjs/components/map-label/map-label-transformer.d.ts +1 -1
- package/cjs/components/map-label/map-label-transformer.js.map +1 -1
- package/cjs/index.d.ts +1 -0
- package/cjs/index.js +5 -5
- package/cjs/index.js.map +1 -1
- package/esm/charts/conversion-funnel/arrow-data-transform.js +1 -2
- package/esm/charts/funnel-3d/chart.js +2 -1
- package/esm/charts/histogram-3d/chart.js +1 -1
- package/esm/charts/image-cloud/image-cloud-transformer.js +1 -1
- package/esm/charts/ranking-bar/ranking-bar.d.ts +1 -1
- package/esm/charts/ranking-bar/ranking-bar.js.map +1 -1
- package/esm/charts/ranking-list/constant.d.ts +1 -1
- package/esm/charts/ranking-list/constant.js.map +1 -1
- package/esm/charts/ranking-list/ranking-list.d.ts +1 -1
- package/esm/charts/ranking-list/ranking-list.js.map +1 -1
- package/esm/charts/sequence-scatter-kde/sequence-scatter-kde-transformer.js.map +1 -1
- package/esm/charts/sequence-scatter-kde/sequence-scatter-kde.d.ts +1 -1
- package/esm/charts/sequence-scatter-kde/sequence-scatter-kde.js.map +1 -1
- package/esm/charts/sequence-scatter-link/sequence-scatter-link-transformer.js +1 -1
- package/esm/charts/sequence-scatter-link/sequence-scatter-link-transformer.js.map +1 -1
- package/esm/charts/sequence-scatter-link/sequence-scatter-link.d.ts +1 -1
- package/esm/charts/sequence-scatter-link/sequence-scatter-link.js.map +1 -1
- package/esm/charts/sequence-scatter-pixel/sequence-scatter-pixel-transformer.js.map +1 -1
- package/esm/charts/sequence-scatter-pixel/sequence-scatter-pixel.d.ts +1 -1
- package/esm/charts/sequence-scatter-pixel/sequence-scatter-pixel.js.map +1 -1
- package/esm/charts/sequence-scatter-pixel/utils.d.ts +1 -1
- package/esm/charts/sequence-scatter-pixel/utils.js.map +1 -1
- package/esm/charts/timeline/index.d.ts +4 -0
- package/esm/charts/timeline/index.js +6 -0
- package/esm/charts/timeline/index.js.map +1 -0
- package/esm/charts/timeline/interface.d.ts +7 -0
- package/esm/charts/timeline/interface.js +2 -0
- package/esm/charts/timeline/interface.js.map +1 -0
- package/esm/charts/timeline/series/constant.d.ts +1 -0
- package/esm/charts/timeline/series/constant.js +2 -0
- package/esm/charts/timeline/series/constant.js.map +1 -0
- package/esm/charts/timeline/series/event-series.d.ts +53 -0
- package/esm/charts/timeline/series/event-series.js +337 -0
- package/esm/charts/timeline/series/event-series.js.map +1 -0
- package/esm/charts/timeline/series/interface.d.ts +28 -0
- package/esm/charts/timeline/series/interface.js +2 -0
- package/esm/charts/timeline/series/interface.js.map +1 -0
- package/esm/charts/timeline/series/theme.d.ts +2 -0
- package/esm/charts/timeline/series/theme.js +39 -0
- package/esm/charts/timeline/series/theme.js.map +1 -0
- package/esm/charts/timeline/timeline-transformer.d.ts +10 -0
- package/esm/charts/timeline/timeline-transformer.js +77 -0
- package/esm/charts/timeline/timeline-transformer.js.map +1 -0
- package/esm/charts/timeline/timeline.d.ts +12 -0
- package/esm/charts/timeline/timeline.js +19 -0
- package/esm/charts/timeline/timeline.js.map +1 -0
- package/esm/components/map-label/map-label-transformer.d.ts +1 -1
- package/esm/components/map-label/map-label-transformer.js.map +1 -1
- package/esm/index.d.ts +1 -0
- package/esm/index.js +2 -0
- package/esm/index.js.map +1 -1
- package/package.json +6 -6
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
import { AttributeLevel, CartesianSeries, Factory, baseSeriesMark, registerSymbolMark, registerTextMark, registerLineMark, registerPathMark, STATE_VALUE_ENUM, BaseSeriesSpecTransformer } from "@visactor/vchart";
|
|
2
|
+
|
|
3
|
+
import { EVENT_SERIES_TYPE } from "./constant";
|
|
4
|
+
|
|
5
|
+
import { event } from "./theme";
|
|
6
|
+
|
|
7
|
+
import { isValid } from "@visactor/vutils";
|
|
8
|
+
|
|
9
|
+
const eventSeriesMark = Object.assign(Object.assign({}, baseSeriesMark), {
|
|
10
|
+
line: {
|
|
11
|
+
name: "line",
|
|
12
|
+
type: "line"
|
|
13
|
+
},
|
|
14
|
+
dot: {
|
|
15
|
+
name: "dot",
|
|
16
|
+
type: "symbol"
|
|
17
|
+
},
|
|
18
|
+
icon: {
|
|
19
|
+
name: "icon",
|
|
20
|
+
type: "symbol"
|
|
21
|
+
},
|
|
22
|
+
title: {
|
|
23
|
+
name: "title",
|
|
24
|
+
type: "text"
|
|
25
|
+
},
|
|
26
|
+
subTitle: {
|
|
27
|
+
name: "subTitle",
|
|
28
|
+
type: "text"
|
|
29
|
+
},
|
|
30
|
+
arrow: {
|
|
31
|
+
name: "arrow",
|
|
32
|
+
type: "path"
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
export class EventSeries extends CartesianSeries {
|
|
37
|
+
constructor() {
|
|
38
|
+
super(...arguments), this.type = EVENT_SERIES_TYPE, this.transformerConstructor = BaseSeriesSpecTransformer,
|
|
39
|
+
this.coordinate = "cartesian";
|
|
40
|
+
}
|
|
41
|
+
setAttrFromSpec() {
|
|
42
|
+
super.setAttrFromSpec(), this.setSeriesField(this._spec.seriesField), this._timeField = this._spec.timeField,
|
|
43
|
+
this._eventField = this._spec.eventField, this._subTitleField = this._spec.subTitleField,
|
|
44
|
+
this._iconField = this._spec.iconField, this._labelPosition = this._spec.labelPosition;
|
|
45
|
+
}
|
|
46
|
+
getDimensionField() {
|
|
47
|
+
return this._timeField ? [ this._timeField ] : [];
|
|
48
|
+
}
|
|
49
|
+
getMeasureField() {
|
|
50
|
+
const fields = [];
|
|
51
|
+
return this._eventField && fields.push(this._eventField), this._subTitleField && fields.push(this._subTitleField),
|
|
52
|
+
fields;
|
|
53
|
+
}
|
|
54
|
+
initMark() {
|
|
55
|
+
this._axisLineMark = this._createMark(EventSeries.mark.line, {
|
|
56
|
+
isSeriesMark: !0,
|
|
57
|
+
groupKey: this._seriesField
|
|
58
|
+
}), this._arrowMark = this._createMark(EventSeries.mark.arrow, {
|
|
59
|
+
isSeriesMark: !0
|
|
60
|
+
}), this._dotMark = this._createMark(EventSeries.mark.dot, {
|
|
61
|
+
isSeriesMark: !0
|
|
62
|
+
}), this._iconMark = this._createMark(EventSeries.mark.icon, {
|
|
63
|
+
isSeriesMark: !0
|
|
64
|
+
}), this._titleMark = this._createMark(EventSeries.mark.title), this._subTitleMark = this._createMark(EventSeries.mark.subTitle);
|
|
65
|
+
}
|
|
66
|
+
initTooltip() {
|
|
67
|
+
super.initTooltip(), this._dotMark && this._tooltipHelper.activeTriggerSet.mark.add(this._dotMark),
|
|
68
|
+
this._titleMark && this._tooltipHelper.activeTriggerSet.mark.add(this._titleMark),
|
|
69
|
+
this._subTitleMark && this._tooltipHelper.activeTriggerSet.mark.add(this._subTitleMark),
|
|
70
|
+
this._iconMark && this._tooltipHelper.activeTriggerSet.mark.add(this._iconMark),
|
|
71
|
+
this._arrowMark && this._tooltipHelper.activeTriggerSet.mark.add(this._arrowMark);
|
|
72
|
+
}
|
|
73
|
+
initMarkStyle() {
|
|
74
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
75
|
+
this._axisLineMark && this.setMarkStyle(this._axisLineMark, {
|
|
76
|
+
points: this._getAxisPoints.bind(this),
|
|
77
|
+
visible: this._isFirstDataInGroup.bind(this),
|
|
78
|
+
stroke: "#c0c3c7",
|
|
79
|
+
lineWidth: 1
|
|
80
|
+
}, STATE_VALUE_ENUM.STATE_NORMAL, AttributeLevel.Series);
|
|
81
|
+
const dotSpec = this._spec.dot, dotSize = "number" == typeof (null === (_a = null == dotSpec ? void 0 : dotSpec.style) || void 0 === _a ? void 0 : _a.size) ? dotSpec.style.size : 8, titleSpec = this._spec.title, titleStyle = null !== (_b = null == titleSpec ? void 0 : titleSpec.style) && void 0 !== _b ? _b : {}, subTitleSpec = this._spec.subTitle, subTitleStyle = null !== (_c = null == subTitleSpec ? void 0 : subTitleSpec.style) && void 0 !== _c ? _c : {}, titleFontSize = "number" == typeof titleStyle.fontSize ? titleStyle.fontSize : 14, labelOffset = dotSize / 2 + (null !== (_d = null == titleSpec ? void 0 : titleSpec.offset) && void 0 !== _d ? _d : 6);
|
|
82
|
+
this._dotMark && this.setMarkStyle(this._dotMark, {
|
|
83
|
+
x: datum => this._getPoint(datum).x,
|
|
84
|
+
y: datum => this._getPoint(datum).y,
|
|
85
|
+
size: dotSize,
|
|
86
|
+
fill: null !== (_f = null === (_e = null == dotSpec ? void 0 : dotSpec.style) || void 0 === _e ? void 0 : _e.fill) && void 0 !== _f ? _f : this.getColorAttribute()
|
|
87
|
+
}, STATE_VALUE_ENUM.STATE_NORMAL, AttributeLevel.Series), this._arrowMark && this.setMarkStyle(this._arrowMark, {
|
|
88
|
+
path: datum => this._getArrowPath(datum),
|
|
89
|
+
fill: null !== (_h = null === (_g = null == dotSpec ? void 0 : dotSpec.style) || void 0 === _g ? void 0 : _g.fill) && void 0 !== _h ? _h : this.getColorAttribute()
|
|
90
|
+
}, STATE_VALUE_ENUM.STATE_NORMAL, AttributeLevel.Series), this._titleMark && this.setMarkStyle(this._titleMark, Object.assign(Object.assign({
|
|
91
|
+
fontSize: 14
|
|
92
|
+
}, titleStyle), {
|
|
93
|
+
x: datum => this._getTitlePosition(datum, labelOffset).x,
|
|
94
|
+
y: datum => this._getTitlePosition(datum, labelOffset).y,
|
|
95
|
+
textAlign: datum => this._getLabelTextAlign(datum),
|
|
96
|
+
textBaseline: datum => this._getLabelTextBaseline(datum, !0),
|
|
97
|
+
text: datum => this._getDatumString(datum, this._eventField)
|
|
98
|
+
}), STATE_VALUE_ENUM.STATE_NORMAL, AttributeLevel.Series), this._subTitleMark && this.setMarkStyle(this._subTitleMark, Object.assign(Object.assign({}, subTitleStyle), {
|
|
99
|
+
x: datum => this._getSubTitlePosition(datum, labelOffset, titleFontSize).x,
|
|
100
|
+
y: datum => this._getSubTitlePosition(datum, labelOffset, titleFontSize).y,
|
|
101
|
+
textAlign: datum => this._getLabelTextAlign(datum),
|
|
102
|
+
textBaseline: datum => this._getLabelTextBaseline(datum, !1),
|
|
103
|
+
text: datum => this._getDatumString(datum, this._subTitleField)
|
|
104
|
+
}), STATE_VALUE_ENUM.STATE_NORMAL, AttributeLevel.Series);
|
|
105
|
+
const iconSpec = this._spec.icon, iconSize = "number" == typeof (null === (_j = null == iconSpec ? void 0 : iconSpec.style) || void 0 === _j ? void 0 : _j.size) ? iconSpec.style.size : 20, iconOffset = (isValid(null == iconSpec ? void 0 : iconSpec.offset) ? iconSpec.offset + dotSize / 2 : labelOffset) + iconSize / 2;
|
|
106
|
+
this._iconMark && this.setMarkStyle(this._iconMark, {
|
|
107
|
+
x: datum => this._getIconPosition(datum, iconOffset).x,
|
|
108
|
+
y: datum => this._getIconPosition(datum, iconOffset).y,
|
|
109
|
+
size: iconSize,
|
|
110
|
+
fill: null !== (_l = null === (_k = null == iconSpec ? void 0 : iconSpec.style) || void 0 === _k ? void 0 : _k.fill) && void 0 !== _l ? _l : this.getColorAttribute(),
|
|
111
|
+
shape: datum => this._getDatumString(datum, this._iconField) || "circle"
|
|
112
|
+
}, STATE_VALUE_ENUM.STATE_NORMAL, AttributeLevel.Series);
|
|
113
|
+
}
|
|
114
|
+
_getLabelSide(datum) {
|
|
115
|
+
const index = this._getViewDataList().indexOf(datum), position = this._labelPosition;
|
|
116
|
+
if ("vertical" === this.direction) switch (position) {
|
|
117
|
+
case "left":
|
|
118
|
+
default:
|
|
119
|
+
return "primary";
|
|
120
|
+
|
|
121
|
+
case "right":
|
|
122
|
+
return "secondary";
|
|
123
|
+
|
|
124
|
+
case "left-right":
|
|
125
|
+
return index % 2 == 0 ? "primary" : "secondary";
|
|
126
|
+
|
|
127
|
+
case "right-left":
|
|
128
|
+
return index % 2 == 0 ? "secondary" : "primary";
|
|
129
|
+
} else switch (position) {
|
|
130
|
+
case "top":
|
|
131
|
+
default:
|
|
132
|
+
return "primary";
|
|
133
|
+
|
|
134
|
+
case "bottom":
|
|
135
|
+
return "secondary";
|
|
136
|
+
|
|
137
|
+
case "top-bottom":
|
|
138
|
+
return index % 2 == 0 ? "primary" : "secondary";
|
|
139
|
+
|
|
140
|
+
case "bottom-top":
|
|
141
|
+
return index % 2 == 0 ? "secondary" : "primary";
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
_getLabelTextAlign(datum) {
|
|
145
|
+
if ("vertical" === this.direction) {
|
|
146
|
+
return "primary" === this._getLabelSide(datum) ? "right" : "left";
|
|
147
|
+
}
|
|
148
|
+
return "center";
|
|
149
|
+
}
|
|
150
|
+
_getLabelTextBaseline(datum, isTitle) {
|
|
151
|
+
if ("vertical" === this.direction) return "middle";
|
|
152
|
+
return "primary" === this._getLabelSide(datum) ? "bottom" : "top";
|
|
153
|
+
}
|
|
154
|
+
_getTitlePosition(datum, offset) {
|
|
155
|
+
const point = this._getPoint(datum), side = this._getLabelSide(datum);
|
|
156
|
+
return "vertical" === this.direction ? {
|
|
157
|
+
x: "primary" === side ? point.x - offset : point.x + offset,
|
|
158
|
+
y: point.y
|
|
159
|
+
} : {
|
|
160
|
+
x: point.x,
|
|
161
|
+
y: "primary" === side ? point.y - offset : point.y + offset
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
_getSubTitlePosition(datum, offset, titleFontSize) {
|
|
165
|
+
var _a, _b, _c, _d;
|
|
166
|
+
const point = this._getPoint(datum), side = this._getLabelSide(datum), gap = null !== (_b = null === (_a = this._spec.title) || void 0 === _a ? void 0 : _a.subTitleGap) && void 0 !== _b ? _b : 4;
|
|
167
|
+
if ("vertical" === this.direction) {
|
|
168
|
+
const titleStyle = null !== (_d = null === (_c = this._spec.title) || void 0 === _c ? void 0 : _c.style) && void 0 !== _d ? _d : {}, titleLineHeight = "number" == typeof titleStyle.lineHeight ? titleStyle.lineHeight : 1.2 * titleFontSize;
|
|
169
|
+
return {
|
|
170
|
+
x: "primary" === side ? point.x - offset : point.x + offset,
|
|
171
|
+
y: point.y + titleLineHeight + gap
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
x: point.x,
|
|
176
|
+
y: "primary" === side ? point.y - (offset + titleFontSize + gap) : point.y + (offset + titleFontSize + gap)
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
_getIconPosition(datum, offset) {
|
|
180
|
+
const point = this._getPoint(datum), side = this._getLabelSide(datum);
|
|
181
|
+
return "vertical" === this.direction ? {
|
|
182
|
+
x: "primary" === side ? point.x + offset : point.x - offset,
|
|
183
|
+
y: point.y
|
|
184
|
+
} : {
|
|
185
|
+
x: point.x,
|
|
186
|
+
y: "primary" === side ? point.y + offset : point.y - offset
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
_getViewDataList() {
|
|
190
|
+
var _a, _b;
|
|
191
|
+
return null !== (_b = null === (_a = this.getViewData()) || void 0 === _a ? void 0 : _a.latestData) && void 0 !== _b ? _b : [];
|
|
192
|
+
}
|
|
193
|
+
_getPoint(datum) {
|
|
194
|
+
if ("vertical" === this.direction) {
|
|
195
|
+
return {
|
|
196
|
+
x: this._getPositionFromAxis(datum, this.getXAxisHelper(), this._seriesField),
|
|
197
|
+
y: this._getPositionFromAxis(datum, this.getYAxisHelper(), this._timeField)
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
x: this._getPositionFromAxis(datum, this.getXAxisHelper(), this._timeField),
|
|
202
|
+
y: this._getPositionFromAxis(datum, this.getYAxisHelper(), this._seriesField)
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
_getPositionFromAxis(datum, axisHelper, field) {
|
|
206
|
+
var _a, _b, _c, _d, _e, _f;
|
|
207
|
+
if (!axisHelper) return this._getDefaultPosition(field);
|
|
208
|
+
if (!field || !(field in datum)) return this._getDefaultPosition(field);
|
|
209
|
+
const value = datum[field];
|
|
210
|
+
return "band" !== (null === (_b = null === (_a = axisHelper.getSpec) || void 0 === _a ? void 0 : _a.call(axisHelper)) || void 0 === _b ? void 0 : _b.type) && axisHelper.isContinuous ? null !== (_f = null === (_e = axisHelper.valueToPosition) || void 0 === _e ? void 0 : _e.call(axisHelper, value)) && void 0 !== _f ? _f : this._getDefaultPosition(field) : null !== (_d = null === (_c = axisHelper.dataToPosition) || void 0 === _c ? void 0 : _c.call(axisHelper, [ value ], {
|
|
211
|
+
bandPosition: .5
|
|
212
|
+
})) && void 0 !== _d ? _d : this._getDefaultPosition(field);
|
|
213
|
+
}
|
|
214
|
+
onXAxisHelperUpdate() {
|
|
215
|
+
var _a;
|
|
216
|
+
null === (_a = super.onXAxisHelperUpdate) || void 0 === _a || _a.call(this), this.onMarkPositionUpdate();
|
|
217
|
+
}
|
|
218
|
+
onYAxisHelperUpdate() {
|
|
219
|
+
var _a;
|
|
220
|
+
null === (_a = super.onYAxisHelperUpdate) || void 0 === _a || _a.call(this), this.onMarkPositionUpdate();
|
|
221
|
+
}
|
|
222
|
+
_getDefaultPosition(field) {
|
|
223
|
+
const rect = this._region.getLayoutRect();
|
|
224
|
+
if (!this._seriesField || field === this._seriesField) {
|
|
225
|
+
return "vertical" !== this.direction ? .5 * rect.height : .5 * rect.width;
|
|
226
|
+
}
|
|
227
|
+
return 0;
|
|
228
|
+
}
|
|
229
|
+
_getAxisPoints(datum) {
|
|
230
|
+
const rect = this._region.getLayoutRect();
|
|
231
|
+
if ("vertical" === this.direction) {
|
|
232
|
+
const x = this._getPositionFromAxis(datum, this.getXAxisHelper(), this._seriesField);
|
|
233
|
+
return [ {
|
|
234
|
+
x: x,
|
|
235
|
+
y: 0
|
|
236
|
+
}, {
|
|
237
|
+
x: x,
|
|
238
|
+
y: rect.height
|
|
239
|
+
} ];
|
|
240
|
+
}
|
|
241
|
+
const y = this._getPositionFromAxis(datum, this.getYAxisHelper(), this._seriesField);
|
|
242
|
+
return [ {
|
|
243
|
+
x: 0,
|
|
244
|
+
y: y
|
|
245
|
+
}, {
|
|
246
|
+
x: rect.width,
|
|
247
|
+
y: y
|
|
248
|
+
} ];
|
|
249
|
+
}
|
|
250
|
+
_isFirstDataInGroup(datum) {
|
|
251
|
+
if (!this._seriesField) {
|
|
252
|
+
return 0 === this._getViewDataList().indexOf(datum);
|
|
253
|
+
}
|
|
254
|
+
const data = this._getViewDataList(), categoryValue = datum[this._seriesField];
|
|
255
|
+
return datum === data.find((d => this._seriesField && d[this._seriesField] === categoryValue));
|
|
256
|
+
}
|
|
257
|
+
_getNextDatum(datum) {
|
|
258
|
+
const data = this._getViewDataList(), currentIndex = data.indexOf(datum);
|
|
259
|
+
if (-1 === currentIndex || currentIndex === data.length - 1) return null;
|
|
260
|
+
if (!this._seriesField) return data[currentIndex + 1];
|
|
261
|
+
const categoryValue = datum[this._seriesField];
|
|
262
|
+
for (let i = currentIndex + 1; i < data.length; i++) {
|
|
263
|
+
const nextDatum = data[i];
|
|
264
|
+
if (nextDatum[this._seriesField] === categoryValue) return nextDatum;
|
|
265
|
+
}
|
|
266
|
+
return null;
|
|
267
|
+
}
|
|
268
|
+
_getPreviousDatum(datum) {
|
|
269
|
+
const data = this._getViewDataList(), currentIndex = data.indexOf(datum);
|
|
270
|
+
if (-1 === currentIndex || 0 === currentIndex) return null;
|
|
271
|
+
if (!this._seriesField) return data[currentIndex - 1];
|
|
272
|
+
const categoryValue = datum[this._seriesField];
|
|
273
|
+
for (let i = currentIndex - 1; i >= 0; i--) {
|
|
274
|
+
const prevDatum = data[i];
|
|
275
|
+
if (prevDatum[this._seriesField] === categoryValue) return prevDatum;
|
|
276
|
+
}
|
|
277
|
+
return null;
|
|
278
|
+
}
|
|
279
|
+
_getArrowPath(datum) {
|
|
280
|
+
var _a, _b;
|
|
281
|
+
const point = this._getPoint(datum), nextDatum = this._getNextDatum(datum), prevDatum = this._getPreviousDatum(datum), arrowThickness = null !== (_b = null === (_a = this._spec.arrow) || void 0 === _a ? void 0 : _a.thickness) && void 0 !== _b ? _b : 16, rect = this._region.getLayoutRect();
|
|
282
|
+
if ("vertical" === this.direction) {
|
|
283
|
+
const inverse = this.getYAxisHelper().isInverse(), startPoint = prevDatum ? {
|
|
284
|
+
x: point.x,
|
|
285
|
+
y: (this._getPoint(prevDatum).y + point.y) / 2
|
|
286
|
+
} : {
|
|
287
|
+
x: point.x,
|
|
288
|
+
y: inverse ? 0 : rect.height
|
|
289
|
+
}, endPoint = nextDatum ? {
|
|
290
|
+
x: point.x,
|
|
291
|
+
y: (this._getPoint(nextDatum).y + point.y) / 2
|
|
292
|
+
} : {
|
|
293
|
+
x: point.x,
|
|
294
|
+
y: inverse ? rect.height : 0
|
|
295
|
+
}, tag = inverse ? 1 : -1, arrowHeight = arrowThickness / 3, arrowWidth = arrowThickness / 2;
|
|
296
|
+
return `M ${startPoint.x - arrowWidth} ${startPoint.y} L ${startPoint.x} ${startPoint.y + tag * arrowHeight} L ${startPoint.x + arrowWidth} ${startPoint.y} \n L ${endPoint.x + arrowWidth} ${endPoint.y - tag * arrowHeight} \n L ${endPoint.x} ${endPoint.y}\n L ${endPoint.x - arrowWidth} ${endPoint.y - tag * arrowHeight} Z`;
|
|
297
|
+
}
|
|
298
|
+
const inverse = this.getXAxisHelper().isInverse(), startPoint = prevDatum ? {
|
|
299
|
+
x: (this._getPoint(prevDatum).x + point.x) / 2,
|
|
300
|
+
y: point.y
|
|
301
|
+
} : {
|
|
302
|
+
x: inverse ? rect.width : 0,
|
|
303
|
+
y: point.y
|
|
304
|
+
}, endPoint = nextDatum ? {
|
|
305
|
+
x: (this._getPoint(nextDatum).x + point.x) / 2,
|
|
306
|
+
y: point.y
|
|
307
|
+
} : {
|
|
308
|
+
x: inverse ? 0 : rect.width,
|
|
309
|
+
y: point.y
|
|
310
|
+
}, tag = inverse ? -1 : 1, arrowHeight = arrowThickness / 2, arrowWidth = arrowThickness / 3;
|
|
311
|
+
return `M ${startPoint.x} ${startPoint.y - arrowHeight} L ${startPoint.x + tag * arrowWidth} ${startPoint.y} L ${startPoint.x} ${startPoint.y + arrowHeight} \n L ${endPoint.x - tag * arrowWidth} ${endPoint.y + arrowHeight} \n L ${endPoint.x} ${endPoint.y} \n L ${endPoint.x - tag * arrowWidth} ${endPoint.y - arrowHeight} Z`;
|
|
312
|
+
}
|
|
313
|
+
_getDatumString(datum, field) {
|
|
314
|
+
if (!datum || !field) return "";
|
|
315
|
+
const value = datum[field];
|
|
316
|
+
return "string" == typeof value ? value : null == value ? "" : String(value);
|
|
317
|
+
}
|
|
318
|
+
valueToPosition(timeValue, eventValue) {
|
|
319
|
+
if (timeValue && "object" == typeof timeValue) return this.dataToPosition(timeValue);
|
|
320
|
+
const mockDatum = {};
|
|
321
|
+
return this._timeField && (mockDatum[this._timeField] = timeValue), this._eventField && void 0 !== eventValue && (mockDatum[this._eventField] = eventValue),
|
|
322
|
+
this._getPoint(mockDatum);
|
|
323
|
+
}
|
|
324
|
+
getActiveMarks() {
|
|
325
|
+
return [ this._axisLineMark, this._dotMark, this._iconMark, this._arrowMark, this._titleMark, this._subTitleMark ].filter(Boolean);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
EventSeries.type = EVENT_SERIES_TYPE, EventSeries.mark = eventSeriesMark, EventSeries.builtInTheme = {
|
|
330
|
+
event: event
|
|
331
|
+
}, EventSeries.transformerConstructor = BaseSeriesSpecTransformer;
|
|
332
|
+
|
|
333
|
+
export const registerEventSeries = () => {
|
|
334
|
+
registerSymbolMark(), registerTextMark(), registerLineMark(), registerPathMark(),
|
|
335
|
+
Factory.registerSeries(EventSeries.type, EventSeries);
|
|
336
|
+
};
|
|
337
|
+
//# sourceMappingURL=event-series.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/charts/timeline/series/event-series.ts"],"names":[],"mappings":"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","file":"event-series.js","sourcesContent":["import type { StringOrNumber } from '@visactor/vchart';\nimport {\n AttributeLevel,\n CartesianSeries,\n Factory,\n MarkTypeEnum,\n SeriesMarkNameEnum,\n baseSeriesMark,\n registerSymbolMark,\n registerTextMark,\n registerLineMark,\n registerPathMark,\n STATE_VALUE_ENUM,\n type Datum,\n type IMark,\n type IPoint,\n type SeriesMarkMap,\n BaseSeriesSpecTransformer\n} from '@visactor/vchart';\nimport { EVENT_SERIES_TYPE } from './constant';\nimport type { IEventSeriesSpec, LabelPosition } from './interface';\nimport { event } from './theme';\nimport { isValid } from '@visactor/vutils';\n\ntype AxisHelper = {\n isContinuous?: boolean;\n getSpec?: () => { type?: string };\n dataToPosition?: (values: unknown[], cfg?: { bandPosition?: number }) => number;\n valueToPosition?: (value: unknown) => number;\n};\n\nconst eventSeriesMark = {\n ...baseSeriesMark,\n [SeriesMarkNameEnum.line]: { name: SeriesMarkNameEnum.line, type: MarkTypeEnum.line },\n [SeriesMarkNameEnum.dot]: { name: SeriesMarkNameEnum.dot, type: MarkTypeEnum.symbol },\n icon: { name: 'icon', type: MarkTypeEnum.symbol },\n [SeriesMarkNameEnum.title]: { name: SeriesMarkNameEnum.title, type: MarkTypeEnum.text },\n [SeriesMarkNameEnum.subTitle]: { name: SeriesMarkNameEnum.subTitle, type: MarkTypeEnum.text },\n arrow: { name: 'arrow', type: MarkTypeEnum.path }\n} as any;\n\nexport class EventSeries<T extends IEventSeriesSpec = IEventSeriesSpec> extends CartesianSeries<T> {\n static readonly type: string = EVENT_SERIES_TYPE;\n type = EVENT_SERIES_TYPE as any;\n\n static readonly mark: SeriesMarkMap = eventSeriesMark;\n static readonly builtInTheme = { event };\n static readonly transformerConstructor = BaseSeriesSpecTransformer as any;\n readonly transformerConstructor = BaseSeriesSpecTransformer as any;\n\n readonly coordinate: 'cartesian' = 'cartesian';\n\n protected declare _spec: T;\n\n private _dotMark?: IMark;\n private _iconMark?: IMark;\n private _titleMark?: IMark;\n private _subTitleMark?: IMark;\n private _axisLineMark?: IMark;\n private _arrowMark?: IMark;\n\n private _timeField?: string;\n private _eventField?: string;\n private _subTitleField?: string;\n private _iconField?: string;\n private _labelPosition?: LabelPosition;\n\n setAttrFromSpec(): void {\n super.setAttrFromSpec();\n this.setSeriesField(this._spec.seriesField);\n this._timeField = this._spec.timeField as string | undefined;\n this._eventField = this._spec.eventField;\n this._subTitleField = this._spec.subTitleField;\n this._iconField = this._spec.iconField;\n this._labelPosition = this._spec.labelPosition;\n }\n\n getDimensionField(): string[] {\n return this._timeField ? [this._timeField] : [];\n }\n\n getMeasureField(): string[] {\n const fields: string[] = [];\n if (this._eventField) {\n fields.push(this._eventField);\n }\n if (this._subTitleField) {\n fields.push(this._subTitleField);\n }\n return fields;\n }\n\n initMark(): void {\n this._axisLineMark = this._createMark(EventSeries.mark.line, {\n isSeriesMark: true,\n groupKey: this._seriesField\n });\n this._arrowMark = this._createMark((EventSeries.mark as any).arrow, {\n isSeriesMark: true\n });\n\n this._dotMark = this._createMark(EventSeries.mark.dot, {\n isSeriesMark: true\n });\n\n this._iconMark = this._createMark((EventSeries.mark as any).icon, {\n isSeriesMark: true\n });\n this._titleMark = this._createMark(EventSeries.mark.title);\n\n this._subTitleMark = this._createMark(EventSeries.mark.subTitle);\n }\n\n protected initTooltip() {\n super.initTooltip();\n\n // 将 dot、icon 和 arrow mark 添加到 tooltip 触发器集合中\n this._dotMark && this._tooltipHelper.activeTriggerSet.mark.add(this._dotMark);\n this._titleMark && this._tooltipHelper.activeTriggerSet.mark.add(this._titleMark);\n this._subTitleMark && this._tooltipHelper.activeTriggerSet.mark.add(this._subTitleMark);\n this._iconMark && this._tooltipHelper.activeTriggerSet.mark.add(this._iconMark);\n this._arrowMark && this._tooltipHelper.activeTriggerSet.mark.add(this._arrowMark);\n }\n\n initMarkStyle(): void {\n if (this._axisLineMark) {\n this.setMarkStyle(\n this._axisLineMark,\n {\n points: this._getAxisPoints.bind(this),\n visible: this._isFirstDataInGroup.bind(this),\n stroke: '#c0c3c7',\n lineWidth: 1\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n const dotSpec = this._spec.dot as { style?: { size?: number; fill?: unknown } } | undefined;\n const dotSize = typeof dotSpec?.style?.size === 'number' ? dotSpec.style.size : 8;\n\n const titleSpec = this._spec.title;\n const titleStyle = titleSpec?.style ?? {};\n const subTitleSpec = this._spec.subTitle;\n const subTitleStyle = subTitleSpec?.style ?? {};\n\n // 获取 title 字体大小,用于计算 subTitle 的位置\n const titleFontSize = typeof titleStyle.fontSize === 'number' ? titleStyle.fontSize : 14;\n\n // dot 和 label 之间的间距\n const labelOffset = dotSize / 2 + (titleSpec?.offset ?? 6);\n\n if (this._dotMark) {\n this.setMarkStyle(\n this._dotMark,\n {\n x: (datum: Datum) => this._getPoint(datum).x,\n y: (datum: Datum) => this._getPoint(datum).y,\n size: dotSize,\n fill: dotSpec?.style?.fill ?? this.getColorAttribute()\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n if (this._arrowMark) {\n this.setMarkStyle(\n this._arrowMark,\n {\n path: (datum: Datum) => this._getArrowPath(datum),\n fill: dotSpec?.style?.fill ?? this.getColorAttribute()\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n if (this._titleMark) {\n this.setMarkStyle(\n this._titleMark,\n {\n fontSize: 14,\n ...titleStyle,\n x: (datum: Datum) => this._getTitlePosition(datum, labelOffset).x,\n y: (datum: Datum) => this._getTitlePosition(datum, labelOffset).y,\n textAlign: (datum: Datum) => this._getLabelTextAlign(datum),\n textBaseline: (datum: Datum) => this._getLabelTextBaseline(datum, true),\n text: (datum: Datum) => this._getDatumString(datum, this._eventField)\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n if (this._subTitleMark) {\n this.setMarkStyle(\n this._subTitleMark,\n {\n ...subTitleStyle,\n x: (datum: Datum) => this._getSubTitlePosition(datum, labelOffset, titleFontSize).x,\n y: (datum: Datum) => this._getSubTitlePosition(datum, labelOffset, titleFontSize).y,\n textAlign: (datum: Datum) => this._getLabelTextAlign(datum),\n textBaseline: (datum: Datum) => this._getLabelTextBaseline(datum, false),\n text: (datum: Datum) => this._getDatumString(datum, this._subTitleField)\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n\n // icon 和 line 之间的间距\n\n const iconSpec = this._spec.icon as { offset?: number; style?: { size?: number; fill?: unknown } } | undefined;\n const iconSize = typeof iconSpec?.style?.size === 'number' ? iconSpec.style.size : 20;\n const iconOffset = (isValid(iconSpec?.offset) ? iconSpec.offset + dotSize / 2 : labelOffset) + iconSize / 2;\n\n if (this._iconMark) {\n this.setMarkStyle(\n this._iconMark,\n {\n x: (datum: Datum) => this._getIconPosition(datum, iconOffset).x,\n y: (datum: Datum) => this._getIconPosition(datum, iconOffset).y,\n size: iconSize,\n fill: iconSpec?.style?.fill ?? this.getColorAttribute(),\n shape: (datum: Datum) => this._getDatumString(datum, this._iconField) || 'circle'\n },\n STATE_VALUE_ENUM.STATE_NORMAL,\n AttributeLevel.Series\n );\n }\n }\n\n /**\n * 根据数据索引判断标签应该放在哪一侧\n * @returns 'primary' 表示 top/left,'secondary' 表示 bottom/right\n */\n private _getLabelSide(datum: Datum): 'primary' | 'secondary' {\n const data = this._getViewDataList();\n const index = data.indexOf(datum);\n const position = this._labelPosition;\n\n if (this.direction === 'vertical') {\n // vertical 布局: left/right\n switch (position) {\n case 'left':\n return 'primary';\n case 'right':\n return 'secondary';\n case 'left-right':\n return index % 2 === 0 ? 'primary' : 'secondary';\n case 'right-left':\n return index % 2 === 0 ? 'secondary' : 'primary';\n default:\n return 'primary'; // 默认 left\n }\n } else {\n // horizontal 布局: top/bottom\n switch (position) {\n case 'top':\n return 'primary';\n case 'bottom':\n return 'secondary';\n case 'top-bottom':\n return index % 2 === 0 ? 'primary' : 'secondary';\n case 'bottom-top':\n return index % 2 === 0 ? 'secondary' : 'primary';\n default:\n return 'primary'; // 默认 top\n }\n }\n }\n\n /**\n * 获取标签的文本对齐方式\n */\n private _getLabelTextAlign(datum: Datum): 'left' | 'right' | 'center' {\n if (this.direction === 'vertical') {\n const side = this._getLabelSide(datum);\n return side === 'primary' ? 'right' : 'left';\n }\n return 'center';\n }\n\n /**\n * 获取标签的文本基线\n */\n private _getLabelTextBaseline(datum: Datum, isTitle: boolean): 'top' | 'bottom' | 'middle' {\n if (this.direction === 'vertical') {\n // vertical 布局时:title 用 top,subTitle 用 top\n return 'middle';\n }\n const side = this._getLabelSide(datum);\n return side === 'primary' ? 'bottom' : 'top';\n }\n\n /**\n * 获取 title 的位置\n */\n private _getTitlePosition(datum: Datum, offset: number): IPoint {\n const point = this._getPoint(datum);\n const side = this._getLabelSide(datum);\n\n if (this.direction === 'vertical') {\n // vertical: left/right,标签垂直排列\n return {\n x: side === 'primary' ? point.x - offset : point.x + offset,\n y: point.y\n };\n }\n // horizontal: top/bottom\n return {\n x: point.x,\n y: side === 'primary' ? point.y - offset : point.y + offset\n };\n }\n\n /**\n * 获取 subTitle 的位置\n */\n private _getSubTitlePosition(datum: Datum, offset: number, titleFontSize: number): IPoint {\n const point = this._getPoint(datum);\n const side = this._getLabelSide(datum);\n const gap = this._spec.title?.subTitleGap ?? 4;\n\n if (this.direction === 'vertical') {\n // vertical: left/right,subTitle 在 title 下方\n // offset 是 title 的偏移,subTitle 需要在 title 基础上再向下偏移\n const titleStyle = this._spec.title?.style ?? {};\n const titleLineHeight = typeof titleStyle.lineHeight === 'number' ? titleStyle.lineHeight : titleFontSize * 1.2;\n\n return {\n x: side === 'primary' ? point.x - offset : point.x + offset,\n y: point.y + titleLineHeight + gap\n };\n }\n // horizontal: top/bottom\n return {\n x: point.x,\n y: side === 'primary' ? point.y - (offset + titleFontSize + gap) : point.y + (offset + titleFontSize + gap)\n };\n }\n\n /**\n * 获取 icon 的位置\n * icon 与 title 关于 lineMark 对称\n */\n private _getIconPosition(datum: Datum, offset: number): IPoint {\n const point = this._getPoint(datum);\n const side = this._getLabelSide(datum);\n\n if (this.direction === 'vertical') {\n // vertical: 当 title 在 right 时,icon 在 left;当 title 在 left 时,icon 在 right\n return {\n x: side === 'primary' ? point.x + offset : point.x - offset,\n y: point.y\n };\n }\n // horizontal: 当 title 在 top 时,icon 在 bottom;当 title 在 bottom 时,icon 在 top\n return {\n x: point.x,\n y: side === 'primary' ? point.y + offset : point.y - offset\n };\n }\n\n private _getViewDataList(): Datum[] {\n return this.getViewData()?.latestData ?? [];\n }\n\n private _getPoint(datum: Datum): IPoint {\n if (this.direction === 'vertical') {\n // vertical 布局:x 轴是分类方向(seriesField),y 轴是时间方向(timeField)\n const x = this._getPositionFromAxis(datum, this.getXAxisHelper(), this._seriesField);\n const y = this._getPositionFromAxis(datum, this.getYAxisHelper(), this._timeField);\n return { x, y };\n }\n\n // horizontal 布局:x 轴是时间方向(timeField),y 轴是分类方向(seriesField)\n const x = this._getPositionFromAxis(datum, this.getXAxisHelper(), this._timeField);\n const y = this._getPositionFromAxis(datum, this.getYAxisHelper(), this._seriesField);\n return { x, y };\n }\n\n /**\n * 根据轴的类型计算位置\n * @param datum 数据项\n * @param axisHelper 轴助手\n * @param field 字段名\n * @returns 位置值\n */\n private _getPositionFromAxis(datum: Datum, axisHelper: AxisHelper | undefined, field?: string): number {\n if (!axisHelper) {\n // 如果没有轴助手,使用默认的中间位置\n return this._getDefaultPosition(field);\n }\n\n if (!field || !(field in datum)) {\n // 如果没有字段或数据中没有该字段,使用默认位置\n return this._getDefaultPosition(field);\n }\n\n const value = (datum as Record<string, unknown>)[field];\n const axisType = axisHelper.getSpec?.()?.type;\n\n // 根据轴类型选择不同的计算方式\n if (axisType === 'band' || !axisHelper.isContinuous) {\n // band 轴:使用 dataToPosition,传入值数组\n return axisHelper.dataToPosition?.([value], { bandPosition: 0.5 }) ?? this._getDefaultPosition(field);\n }\n\n // linear/time 轴:使用 valueToPosition,直接传入值\n return axisHelper.valueToPosition?.(value) ?? this._getDefaultPosition(field);\n }\n\n onXAxisHelperUpdate(): void {\n super.onXAxisHelperUpdate?.();\n this.onMarkPositionUpdate();\n }\n\n onYAxisHelperUpdate(): void {\n super.onYAxisHelperUpdate?.();\n this.onMarkPositionUpdate();\n }\n\n /**\n * 获取默认位置(当没有轴或字段时使用)\n */\n private _getDefaultPosition(field?: string): number {\n const rect = this._region.getLayoutRect();\n\n // 如果没有 seriesField,说明没有分类轴,返回中心位置\n if (!this._seriesField || field === this._seriesField) {\n const isHorizontal = this.direction !== 'vertical';\n // horizontal 布局:返回垂直中心(y方向)\n // vertical 布局:返回水平中心(x方向)\n return isHorizontal ? rect.height * 0.5 : rect.width * 0.5;\n }\n\n // 对于时间轴,返回区域起点\n return 0;\n }\n\n private _getAxisPoints(datum: Datum): IPoint[] {\n const rect = this._region.getLayoutRect();\n\n if (this.direction === 'vertical') {\n // vertical 布局:轴是垂直的,x 位置根据 seriesField 计算\n const x = this._getPositionFromAxis(datum, this.getXAxisHelper(), this._seriesField);\n return [\n { x, y: 0 },\n { x, y: rect.height }\n ];\n }\n\n // horizontal 布局:轴是水平的,y 位置根据 seriesField 计算\n const y = this._getPositionFromAxis(datum, this.getYAxisHelper(), this._seriesField);\n return [\n { x: 0, y },\n { x: rect.width, y }\n ];\n }\n\n private _isFirstDataInGroup(datum: Datum): boolean {\n if (!this._seriesField) {\n const data = this._getViewDataList();\n return data.indexOf(datum) === 0;\n }\n\n const data = this._getViewDataList();\n const categoryValue = (datum as Record<string, unknown>)[this._seriesField];\n\n // 找到该分类中的第一条数据\n const firstInGroup = data.find(\n d => this._seriesField && (d as Record<string, unknown>)[this._seriesField] === categoryValue\n );\n return datum === firstInGroup;\n }\n\n private _getNextDatum(datum: Datum): Datum | null {\n const data = this._getViewDataList();\n const currentIndex = data.indexOf(datum);\n\n if (currentIndex === -1 || currentIndex === data.length - 1) {\n return null;\n }\n\n if (!this._seriesField) {\n return data[currentIndex + 1];\n }\n\n const categoryValue = (datum as Record<string, unknown>)[this._seriesField];\n\n // 在同一分组中找到下一个数据\n for (let i = currentIndex + 1; i < data.length; i++) {\n const nextDatum = data[i];\n if ((nextDatum as Record<string, unknown>)[this._seriesField] === categoryValue) {\n return nextDatum;\n }\n }\n\n return null;\n }\n\n private _getPreviousDatum(datum: Datum): Datum | null {\n const data = this._getViewDataList();\n const currentIndex = data.indexOf(datum);\n\n if (currentIndex === -1 || currentIndex === 0) {\n return null;\n }\n\n if (!this._seriesField) {\n return data[currentIndex - 1];\n }\n\n const categoryValue = (datum as Record<string, unknown>)[this._seriesField];\n\n // 在同一分组中找到上一个数据\n for (let i = currentIndex - 1; i >= 0; i--) {\n const prevDatum = data[i];\n if ((prevDatum as Record<string, unknown>)[this._seriesField] === categoryValue) {\n return prevDatum;\n }\n }\n\n return null;\n }\n\n private _getArrowPath(datum: Datum): string {\n const point = this._getPoint(datum);\n const nextDatum = this._getNextDatum(datum);\n const prevDatum = this._getPreviousDatum(datum);\n\n const arrowThickness = this._spec.arrow?.thickness ?? 16;\n const rect = this._region.getLayoutRect();\n\n if (this.direction === 'vertical') {\n const axisHelper = this.getYAxisHelper();\n const inverse = axisHelper.isInverse();\n const startPoint = prevDatum\n ? {\n x: point.x,\n y: (this._getPoint(prevDatum).y + point.y) / 2\n }\n : { x: point.x, y: inverse ? 0 : rect.height };\n const endPoint = nextDatum\n ? {\n x: point.x,\n y: (this._getPoint(nextDatum).y + point.y) / 2\n }\n : { x: point.x, y: inverse ? rect.height : 0 };\n const tag = inverse ? 1 : -1;\n\n const arrowHeight = arrowThickness / 3;\n const arrowWidth = arrowThickness / 2;\n\n return `M ${startPoint.x - arrowWidth} ${startPoint.y} L ${startPoint.x} ${startPoint.y + tag * arrowHeight} L ${\n startPoint.x + arrowWidth\n } ${startPoint.y} \n L ${endPoint.x + arrowWidth} ${endPoint.y - tag * arrowHeight} \n L ${endPoint.x} ${endPoint.y}\n L ${endPoint.x - arrowWidth} ${endPoint.y - tag * arrowHeight} Z`;\n }\n\n const axisHelper = this.getXAxisHelper();\n const inverse = axisHelper.isInverse();\n const startPoint = prevDatum\n ? {\n x: (this._getPoint(prevDatum).x + point.x) / 2,\n y: point.y\n }\n : { x: inverse ? rect.width : 0, y: point.y };\n const endPoint = nextDatum\n ? {\n x: (this._getPoint(nextDatum).x + point.x) / 2,\n y: point.y\n }\n : { x: inverse ? 0 : rect.width, y: point.y };\n const tag = inverse ? -1 : 1;\n\n const arrowHeight = arrowThickness / 2;\n const arrowWidth = arrowThickness / 3;\n\n return `M ${startPoint.x} ${startPoint.y - arrowHeight} L ${startPoint.x + tag * arrowWidth} ${startPoint.y} L ${\n startPoint.x\n } ${startPoint.y + arrowHeight} \n L ${endPoint.x - tag * arrowWidth} ${endPoint.y + arrowHeight} \n L ${endPoint.x} ${endPoint.y} \n L ${endPoint.x - tag * arrowWidth} ${endPoint.y - arrowHeight} Z`;\n }\n\n private _getDatumString(datum: Datum | undefined, field?: string): string {\n if (!datum || !field) {\n return '';\n }\n const value = (datum as Record<string, unknown>)[field];\n return typeof value === 'string' ? value : value == null ? '' : String(value);\n }\n\n valueToPosition(timeValue: StringOrNumber, eventValue?: StringOrNumber): IPoint {\n if (timeValue && typeof timeValue === 'object') {\n return this.dataToPosition(timeValue as Datum);\n }\n\n const mockDatum: Record<string, unknown> = {};\n if (this._timeField) {\n mockDatum[this._timeField] = timeValue;\n }\n if (this._eventField && eventValue !== undefined) {\n mockDatum[this._eventField] = eventValue;\n }\n return this._getPoint(mockDatum as Datum);\n }\n\n getActiveMarks(): IMark[] {\n return [\n this._axisLineMark,\n this._dotMark,\n this._iconMark,\n this._arrowMark,\n this._titleMark,\n this._subTitleMark\n ].filter(Boolean) as IMark[];\n }\n}\n\nexport const registerEventSeries = () => {\n registerSymbolMark();\n registerTextMark();\n registerLineMark();\n registerPathMark();\n Factory.registerSeries(EventSeries.type, EventSeries);\n};\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { IMarkSpec, ISymbolMarkSpec, ITextMarkSpec, ILineMarkSpec, IPathMarkSpec, ICartesianSeriesSpec } from '@visactor/vchart';
|
|
2
|
+
export type HorizontalLabelPosition = 'top' | 'bottom' | 'top-bottom' | 'bottom-top';
|
|
3
|
+
export type VerticalLabelPosition = 'left' | 'right' | 'left-right' | 'right-left';
|
|
4
|
+
export type LabelPosition = HorizontalLabelPosition | VerticalLabelPosition;
|
|
5
|
+
export interface IEventSeriesSpec extends ICartesianSeriesSpec, IEventSeriesTheme {
|
|
6
|
+
type: 'event';
|
|
7
|
+
timeField?: string;
|
|
8
|
+
eventField?: string;
|
|
9
|
+
subTitleField?: string;
|
|
10
|
+
seriesField?: string;
|
|
11
|
+
iconField?: string;
|
|
12
|
+
labelPosition?: LabelPosition;
|
|
13
|
+
}
|
|
14
|
+
export interface IEventSeriesTheme {
|
|
15
|
+
dot?: IMarkSpec<ISymbolMarkSpec>;
|
|
16
|
+
icon?: IMarkSpec<ISymbolMarkSpec> & {
|
|
17
|
+
offset?: number;
|
|
18
|
+
};
|
|
19
|
+
title?: IMarkSpec<ITextMarkSpec> & {
|
|
20
|
+
subTitleGap?: number;
|
|
21
|
+
offset?: number;
|
|
22
|
+
};
|
|
23
|
+
subTitle?: IMarkSpec<ITextMarkSpec>;
|
|
24
|
+
line?: IMarkSpec<ILineMarkSpec>;
|
|
25
|
+
arrow?: IMarkSpec<IPathMarkSpec> & {
|
|
26
|
+
thickness?: number;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/charts/timeline/series/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type {\n IMarkSpec,\n ISymbolMarkSpec,\n ITextMarkSpec,\n ILineMarkSpec,\n IPathMarkSpec,\n ICartesianSeriesSpec\n} from '@visactor/vchart';\n\n/** horizontal 布局时的标题位置 */\nexport type HorizontalLabelPosition = 'top' | 'bottom' | 'top-bottom' | 'bottom-top';\n\n/** vertical 布局时的标题位置 */\nexport type VerticalLabelPosition = 'left' | 'right' | 'left-right' | 'right-left';\n\n/** 标题位置配置 */\nexport type LabelPosition = HorizontalLabelPosition | VerticalLabelPosition;\n\nexport interface IEventSeriesSpec extends ICartesianSeriesSpec, IEventSeriesTheme {\n type: 'event';\n /**\n * 时间字段,用于指定事件在时间轴上的位置\n */\n timeField?: string;\n /**\n * 事件名称字段\n */\n eventField?: string;\n /**\n * 事件详情字段(副标题)\n */\n subTitleField?: string;\n /**\n * 系列字段,用于分组显示\n */\n seriesField?: string;\n /**\n * 图标字段,用于显示图标或图片\n */\n iconField?: string;\n /** 标题和副标题的位置 */\n labelPosition?: LabelPosition;\n}\n\nexport interface IEventSeriesTheme {\n /**\n * 点图元配置\n */\n dot?: IMarkSpec<ISymbolMarkSpec>;\n /**\n * 图标图元配置\n * offset: 图标相对于点的偏移距离,单位像素,正值向外偏移,负值向内偏移\n */\n icon?: IMarkSpec<ISymbolMarkSpec> & { offset?: number };\n /**\n * 事件标题图元配置\n * subTitleGap: 标题与副标题的间距,单位像素\n * offset: 标题相对于点的偏移距离,单位像素,正值向外偏移,负值向内偏移\n */\n title?: IMarkSpec<ITextMarkSpec> & { subTitleGap?: number; offset?: number };\n /**\n * 事件副标题图元配置\n */\n subTitle?: IMarkSpec<ITextMarkSpec>;\n /**\n * 事件线图元配置\n */\n line?: IMarkSpec<ILineMarkSpec>;\n /**\n * 箭头图元配置\n * thickness: 箭头的厚度,单位像素\n */\n arrow?: IMarkSpec<IPathMarkSpec> & { thickness?: number };\n}\n"]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export const event = {
|
|
2
|
+
dot: {
|
|
3
|
+
style: {
|
|
4
|
+
size: 8
|
|
5
|
+
}
|
|
6
|
+
},
|
|
7
|
+
icon: {
|
|
8
|
+
visible: !1,
|
|
9
|
+
style: {
|
|
10
|
+
size: 20
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
line: {
|
|
14
|
+
visible: !0,
|
|
15
|
+
style: {
|
|
16
|
+
stroke: "#c0c3c7",
|
|
17
|
+
lineWidth: 1
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
title: {
|
|
21
|
+
visible: !0,
|
|
22
|
+
offset: 6,
|
|
23
|
+
subTitleGap: 4,
|
|
24
|
+
style: {
|
|
25
|
+
fontSize: 14
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
subTitle: {
|
|
29
|
+
visible: !0,
|
|
30
|
+
style: {
|
|
31
|
+
fontSize: 12
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
arrow: {
|
|
35
|
+
visible: !1,
|
|
36
|
+
thickness: 16
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/charts/timeline/series/theme.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,KAAK,GAAsB;IACtC,GAAG,EAAE;QACH,KAAK,EAAE;YACL,IAAI,EAAE,CAAC;SACR;KACF;IACD,IAAI,EAAE;QACJ,OAAO,EAAE,KAAK;QACd,KAAK,EAAE;YACL,IAAI,EAAE,EAAE;SACT;KACF;IACD,IAAI,EAAE;QACJ,OAAO,EAAE,IAAI;QACb,KAAK,EAAE;YACL,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,CAAC;SACb;KACF;IACD,KAAK,EAAE;QACL,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,CAAC;QACT,WAAW,EAAE,CAAC;QACd,KAAK,EAAE;YACL,QAAQ,EAAE,EAAE;SACb;KACF;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,IAAI;QACb,KAAK,EAAE;YACL,QAAQ,EAAE,EAAE;SACb;KACF;IACD,KAAK,EAAE;QACL,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,EAAE;KACd;CACF,CAAC","file":"theme.js","sourcesContent":["import type { IEventSeriesTheme } from './interface';\n\nexport const event: IEventSeriesTheme = {\n dot: {\n style: {\n size: 8\n }\n },\n icon: {\n visible: false,\n style: {\n size: 20\n }\n },\n line: {\n visible: true,\n style: {\n stroke: '#c0c3c7',\n lineWidth: 1\n }\n },\n title: {\n visible: true,\n offset: 6,\n subTitleGap: 4,\n style: {\n fontSize: 14\n }\n },\n subTitle: {\n visible: true,\n style: {\n fontSize: 12\n }\n },\n arrow: {\n visible: false,\n thickness: 16\n }\n};\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BaseChartSpecTransformer } from '@visactor/vchart';
|
|
2
|
+
import type { ICartesianAxisSpec } from '@visactor/vchart';
|
|
3
|
+
import type { ITimelineChartSpec } from './interface';
|
|
4
|
+
export declare class TimelineChartSpecTransformer<T extends ITimelineChartSpec = ITimelineChartSpec> extends BaseChartSpecTransformer<T> {
|
|
5
|
+
protected _getDefaultSeriesSpec(spec: T): any;
|
|
6
|
+
protected _setDefaultXAxisSpec(spec: T): ICartesianAxisSpec;
|
|
7
|
+
protected _setDefaultYAxisSpec(spec: T): ICartesianAxisSpec;
|
|
8
|
+
protected _transformAxisSpec(spec: T): void;
|
|
9
|
+
transformSpec(spec: T): void;
|
|
10
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { BaseChartSpecTransformer } from "@visactor/vchart";
|
|
2
|
+
|
|
3
|
+
import { isNil, merge, isObject } from "@visactor/vutils";
|
|
4
|
+
|
|
5
|
+
export class TimelineChartSpecTransformer extends BaseChartSpecTransformer {
|
|
6
|
+
_getDefaultSeriesSpec(spec) {
|
|
7
|
+
return super._getDefaultSeriesSpec(spec, [ "timeField", "eventField", "seriesField", "titleField", "subTitleField", "iconField", "dot", "title", "subTitle", "icon", "line", "arrow", "labelPosition", "sortDataByAxis" ]);
|
|
8
|
+
}
|
|
9
|
+
_setDefaultXAxisSpec(spec) {
|
|
10
|
+
return {
|
|
11
|
+
type: "band",
|
|
12
|
+
orient: "bottom",
|
|
13
|
+
label: {
|
|
14
|
+
visible: !1
|
|
15
|
+
},
|
|
16
|
+
tick: {
|
|
17
|
+
visible: !1
|
|
18
|
+
},
|
|
19
|
+
grid: {
|
|
20
|
+
visible: !1
|
|
21
|
+
},
|
|
22
|
+
domainLine: {
|
|
23
|
+
visible: !1
|
|
24
|
+
},
|
|
25
|
+
paddingInner: 0,
|
|
26
|
+
paddingOuter: 0
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
_setDefaultYAxisSpec(spec) {
|
|
30
|
+
return {
|
|
31
|
+
type: "band",
|
|
32
|
+
inverse: !0,
|
|
33
|
+
orient: "left",
|
|
34
|
+
label: {
|
|
35
|
+
visible: !1
|
|
36
|
+
},
|
|
37
|
+
tick: {
|
|
38
|
+
visible: !1
|
|
39
|
+
},
|
|
40
|
+
grid: {
|
|
41
|
+
visible: !1
|
|
42
|
+
},
|
|
43
|
+
domainLine: {
|
|
44
|
+
visible: !1
|
|
45
|
+
},
|
|
46
|
+
paddingInner: 0,
|
|
47
|
+
paddingOuter: 0
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
_transformAxisSpec(spec) {
|
|
51
|
+
spec.axes || (spec.axes = []);
|
|
52
|
+
const haxAxes = {
|
|
53
|
+
x: !1,
|
|
54
|
+
y: !1
|
|
55
|
+
};
|
|
56
|
+
spec.axes.forEach((axis => {
|
|
57
|
+
const {orient: orient} = axis;
|
|
58
|
+
let defaultSpec = null;
|
|
59
|
+
"top" !== orient && "bottom" !== orient || (haxAxes.x = !0, defaultSpec = this._setDefaultXAxisSpec(spec)),
|
|
60
|
+
"left" !== orient && "right" !== orient || (haxAxes.y = !0, defaultSpec = this._setDefaultYAxisSpec(spec)),
|
|
61
|
+
defaultSpec && Object.keys(defaultSpec).forEach((key => {
|
|
62
|
+
axis[key] = isObject(axis[key]) ? merge(defaultSpec[key], axis[key]) : isNil(axis[key]) ? defaultSpec[key] : axis[key];
|
|
63
|
+
}));
|
|
64
|
+
})), haxAxes.x || spec.axes.push(this._setDefaultXAxisSpec(spec)), haxAxes.y || spec.axes.push(this._setDefaultYAxisSpec(spec));
|
|
65
|
+
}
|
|
66
|
+
transformSpec(spec) {
|
|
67
|
+
var _a, _b;
|
|
68
|
+
super.transformSpec(spec), this.transformSeriesSpec(spec), this._transformAxisSpec(spec);
|
|
69
|
+
const direction = null !== (_a = spec.direction) && void 0 !== _a ? _a : "horizontal";
|
|
70
|
+
null === (_b = spec.series) || void 0 === _b || _b.forEach((seriesSpec => {
|
|
71
|
+
"vertical" === direction ? (seriesSpec.timeField && !seriesSpec.yField && (seriesSpec.yField = seriesSpec.timeField),
|
|
72
|
+
seriesSpec.xField || (seriesSpec.xField = seriesSpec.seriesField || "__vchart_timeline_dummy__")) : (seriesSpec.timeField && !seriesSpec.xField && (seriesSpec.xField = seriesSpec.timeField),
|
|
73
|
+
seriesSpec.yField || (seriesSpec.yField = seriesSpec.seriesField || "__vchart_timeline_dummy__"));
|
|
74
|
+
}));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=timeline-transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/charts/timeline/timeline-transformer.ts"],"names":[],"mappings":"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","file":"timeline-transformer.js","sourcesContent":["import { BaseChartSpecTransformer } from '@visactor/vchart';\nimport type { ICartesianAxisSpec, ICartesianLinearAxisSpec } from '@visactor/vchart';\nimport type { ITimelineChartSpec } from './interface';\nimport { isNil, get, merge, isObject } from '@visactor/vutils';\n\nexport class TimelineChartSpecTransformer<\n T extends ITimelineChartSpec = ITimelineChartSpec\n> extends BaseChartSpecTransformer<T> {\n protected _getDefaultSeriesSpec(spec: T): any {\n return super._getDefaultSeriesSpec(spec, [\n 'timeField',\n 'eventField',\n 'seriesField',\n 'titleField',\n 'subTitleField',\n 'iconField',\n 'dot',\n 'title',\n 'subTitle',\n 'icon',\n 'line',\n 'arrow',\n 'labelPosition',\n 'sortDataByAxis'\n ]);\n }\n\n protected _setDefaultXAxisSpec(spec: T): ICartesianAxisSpec {\n return {\n type: 'band',\n orient: 'bottom',\n label: {\n visible: false\n },\n tick: {\n visible: false\n },\n grid: {\n visible: false\n },\n domainLine: {\n visible: false\n },\n paddingInner: 0,\n paddingOuter: 0\n } as ICartesianAxisSpec;\n }\n\n protected _setDefaultYAxisSpec(spec: T): ICartesianAxisSpec {\n return {\n type: 'band',\n inverse: true,\n orient: 'left',\n label: {\n visible: false\n },\n tick: {\n visible: false\n },\n grid: {\n visible: false\n },\n domainLine: {\n visible: false\n },\n paddingInner: 0,\n paddingOuter: 0\n } as ICartesianAxisSpec;\n }\n\n protected _transformAxisSpec(spec: T) {\n if (!spec.axes) {\n spec.axes = [];\n }\n\n const haxAxes = { x: false, y: false };\n spec.axes.forEach((axis: ICartesianAxisSpec) => {\n const { orient } = axis;\n let defaultSpec: Partial<ICartesianAxisSpec> = null;\n if (orient === 'top' || orient === 'bottom') {\n haxAxes.x = true;\n\n defaultSpec = this._setDefaultXAxisSpec(spec);\n }\n if (orient === 'left' || orient === 'right') {\n haxAxes.y = true;\n\n defaultSpec = this._setDefaultYAxisSpec(spec);\n }\n\n if (defaultSpec) {\n Object.keys(defaultSpec).forEach(key => {\n (axis as any)[key] = isObject((axis as any)[key])\n ? merge((defaultSpec as any)[key], (axis as any)[key])\n : isNil((axis as any)[key])\n ? (defaultSpec as any)[key]\n : (axis as any)[key];\n });\n }\n });\n if (!haxAxes.x) {\n spec.axes.push(this._setDefaultXAxisSpec(spec));\n }\n if (!haxAxes.y) {\n spec.axes.push(this._setDefaultYAxisSpec(spec));\n }\n }\n\n transformSpec(spec: T): void {\n super.transformSpec(spec);\n this.transformSeriesSpec(spec);\n this._transformAxisSpec(spec);\n\n const direction = spec.direction ?? 'horizontal';\n\n // 将 direction 传递给 series,并设置 xField/yField 以便轴系统收集数据\n spec.series?.forEach(seriesSpec => {\n // 根据 direction 将 timeField 映射到 xField 或 yField\n // 这样轴系统才能正确收集数据\n if (direction === 'vertical') {\n // vertical 布局:y 轴是时间方向\n if (seriesSpec.timeField && !seriesSpec.yField) {\n seriesSpec.yField = seriesSpec.timeField;\n }\n // x 轴是分类方向(如果没有 seriesField,创建一个虚拟字段)\n if (!seriesSpec.xField) {\n seriesSpec.xField = seriesSpec.seriesField || '__vchart_timeline_dummy__';\n }\n } else {\n // horizontal 布局:x 轴是时间方向\n if (seriesSpec.timeField && !seriesSpec.xField) {\n seriesSpec.xField = seriesSpec.timeField;\n }\n // y 轴是分类方向(如果没有 seriesField,创建一个虚拟字段)\n if (!seriesSpec.yField) {\n seriesSpec.yField = seriesSpec.seriesField || '__vchart_timeline_dummy__';\n }\n }\n });\n }\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { TimelineChartSpecTransformer } from './timeline-transformer';
|
|
2
|
+
import type { ITimelineChartSpec } from './interface';
|
|
3
|
+
import { BaseChart } from '@visactor/vchart';
|
|
4
|
+
export declare class TimelineChart<T extends ITimelineChartSpec = ITimelineChartSpec> extends BaseChart<T> {
|
|
5
|
+
static readonly type: string;
|
|
6
|
+
static readonly seriesType: string;
|
|
7
|
+
static readonly transformerConstructor: typeof TimelineChartSpecTransformer;
|
|
8
|
+
readonly transformerConstructor: typeof TimelineChartSpecTransformer;
|
|
9
|
+
readonly type: string;
|
|
10
|
+
readonly seriesType: string;
|
|
11
|
+
}
|
|
12
|
+
export declare const registerTimelineChart: () => void;
|