@visactor/vchart-extension 0.0.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/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # @visactor/vchart-extension
2
+
3
+ ## Description
4
+
5
+
6
+
7
+ ## Usage
8
+
9
+ ```typescript
10
+ import { xxx } from '@visactor/vchart-extension';
11
+ ```
package/cjs/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './ranking-bar/ranking-bar';
package/cjs/index.js ADDED
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ var __createBinding = this && this.__createBinding || (Object.create ? function(o, m, k, k2) {
4
+ void 0 === k2 && (k2 = k);
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ desc && !("get" in desc ? !m.__esModule : desc.writable || desc.configurable) || (desc = {
7
+ enumerable: !0,
8
+ get: function() {
9
+ return m[k];
10
+ }
11
+ }), Object.defineProperty(o, k2, desc);
12
+ } : function(o, m, k, k2) {
13
+ void 0 === k2 && (k2 = k), o[k2] = m[k];
14
+ }), __exportStar = this && this.__exportStar || function(m, exports) {
15
+ for (var p in m) "default" === p || Object.prototype.hasOwnProperty.call(exports, p) || __createBinding(exports, m, p);
16
+ };
17
+
18
+ Object.defineProperty(exports, "__esModule", {
19
+ value: !0
20
+ }), __exportStar(require("./ranking-bar/ranking-bar"), exports);
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4DAA0C","file":"index.js","sourcesContent":["export * from './ranking-bar/ranking-bar';\n"]}
@@ -0,0 +1,45 @@
1
+ import type { ILineGraphicAttribute, ITextGraphicAttribute } from '@visactor/vrender-core';
2
+ export type IRankingBarData = any[];
3
+ export interface IPlayConfig {
4
+ interval?: number;
5
+ }
6
+ export interface IRankingBarSpec extends IPlayConfig {
7
+ type: string;
8
+ data: IRankingBarData;
9
+ timeField: string;
10
+ xField: string;
11
+ yField: string;
12
+ topN?: number;
13
+ bar?: {
14
+ padding?: number;
15
+ cornerRadius?: number;
16
+ };
17
+ color?: Record<string, string>;
18
+ icon?: Record<string, string>;
19
+ iconPosition?: 'bar-end' | 'bar-start' | 'axis';
20
+ iconShape?: 'circle' | 'rect';
21
+ background?: string;
22
+ label?: {
23
+ visible?: boolean;
24
+ style?: ITextGraphicAttribute;
25
+ };
26
+ nameLabel?: ITextGraphicAttribute & {
27
+ visible?: boolean;
28
+ position?: 'bar-end' | 'bar-start';
29
+ style?: ITextGraphicAttribute;
30
+ };
31
+ timeLabel?: {
32
+ visible?: boolean;
33
+ style?: ITextGraphicAttribute;
34
+ };
35
+ xAxis?: {
36
+ label?: ITextGraphicAttribute;
37
+ domainLine?: ILineGraphicAttribute;
38
+ grid?: ILineGraphicAttribute;
39
+ };
40
+ yAxis?: {
41
+ label?: ITextGraphicAttribute;
42
+ domainLine?: ILineGraphicAttribute;
43
+ grid?: ILineGraphicAttribute;
44
+ };
45
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ });
6
+ //# sourceMappingURL=interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ranking-bar/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { ILineGraphicAttribute, ITextGraphicAttribute } from '@visactor/vrender-core';\n\nexport type IRankingBarData = any[];\n\nexport interface IPlayConfig {\n interval?: number; // 单位毫秒\n}\n\nexport interface IRankingBarSpec extends IPlayConfig {\n type: string;\n data: IRankingBarData;\n\n timeField: string;\n xField: string;\n yField: string;\n\n topN?: number;\n\n bar?: {\n padding?: number;\n cornerRadius?: number;\n };\n\n color?: Record<string, string>;\n\n icon?: Record<string, string>;\n\n iconPosition?: 'bar-end' | 'bar-start' | 'axis';\n\n iconShape?: 'circle' | 'rect';\n\n background?: string;\n\n label?: {\n visible?: boolean;\n style?: ITextGraphicAttribute;\n };\n\n nameLabel?: ITextGraphicAttribute & {\n visible?: boolean;\n position?: 'bar-end' | 'bar-start';\n style?: ITextGraphicAttribute;\n };\n\n timeLabel?: {\n visible?: boolean;\n style?: ITextGraphicAttribute;\n };\n\n xAxis?: {\n label?: ITextGraphicAttribute;\n domainLine?: ILineGraphicAttribute;\n grid?: ILineGraphicAttribute;\n };\n\n yAxis?: {\n label?: ITextGraphicAttribute;\n domainLine?: ILineGraphicAttribute;\n grid?: ILineGraphicAttribute;\n };\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import type { IRankingBarSpec } from './interface';
2
+ import type { ICommonChartSpec } from '@visactor/vchart';
3
+ import { BaseChartSpecTransformer } from '@visactor/vchart';
4
+ export declare class RankingBarChartSpecTransformer<T extends ICommonChartSpec> extends BaseChartSpecTransformer<any> {
5
+ transformSpec(spec: T): void;
6
+ }
7
+ export declare function processData(spec: IRankingBarSpec): {
8
+ timeData: Map<any, any>;
9
+ timeNodes: string[];
10
+ };
@@ -0,0 +1,306 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ }), exports.processData = exports.RankingBarChartSpecTransformer = void 0;
6
+
7
+ const vchart_1 = require("@visactor/vchart"), vutils_1 = require("@visactor/vutils");
8
+
9
+ class RankingBarChartSpecTransformer extends vchart_1.BaseChartSpecTransformer {
10
+ transformSpec(spec) {
11
+ const {timeData: timeData, timeNodes: timeNodes} = processData(spec), {interval: userInterval, xField: xField, yField: yField, color: color, icon: icon, iconPosition: iconPosition, iconShape: iconShape, timeLabel: timeLabel, label: label, nameLabel: nameLabel, xAxis: xAxis, yAxis: yAxis} = spec, interval = userInterval || 1e3, exchangeDuration = Math.min(interval, 500);
12
+ if (spec.type = "common", spec.data = [ {
13
+ id: "timeData",
14
+ values: timeData.get(timeNodes[0])
15
+ }, {
16
+ id: "time",
17
+ values: [ {
18
+ time: timeNodes[0]
19
+ } ]
20
+ } ], spec.color = {
21
+ specified: Object.assign({}, color)
22
+ }, spec.region = [ {
23
+ clip: !0
24
+ } ], spec.series = [ {
25
+ type: "bar",
26
+ id: "ranking-bar",
27
+ dataId: "timeData",
28
+ direction: "horizontal",
29
+ yField: yField,
30
+ xField: xField,
31
+ seriesField: yField,
32
+ extensionMark: [],
33
+ label: labelSpec(label, Object.assign(Object.assign({}, nameLabel), {
34
+ yField: yField
35
+ }), {
36
+ interval: interval,
37
+ exchangeDuration: exchangeDuration
38
+ })
39
+ } ], spec.axes = axisSpec(xAxis, yAxis), spec.player = {
40
+ type: "continuous",
41
+ auto: !0,
42
+ loop: !1,
43
+ interval: interval,
44
+ specs: timeNodes.map((time => ({
45
+ data: [ {
46
+ id: "timeData",
47
+ values: timeData.get(time)
48
+ }, {
49
+ id: "time",
50
+ values: [ {
51
+ time: time
52
+ } ]
53
+ } ]
54
+ })))
55
+ }, spec.tooltip = {
56
+ visible: !1
57
+ }, spec.customMark = [], transformAnimationSpec(spec, {
58
+ interval: interval,
59
+ exchangeDuration: exchangeDuration
60
+ }), timeLabel && !1 === timeLabel.visible || spec.customMark.push(timeLabelSpec(timeLabel.style)),
61
+ icon) {
62
+ const icon = iconSpec(iconPosition, iconShape, {
63
+ interval: interval,
64
+ exchangeDuration: exchangeDuration
65
+ });
66
+ spec.series[0].extensionMark.push(icon);
67
+ }
68
+ super.transformSpec(spec);
69
+ }
70
+ }
71
+
72
+ function processData(spec) {
73
+ const {xField: xField, yField: yField, timeField: timeField, data: data, topN: topN = 10, icon: icon} = spec, timeNodes = new Set, timeData = new Map;
74
+ return data.sort(((d1, d2) => Number(d2[xField]) - Number(d1[xField]))), data.forEach((d => {
75
+ const time = d[timeField];
76
+ (0, vutils_1.isValid)(time) && timeNodes.add(time), timeData.has(time) || timeData.set(time, []);
77
+ const currentData = timeData.get(time);
78
+ if (currentData.length < topN) {
79
+ const _d = Object.assign({}, d);
80
+ icon && icon[_d[yField]] && (_d.icon = icon[_d[yField]]), currentData.push(_d);
81
+ }
82
+ })), {
83
+ timeData: timeData,
84
+ timeNodes: Array.from(timeNodes).sort()
85
+ };
86
+ }
87
+
88
+ function transformAnimationSpec(spec, {interval: interval, exchangeDuration: exchangeDuration}) {
89
+ spec.animationAppear = !1, spec.animationUpdate = {
90
+ bar: [ {
91
+ type: "update",
92
+ options: {
93
+ excludeChannels: [ "y" ]
94
+ },
95
+ easing: "linear",
96
+ duration: interval
97
+ }, {
98
+ channel: [ "y" ],
99
+ easing: "circInOut",
100
+ duration: exchangeDuration
101
+ } ],
102
+ axis: {
103
+ duration: interval,
104
+ easing: "linear"
105
+ }
106
+ }, spec.animationEnter = {
107
+ bar: [ {
108
+ type: "moveIn",
109
+ duration: exchangeDuration,
110
+ easing: "cubicInOut",
111
+ options: {
112
+ direction: "y",
113
+ orient: "negative",
114
+ point: (datum, element, param) => ({
115
+ y: param.groupHeight + element.getBounds().height()
116
+ })
117
+ }
118
+ } ]
119
+ }, spec.animationExit = {
120
+ bar: [ {
121
+ type: "moveOut",
122
+ duration: exchangeDuration,
123
+ easing: "cubicInOut",
124
+ options: {
125
+ direction: "y",
126
+ orient: "negative"
127
+ }
128
+ } ]
129
+ };
130
+ }
131
+
132
+ function labelSpec(label = {}, nameLabel, {interval: interval, exchangeDuration: exchangeDuration}) {
133
+ var _a, _b, _c, _e;
134
+ const spec = [];
135
+ return !1 !== label.visible && spec.push({
136
+ visible: !0,
137
+ overlap: !1,
138
+ style: Object.assign({
139
+ fill: "rgb(64, 64, 64)"
140
+ }, label.style),
141
+ smartInvert: {
142
+ fillStrategy: (null === (_a = label.style) || void 0 === _a ? void 0 : _a.fill) ? "null" : void 0,
143
+ strokeStrategy: (null === (_b = label.style) || void 0 === _b ? void 0 : _b.stroke) ? "null" : void 0
144
+ },
145
+ animationUpdate: [ {
146
+ duration: exchangeDuration,
147
+ easing: "cubicInOut",
148
+ channel: [ "y" ]
149
+ }, {
150
+ options: {
151
+ excludeChannels: [ "y" ]
152
+ },
153
+ easing: "linear",
154
+ duration: interval
155
+ } ]
156
+ }), nameLabel.visible && spec.push({
157
+ visible: !0,
158
+ overlap: !1,
159
+ style: Object.assign({}, nameLabel.style),
160
+ smartInvert: {
161
+ fillStrategy: (null === (_c = nameLabel.style) || void 0 === _c ? void 0 : _c.fill) ? "null" : void 0,
162
+ strokeStrategy: (null === (_e = nameLabel.style) || void 0 === _e ? void 0 : _e.stroke) ? "null" : void 0
163
+ },
164
+ position: "bar-end" === nameLabel.position ? "inside-right" : "inside-left",
165
+ formatter: `{${nameLabel.yField}}`,
166
+ animationUpdate: customMarkUpdateAnimation(interval, exchangeDuration)
167
+ }), spec;
168
+ }
169
+
170
+ function axisSpec(xAxis = {}, yAxis = {}) {
171
+ const leftAxis = {
172
+ orient: "left",
173
+ type: "band",
174
+ inverse: !0,
175
+ label: {
176
+ style: yAxis.label
177
+ },
178
+ domainLine: {
179
+ style: yAxis.domainLine
180
+ },
181
+ grid: {
182
+ style: yAxis.grid
183
+ }
184
+ }, bottomAxis = {
185
+ orient: "bottom",
186
+ type: "linear",
187
+ nice: !1,
188
+ animation: !0,
189
+ label: {
190
+ style: xAxis.label
191
+ },
192
+ domainLine: {
193
+ style: xAxis.domainLine
194
+ },
195
+ grid: {
196
+ style: xAxis.grid
197
+ },
198
+ innerOffset: {
199
+ right: "10%"
200
+ }
201
+ };
202
+ return xAxis.label && (bottomAxis.label = xAxis.label), [ leftAxis, bottomAxis ];
203
+ }
204
+
205
+ function timeLabelSpec(textStyle = {}) {
206
+ return {
207
+ type: "text",
208
+ dataId: "time",
209
+ style: Object.assign({
210
+ textBaseline: "bottom",
211
+ fontSize: 200,
212
+ textAlign: "end",
213
+ fontWeight: 600,
214
+ text: datum => datum.time,
215
+ x: (datum, ctx) => {
216
+ var _a;
217
+ return (null === (_a = ctx.vchart.getChart().getCanvasRect()) || void 0 === _a ? void 0 : _a.width) - 50;
218
+ },
219
+ y: (datum, ctx) => {
220
+ var _a;
221
+ return (null === (_a = ctx.vchart.getChart().getCanvasRect()) || void 0 === _a ? void 0 : _a.height) - 80;
222
+ },
223
+ fill: "grey",
224
+ fillOpacity: .5
225
+ }, textStyle)
226
+ };
227
+ }
228
+
229
+ function iconSpec(iconPosition = "bar-end", iconShape = "circle", {interval: interval, exchangeDuration: exchangeDuration}) {
230
+ return {
231
+ type: "symbol",
232
+ dataId: "timeData",
233
+ style: {
234
+ symbolType: iconShape,
235
+ stroke: "white",
236
+ lineWidth: 1,
237
+ size: (data, ctx) => {
238
+ var _a, _b;
239
+ const vchart = ctx.vchart, series = null === (_a = vchart.getChart()) || void 0 === _a ? void 0 : _a.getSeriesInIndex(0)[0];
240
+ if (vchart && series) {
241
+ const bandwidth = null !== (_b = series.getYAxisHelper().getBandwidth(0)) && void 0 !== _b ? _b : 0;
242
+ return Math.max(bandwidth - 4, 0);
243
+ }
244
+ return 10;
245
+ },
246
+ background: data => data.icon,
247
+ x: (data, ctx) => {
248
+ var _a, _b;
249
+ const vchart = ctx.vchart, series = null === (_a = vchart.getChart()) || void 0 === _a ? void 0 : _a.getSeriesInIndex(0)[0];
250
+ if (vchart && series) {
251
+ const bandwidth = null !== (_b = series.getYAxisHelper().getBandwidth(0)) && void 0 !== _b ? _b : 0;
252
+ return "bar-start" === iconPosition ? bandwidth / 2 : "axis" === iconPosition ? -bandwidth / 2 : series.dataToPositionX(data) - bandwidth / 2;
253
+ }
254
+ },
255
+ y: (data, ctx) => {
256
+ var _a, _b;
257
+ const vchart = ctx.vchart, series = null === (_a = vchart.getChart()) || void 0 === _a ? void 0 : _a.getSeriesInIndex(0)[0];
258
+ if (vchart && series) {
259
+ const bandwidth = null !== (_b = series.getYAxisHelper().getBandwidth(0)) && void 0 !== _b ? _b : 0;
260
+ return series.dataToPositionY(data) + bandwidth / 2;
261
+ }
262
+ },
263
+ scaleY: "rect" === iconShape ? 1.2 : 1
264
+ },
265
+ animationUpdate: customMarkUpdateAnimation(interval, exchangeDuration),
266
+ animationEnter: [ {
267
+ type: "moveIn",
268
+ duration: exchangeDuration,
269
+ easing: "cubicInOut",
270
+ options: {
271
+ direction: "y",
272
+ orient: "negative",
273
+ point: (datum, element, param) => ({
274
+ y: param.groupHeight + element.getBounds().height()
275
+ })
276
+ }
277
+ } ],
278
+ animationExit: [ {
279
+ type: "moveOut",
280
+ duration: exchangeDuration,
281
+ easing: "cubicInOut",
282
+ options: {
283
+ direction: "y",
284
+ orient: "negative"
285
+ }
286
+ } ]
287
+ };
288
+ }
289
+
290
+ function customMarkUpdateAnimation(duration, exchangeDuration) {
291
+ return [ {
292
+ duration: exchangeDuration,
293
+ easing: "cubicInOut",
294
+ channel: [ "y" ]
295
+ }, {
296
+ options: {
297
+ excludeChannels: [ "y" ]
298
+ },
299
+ channel: [ "x", "x2", "x1" ],
300
+ easing: "linear",
301
+ duration: duration
302
+ } ];
303
+ }
304
+
305
+ //# sourceMappingURL=ranking-bar-transformer.js.map
306
+ exports.RankingBarChartSpecTransformer = RankingBarChartSpecTransformer, exports.processData = processData;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ranking-bar/ranking-bar-transformer.ts"],"names":[],"mappings":"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","file":"ranking-bar-transformer.js","sourcesContent":["import type { IRankingBarSpec } from './interface';\nimport type { ICartesianAxisSpec, ICommonChartSpec, ILabelSpec } from '@visactor/vchart';\nimport type { ITextGraphicAttribute } from '@visactor/vrender-core';\nimport { BaseChartSpecTransformer } from '@visactor/vchart';\nimport { isValid } from '@visactor/vutils';\n\nexport class RankingBarChartSpecTransformer<T extends ICommonChartSpec> extends BaseChartSpecTransformer<any> {\n transformSpec(spec: T): void {\n const { timeData, timeNodes } = processData(spec as unknown as IRankingBarSpec);\n const {\n interval: userInterval,\n xField,\n yField,\n color,\n icon,\n iconPosition,\n iconShape,\n timeLabel,\n label,\n nameLabel,\n xAxis,\n yAxis\n } = spec as unknown as IRankingBarSpec;\n\n const interval = userInterval ? userInterval : 1000;\n const exchangeDuration = Math.min(interval, 500);\n\n spec.type = 'common';\n spec.data = [\n {\n id: 'timeData',\n values: timeData.get(timeNodes[0])\n },\n {\n id: 'time',\n values: [{ time: timeNodes[0] }]\n }\n ];\n\n // @ts-ignore FIXME: type definition\n spec.color = {\n specified: {\n ...color\n }\n };\n spec.region = [{ clip: true }];\n spec.series = [\n {\n type: 'bar',\n id: 'ranking-bar',\n dataId: 'timeData',\n direction: 'horizontal',\n yField,\n xField,\n seriesField: yField,\n extensionMark: [],\n label: labelSpec(label, { ...nameLabel, yField }, { interval, exchangeDuration }) as any\n }\n ];\n spec.axes = axisSpec(xAxis, yAxis);\n spec.player = {\n type: 'continuous',\n auto: true,\n loop: false,\n interval,\n specs: timeNodes.map(time => ({\n data: [\n { id: 'timeData', values: timeData.get(time) },\n { id: 'time', values: [{ time }] }\n ]\n }))\n };\n spec.tooltip = { visible: false };\n spec.customMark = [];\n\n transformAnimationSpec(spec, { interval, exchangeDuration });\n\n if (!timeLabel || timeLabel.visible !== false) {\n spec.customMark.push(timeLabelSpec(timeLabel.style) as any);\n }\n if (icon) {\n const icon = iconSpec(iconPosition, iconShape, { interval, exchangeDuration });\n spec.series[0].extensionMark.push(icon as any);\n }\n\n super.transformSpec(spec);\n }\n}\n\nexport function processData(spec: IRankingBarSpec) {\n const { xField, yField, timeField, data, topN = 10, icon } = spec;\n\n // 数据处理\n const timeNodes = new Set<string>();\n const timeData = new Map();\n\n data.sort((d1, d2) => Number(d2[xField]) - Number(d1[xField]));\n\n data.forEach(d => {\n const time = d[timeField];\n if (isValid(time)) {\n timeNodes.add(time);\n }\n if (!timeData.has(time)) {\n timeData.set(time, []);\n }\n const currentData = timeData.get(time);\n if (currentData.length < topN) {\n const _d = { ...d };\n if (icon && icon[_d[yField]]) {\n _d['icon'] = icon[_d[yField]];\n }\n currentData.push(_d);\n }\n });\n\n return { timeData, timeNodes: Array.from(timeNodes).sort() };\n}\n\nfunction transformAnimationSpec(\n spec: ICommonChartSpec,\n { interval, exchangeDuration }: { interval: number; exchangeDuration: number }\n) {\n (spec as any).animationAppear = false;\n (spec as any).animationUpdate = {\n bar: [\n {\n type: 'update',\n options: { excludeChannels: ['y'] },\n easing: 'linear',\n duration: interval\n },\n {\n channel: ['y'],\n easing: 'circInOut',\n duration: exchangeDuration\n }\n ],\n axis: {\n duration: interval,\n easing: 'linear'\n }\n };\n (spec as any).animationEnter = {\n bar: [\n {\n type: 'moveIn',\n duration: exchangeDuration,\n easing: 'cubicInOut',\n options: {\n direction: 'y',\n orient: 'negative',\n point: (datum: any, element: any, param: any) => {\n return {\n y: param.groupHeight + element.getBounds().height()\n };\n }\n }\n }\n ]\n };\n (spec as any).animationExit = {\n bar: [\n {\n type: 'moveOut',\n duration: exchangeDuration,\n easing: 'cubicInOut',\n options: {\n direction: 'y',\n orient: 'negative'\n }\n }\n ]\n };\n}\n\nfunction labelSpec(\n label: IRankingBarSpec['label'] = {},\n nameLabel: IRankingBarSpec['nameLabel'] & { yField: string },\n { interval, exchangeDuration }: any\n) {\n const spec: ILabelSpec[] = [];\n\n if (label.visible !== false) {\n spec.push({\n visible: true,\n overlap: false,\n style: {\n // @ts-ignore\n fill: `rgb(64, 64, 64)`,\n ...label.style\n },\n smartInvert: {\n fillStrategy: label.style?.fill ? 'null' : undefined,\n strokeStrategy: label.style?.stroke ? 'null' : undefined\n },\n animationUpdate: [\n {\n duration: exchangeDuration,\n easing: 'cubicInOut',\n channel: ['y']\n },\n {\n options: { excludeChannels: ['y'] },\n easing: 'linear',\n duration: interval\n }\n ]\n });\n }\n\n if (nameLabel.visible) {\n spec.push({\n visible: true,\n overlap: false,\n // @ts-ignore\n style: {\n ...nameLabel.style\n },\n smartInvert: {\n fillStrategy: nameLabel.style?.fill ? 'null' : undefined,\n strokeStrategy: nameLabel.style?.stroke ? 'null' : undefined\n },\n position: nameLabel.position === 'bar-end' ? 'inside-right' : 'inside-left',\n formatter: `{${nameLabel.yField}}`,\n animationUpdate: customMarkUpdateAnimation(interval, exchangeDuration)\n });\n }\n\n return spec;\n}\n\nfunction axisSpec(xAxis: IRankingBarSpec['xAxis'] = {}, yAxis: IRankingBarSpec['yAxis'] = {}) {\n const leftAxis: ICartesianAxisSpec = {\n orient: 'left',\n type: 'band',\n inverse: true,\n label: { style: yAxis.label },\n domainLine: { style: yAxis.domainLine },\n grid: { style: yAxis.grid }\n };\n const bottomAxis: ICartesianAxisSpec = {\n orient: 'bottom',\n type: 'linear',\n nice: false,\n animation: true,\n label: { style: xAxis.label },\n domainLine: { style: xAxis.domainLine },\n grid: { style: xAxis.grid },\n innerOffset: { right: '10%' }\n };\n\n if (xAxis.label) {\n bottomAxis.label = xAxis.label;\n }\n return [leftAxis, bottomAxis];\n}\n\nfunction timeLabelSpec(textStyle: ITextGraphicAttribute = {}) {\n return {\n type: 'text',\n dataId: 'time',\n style: {\n textBaseline: 'bottom',\n fontSize: 200,\n textAlign: 'end',\n fontWeight: 600,\n text: (datum: any) => datum.time,\n x: (datum: any, ctx: any) => {\n return ctx.vchart.getChart().getCanvasRect()?.width - 50;\n },\n y: (datum: any, ctx: any) => {\n return ctx.vchart.getChart().getCanvasRect()?.height - 80;\n },\n fill: 'grey',\n fillOpacity: 0.5,\n ...textStyle\n }\n };\n}\n\nfunction iconSpec(\n iconPosition: IRankingBarSpec['iconPosition'] = 'bar-end',\n iconShape: IRankingBarSpec['iconShape'] = 'circle',\n { interval, exchangeDuration }: any\n) {\n return {\n type: 'symbol',\n dataId: 'timeData',\n style: {\n symbolType: iconShape,\n stroke: 'white',\n lineWidth: 1,\n size: (data: any, ctx: any) => {\n const vchart = ctx.vchart;\n const series = vchart.getChart()?.getSeriesInIndex(0)[0];\n if (vchart && series) {\n const bandwidth = series.getYAxisHelper().getBandwidth(0) ?? 0;\n return Math.max(bandwidth - 4, 0);\n }\n return 10;\n },\n background: (data: any) => data.icon,\n // globalZIndex 有bug,会有动画闪烁和报错\n // globalZIndex: 1, // 否则会被 region 区域 clip\n x: (data: any, ctx: any) => {\n const vchart = ctx.vchart;\n const series = vchart.getChart()?.getSeriesInIndex(0)[0];\n if (vchart && series) {\n const bandwidth = series.getYAxisHelper().getBandwidth(0) ?? 0;\n if (iconPosition === 'bar-start') {\n return bandwidth / 2;\n } else if (iconPosition === 'axis') {\n return -bandwidth / 2;\n } else {\n return series.dataToPositionX(data) - bandwidth / 2;\n }\n }\n return undefined;\n },\n y: (data: any, ctx: any) => {\n const vchart = ctx.vchart;\n const series = vchart.getChart()?.getSeriesInIndex(0)[0];\n if (vchart && series) {\n const bandwidth = series.getYAxisHelper().getBandwidth(0) ?? 0;\n return series.dataToPositionY(data) + bandwidth / 2;\n }\n return undefined;\n },\n scaleY: iconShape === 'rect' ? 1.2 : 1\n },\n animationUpdate: customMarkUpdateAnimation(interval, exchangeDuration),\n animationEnter: [\n {\n type: 'moveIn',\n duration: exchangeDuration,\n easing: 'cubicInOut',\n options: {\n direction: 'y',\n orient: 'negative',\n point: (datum: any, element: any, param: any) => {\n return {\n y: param.groupHeight + element.getBounds().height()\n };\n }\n }\n }\n ],\n animationExit: [\n {\n type: 'moveOut',\n duration: exchangeDuration,\n easing: 'cubicInOut',\n options: {\n direction: 'y',\n orient: 'negative'\n }\n }\n ]\n };\n}\n\nfunction customMarkUpdateAnimation(duration: number, exchangeDuration: number) {\n return [\n {\n duration: exchangeDuration,\n easing: 'cubicInOut',\n channel: ['y']\n },\n {\n options: { excludeChannels: ['y'] },\n channel: ['x', 'x2', 'x1'],\n easing: 'linear',\n duration\n }\n ];\n}\n"]}
@@ -0,0 +1,14 @@
1
+ import { IRankingBarSpec } from './interface';
2
+ import { BaseChart } from '@visactor/vchart';
3
+ import { RankingBarChartSpecTransformer } from './ranking-bar-transformer';
4
+ export declare class RankingBar extends BaseChart<Omit<IRankingBarSpec, 'color'>> {
5
+ type: string;
6
+ static type: string;
7
+ static readonly view: string;
8
+ _spec: IRankingBarSpec;
9
+ static readonly transformerConstructor: typeof RankingBarChartSpecTransformer;
10
+ readonly transformerConstructor: typeof RankingBarChartSpecTransformer;
11
+ init(): void;
12
+ protected isValid(): boolean;
13
+ }
14
+ export declare const registerRankingBarChart: () => void;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ }), exports.registerRankingBarChart = exports.RankingBar = void 0;
6
+
7
+ const vchart_1 = require("@visactor/vchart"), ranking_bar_transformer_1 = require("./ranking-bar-transformer");
8
+
9
+ class RankingBar extends vchart_1.BaseChart {
10
+ constructor() {
11
+ super(...arguments), this.type = "rankingBar", this.transformerConstructor = ranking_bar_transformer_1.RankingBarChartSpecTransformer;
12
+ }
13
+ init() {
14
+ this.isValid() && super.init();
15
+ }
16
+ isValid() {
17
+ var _a, _b, _c, _d;
18
+ const {xField: xField, yField: yField, timeField: timeField, data: data} = this._spec;
19
+ return xField && yField && timeField ? !!data || (null === (_d = (_c = this._option).onError) || void 0 === _d || _d.call(_c, "Data is required"),
20
+ !1) : (null === (_b = (_a = this._option).onError) || void 0 === _b || _b.call(_a, "Missing Required Config: `xField`, `yField`, `timeField` "),
21
+ !1);
22
+ }
23
+ }
24
+
25
+ exports.RankingBar = RankingBar, RankingBar.type = "rankingBar", RankingBar.view = "singleDefault",
26
+ RankingBar.transformerConstructor = ranking_bar_transformer_1.RankingBarChartSpecTransformer;
27
+
28
+ const registerRankingBarChart = () => {
29
+ vchart_1.VChart.useChart([ RankingBar ]);
30
+ };
31
+
32
+ exports.registerRankingBarChart = registerRankingBarChart;
33
+ //# sourceMappingURL=ranking-bar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ranking-bar/ranking-bar.ts"],"names":[],"mappings":";;;AACA,6CAAqD;AACrD,uEAA2E;AAE3E,MAAa,UAAW,SAAQ,kBAAyC;IAAzE;;QACE,SAAI,GAAG,YAAY,CAAC;QAOX,2BAAsB,GAAG,wDAA8B,CAAC;IAqBnE,CAAC;IAnBC,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;YACnB,OAAO;SACR;QACD,KAAK,CAAC,IAAI,EAAE,CAAC;IACf,CAAC;IAES,OAAO;;QACf,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QACvD,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE;YACpC,MAAA,MAAA,IAAI,CAAC,OAAO,EAAC,OAAO,mDAAG,2DAA2D,CAAC,CAAC;YACpF,OAAO,KAAK,CAAC;SACd;QACD,IAAI,CAAC,IAAI,EAAE;YACT,MAAA,MAAA,IAAI,CAAC,OAAO,EAAC,OAAO,mDAAG,kBAAkB,CAAC,CAAC;YAC3C,OAAO,KAAK,CAAC;SACd;QACD,OAAO,IAAI,CAAC;IACd,CAAC;;AA5BH,gCA6BC;AA3BQ,eAAI,GAAG,YAAY,CAAC;AACX,eAAI,GAAW,eAAe,CAAC;AAI/B,iCAAsB,GAAG,wDAA8B,CAAC;AAwBnE,MAAM,uBAAuB,GAAG,GAAG,EAAE;IAC1C,eAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAChC,CAAC,CAAC;AAFW,QAAA,uBAAuB,2BAElC","file":"ranking-bar.js","sourcesContent":["import { IRankingBarSpec } from './interface';\nimport { BaseChart, VChart } from '@visactor/vchart';\nimport { RankingBarChartSpecTransformer } from './ranking-bar-transformer';\n\nexport class RankingBar extends BaseChart<Omit<IRankingBarSpec, 'color'>> {\n type = 'rankingBar';\n static type = 'rankingBar';\n static readonly view: string = 'singleDefault';\n\n declare _spec: IRankingBarSpec;\n\n static readonly transformerConstructor = RankingBarChartSpecTransformer;\n readonly transformerConstructor = RankingBarChartSpecTransformer;\n\n init() {\n if (!this.isValid()) {\n return;\n }\n super.init();\n }\n\n protected isValid() {\n const { xField, yField, timeField, data } = this._spec;\n if (!xField || !yField || !timeField) {\n this._option.onError?.('Missing Required Config: `xField`, `yField`, `timeField` ');\n return false;\n }\n if (!data) {\n this._option.onError?.('Data is required');\n return false;\n }\n return true;\n }\n}\n\nexport const registerRankingBarChart = () => {\n VChart.useChart([RankingBar]);\n};\n"]}
@@ -0,0 +1 @@
1
+ export * from '../ranking-bar/interface';
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ var __createBinding = this && this.__createBinding || (Object.create ? function(o, m, k, k2) {
4
+ void 0 === k2 && (k2 = k);
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ desc && !("get" in desc ? !m.__esModule : desc.writable || desc.configurable) || (desc = {
7
+ enumerable: !0,
8
+ get: function() {
9
+ return m[k];
10
+ }
11
+ }), Object.defineProperty(o, k2, desc);
12
+ } : function(o, m, k, k2) {
13
+ void 0 === k2 && (k2 = k), o[k2] = m[k];
14
+ }), __exportStar = this && this.__exportStar || function(m, exports) {
15
+ for (var p in m) "default" === p || Object.prototype.hasOwnProperty.call(exports, p) || __createBinding(exports, m, p);
16
+ };
17
+
18
+ Object.defineProperty(exports, "__esModule", {
19
+ value: !0
20
+ }), __exportStar(require("../ranking-bar/interface"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["type/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAyC","file":"index.js","sourcesContent":["export * from '../ranking-bar/interface';\n"]}
@@ -0,0 +1,8 @@
1
+ import type { IStage } from '@visactor/vrender-core';
2
+ export type IContext = {
3
+ dom: string | HTMLElement;
4
+ width: number;
5
+ height: number;
6
+ stage: IStage;
7
+ canvas: HTMLCanvasElement;
8
+ };
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: !0
5
+ });
6
+ //# sourceMappingURL=type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["type/type.ts"],"names":[],"mappings":"","file":"type.js","sourcesContent":["import type { IStage } from '@visactor/vrender-core';\n\nexport type IContext = {\n dom: string | HTMLElement;\n width: number;\n height: number;\n stage: IStage;\n canvas: HTMLCanvasElement;\n};\n"]}
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "@visactor/vchart-extension",
3
+ "version": "0.0.1",
4
+ "description": "",
5
+ "sideEffects": false,
6
+ "main": "cjs/index.js",
7
+ "module": "es/index.js",
8
+ "types": "es/index.d.ts",
9
+ "files": [
10
+ "cjs",
11
+ "es",
12
+ "dist"
13
+ ],
14
+ "scripts": {
15
+ "compile": "tsc --noEmit",
16
+ "eslint": "eslint --debug --fix src/",
17
+ "build": "bundle",
18
+ "build:umd": "bundle --clean -f umd",
19
+ "start": "ts-node __tests__/runtime/browser/scripts/initVite.ts && vite serve __tests__/runtime/browser"
20
+ },
21
+ "pearDependencies": {
22
+ "@visactor/vchart": "1.11.11"
23
+ },
24
+ "dependencies": {
25
+ "@visactor/vrender-core": "0.19.24",
26
+ "@visactor/vrender-kits": "0.19.24",
27
+ "@visactor/vutils": "~0.18.10"
28
+ },
29
+ "devDependencies": {
30
+ "@internal/bundler": "0.0.1",
31
+ "@internal/eslint-config": "0.0.1",
32
+ "@internal/ts-config": "0.0.1",
33
+ "@rushstack/eslint-patch": "~1.1.4",
34
+ "@types/node": "*",
35
+ "@types/offscreencanvas": "2019.6.4",
36
+ "react": "^18.0.0",
37
+ "react-dom": "^18.0.0",
38
+ "@types/react": "^18.0.0",
39
+ "@types/react-dom": "^18.0.0",
40
+ "@vitejs/plugin-react": "3.1.0",
41
+ "eslint": "~8.18.0",
42
+ "vite": "3.2.6",
43
+ "typescript": "4.9.5",
44
+ "ts-node": "10.9.0",
45
+ "ts-loader": "8.0.2",
46
+ "jest": "^26.0.0",
47
+ "canvas": "2.11.2",
48
+ "rollup-plugin-node-polyfills": "0.2.1",
49
+ "rollup-plugin-visualizer": "5.9.2",
50
+ "rollup-plugin-gzip": "3.1.0",
51
+ "rollup-plugin-bundle-size": "1.0.3",
52
+ "rollup-plugin-sizes": "1.0.5",
53
+ "rollup": "3.20.5",
54
+ "@visactor/vchart": "1.11.11"
55
+ },
56
+ "publishConfig": {
57
+ "access": "public",
58
+ "registry": "https://registry.npmjs.org/"
59
+ }
60
+ }