@orbcharts/plugins-basic 3.0.0-alpha.43 → 3.0.0-alpha.45
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/dist/{src → orbcharts-plugins-basic/src}/base/BaseBarStack.d.ts +6 -4
- package/dist/{src → orbcharts-plugins-basic/src}/base/BaseBars.d.ts +6 -4
- package/dist/{src → orbcharts-plugins-basic/src}/base/BaseBarsTriangle.d.ts +7 -4
- package/dist/{src → orbcharts-plugins-basic/src}/base/BaseDots.d.ts +5 -3
- package/dist/{src → orbcharts-plugins-basic/src}/base/BaseGroupAxis.d.ts +3 -3
- package/dist/{src → orbcharts-plugins-basic/src}/base/BaseLegend.d.ts +1 -0
- package/dist/{src → orbcharts-plugins-basic/src}/base/BaseLineAreas.d.ts +6 -3
- package/dist/{src → orbcharts-plugins-basic/src}/base/BaseLines.d.ts +6 -3
- package/dist/{src → orbcharts-plugins-basic/src}/base/BaseValueAxis.d.ts +3 -3
- package/dist/{src → orbcharts-plugins-basic/src}/grid/gridObservables.d.ts +4 -4
- package/dist/orbcharts-plugins-basic/src/index.d.ts +5 -0
- package/dist/orbcharts-plugins-basic/src/multiGrid/multiGridObservables.d.ts +8 -0
- package/dist/orbcharts-plugins-basic/src/series/plugins/PieEventTexts.d.ts +3 -0
- package/dist/orbcharts-plugins-basic/src/series/seriesObservables.d.ts +21 -0
- package/dist/{src → orbcharts-plugins-basic/src}/series/seriesUtils.d.ts +3 -3
- package/dist/orbcharts-plugins-basic.es.js +8349 -8142
- package/dist/orbcharts-plugins-basic.umd.js +8 -8
- package/dist/src/index.d.ts +1 -5
- package/package.json +2 -2
- package/src/base/BaseBarStack.ts +105 -208
- package/src/base/BaseBars.ts +78 -64
- package/src/base/BaseBarsTriangle.ts +76 -63
- package/src/base/BaseDots.ts +41 -178
- package/src/base/BaseGroupAxis.ts +16 -16
- package/src/base/BaseLegend.ts +18 -13
- package/src/base/BaseLineAreas.ts +85 -81
- package/src/base/BaseLines.ts +82 -75
- package/src/base/BaseValueAxis.ts +17 -18
- package/src/grid/gridObservables.ts +22 -38
- package/src/grid/plugins/BarStack.ts +16 -3
- package/src/grid/plugins/Bars.ts +18 -4
- package/src/grid/plugins/BarsDiverging.ts +6 -4
- package/src/grid/plugins/BarsTriangle.ts +20 -4
- package/src/grid/plugins/Dots.ts +4 -2
- package/src/grid/plugins/GridLegend.ts +2 -1
- package/src/grid/plugins/GroupAux.ts +8 -6
- package/src/grid/plugins/GroupAxis.ts +15 -3
- package/src/grid/plugins/LineAreas.ts +5 -2
- package/src/grid/plugins/Lines.ts +5 -2
- package/src/grid/plugins/ScalingArea.ts +0 -1
- package/src/grid/plugins/ValueAxis.ts +15 -3
- package/src/grid/plugins/ValueStackAxis.ts +14 -5
- package/src/multiGrid/multiGridObservables.ts +14 -261
- package/src/multiGrid/plugins/MultiBarStack.ts +22 -8
- package/src/multiGrid/plugins/MultiBars.ts +21 -7
- package/src/multiGrid/plugins/MultiBarsTriangle.ts +22 -7
- package/src/multiGrid/plugins/MultiDots.ts +7 -5
- package/src/multiGrid/plugins/MultiGridLegend.ts +3 -2
- package/src/multiGrid/plugins/MultiGroupAxis.ts +19 -7
- package/src/multiGrid/plugins/MultiLineAreas.ts +9 -6
- package/src/multiGrid/plugins/MultiLines.ts +9 -6
- package/src/multiGrid/plugins/MultiValueAxis.ts +19 -7
- package/src/multiGrid/plugins/OverlappingValueAxes.ts +52 -47
- package/src/noneData/defaults.ts +3 -0
- package/src/noneData/plugins/Tooltip.ts +9 -3
- package/src/series/defaults.ts +13 -3
- package/src/series/plugins/Bubbles.ts +57 -37
- package/src/series/plugins/Pie.ts +300 -352
- package/src/series/plugins/PieEventTexts.ts +102 -38
- package/src/series/plugins/PieLabels.ts +95 -48
- package/src/series/plugins/SeriesLegend.ts +2 -1
- package/src/series/seriesObservables.ts +145 -0
- package/src/series/seriesUtils.ts +4 -4
- package/src/tree/plugins/TreeLegend.ts +2 -1
- package/src/tree/plugins/TreeMap.ts +8 -5
- package/tsconfig.json +3 -0
- package/dist/src/multiGrid/multiGridObservables.d.ts +0 -12
- package/dist/src/series/plugins/PieEventTexts.d.ts +0 -1
- /package/dist/{src → orbcharts-plugins-basic/src}/base/BaseGroupArea.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/base/types.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/grid/defaults.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/grid/index.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/BarStack.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/Bars.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/BarsDiverging.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/BarsTriangle.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/Dots.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/GridLegend.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/GroupAux.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/GroupAxis.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/LineAreas.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/Lines.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/Ranking.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/RankingAxis.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/ScalingArea.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/ValueAxis.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/ValueStackAxis.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/grid/types.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/defaults.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/index.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiBarStack.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiBars.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiBarsTriangle.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiDots.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiGridLegend.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiGroupAxis.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiLineAreas.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiLines.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiValueAxis.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/OverlappingValueAxes.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/types.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/multiValue/index.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/multiValue/plugins/Scatter.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/multiValue/plugins/ScatterAxes.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/noneData/defaults.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/noneData/index.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/noneData/plugins/Container.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/noneData/plugins/Tooltip.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/noneData/types.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/relationship/index.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/relationship/plugins/Relationship.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/series/defaults.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/series/index.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/Bubbles.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/Pie.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/PieLabels.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/SeriesLegend.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/Waffle.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/series/types.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/tree/defaults.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/tree/index.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/tree/plugins/TreeLegend.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/tree/plugins/TreeMap.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/tree/types.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/utils/commonUtils.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/utils/d3Graphics.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/utils/d3Utils.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/utils/observables.d.ts +0 -0
- /package/dist/{src → orbcharts-plugins-basic/src}/utils/orbchartsUtils.d.ts +0 -0
- /package/dist/{vite.config.d.ts → orbcharts-plugins-basic/vite.config.d.ts} +0 -0
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
|
|
7
7
|
import { DEFAULT_MULTI_LINES_PARAMS } from '../defaults'
|
|
8
8
|
import { createBaseLines } from '../../base/BaseLines'
|
|
9
|
-
import {
|
|
9
|
+
import { multiGridPluginObservables } from '../multiGridObservables'
|
|
10
10
|
import { getClassName, getUniID } from '../../utils/orbchartsUtils'
|
|
11
11
|
|
|
12
12
|
const pluginName = 'MultiLines'
|
|
@@ -18,7 +18,7 @@ export const MultiLines = defineMultiGridPlugin(pluginName, DEFAULT_MULTI_LINES_
|
|
|
18
18
|
|
|
19
19
|
const unsubscribeFnArr: (() => void)[] = []
|
|
20
20
|
|
|
21
|
-
const multiGridPlugin$ =
|
|
21
|
+
const multiGridPlugin$ = multiGridPluginObservables(observer)
|
|
22
22
|
|
|
23
23
|
multiGridPlugin$.subscribe(data => {
|
|
24
24
|
// 每次重新計算時,清除之前的訂閱
|
|
@@ -34,18 +34,21 @@ export const MultiLines = defineMultiGridPlugin(pluginName, DEFAULT_MULTI_LINES_
|
|
|
34
34
|
|
|
35
35
|
unsubscribeFnArr[i] = createBaseLines(pluginName, {
|
|
36
36
|
selection: gridSelection,
|
|
37
|
-
computedData$: d.
|
|
38
|
-
|
|
37
|
+
computedData$: d.computedData$,
|
|
38
|
+
computedLayoutData$: d.computedLayoutData$,
|
|
39
|
+
visibleComputedData$: d.visibleComputedData$,
|
|
40
|
+
visibleComputedLayoutData$: d.visibleComputedLayoutData$,
|
|
41
|
+
seriesLabels$: d.seriesLabels$,
|
|
39
42
|
SeriesDataMap$: d.SeriesDataMap$,
|
|
40
43
|
GroupDataMap$: d.GroupDataMap$,
|
|
41
|
-
fullDataFormatter$: d.
|
|
44
|
+
fullDataFormatter$: d.dataFormatter$,
|
|
42
45
|
fullParams$: observer.fullParams$,
|
|
43
46
|
fullChartParams$: observer.fullChartParams$,
|
|
44
47
|
gridAxesTransform$: d.gridAxesTransform$,
|
|
45
48
|
gridGraphicTransform$: d.gridGraphicTransform$,
|
|
46
49
|
gridAxesSize$: d.gridAxesSize$,
|
|
47
50
|
gridHighlight$: d.gridHighlight$,
|
|
48
|
-
|
|
51
|
+
gridContainerPosition$: d.gridContainerPosition$,
|
|
49
52
|
event$: subject.event$ as Subject<any>,
|
|
50
53
|
})
|
|
51
54
|
})
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import * as d3 from 'd3'
|
|
2
2
|
import {
|
|
3
|
-
Subject
|
|
3
|
+
Subject,
|
|
4
|
+
map,
|
|
5
|
+
distinctUntilChanged,
|
|
6
|
+
shareReplay,
|
|
7
|
+
takeUntil
|
|
8
|
+
} from 'rxjs'
|
|
4
9
|
import {
|
|
5
10
|
defineMultiGridPlugin } from '@orbcharts/core'
|
|
6
11
|
import { DEFAULT_MULTI_VALUE_AXIS_PARAMS } from '../defaults'
|
|
7
12
|
import { createBaseValueAxis } from '../../base/BaseValueAxis'
|
|
8
|
-
import {
|
|
13
|
+
import { multiGridPluginObservables } from '../multiGridObservables'
|
|
9
14
|
import { getClassName, getUniID } from '../../utils/orbchartsUtils'
|
|
10
15
|
|
|
11
16
|
const pluginName = 'MultiValueAxis'
|
|
@@ -17,7 +22,7 @@ export const MultiValueAxis = defineMultiGridPlugin(pluginName, DEFAULT_MULTI_VA
|
|
|
17
22
|
|
|
18
23
|
const unsubscribeFnArr: (() => void)[] = []
|
|
19
24
|
|
|
20
|
-
const multiGridPlugin$ =
|
|
25
|
+
const multiGridPlugin$ = multiGridPluginObservables(observer)
|
|
21
26
|
|
|
22
27
|
multiGridPlugin$.subscribe(data => {
|
|
23
28
|
// 每次重新計算時,清除之前的訂閱
|
|
@@ -31,17 +36,24 @@ export const MultiValueAxis = defineMultiGridPlugin(pluginName, DEFAULT_MULTI_VA
|
|
|
31
36
|
|
|
32
37
|
const gridSelection = d3.select(g[i])
|
|
33
38
|
|
|
39
|
+
const isSeriesSeprate$ = d.dataFormatter$.pipe(
|
|
40
|
+
takeUntil(destroy$),
|
|
41
|
+
map(d => d.grid.separateSeries),
|
|
42
|
+
distinctUntilChanged(),
|
|
43
|
+
shareReplay(1)
|
|
44
|
+
)
|
|
45
|
+
|
|
34
46
|
unsubscribeFnArr[i] = createBaseValueAxis(pluginName, {
|
|
35
47
|
selection: gridSelection,
|
|
36
|
-
computedData$: d.
|
|
48
|
+
computedData$: d.computedData$,
|
|
37
49
|
fullParams$: observer.fullParams$,
|
|
38
|
-
fullDataFormatter$: d.
|
|
50
|
+
fullDataFormatter$: d.dataFormatter$,
|
|
39
51
|
fullChartParams$: observer.fullChartParams$,
|
|
40
52
|
gridAxesTransform$: d.gridAxesTransform$,
|
|
41
53
|
gridAxesReverseTransform$: d.gridAxesReverseTransform$,
|
|
42
54
|
gridAxesSize$: d.gridAxesSize$,
|
|
43
|
-
|
|
44
|
-
|
|
55
|
+
gridContainerPosition$: d.gridContainerPosition$,
|
|
56
|
+
isSeriesSeprate$,
|
|
45
57
|
})
|
|
46
58
|
})
|
|
47
59
|
})
|
|
@@ -5,18 +5,19 @@ import {
|
|
|
5
5
|
switchMap,
|
|
6
6
|
combineLatest,
|
|
7
7
|
takeUntil,
|
|
8
|
+
distinctUntilChanged,
|
|
9
|
+
shareReplay,
|
|
8
10
|
iif,
|
|
9
11
|
Observable,
|
|
10
12
|
Subject } from 'rxjs'
|
|
11
|
-
import type { ContextObserverMultiGrid, DataFormatterGrid } from '@orbcharts/core'
|
|
13
|
+
import type { ContextObserverMultiGrid, DataFormatterGrid, DataFormatterTypeMap, Layout } from '@orbcharts/core'
|
|
12
14
|
import {
|
|
13
15
|
defineMultiGridPlugin } from '@orbcharts/core'
|
|
14
16
|
import { DEFAULT_OVERLAPPING_VALUE_AXES_PARAMS } from '../defaults'
|
|
15
17
|
import { createBaseValueAxis } from '../../base/BaseValueAxis'
|
|
16
|
-
import {
|
|
18
|
+
import { multiGridPluginObservables } from '../multiGridObservables'
|
|
17
19
|
import { getClassName, getUniID } from '../../utils/orbchartsUtils'
|
|
18
|
-
|
|
19
|
-
import { gridAxesTransformObservable, gridAxesReverseTransformObservable, gridContainerObservable } from '@orbcharts/core/src/grid/gridObservables'
|
|
20
|
+
import { gridAxesTransformObservable, gridAxesReverseTransformObservable, gridContainerPositionObservable } from '@orbcharts/core/src/grid/gridObservables'
|
|
20
21
|
|
|
21
22
|
const pluginName = 'OverlappingValueAxes'
|
|
22
23
|
|
|
@@ -40,43 +41,41 @@ export const OverlappingValueAxes = defineMultiGridPlugin(pluginName, DEFAULT_OV
|
|
|
40
41
|
// 為了要反轉第二個valueAxis的位置所以要重新計算
|
|
41
42
|
const secondGridDataFormatter$: Observable<DataFormatterGrid> = combineLatest({
|
|
42
43
|
firstGridIndex: firstGridIndex$,
|
|
43
|
-
secondGridIndex: secondGridIndex
|
|
44
|
+
secondGridIndex: secondGridIndex$,
|
|
45
|
+
fullDataFormatter: observer.fullDataFormatter$,
|
|
44
46
|
}).pipe(
|
|
45
47
|
takeUntil(destroy$),
|
|
46
|
-
switchMap(
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
position: reversePosition
|
|
71
|
-
}
|
|
72
|
-
},
|
|
73
|
-
container: {
|
|
74
|
-
...fullDataFormatter.container
|
|
75
|
-
}
|
|
48
|
+
switchMap(async (d) => d),
|
|
49
|
+
map(data => {
|
|
50
|
+
if (!data.fullDataFormatter.gridList[data.secondGridIndex]) {
|
|
51
|
+
data.fullDataFormatter.gridList[data.secondGridIndex] = Object.assign({}, data.fullDataFormatter.gridList[data.firstGridIndex])
|
|
52
|
+
}
|
|
53
|
+
// 反轉第二個valueAxis的位置
|
|
54
|
+
let reversePosition = ''
|
|
55
|
+
if (data.fullDataFormatter.gridList[data.firstGridIndex].valueAxis.position === 'left') {
|
|
56
|
+
reversePosition = 'right'
|
|
57
|
+
} else if (data.fullDataFormatter.gridList[data.firstGridIndex].valueAxis.position === 'bottom') {
|
|
58
|
+
reversePosition = 'top'
|
|
59
|
+
} else if (data.fullDataFormatter.gridList[data.firstGridIndex].valueAxis.position === 'top') {
|
|
60
|
+
reversePosition = 'bottom'
|
|
61
|
+
} else if (data.fullDataFormatter.gridList[data.firstGridIndex].valueAxis.position === 'right') {
|
|
62
|
+
reversePosition = 'left'
|
|
63
|
+
}
|
|
64
|
+
return <DataFormatterGrid>{
|
|
65
|
+
type: 'grid',
|
|
66
|
+
visibleFilter: data.fullDataFormatter.visibleFilter as any,
|
|
67
|
+
grid: {
|
|
68
|
+
...data.fullDataFormatter.gridList[data.secondGridIndex],
|
|
69
|
+
valueAxis: {
|
|
70
|
+
...data.fullDataFormatter.gridList[data.secondGridIndex].valueAxis,
|
|
71
|
+
position: reversePosition
|
|
76
72
|
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
|
|
73
|
+
},
|
|
74
|
+
container: {
|
|
75
|
+
...data.fullDataFormatter.container
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
})
|
|
80
79
|
)
|
|
81
80
|
|
|
82
81
|
const multiGridPlugin$ = of(observer).pipe(
|
|
@@ -95,7 +94,7 @@ export const OverlappingValueAxes = defineMultiGridPlugin(pluginName, DEFAULT_OV
|
|
|
95
94
|
)
|
|
96
95
|
}
|
|
97
96
|
}),
|
|
98
|
-
switchMap(observer =>
|
|
97
|
+
switchMap(observer => multiGridPluginObservables(observer)),
|
|
99
98
|
map(data => {
|
|
100
99
|
return data.map((observables, index) => {
|
|
101
100
|
if (index === 0) {
|
|
@@ -109,17 +108,16 @@ export const OverlappingValueAxes = defineMultiGridPlugin(pluginName, DEFAULT_OV
|
|
|
109
108
|
const gridAxesReverseTransform$ = gridAxesReverseTransformObservable({
|
|
110
109
|
gridAxesTransform$
|
|
111
110
|
})
|
|
112
|
-
const
|
|
113
|
-
computedData$: observables.
|
|
111
|
+
const gridContainerPosition$ = gridContainerPositionObservable({
|
|
112
|
+
computedData$: observables.computedData$,
|
|
114
113
|
fullDataFormatter$: secondGridDataFormatter$,
|
|
115
|
-
fullChartParams$: observer.fullChartParams$,
|
|
116
114
|
layout$: observer.layout$
|
|
117
115
|
})
|
|
118
116
|
return {
|
|
119
117
|
...observables,
|
|
120
118
|
gridAxesTransform$,
|
|
121
119
|
gridAxesReverseTransform$,
|
|
122
|
-
|
|
120
|
+
gridContainerPosition$,
|
|
123
121
|
}
|
|
124
122
|
})
|
|
125
123
|
})
|
|
@@ -140,19 +138,26 @@ export const OverlappingValueAxes = defineMultiGridPlugin(pluginName, DEFAULT_OV
|
|
|
140
138
|
|
|
141
139
|
const gridSelection = d3.select(g[i])
|
|
142
140
|
|
|
141
|
+
const isSeriesSeprate$ = d.dataFormatter$.pipe(
|
|
142
|
+
takeUntil(destroy$),
|
|
143
|
+
map(d => d.grid.separateSeries),
|
|
144
|
+
distinctUntilChanged(),
|
|
145
|
+
shareReplay(1)
|
|
146
|
+
)
|
|
147
|
+
|
|
143
148
|
unsubscribeFnArr[i] = createBaseValueAxis(pluginName, {
|
|
144
149
|
selection: gridSelection,
|
|
145
|
-
computedData$: d.
|
|
150
|
+
computedData$: d.computedData$,
|
|
146
151
|
fullParams$: observer.fullParams$.pipe(
|
|
147
152
|
map(fullParams => i === 0 ? fullParams.firstAxis : fullParams.secondAxis)
|
|
148
153
|
),
|
|
149
|
-
fullDataFormatter$: d.
|
|
154
|
+
fullDataFormatter$: d.dataFormatter$,
|
|
150
155
|
fullChartParams$: observer.fullChartParams$,
|
|
151
156
|
gridAxesTransform$: d.gridAxesTransform$,
|
|
152
157
|
gridAxesReverseTransform$: d.gridAxesReverseTransform$,
|
|
153
158
|
gridAxesSize$: d.gridAxesSize$,
|
|
154
|
-
|
|
155
|
-
|
|
159
|
+
gridContainerPosition$: d.gridContainerPosition$,
|
|
160
|
+
isSeriesSeprate$,
|
|
156
161
|
})
|
|
157
162
|
})
|
|
158
163
|
})
|
package/src/noneData/defaults.ts
CHANGED
|
@@ -27,6 +27,7 @@ export const TOOLTIP_PARAMS: TooltipParams = {
|
|
|
27
27
|
} else if (eventData.highlightTarget === 'series') {
|
|
28
28
|
const label = (eventData as EventBaseSeriesValue<any, any>).seriesLabel
|
|
29
29
|
const valueArr = (eventData as EventBaseSeriesValue<any, any>).series
|
|
30
|
+
.filter(d => d.visible == true)
|
|
30
31
|
.map(d => {
|
|
31
32
|
return d.value
|
|
32
33
|
})
|
|
@@ -37,6 +38,7 @@ export const TOOLTIP_PARAMS: TooltipParams = {
|
|
|
37
38
|
} else if (eventData.highlightTarget === 'group') {
|
|
38
39
|
const label = (eventData as EventBaseGridValue<any, any>).groupLabel
|
|
39
40
|
const valueArr = (eventData as EventBaseGridValue<any, any>).series
|
|
41
|
+
.filter(d => d.visible == true)
|
|
40
42
|
.map(d => {
|
|
41
43
|
return d.value
|
|
42
44
|
})
|
|
@@ -47,6 +49,7 @@ export const TOOLTIP_PARAMS: TooltipParams = {
|
|
|
47
49
|
} else if (eventData.highlightTarget === 'category') {
|
|
48
50
|
const label = (eventData as EventBaseCategoryValue<any, any>).categoryLabel
|
|
49
51
|
const valueArr = (eventData as EventBaseCategoryValue<any, any>).category
|
|
52
|
+
.filter(d => d.visible == true)
|
|
50
53
|
.map(d => {
|
|
51
54
|
return d.value
|
|
52
55
|
})
|
|
@@ -17,6 +17,7 @@ import { defineNoneDataPlugin } from '@orbcharts/core'
|
|
|
17
17
|
import { getSvgGElementSize, appendSvg } from '../../utils/d3Utils'
|
|
18
18
|
import { getColor, getClassName } from '../../utils/orbchartsUtils'
|
|
19
19
|
import { TOOLTIP_PARAMS } from '../defaults'
|
|
20
|
+
import { textSizePxObservable } from '@orbcharts/core'
|
|
20
21
|
|
|
21
22
|
interface TooltipStyle {
|
|
22
23
|
backgroundColor: string
|
|
@@ -25,7 +26,8 @@ interface TooltipStyle {
|
|
|
25
26
|
offset: [number, number]
|
|
26
27
|
padding: number
|
|
27
28
|
textColor: string
|
|
28
|
-
textSize: number
|
|
29
|
+
textSize: number | string // chartParams上的設定
|
|
30
|
+
textSizePx: number
|
|
29
31
|
}
|
|
30
32
|
|
|
31
33
|
const pluginName = 'Tooltip'
|
|
@@ -33,7 +35,7 @@ const gClassName = getClassName(pluginName, 'g')
|
|
|
33
35
|
const boxClassName = getClassName(pluginName, 'box')
|
|
34
36
|
|
|
35
37
|
function textToSvg (textArr: string[], textStyle: TooltipStyle) {
|
|
36
|
-
const lineHeight = textStyle.
|
|
38
|
+
const lineHeight = textStyle.textSizePx * 1.5
|
|
37
39
|
return textArr
|
|
38
40
|
.filter(d => d != '')
|
|
39
41
|
.map((text, i) => {
|
|
@@ -203,9 +205,12 @@ export const Tooltip: PluginConstructor<any, string, any> = defineNoneDataPlugin
|
|
|
203
205
|
// map(d => d as EventTypeMap<typeof chartType>)
|
|
204
206
|
)
|
|
205
207
|
|
|
208
|
+
const textSizePx$ = textSizePxObservable(observer.fullChartParams$)
|
|
209
|
+
|
|
206
210
|
const tooltipStyle$: Observable<TooltipStyle> = combineLatest({
|
|
207
211
|
fullChartParams: observer.fullChartParams$,
|
|
208
|
-
fullParams: observer.fullParams
|
|
212
|
+
fullParams: observer.fullParams$,
|
|
213
|
+
textSizePx: textSizePx$
|
|
209
214
|
}).pipe(
|
|
210
215
|
takeUntil(destroy$),
|
|
211
216
|
switchMap(async d => d),
|
|
@@ -217,6 +222,7 @@ export const Tooltip: PluginConstructor<any, string, any> = defineNoneDataPlugin
|
|
|
217
222
|
offset: data.fullParams.offset,
|
|
218
223
|
padding: data.fullParams.padding,
|
|
219
224
|
textSize: data.fullChartParams.styles.textSize,
|
|
225
|
+
textSizePx: data.textSizePx,
|
|
220
226
|
textColor: getColor(data.fullParams.textColorType, data.fullChartParams),
|
|
221
227
|
}
|
|
222
228
|
})
|
package/src/series/defaults.ts
CHANGED
|
@@ -45,11 +45,21 @@ export const DEFAULT_PIE_PARAMS: PieParams = {
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
export const DEFAULT_PIE_EVENT_TEXTS_PARAMS: PieEventTextsParams = {
|
|
48
|
-
eventFn: (
|
|
48
|
+
eventFn: (eventData: EventSeries, eventName: EventName, t: number) => {
|
|
49
49
|
if (eventName === 'mouseover' || eventName === 'mousemove') {
|
|
50
|
-
return [String(
|
|
50
|
+
return [String(eventData.datum!.value)]
|
|
51
51
|
}
|
|
52
|
-
return [
|
|
52
|
+
return [
|
|
53
|
+
String(
|
|
54
|
+
Math.round(
|
|
55
|
+
eventData.data.reduce((acc, seriesData) => {
|
|
56
|
+
return acc + seriesData.reduce((_acc, data) => {
|
|
57
|
+
return _acc + (data.value ?? 0)
|
|
58
|
+
}, 0)
|
|
59
|
+
}, 0) * t
|
|
60
|
+
)
|
|
61
|
+
)
|
|
62
|
+
]
|
|
53
63
|
},
|
|
54
64
|
textAttrs: [
|
|
55
65
|
{
|
|
@@ -14,7 +14,8 @@ import type {
|
|
|
14
14
|
DataSeries,
|
|
15
15
|
EventName,
|
|
16
16
|
ComputedDataSeries,
|
|
17
|
-
ComputedDatumSeries
|
|
17
|
+
ComputedDatumSeries,
|
|
18
|
+
SeriesContainerPosition } from '@orbcharts/core'
|
|
18
19
|
import {
|
|
19
20
|
defineSeriesPlugin } from '@orbcharts/core'
|
|
20
21
|
import type { BubblesParams, BubbleScaleType } from '../types'
|
|
@@ -28,6 +29,8 @@ interface BubblesDatum extends ComputedDatumSeries {
|
|
|
28
29
|
_originR: number // 紀錄變化前的r
|
|
29
30
|
}
|
|
30
31
|
|
|
32
|
+
type BubblesSimulationDatum = BubblesDatum & d3.SimulationNodeDatum
|
|
33
|
+
|
|
31
34
|
let force: d3.Simulation<d3.SimulationNodeDatum, undefined> | undefined
|
|
32
35
|
|
|
33
36
|
function makeForce (bubblesSelection: d3.Selection<SVGGElement, any, any, any>, fullParams: BubblesParams) {
|
|
@@ -81,11 +84,12 @@ function getMaxR ({ data, bubbleGroupR, maxValue, avgValue }: {
|
|
|
81
84
|
return maxR * modifier
|
|
82
85
|
}
|
|
83
86
|
|
|
84
|
-
function createBubblesData ({ data, LastBubbleDataMap, graphicWidth, graphicHeight, scaleType }: {
|
|
87
|
+
function createBubblesData ({ data, LastBubbleDataMap, graphicWidth, graphicHeight, SeriesContainerPositionMap, scaleType }: {
|
|
85
88
|
data: ComputedDataSeries
|
|
86
89
|
LastBubbleDataMap: Map<string, BubblesDatum>
|
|
87
90
|
graphicWidth: number
|
|
88
91
|
graphicHeight: number
|
|
92
|
+
SeriesContainerPositionMap: Map<string, SeriesContainerPosition>
|
|
89
93
|
scaleType: BubbleScaleType
|
|
90
94
|
// highlightIds: string[]
|
|
91
95
|
}) {
|
|
@@ -124,8 +128,9 @@ function createBubblesData ({ data, LastBubbleDataMap, graphicWidth, graphicHeig
|
|
|
124
128
|
d.x = existDatum.x
|
|
125
129
|
d.y = existDatum.y
|
|
126
130
|
} else {
|
|
127
|
-
|
|
128
|
-
d.
|
|
131
|
+
const seriesContainerPosition = SeriesContainerPositionMap.get(d.seriesLabel)!
|
|
132
|
+
d.x = Math.random() * seriesContainerPosition.width
|
|
133
|
+
d.y = Math.random() * seriesContainerPosition.height
|
|
129
134
|
}
|
|
130
135
|
const r = scaleBubbleR!(d.value ?? 0)!
|
|
131
136
|
d.r = r
|
|
@@ -148,7 +153,7 @@ function renderBubbles ({ graphicSelection, bubblesData, fullParams }: {
|
|
|
148
153
|
.append<SVGGElement>("g")
|
|
149
154
|
.attr('cursor', 'pointer')
|
|
150
155
|
enter
|
|
151
|
-
.
|
|
156
|
+
.attr('font-size', 12)
|
|
152
157
|
.style('fill', '#ffffff')
|
|
153
158
|
.attr("text-anchor", "middle")
|
|
154
159
|
.attr("transform", (d) => {
|
|
@@ -253,16 +258,22 @@ function drag (): d3.DragBehavior<Element, unknown, unknown> {
|
|
|
253
258
|
// return typeCenter ? typeCenter.x : 0
|
|
254
259
|
// }
|
|
255
260
|
|
|
256
|
-
function groupBubbles ({ fullParams,
|
|
261
|
+
function groupBubbles ({ fullParams, SeriesContainerPositionMap }: {
|
|
257
262
|
fullParams: BubblesParams
|
|
258
|
-
graphicWidth: number
|
|
259
|
-
graphicHeight: number
|
|
263
|
+
// graphicWidth: number
|
|
264
|
+
// graphicHeight: number
|
|
265
|
+
SeriesContainerPositionMap: Map<string, SeriesContainerPosition>
|
|
260
266
|
}) {
|
|
267
|
+
// console.log('groupBubbles')
|
|
261
268
|
force!
|
|
262
269
|
// .force('x', d3.forceX().strength(fullParams.force.strength).x(graphicWidth / 2))
|
|
263
270
|
// .force('y', d3.forceY().strength(fullParams.force.strength).y(graphicHeight / 2))
|
|
264
|
-
.force('x', d3.forceX().strength(fullParams.force.strength).x(
|
|
265
|
-
|
|
271
|
+
.force('x', d3.forceX().strength(fullParams.force.strength).x((data: BubblesSimulationDatum) => {
|
|
272
|
+
return SeriesContainerPositionMap.get(data.seriesLabel)!.centerX
|
|
273
|
+
}))
|
|
274
|
+
.force('y', d3.forceY().strength(fullParams.force.strength).y((data: BubblesSimulationDatum) => {
|
|
275
|
+
return SeriesContainerPositionMap.get(data.seriesLabel)!.centerY
|
|
276
|
+
}))
|
|
266
277
|
|
|
267
278
|
force!.alpha(1).restart();
|
|
268
279
|
}
|
|
@@ -312,23 +323,27 @@ export const Bubbles = defineSeriesPlugin('Bubbles', DEFAULT_BUBBLES_PARAMS)(({
|
|
|
312
323
|
// force = makeForce(bubblesSelection, d)
|
|
313
324
|
// })
|
|
314
325
|
|
|
315
|
-
observer.
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
326
|
+
// observer.seriesContainerPosition$.subscribe(d => {
|
|
327
|
+
// console.log(d)
|
|
328
|
+
// })
|
|
329
|
+
|
|
330
|
+
// observer.layout$
|
|
331
|
+
// .pipe(
|
|
332
|
+
// first()
|
|
333
|
+
// )
|
|
334
|
+
// .subscribe(size => {
|
|
335
|
+
// selection
|
|
336
|
+
// .attr('transform', `translate(${size.width / 2}, ${size.height / 2})`)
|
|
337
|
+
// observer.layout$
|
|
338
|
+
// .pipe(
|
|
339
|
+
// takeUntil(destroy$)
|
|
340
|
+
// )
|
|
341
|
+
// .subscribe(size => {
|
|
342
|
+
// selection
|
|
343
|
+
// .transition()
|
|
344
|
+
// .attr('transform', `translate(${size.width / 2}, ${size.height / 2})`)
|
|
345
|
+
// })
|
|
346
|
+
// })
|
|
332
347
|
|
|
333
348
|
// const bubbleGroupR$ = layout$.pipe(
|
|
334
349
|
// map(d => {
|
|
@@ -370,18 +385,20 @@ export const Bubbles = defineSeriesPlugin('Bubbles', DEFAULT_BUBBLES_PARAMS)(({
|
|
|
370
385
|
const bubblesData$ = new Observable<BubblesDatum[]>(subscriber => {
|
|
371
386
|
combineLatest({
|
|
372
387
|
layout: observer.layout$,
|
|
373
|
-
|
|
388
|
+
SeriesContainerPositionMap: observer.SeriesContainerPositionMap$,
|
|
389
|
+
visibleComputedLayoutData: observer.visibleComputedLayoutData$,
|
|
374
390
|
scaleType: scaleType$
|
|
375
391
|
}).pipe(
|
|
376
392
|
takeUntil(destroy$),
|
|
377
|
-
// 轉換後會退訂前一個未完成的訂閱事件,因此可以取到「同時間」最後一次的訂閱事件
|
|
378
393
|
switchMap(async (d) => d),
|
|
379
394
|
).subscribe(data => {
|
|
395
|
+
// console.log(data.visibleComputedLayoutData)
|
|
380
396
|
const bubblesData = createBubblesData({
|
|
381
|
-
data: data.
|
|
397
|
+
data: data.visibleComputedLayoutData,
|
|
382
398
|
LastBubbleDataMap,
|
|
383
399
|
graphicWidth: data.layout.width,
|
|
384
400
|
graphicHeight: data.layout.height,
|
|
401
|
+
SeriesContainerPositionMap: data.SeriesContainerPositionMap,
|
|
385
402
|
scaleType: data.scaleType
|
|
386
403
|
})
|
|
387
404
|
subscriber.next(bubblesData)
|
|
@@ -405,12 +422,12 @@ export const Bubbles = defineSeriesPlugin('Bubbles', DEFAULT_BUBBLES_PARAMS)(({
|
|
|
405
422
|
bubblesData: bubblesData$,
|
|
406
423
|
SeriesDataMap: observer.SeriesDataMap$,
|
|
407
424
|
fullParams: observer.fullParams$,
|
|
408
|
-
highlightTarget: highlightTarget
|
|
425
|
+
highlightTarget: highlightTarget$,
|
|
426
|
+
SeriesContainerPositionMap: observer.SeriesContainerPositionMap$,
|
|
409
427
|
// fullChartParams: fullChartParams$
|
|
410
428
|
// highlight: highlight$
|
|
411
429
|
}).pipe(
|
|
412
430
|
takeUntil(destroy$),
|
|
413
|
-
// 轉換後會退訂前一個未完成的訂閱事件,因此可以取到「同時間」最後一次的訂閱事件
|
|
414
431
|
switchMap(async (d) => d),
|
|
415
432
|
).subscribe(data => {
|
|
416
433
|
|
|
@@ -499,8 +516,9 @@ export const Bubbles = defineSeriesPlugin('Bubbles', DEFAULT_BUBBLES_PARAMS)(({
|
|
|
499
516
|
|
|
500
517
|
groupBubbles({
|
|
501
518
|
fullParams: data.fullParams,
|
|
502
|
-
|
|
503
|
-
|
|
519
|
+
SeriesContainerPositionMap: data.SeriesContainerPositionMap
|
|
520
|
+
// graphicWidth: data.layout.width,
|
|
521
|
+
// graphicHeight: data.layout.height
|
|
504
522
|
})
|
|
505
523
|
|
|
506
524
|
bubblesSelection$.next(bubblesSelection)
|
|
@@ -514,7 +532,8 @@ export const Bubbles = defineSeriesPlugin('Bubbles', DEFAULT_BUBBLES_PARAMS)(({
|
|
|
514
532
|
),
|
|
515
533
|
fullChartParams: observer.fullChartParams$,
|
|
516
534
|
fullParams: observer.fullParams$,
|
|
517
|
-
layout: observer.layout
|
|
535
|
+
// layout: observer.layout$,
|
|
536
|
+
SeriesContainerPositionMap: observer.SeriesContainerPositionMap$,
|
|
518
537
|
}).pipe(
|
|
519
538
|
takeUntil(destroy$),
|
|
520
539
|
switchMap(async d => d)
|
|
@@ -540,8 +559,9 @@ export const Bubbles = defineSeriesPlugin('Bubbles', DEFAULT_BUBBLES_PARAMS)(({
|
|
|
540
559
|
|
|
541
560
|
groupBubbles({
|
|
542
561
|
fullParams: data.fullParams,
|
|
543
|
-
|
|
544
|
-
|
|
562
|
+
SeriesContainerPositionMap: data.SeriesContainerPositionMap
|
|
563
|
+
// graphicWidth: data.layout.width,
|
|
564
|
+
// graphicHeight: data.layout.height
|
|
545
565
|
})
|
|
546
566
|
force!.nodes(data.bubblesData);
|
|
547
567
|
})
|