@orbcharts/plugins-basic 3.0.1 → 3.0.3
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/LICENSE +200 -200
- package/dist/lib/gridObservables.d.ts +1 -0
- package/dist/orbcharts-plugins-basic.es.js +14800 -13543
- package/dist/orbcharts-plugins-basic.umd.js +129 -99
- package/dist/src/base/BaseOrdinalBubbles.d.ts +26 -0
- package/dist/src/base/BaseRacingBars.d.ts +2 -1
- package/dist/src/base/BaseRacingLabels.d.ts +1 -0
- package/dist/src/base/BaseXZoom.d.ts +18 -0
- package/dist/src/grid/gridObservables.d.ts +4 -7
- package/dist/src/multiValue/defaults.d.ts +5 -1
- package/dist/src/multiValue/index.d.ts +4 -0
- package/dist/src/multiValue/multiValueObservables.d.ts +14 -1
- package/dist/src/multiValue/plugins/OrdinalAux.d.ts +3 -0
- package/dist/src/multiValue/plugins/OrdinalAxis.d.ts +3 -0
- package/dist/src/multiValue/plugins/OrdinalBubbles.d.ts +3 -0
- package/dist/src/multiValue/plugins/OrdinalZoom.d.ts +1 -0
- package/lib/core-types.ts +7 -7
- package/lib/core.ts +6 -6
- package/lib/gridObservables.ts +6 -0
- package/lib/plugins-basic-types.ts +6 -6
- package/package.json +48 -44
- package/src/base/BaseBars.ts +765 -765
- package/src/base/BaseBarsTriangle.ts +676 -676
- package/src/base/BaseDots.ts +464 -464
- package/src/base/BaseGroupAxis.ts +691 -691
- package/src/base/BaseLegend.ts +684 -684
- package/src/base/BaseLineAreas.ts +629 -629
- package/src/base/BaseLines.ts +706 -706
- package/src/base/BaseOrdinalBubbles.ts +728 -0
- package/src/base/BaseRacingBars.ts +582 -551
- package/src/base/BaseRacingLabels.ts +404 -396
- package/src/base/BaseRacingValueLabels.ts +403 -403
- package/src/base/BaseStackedBars.ts +782 -782
- package/src/base/BaseTooltip.ts +386 -386
- package/src/base/BaseValueAxis.ts +600 -600
- package/src/base/BaseXAxis.ts +427 -427
- package/src/base/BaseXZoom.ts +242 -0
- package/src/base/BaseYAxis.ts +389 -389
- package/src/base/types.ts +2 -2
- package/src/const.ts +30 -30
- package/src/grid/defaults.ts +213 -213
- package/src/grid/gridObservables.ts +635 -612
- package/src/grid/index.ts +16 -16
- package/src/grid/plugins/Bars.ts +69 -69
- package/src/grid/plugins/BarsPN.ts +66 -66
- package/src/grid/plugins/BarsTriangle.ts +73 -73
- package/src/grid/plugins/Dots.ts +68 -68
- package/src/grid/plugins/GridLegend.ts +107 -107
- package/src/grid/plugins/GridTooltip.ts +66 -66
- package/src/grid/plugins/GroupAux.ts +1095 -1120
- package/src/grid/plugins/GroupAxis.ts +73 -73
- package/src/grid/plugins/GroupZoom.ts +218 -218
- package/src/grid/plugins/LineAreas.ts +65 -65
- package/src/grid/plugins/Lines.ts +59 -59
- package/src/grid/plugins/StackedBars.ts +64 -64
- package/src/grid/plugins/StackedValueAxis.ts +96 -96
- package/src/grid/plugins/ValueAxis.ts +94 -94
- package/src/index.ts +6 -6
- package/src/multiGrid/defaults.ts +244 -244
- package/src/multiGrid/index.ts +14 -14
- package/src/multiGrid/multiGridObservables.ts +50 -50
- package/src/multiGrid/plugins/MultiBars.ts +108 -108
- package/src/multiGrid/plugins/MultiBarsTriangle.ts +114 -114
- package/src/multiGrid/plugins/MultiDots.ts +102 -102
- package/src/multiGrid/plugins/MultiGridLegend.ts +169 -169
- package/src/multiGrid/plugins/MultiGridTooltip.ts +66 -66
- package/src/multiGrid/plugins/MultiGroupAxis.ts +137 -137
- package/src/multiGrid/plugins/MultiLineAreas.ts +107 -107
- package/src/multiGrid/plugins/MultiLines.ts +101 -101
- package/src/multiGrid/plugins/MultiStackedBars.ts +106 -106
- package/src/multiGrid/plugins/MultiStackedValueAxis.ts +134 -134
- package/src/multiGrid/plugins/MultiValueAxis.ts +134 -134
- package/src/multiGrid/plugins/OverlappingStackedValueAxes.ts +300 -300
- package/src/multiGrid/plugins/OverlappingValueAxes.ts +300 -300
- package/src/multiValue/defaults.ts +523 -431
- package/src/multiValue/index.ts +16 -12
- package/src/multiValue/multiValueObservables.ts +781 -666
- package/src/multiValue/plugins/MultiValueLegend.ts +107 -107
- package/src/multiValue/plugins/MultiValueTooltip.ts +66 -66
- package/src/multiValue/plugins/OrdinalAux.ts +661 -0
- package/src/multiValue/plugins/OrdinalAxis.ts +525 -0
- package/src/multiValue/plugins/OrdinalBubbles.ts +226 -0
- package/src/multiValue/plugins/OrdinalZoom.ts +57 -0
- package/src/multiValue/plugins/RacingBars.ts +375 -373
- package/src/multiValue/plugins/RacingCounterTexts.ts +300 -300
- package/src/multiValue/plugins/RacingValueAxis.ts +114 -114
- package/src/multiValue/plugins/Scatter.ts +486 -426
- package/src/multiValue/plugins/ScatterBubbles.ts +635 -554
- package/src/multiValue/plugins/XAxis.ts +107 -107
- package/src/multiValue/plugins/XYAux.ts +683 -682
- package/src/multiValue/plugins/XYAxes.ts +194 -194
- package/src/multiValue/plugins/XYAxes_legacy.ts +683 -683
- package/src/multiValue/plugins/XZoom.ts +40 -299
- package/src/noneData/defaults.ts +102 -102
- package/src/noneData/index.ts +3 -3
- package/src/noneData/plugins/Container.ts +27 -27
- package/src/noneData/plugins/Tooltip.ts +373 -373
- package/src/relationship/defaults.ts +221 -221
- package/src/relationship/index.ts +5 -5
- package/src/relationship/plugins/ForceDirected.ts +1173 -1173
- package/src/relationship/plugins/ForceDirectedBubbles.ts +1411 -1411
- package/src/relationship/plugins/RelationshipLegend.ts +100 -100
- package/src/relationship/plugins/RelationshipTooltip.ts +66 -66
- package/src/relationship/relationshipObservables.ts +49 -49
- package/src/series/defaults.ts +221 -221
- package/src/series/index.ts +9 -9
- package/src/series/plugins/Bubbles.ts +636 -636
- package/src/series/plugins/Pie.ts +623 -623
- package/src/series/plugins/PieEventTexts.ts +284 -284
- package/src/series/plugins/PieLabels.ts +640 -640
- package/src/series/plugins/Rose.ts +516 -516
- package/src/series/plugins/RoseLabels.ts +600 -600
- package/src/series/plugins/SeriesLegend.ts +107 -107
- package/src/series/plugins/SeriesTooltip.ts +66 -66
- package/src/series/seriesObservables.ts +145 -145
- package/src/series/seriesUtils.ts +51 -51
- package/src/tree/defaults.ts +102 -102
- package/src/tree/index.ts +4 -4
- package/src/tree/plugins/TreeLegend.ts +100 -100
- package/src/tree/plugins/TreeMap.ts +341 -341
- package/src/tree/plugins/TreeTooltip.ts +66 -66
- package/src/utils/commonUtils.ts +31 -31
- package/src/utils/d3Graphics.ts +176 -176
- package/src/utils/d3Utils.ts +92 -92
- package/src/utils/observables.ts +14 -14
- package/src/utils/orbchartsUtils.ts +129 -129
- package/tsconfig.base.json +13 -13
- package/tsconfig.json +2 -2
- package/vite.config.js +22 -22
- package/dist/src/multiValue/plugins/OrdinalXAxis.d.ts +0 -0
- package/dist/src/multiValue/plugins/RankingAxis_legacy.d.ts +0 -0
- package/src/multiValue/plugins/OrdinalXAxis.ts +0 -0
- package/src/multiValue/plugins/RankingAxis_legacy.ts +0 -109
@@ -1,300 +1,41 @@
|
|
1
|
-
import
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
// .append('rect')
|
42
|
-
// .classed(rectClassName, true)
|
43
|
-
// .attr('opacity', 0)
|
44
|
-
|
45
|
-
// 紀錄zoom最後一次的transform
|
46
|
-
let lastTransform = {
|
47
|
-
k: 1,
|
48
|
-
x: 0,
|
49
|
-
y: 0
|
50
|
-
}
|
51
|
-
// let lastDomain: [number, number] = [0, 0]
|
52
|
-
|
53
|
-
// observer.layout$.pipe(
|
54
|
-
// takeUntil(destroy$),
|
55
|
-
// ).subscribe(d => {
|
56
|
-
// rootRectSelection
|
57
|
-
// .attr('width', d.width)
|
58
|
-
// .attr('height', d.height)
|
59
|
-
// .attr('x', d.left)
|
60
|
-
// .attr('y', d.top)
|
61
|
-
// })
|
62
|
-
|
63
|
-
// const groupMax$ = observer.computedData$.pipe(
|
64
|
-
// map(d => d[0] ? d[0].length - 1 : 0),
|
65
|
-
// distinctUntilChanged()
|
66
|
-
// )
|
67
|
-
|
68
|
-
// const fullDataFormatterEvent$: Subject<DataFormatterMultiValue> = new Subject()
|
69
|
-
// fullDataFormatterEvent$
|
70
|
-
// .pipe(
|
71
|
-
// takeUntil(destroy$),
|
72
|
-
// debounceTime(50)
|
73
|
-
// )
|
74
|
-
// .subscribe(fullDataFormatter => {
|
75
|
-
// store.fullDataFormatter$.next(fullDataFormatter)
|
76
|
-
// })
|
77
|
-
|
78
|
-
const initXAxis$ = observer.fullDataFormatter$.pipe(
|
79
|
-
map(d => d.xAxis),
|
80
|
-
// 只用第一次資料來計算scale才不會造成每次變動都受到影響
|
81
|
-
first()
|
82
|
-
)
|
83
|
-
|
84
|
-
const initYAxis$ = observer.fullDataFormatter$.pipe(
|
85
|
-
map(d => d.yAxis),
|
86
|
-
// 只用第一次資料來計算scale才不會造成每次變動都受到影響
|
87
|
-
first()
|
88
|
-
)
|
89
|
-
|
90
|
-
|
91
|
-
// const groupScale$ = combineLatest({
|
92
|
-
// initXAxis: initXAxis$,
|
93
|
-
// fullDataFormatter: observer.fullDataFormatter$,
|
94
|
-
// groupMax: groupMax$,
|
95
|
-
// layout: observer.layout$,
|
96
|
-
// // axisSize: observer.gridAxesSize$
|
97
|
-
// }).pipe(
|
98
|
-
// takeUntil(destroy$),
|
99
|
-
// switchMap(async (d) => d),
|
100
|
-
// map(data => {
|
101
|
-
// // const groupMin = 0
|
102
|
-
// const groupScaleDomainMin = data.initXAxis.scaleDomain[0] - data.initXAxis.scalePadding
|
103
|
-
// const groupScaleDomainMax = data.initXAxis.scaleDomain[1] === 'max'
|
104
|
-
// ? data.groupMax + data.initXAxis.scalePadding
|
105
|
-
// : data.initXAxis.scaleDomain[1] as number + data.initXAxis.scalePadding
|
106
|
-
|
107
|
-
// const groupScale: d3.ScaleLinear<number, number> = createValueToAxisScale({
|
108
|
-
// maxValue: data.groupMax,
|
109
|
-
// minValue: 0,
|
110
|
-
// axisWidth: data.layout.width,
|
111
|
-
// scaleDomain: [groupScaleDomainMin, groupScaleDomainMax],
|
112
|
-
// scaleRange: [0, 1]
|
113
|
-
// })
|
114
|
-
|
115
|
-
// return groupScale
|
116
|
-
// })
|
117
|
-
// )
|
118
|
-
const initXScale$: Observable<d3.ScaleLinear<number, number>> = new Observable(subscriber => {
|
119
|
-
combineLatest({
|
120
|
-
initXAxis: initXAxis$,
|
121
|
-
layout: observer.layout$,
|
122
|
-
xyMinMax: observer.xyMinMax$
|
123
|
-
}).pipe(
|
124
|
-
takeUntil(destroy$),
|
125
|
-
switchMap(async (d) => d),
|
126
|
-
).subscribe(data => {
|
127
|
-
|
128
|
-
const xScale: d3.ScaleLinear<number, number> = createValueToAxisScale({
|
129
|
-
maxValue: data.xyMinMax.maxX,
|
130
|
-
minValue: data.xyMinMax.minX,
|
131
|
-
axisWidth: data.layout.width,
|
132
|
-
scaleDomain: data.initXAxis.scaleDomain,
|
133
|
-
scaleRange: data.initXAxis.scaleRange,
|
134
|
-
})
|
135
|
-
|
136
|
-
subscriber.next(xScale)
|
137
|
-
})
|
138
|
-
})
|
139
|
-
|
140
|
-
const initYScale$: Observable<d3.ScaleLinear<number, number>> = new Observable(subscriber => {
|
141
|
-
combineLatest({
|
142
|
-
initYAxis: initYAxis$,
|
143
|
-
layout: observer.layout$,
|
144
|
-
xyMinMax: observer.xyMinMax$
|
145
|
-
}).pipe(
|
146
|
-
takeUntil(destroy$),
|
147
|
-
switchMap(async (d) => d),
|
148
|
-
).subscribe(data => {
|
149
|
-
|
150
|
-
const yScale: d3.ScaleLinear<number, number> = createValueToAxisScale({
|
151
|
-
maxValue: data.xyMinMax.maxY,
|
152
|
-
minValue: data.xyMinMax.minY,
|
153
|
-
axisWidth: data.layout.height,
|
154
|
-
scaleDomain: data.initYAxis.scaleDomain,
|
155
|
-
scaleRange: data.initYAxis.scaleRange,
|
156
|
-
reverse: true
|
157
|
-
})
|
158
|
-
|
159
|
-
subscriber.next(yScale)
|
160
|
-
})
|
161
|
-
})
|
162
|
-
|
163
|
-
const minMaxScaleDomain$ = combineLatest({
|
164
|
-
initXAxis: initXAxis$,
|
165
|
-
initYAxis: initYAxis$,
|
166
|
-
xyMinMax: observer.xyMinMax$
|
167
|
-
}).pipe(
|
168
|
-
takeUntil(destroy$),
|
169
|
-
switchMap(async (d) => d),
|
170
|
-
map(data => {
|
171
|
-
let minX = data.xyMinMax.minX
|
172
|
-
let maxX = data.xyMinMax.maxX
|
173
|
-
let minY = data.xyMinMax.minY
|
174
|
-
let maxY = data.xyMinMax.maxY
|
175
|
-
|
176
|
-
// 原始設定為auto時要額外判斷
|
177
|
-
if (data.initXAxis.scaleDomain[0] === 'auto' && minX > 0) {
|
178
|
-
minX = 0
|
179
|
-
}
|
180
|
-
if (data.initXAxis.scaleDomain[1] === 'auto' && maxX < 0) {
|
181
|
-
maxX = 0
|
182
|
-
}
|
183
|
-
if (data.initYAxis.scaleDomain[0] === 'auto' && minY > 0) {
|
184
|
-
minY = 0
|
185
|
-
}
|
186
|
-
if (data.initYAxis.scaleDomain[1] === 'auto' && maxY < 0) {
|
187
|
-
maxY = 0
|
188
|
-
}
|
189
|
-
|
190
|
-
return {
|
191
|
-
minX,
|
192
|
-
maxX,
|
193
|
-
minY,
|
194
|
-
maxY
|
195
|
-
}
|
196
|
-
}),
|
197
|
-
)
|
198
|
-
|
199
|
-
combineLatest({
|
200
|
-
initXScale: initXScale$,
|
201
|
-
// initXAxis: initXAxis$,
|
202
|
-
// fullDataFormatter: fullDataFormatter$.pipe(first()), // 只用第一次資料來計算scale才不會造成每次變動都受到影響
|
203
|
-
fullDataFormatter: observer.fullDataFormatter$,
|
204
|
-
// groupMax: groupMax$,
|
205
|
-
// xyMinMax: observer.xyMinMax$,
|
206
|
-
minMaxScaleDomain: minMaxScaleDomain$,
|
207
|
-
// layout: observer.layout$,
|
208
|
-
// axisSize: observer.gridAxesSize$
|
209
|
-
}).pipe(
|
210
|
-
takeUntil(destroy$),
|
211
|
-
switchMap(async (d) => d),
|
212
|
-
).subscribe(data => {
|
213
|
-
// const groupMin = 0
|
214
|
-
|
215
|
-
const shadowScale = data.initXScale.copy()
|
216
|
-
|
217
|
-
const zoom = d3.zoom()
|
218
|
-
// .scaleExtent([1, data.groupMaxIndex])
|
219
|
-
// .translateExtent([[0, 0], [data.layout.rootWidth, data.layout.rootWidth]])
|
220
|
-
.on("zoom", function zoomed(event) {
|
221
|
-
// debugger
|
222
|
-
// console.log('event', event)
|
223
|
-
const t = event.transform;
|
224
|
-
|
225
|
-
// if (event.sourceEvent.type === 'mousemove') {
|
226
|
-
// // 當進行平移時,反向計算 x 軸
|
227
|
-
// const dx = event.transform.x - currentTransform.x; // 本次平移增量
|
228
|
-
// const reversedX = currentTransform.x - dx; // 反向累積平移
|
229
|
-
// // 更新變換狀態
|
230
|
-
// currentTransform = d3.zoomIdentity
|
231
|
-
// .translate(reversedX, event.transform.y)
|
232
|
-
// .scale(event.transform.k);
|
233
|
-
// } else {
|
234
|
-
// // 縮放操作:只更新縮放比例
|
235
|
-
// currentTransform = d3.zoomIdentity
|
236
|
-
// .translate(currentTransform.x, currentTransform.y)
|
237
|
-
// .scale(event.transform.k);
|
238
|
-
// }
|
239
|
-
// console.log('currentTransform', currentTransform)
|
240
|
-
|
241
|
-
// console.log('t.x', t.x)
|
242
|
-
const mapGroupindex = (d: number) => {
|
243
|
-
const n = Math.round(d)
|
244
|
-
return Math.min(data.minMaxScaleDomain.maxX, Math.max(data.minMaxScaleDomain.minX, n));
|
245
|
-
}
|
246
|
-
|
247
|
-
const zoomedDomain = t.rescaleX(shadowScale)
|
248
|
-
.domain()
|
249
|
-
.map(mapGroupindex)
|
250
|
-
|
251
|
-
|
252
|
-
// domain超過極限值
|
253
|
-
if (zoomedDomain[0] <= data.minMaxScaleDomain.minX && zoomedDomain[1] >= data.minMaxScaleDomain.maxX) {
|
254
|
-
// 繼續縮小
|
255
|
-
if (t.k < lastTransform.k) {
|
256
|
-
// 維持前一次的transform
|
257
|
-
t.k = lastTransform.k
|
258
|
-
t.x = lastTransform.x
|
259
|
-
t.y = lastTransform.y
|
260
|
-
}
|
261
|
-
// domain間距小於1
|
262
|
-
} else if ((zoomedDomain[1] - zoomedDomain[0]) <= 1) {
|
263
|
-
// 繼續放大
|
264
|
-
if (t.k > lastTransform.k) {
|
265
|
-
// 維持前一次的transform
|
266
|
-
t.k = lastTransform.k
|
267
|
-
t.x = lastTransform.x
|
268
|
-
t.y = lastTransform.y
|
269
|
-
}
|
270
|
-
}
|
271
|
-
|
272
|
-
// 紀錄transform
|
273
|
-
lastTransform.k = t.k
|
274
|
-
lastTransform.x = t.x
|
275
|
-
lastTransform.y = t.y
|
276
|
-
|
277
|
-
// console.log(zoomedDomain)
|
278
|
-
const newDataFormatter: DataFormatterMultiValue = {
|
279
|
-
...data.fullDataFormatter,
|
280
|
-
xAxis: {
|
281
|
-
...data.fullDataFormatter.xAxis,
|
282
|
-
scaleDomain: zoomedDomain
|
283
|
-
}
|
284
|
-
}
|
285
|
-
subject.dataFormatter$.next(newDataFormatter)
|
286
|
-
})
|
287
|
-
|
288
|
-
// 傳入外層selection
|
289
|
-
// subject.selection.call(zoom as any)
|
290
|
-
rootSelection.call(zoom)
|
291
|
-
|
292
|
-
})
|
293
|
-
|
294
|
-
return () => {
|
295
|
-
destroy$.next(undefined)
|
296
|
-
// rootRectSelection.remove()
|
297
|
-
|
298
|
-
rootSelection.call(d3.zoom().on('zoom', null))
|
299
|
-
}
|
1
|
+
import {
|
2
|
+
Subject } from 'rxjs'
|
3
|
+
import type { DefinePluginConfig } from '../../../lib/core-types'
|
4
|
+
import {
|
5
|
+
defineMultiValuePlugin, createValueToAxisScale } from '../../../lib/core'
|
6
|
+
import { DEFAULT_X_ZOOM_PARAMS } from '../defaults'
|
7
|
+
import { LAYER_INDEX_OF_ROOT } from '../../const'
|
8
|
+
import { createBaseXZoom } from '../../base/BaseXZoom'
|
9
|
+
|
10
|
+
const pluginName = 'XZoom'
|
11
|
+
|
12
|
+
const pluginConfig: DefinePluginConfig<typeof pluginName, typeof DEFAULT_X_ZOOM_PARAMS> = {
|
13
|
+
name: pluginName,
|
14
|
+
defaultParams: DEFAULT_X_ZOOM_PARAMS,
|
15
|
+
layerIndex: LAYER_INDEX_OF_ROOT,
|
16
|
+
validator: (params, { validateColumns }) => {
|
17
|
+
return {
|
18
|
+
status: 'success',
|
19
|
+
columnName: '',
|
20
|
+
expectToBe: ''
|
21
|
+
}
|
22
|
+
}
|
23
|
+
}
|
24
|
+
|
25
|
+
export const XZoom = defineMultiValuePlugin(pluginConfig)(({ selection, rootSelection, name, observer, subject }) => {
|
26
|
+
|
27
|
+
const destroy$ = new Subject()
|
28
|
+
|
29
|
+
const unsubscribeBaseOrdinalBubbles = createBaseXZoom(pluginName, {
|
30
|
+
rootSelection,
|
31
|
+
fullDataFormatter$: observer.fullDataFormatter$,
|
32
|
+
xyMinMax$: observer.xyMinMax$,
|
33
|
+
layout$: observer.layout$,
|
34
|
+
dataFormatter$: subject.dataFormatter$,
|
35
|
+
})
|
36
|
+
|
37
|
+
return () => {
|
38
|
+
destroy$.next(undefined)
|
39
|
+
unsubscribeBaseOrdinalBubbles()
|
40
|
+
}
|
300
41
|
})
|
package/src/noneData/defaults.ts
CHANGED
@@ -1,103 +1,103 @@
|
|
1
|
-
import type { ContainerPluginParams, TooltipParams } from '../../lib/plugins-basic-types'
|
2
|
-
import type { EventTypeMap, EventBaseSeriesValue, EventBaseGridValue, EventBaseCategoryValue } from '../../lib/core-types'
|
3
|
-
|
4
|
-
export const CONTAINER_PLUGIN_PARAMS: ContainerPluginParams = {
|
5
|
-
header: {
|
6
|
-
height: 36,
|
7
|
-
text: [],
|
8
|
-
textStyle: []
|
9
|
-
},
|
10
|
-
footer: {
|
11
|
-
height: 0,
|
12
|
-
text: [],
|
13
|
-
textStyle: []
|
14
|
-
}
|
15
|
-
}
|
16
|
-
|
17
|
-
export const TOOLTIP_PARAMS: TooltipParams = {
|
18
|
-
backgroundColorType: 'background',
|
19
|
-
strokeColorType: 'primary',
|
20
|
-
backgroundOpacity: 0.8,
|
21
|
-
textColorType: 'primary',
|
22
|
-
offset: [20, 5],
|
23
|
-
padding: 10,
|
24
|
-
textRenderFn: (eventData) => {
|
25
|
-
if (eventData.highlightTarget === 'datum' && eventData.datum) {
|
26
|
-
return [`${(eventData as EventTypeMap<'series'>).datum.label}: ${(eventData as EventTypeMap<'series'>).datum.value}`]
|
27
|
-
} else if (eventData.highlightTarget === 'series') {
|
28
|
-
const label = (eventData as EventBaseSeriesValue).seriesLabel
|
29
|
-
const valueArr = (eventData as EventBaseSeriesValue).series
|
30
|
-
.filter(d => d.visible == true)
|
31
|
-
.map(d => {
|
32
|
-
return d.value
|
33
|
-
})
|
34
|
-
const value = valueArr.length > 5
|
35
|
-
? valueArr.slice(0, 5).join(',') + '...'
|
36
|
-
: valueArr.join(',')
|
37
|
-
return [label, value]
|
38
|
-
} else if (eventData.highlightTarget === 'group') {
|
39
|
-
const label = (eventData as EventBaseGridValue<'grid'>).groupLabel
|
40
|
-
const valueArr = (eventData as EventBaseGridValue<'grid'>).series
|
41
|
-
.filter(d => d.visible == true)
|
42
|
-
.map(d => {
|
43
|
-
return d.value
|
44
|
-
})
|
45
|
-
const value = valueArr.length > 5
|
46
|
-
? valueArr.slice(0, 5).join(',') + '...'
|
47
|
-
: valueArr.join(',')
|
48
|
-
return [label, value]
|
49
|
-
} else if (eventData.highlightTarget === 'category') {
|
50
|
-
const label = (eventData as EventBaseCategoryValue<any>).categoryLabel
|
51
|
-
const valueArr = (eventData as EventBaseCategoryValue<'multiValue'>).category
|
52
|
-
.filter(d => d.visible == true)
|
53
|
-
.map(d => {
|
54
|
-
return d.value
|
55
|
-
})
|
56
|
-
const value = valueArr.length > 5
|
57
|
-
? valueArr.slice(0, 5).join(',') + '...'
|
58
|
-
: valueArr.join(',')
|
59
|
-
return [label, value]
|
60
|
-
}
|
61
|
-
return []
|
62
|
-
},
|
63
|
-
svgRenderFn: null
|
64
|
-
}
|
65
|
-
TOOLTIP_PARAMS.textRenderFn.toString = () => `(eventData) => {
|
66
|
-
if (eventData.highlightTarget === 'datum' && eventData.datum) {
|
67
|
-
return [\`\${eventData.datum.label}: \${eventData.datum.value}\`]
|
68
|
-
} else if (eventData.highlightTarget === 'series') {
|
69
|
-
const label = (eventData as EventBaseSeriesValue<any, any>).seriesLabel
|
70
|
-
const valueArr = (eventData as EventBaseSeriesValue<any, any>).series
|
71
|
-
.filter(d => d.visible == true)
|
72
|
-
.map(d => {
|
73
|
-
return d.value
|
74
|
-
})
|
75
|
-
const value = valueArr.length > 5
|
76
|
-
? valueArr.slice(0, 5).join(',') + '...'
|
77
|
-
: valueArr.join(',')
|
78
|
-
return [label, value]
|
79
|
-
} else if (eventData.highlightTarget === 'group') {
|
80
|
-
const label = (eventData as EventBaseGridValue<any, any>).groupLabel
|
81
|
-
const valueArr = (eventData as EventBaseGridValue<any, any>).series
|
82
|
-
.filter(d => d.visible == true)
|
83
|
-
.map(d => {
|
84
|
-
return d.value
|
85
|
-
})
|
86
|
-
const value = valueArr.length > 5
|
87
|
-
? valueArr.slice(0, 5).join(',') + '...'
|
88
|
-
: valueArr.join(',')
|
89
|
-
return [label, value]
|
90
|
-
} else if (eventData.highlightTarget === 'category') {
|
91
|
-
const label = (eventData as EventBaseCategoryValue<any, any>).categoryLabel
|
92
|
-
const valueArr = (eventData as EventBaseCategoryValue<any, any>).category
|
93
|
-
.filter(d => d.visible == true)
|
94
|
-
.map(d => {
|
95
|
-
return d.value
|
96
|
-
})
|
97
|
-
const value = valueArr.length > 5
|
98
|
-
? valueArr.slice(0, 5).join(',') + '...'
|
99
|
-
: valueArr.join(',')
|
100
|
-
return [label, value]
|
101
|
-
}
|
102
|
-
return []
|
1
|
+
import type { ContainerPluginParams, TooltipParams } from '../../lib/plugins-basic-types'
|
2
|
+
import type { EventTypeMap, EventBaseSeriesValue, EventBaseGridValue, EventBaseCategoryValue } from '../../lib/core-types'
|
3
|
+
|
4
|
+
export const CONTAINER_PLUGIN_PARAMS: ContainerPluginParams = {
|
5
|
+
header: {
|
6
|
+
height: 36,
|
7
|
+
text: [],
|
8
|
+
textStyle: []
|
9
|
+
},
|
10
|
+
footer: {
|
11
|
+
height: 0,
|
12
|
+
text: [],
|
13
|
+
textStyle: []
|
14
|
+
}
|
15
|
+
}
|
16
|
+
|
17
|
+
export const TOOLTIP_PARAMS: TooltipParams = {
|
18
|
+
backgroundColorType: 'background',
|
19
|
+
strokeColorType: 'primary',
|
20
|
+
backgroundOpacity: 0.8,
|
21
|
+
textColorType: 'primary',
|
22
|
+
offset: [20, 5],
|
23
|
+
padding: 10,
|
24
|
+
textRenderFn: (eventData) => {
|
25
|
+
if (eventData.highlightTarget === 'datum' && eventData.datum) {
|
26
|
+
return [`${(eventData as EventTypeMap<'series'>).datum.label}: ${(eventData as EventTypeMap<'series'>).datum.value}`]
|
27
|
+
} else if (eventData.highlightTarget === 'series') {
|
28
|
+
const label = (eventData as EventBaseSeriesValue).seriesLabel
|
29
|
+
const valueArr = (eventData as EventBaseSeriesValue).series
|
30
|
+
.filter(d => d.visible == true)
|
31
|
+
.map(d => {
|
32
|
+
return d.value
|
33
|
+
})
|
34
|
+
const value = valueArr.length > 5
|
35
|
+
? valueArr.slice(0, 5).join(',') + '...'
|
36
|
+
: valueArr.join(',')
|
37
|
+
return [label, value]
|
38
|
+
} else if (eventData.highlightTarget === 'group') {
|
39
|
+
const label = (eventData as EventBaseGridValue<'grid'>).groupLabel
|
40
|
+
const valueArr = (eventData as EventBaseGridValue<'grid'>).series
|
41
|
+
.filter(d => d.visible == true)
|
42
|
+
.map(d => {
|
43
|
+
return d.value
|
44
|
+
})
|
45
|
+
const value = valueArr.length > 5
|
46
|
+
? valueArr.slice(0, 5).join(',') + '...'
|
47
|
+
: valueArr.join(',')
|
48
|
+
return [label, value]
|
49
|
+
} else if (eventData.highlightTarget === 'category') {
|
50
|
+
const label = (eventData as EventBaseCategoryValue<any>).categoryLabel
|
51
|
+
const valueArr = (eventData as EventBaseCategoryValue<'multiValue'>).category
|
52
|
+
.filter(d => d.visible == true)
|
53
|
+
.map(d => {
|
54
|
+
return d.value
|
55
|
+
})
|
56
|
+
const value = valueArr.length > 5
|
57
|
+
? valueArr.slice(0, 5).join(',') + '...'
|
58
|
+
: valueArr.join(',')
|
59
|
+
return [label, value]
|
60
|
+
}
|
61
|
+
return []
|
62
|
+
},
|
63
|
+
svgRenderFn: null
|
64
|
+
}
|
65
|
+
TOOLTIP_PARAMS.textRenderFn.toString = () => `(eventData) => {
|
66
|
+
if (eventData.highlightTarget === 'datum' && eventData.datum) {
|
67
|
+
return [\`\${eventData.datum.label}: \${eventData.datum.value}\`]
|
68
|
+
} else if (eventData.highlightTarget === 'series') {
|
69
|
+
const label = (eventData as EventBaseSeriesValue<any, any>).seriesLabel
|
70
|
+
const valueArr = (eventData as EventBaseSeriesValue<any, any>).series
|
71
|
+
.filter(d => d.visible == true)
|
72
|
+
.map(d => {
|
73
|
+
return d.value
|
74
|
+
})
|
75
|
+
const value = valueArr.length > 5
|
76
|
+
? valueArr.slice(0, 5).join(',') + '...'
|
77
|
+
: valueArr.join(',')
|
78
|
+
return [label, value]
|
79
|
+
} else if (eventData.highlightTarget === 'group') {
|
80
|
+
const label = (eventData as EventBaseGridValue<any, any>).groupLabel
|
81
|
+
const valueArr = (eventData as EventBaseGridValue<any, any>).series
|
82
|
+
.filter(d => d.visible == true)
|
83
|
+
.map(d => {
|
84
|
+
return d.value
|
85
|
+
})
|
86
|
+
const value = valueArr.length > 5
|
87
|
+
? valueArr.slice(0, 5).join(',') + '...'
|
88
|
+
: valueArr.join(',')
|
89
|
+
return [label, value]
|
90
|
+
} else if (eventData.highlightTarget === 'category') {
|
91
|
+
const label = (eventData as EventBaseCategoryValue<any, any>).categoryLabel
|
92
|
+
const valueArr = (eventData as EventBaseCategoryValue<any, any>).category
|
93
|
+
.filter(d => d.visible == true)
|
94
|
+
.map(d => {
|
95
|
+
return d.value
|
96
|
+
})
|
97
|
+
const value = valueArr.length > 5
|
98
|
+
? valueArr.slice(0, 5).join(',') + '...'
|
99
|
+
: valueArr.join(',')
|
100
|
+
return [label, value]
|
101
|
+
}
|
102
|
+
return []
|
103
103
|
}`
|
package/src/noneData/index.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
export * from './defaults'
|
2
|
-
// export * from './types'
|
3
|
-
// export { Container } from './plugins/Container'
|
1
|
+
export * from './defaults'
|
2
|
+
// export * from './types'
|
3
|
+
// export { Container } from './plugins/Container'
|
4
4
|
// export { Tooltip } from './plugins/Tooltip'
|
@@ -1,28 +1,28 @@
|
|
1
|
-
// import * as d3 from 'd3'
|
2
|
-
// import type { DefinePluginConfig } from '../../../lib/core-types'
|
3
|
-
// import {
|
4
|
-
// defineNoneDataPlugin } from '../../../lib/core'
|
5
|
-
// import { CONTAINER_PLUGIN_PARAMS } from '../defaults'
|
6
|
-
// import { LAYER_INDEX_OF_BG } from '../../const'
|
7
|
-
|
8
|
-
// const pluginName = 'Container'
|
9
|
-
|
10
|
-
// const pluginConfig: DefinePluginConfig<typeof pluginName, typeof CONTAINER_PLUGIN_PARAMS> = {
|
11
|
-
// name: pluginName,
|
12
|
-
// defaultParams: CONTAINER_PLUGIN_PARAMS,
|
13
|
-
// layerIndex: LAYER_INDEX_OF_BG,
|
14
|
-
// validator: (params, { validateColumns }) => {
|
15
|
-
// return {
|
16
|
-
// status: 'success',
|
17
|
-
// columnName: '',
|
18
|
-
// expectToBe: '',
|
19
|
-
// }
|
20
|
-
// }
|
21
|
-
// }
|
22
|
-
|
23
|
-
// export const Container = defineNoneDataPlugin(pluginConfig)(({ selection }) => {
|
24
|
-
|
25
|
-
// return function unsubscribe () {
|
26
|
-
|
27
|
-
// }
|
1
|
+
// import * as d3 from 'd3'
|
2
|
+
// import type { DefinePluginConfig } from '../../../lib/core-types'
|
3
|
+
// import {
|
4
|
+
// defineNoneDataPlugin } from '../../../lib/core'
|
5
|
+
// import { CONTAINER_PLUGIN_PARAMS } from '../defaults'
|
6
|
+
// import { LAYER_INDEX_OF_BG } from '../../const'
|
7
|
+
|
8
|
+
// const pluginName = 'Container'
|
9
|
+
|
10
|
+
// const pluginConfig: DefinePluginConfig<typeof pluginName, typeof CONTAINER_PLUGIN_PARAMS> = {
|
11
|
+
// name: pluginName,
|
12
|
+
// defaultParams: CONTAINER_PLUGIN_PARAMS,
|
13
|
+
// layerIndex: LAYER_INDEX_OF_BG,
|
14
|
+
// validator: (params, { validateColumns }) => {
|
15
|
+
// return {
|
16
|
+
// status: 'success',
|
17
|
+
// columnName: '',
|
18
|
+
// expectToBe: '',
|
19
|
+
// }
|
20
|
+
// }
|
21
|
+
// }
|
22
|
+
|
23
|
+
// export const Container = defineNoneDataPlugin(pluginConfig)(({ selection }) => {
|
24
|
+
|
25
|
+
// return function unsubscribe () {
|
26
|
+
|
27
|
+
// }
|
28
28
|
// })
|