@orbcharts/plugins-basic 3.0.0-alpha.68 → 3.0.0-alpha.70

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.
Files changed (79) hide show
  1. package/LICENSE +200 -200
  2. package/dist/orbcharts-plugins-basic.es.js +4838 -4760
  3. package/dist/orbcharts-plugins-basic.umd.js +15 -14
  4. package/dist/src/utils/d3Graphics.d.ts +10 -0
  5. package/package.json +42 -42
  6. package/src/base/BaseBarStack.ts +779 -779
  7. package/src/base/BaseBars.ts +764 -764
  8. package/src/base/BaseBarsTriangle.ts +672 -672
  9. package/src/base/BaseDots.ts +513 -513
  10. package/src/base/BaseGroupAxis.ts +675 -652
  11. package/src/base/BaseLegend.ts +642 -642
  12. package/src/base/BaseLineAreas.ts +628 -628
  13. package/src/base/BaseLines.ts +704 -704
  14. package/src/base/BaseValueAxis.ts +578 -578
  15. package/src/base/types.ts +2 -2
  16. package/src/grid/defaults.ts +128 -128
  17. package/src/grid/gridObservables.ts +543 -543
  18. package/src/grid/index.ts +15 -15
  19. package/src/grid/plugins/BarStack.ts +43 -43
  20. package/src/grid/plugins/Bars.ts +44 -44
  21. package/src/grid/plugins/BarsPN.ts +41 -41
  22. package/src/grid/plugins/BarsTriangle.ts +42 -42
  23. package/src/grid/plugins/Dots.ts +37 -37
  24. package/src/grid/plugins/GridLegend.ts +59 -59
  25. package/src/grid/plugins/GroupAux.ts +1014 -991
  26. package/src/grid/plugins/GroupAxis.ts +36 -36
  27. package/src/grid/plugins/LineAreas.ts +40 -40
  28. package/src/grid/plugins/Lines.ts +40 -40
  29. package/src/grid/plugins/ScalingArea.ts +176 -174
  30. package/src/grid/plugins/ValueAxis.ts +36 -36
  31. package/src/grid/plugins/ValueStackAxis.ts +38 -38
  32. package/src/grid/types.ts +123 -123
  33. package/src/index.ts +9 -9
  34. package/src/multiGrid/defaults.ts +158 -158
  35. package/src/multiGrid/index.ts +13 -13
  36. package/src/multiGrid/multiGridObservables.ts +49 -49
  37. package/src/multiGrid/plugins/MultiBarStack.ts +78 -78
  38. package/src/multiGrid/plugins/MultiBars.ts +77 -77
  39. package/src/multiGrid/plugins/MultiBarsTriangle.ts +77 -77
  40. package/src/multiGrid/plugins/MultiDots.ts +65 -65
  41. package/src/multiGrid/plugins/MultiGridLegend.ts +89 -89
  42. package/src/multiGrid/plugins/MultiGroupAxis.ts +70 -70
  43. package/src/multiGrid/plugins/MultiLineAreas.ts +77 -77
  44. package/src/multiGrid/plugins/MultiLines.ts +77 -77
  45. package/src/multiGrid/plugins/MultiValueAxis.ts +69 -69
  46. package/src/multiGrid/plugins/MultiValueStackAxis.ts +69 -69
  47. package/src/multiGrid/plugins/OverlappingValueAxes.ts +170 -170
  48. package/src/multiGrid/plugins/OverlappingValueStackAxes.ts +169 -169
  49. package/src/multiGrid/types.ts +72 -72
  50. package/src/noneData/defaults.ts +102 -102
  51. package/src/noneData/index.ts +3 -3
  52. package/src/noneData/plugins/Container.ts +10 -10
  53. package/src/noneData/plugins/Tooltip.ts +327 -327
  54. package/src/noneData/types.ts +26 -26
  55. package/src/series/defaults.ts +149 -149
  56. package/src/series/index.ts +9 -9
  57. package/src/series/plugins/Bubbles.ts +545 -545
  58. package/src/series/plugins/Pie.ts +584 -584
  59. package/src/series/plugins/PieEventTexts.ts +262 -262
  60. package/src/series/plugins/PieLabels.ts +604 -598
  61. package/src/series/plugins/Rose.ts +481 -481
  62. package/src/series/plugins/RoseLabels.ts +571 -565
  63. package/src/series/plugins/SeriesLegend.ts +59 -59
  64. package/src/series/seriesObservables.ts +145 -145
  65. package/src/series/seriesUtils.ts +51 -51
  66. package/src/series/types.ts +87 -87
  67. package/src/tree/defaults.ts +23 -23
  68. package/src/tree/index.ts +3 -3
  69. package/src/tree/plugins/TreeLegend.ts +59 -59
  70. package/src/tree/plugins/TreeMap.ts +305 -305
  71. package/src/tree/types.ts +23 -23
  72. package/src/utils/commonUtils.ts +21 -21
  73. package/src/utils/d3Graphics.ts +174 -124
  74. package/src/utils/d3Utils.ts +73 -73
  75. package/src/utils/observables.ts +14 -14
  76. package/src/utils/orbchartsUtils.ts +100 -100
  77. package/tsconfig.base.json +13 -13
  78. package/tsconfig.json +2 -2
  79. package/vite.config.js +22 -22
@@ -1,170 +1,170 @@
1
- import * as d3 from 'd3'
2
- import {
3
- of,
4
- map,
5
- switchMap,
6
- combineLatest,
7
- takeUntil,
8
- distinctUntilChanged,
9
- shareReplay,
10
- iif,
11
- Observable,
12
- Subject } from 'rxjs'
13
- import type { ContextObserverMultiGrid, DataFormatterGrid, DataFormatterTypeMap, Layout } from '@orbcharts/core'
14
- import {
15
- defineMultiGridPlugin } from '@orbcharts/core'
16
- import { DEFAULT_OVERLAPPING_VALUE_AXES_PARAMS } from '../defaults'
17
- import { createBaseValueAxis } from '../../base/BaseValueAxis'
18
- import { multiGridPluginDetailObservables } from '../multiGridObservables'
19
- import { getClassName, getUniID } from '../../utils/orbchartsUtils'
20
- import { gridAxesTransformObservable, gridAxesReverseTransformObservable, gridContainerPositionObservable } from '@orbcharts/core/src/grid/gridObservables'
21
-
22
- const pluginName = 'OverlappingValueAxes'
23
-
24
- const gridClassName = getClassName(pluginName, 'grid')
25
-
26
- export const OverlappingValueAxes = defineMultiGridPlugin(pluginName, DEFAULT_OVERLAPPING_VALUE_AXES_PARAMS)(({ selection, name, subject, observer }) => {
27
- const destroy$ = new Subject()
28
-
29
- const unsubscribeFnArr: (() => void)[] = []
30
-
31
- const firstGridIndex$ = observer.fullParams$.pipe(
32
- takeUntil(destroy$),
33
- map(fullParams => fullParams.gridIndexes[0])
34
- )
35
-
36
- const secondGridIndex$ = observer.fullParams$.pipe(
37
- takeUntil(destroy$),
38
- map(fullParams => fullParams.gridIndexes[1])
39
- )
40
-
41
- // 為了要反轉第二個valueAxis的位置所以要重新計算
42
- const secondGridDataFormatter$: Observable<DataFormatterGrid> = combineLatest({
43
- firstGridIndex: firstGridIndex$,
44
- secondGridIndex: secondGridIndex$,
45
- fullDataFormatter: observer.fullDataFormatter$,
46
- }).pipe(
47
- takeUntil(destroy$),
48
- switchMap(async (d) => d),
49
- map(data => {
50
- // console.log('data', data)
51
- if (!data.fullDataFormatter.gridList[data.secondGridIndex]) {
52
- data.fullDataFormatter.gridList[data.secondGridIndex] = Object.assign({}, data.fullDataFormatter.gridList[data.firstGridIndex])
53
- }
54
- const position = data.fullDataFormatter.gridList[data.firstGridIndex].valueAxis.position
55
- // 反轉第二個valueAxis的位置
56
- let reversePosition = position
57
- if (position === 'left') {
58
- reversePosition = 'right'
59
- } else if (position === 'bottom') {
60
- reversePosition = 'top'
61
- } else if (position === 'top') {
62
- reversePosition = 'bottom'
63
- } else if (position === 'right') {
64
- reversePosition = 'left'
65
- }
66
- // console.log('reversePosition', reversePosition)
67
- return <DataFormatterGrid>{
68
- type: 'grid',
69
- visibleFilter: data.fullDataFormatter.visibleFilter as any,
70
- grid: {
71
- ...data.fullDataFormatter.gridList[data.secondGridIndex],
72
- valueAxis: {
73
- ...data.fullDataFormatter.gridList[data.secondGridIndex].valueAxis,
74
- position: reversePosition
75
- }
76
- },
77
- container: {
78
- ...data.fullDataFormatter.container
79
- }
80
- }
81
- })
82
- )
83
-
84
- const multiGridPluginDetail$ = of(observer).pipe(
85
- takeUntil(destroy$),
86
- map(observer => {
87
- // 將observer的gridIndexes限制在2個
88
- return {
89
- ...observer,
90
- fullParams$: observer.fullParams$.pipe(
91
- map(fullParams => {
92
- if (fullParams.gridIndexes.length > 2) {
93
- fullParams.gridIndexes.length = 2
94
- }
95
- return fullParams
96
- })
97
- )
98
- }
99
- }),
100
- switchMap(observer => multiGridPluginDetailObservables(observer)),
101
- map(data => {
102
- return data.map((observables, index) => {
103
- if (index === 0) {
104
- return observables
105
- }
106
- // index === 1,將跟第二個valueAxis有關的observables全部重新計算
107
- const gridAxesTransform$ = gridAxesTransformObservable({
108
- fullDataFormatter$: secondGridDataFormatter$,
109
- layout$: observer.layout$
110
- })
111
- const gridAxesReverseTransform$ = gridAxesReverseTransformObservable({
112
- gridAxesTransform$
113
- })
114
- const gridContainerPosition$ = gridContainerPositionObservable({
115
- computedData$: observables.computedData$,
116
- fullDataFormatter$: secondGridDataFormatter$,
117
- layout$: observer.layout$
118
- })
119
- return {
120
- ...observables,
121
- dataFormatter$: secondGridDataFormatter$,
122
- gridAxesTransform$,
123
- gridAxesReverseTransform$,
124
- gridContainerPosition$,
125
- }
126
- })
127
- })
128
- )
129
-
130
- multiGridPluginDetail$
131
- .pipe(
132
- takeUntil(destroy$)
133
- )
134
- .subscribe(data => {
135
- // 每次重新計算時,清除之前的訂閱
136
- unsubscribeFnArr.forEach(fn => fn())
137
-
138
- selection.selectAll(`g.${gridClassName}`)
139
- .data(data)
140
- .join('g')
141
- .attr('class', gridClassName)
142
- .each((d, i, g) => {
143
- if (i > 1) {
144
- return
145
- }
146
-
147
- const gridSelection = d3.select(g[i])
148
-
149
- unsubscribeFnArr[i] = createBaseValueAxis(pluginName, {
150
- selection: gridSelection,
151
- computedData$: d.computedData$,
152
- fullParams$: observer.fullParams$.pipe(
153
- map(fullParams => i === 0 ? fullParams.firstAxis : fullParams.secondAxis)
154
- ),
155
- fullDataFormatter$: d.dataFormatter$,
156
- fullChartParams$: observer.fullChartParams$,
157
- gridAxesTransform$: d.gridAxesTransform$,
158
- gridAxesReverseTransform$: d.gridAxesReverseTransform$,
159
- gridAxesSize$: d.gridAxesSize$,
160
- gridContainerPosition$: d.gridContainerPosition$,
161
- isSeriesSeprate$: d.isSeriesSeprate$,
162
- })
163
- })
164
- })
165
-
166
- return () => {
167
- destroy$.next(undefined)
168
- unsubscribeFnArr.forEach(fn => fn())
169
- }
170
- })
1
+ import * as d3 from 'd3'
2
+ import {
3
+ of,
4
+ map,
5
+ switchMap,
6
+ combineLatest,
7
+ takeUntil,
8
+ distinctUntilChanged,
9
+ shareReplay,
10
+ iif,
11
+ Observable,
12
+ Subject } from 'rxjs'
13
+ import type { ContextObserverMultiGrid, DataFormatterGrid, DataFormatterTypeMap, Layout } from '@orbcharts/core'
14
+ import {
15
+ defineMultiGridPlugin } from '@orbcharts/core'
16
+ import { DEFAULT_OVERLAPPING_VALUE_AXES_PARAMS } from '../defaults'
17
+ import { createBaseValueAxis } from '../../base/BaseValueAxis'
18
+ import { multiGridPluginDetailObservables } from '../multiGridObservables'
19
+ import { getClassName, getUniID } from '../../utils/orbchartsUtils'
20
+ import { gridAxesTransformObservable, gridAxesReverseTransformObservable, gridContainerPositionObservable } from '@orbcharts/core/src/grid/gridObservables'
21
+
22
+ const pluginName = 'OverlappingValueAxes'
23
+
24
+ const gridClassName = getClassName(pluginName, 'grid')
25
+
26
+ export const OverlappingValueAxes = defineMultiGridPlugin(pluginName, DEFAULT_OVERLAPPING_VALUE_AXES_PARAMS)(({ selection, name, subject, observer }) => {
27
+ const destroy$ = new Subject()
28
+
29
+ const unsubscribeFnArr: (() => void)[] = []
30
+
31
+ const firstGridIndex$ = observer.fullParams$.pipe(
32
+ takeUntil(destroy$),
33
+ map(fullParams => fullParams.gridIndexes[0])
34
+ )
35
+
36
+ const secondGridIndex$ = observer.fullParams$.pipe(
37
+ takeUntil(destroy$),
38
+ map(fullParams => fullParams.gridIndexes[1])
39
+ )
40
+
41
+ // 為了要反轉第二個valueAxis的位置所以要重新計算
42
+ const secondGridDataFormatter$: Observable<DataFormatterGrid> = combineLatest({
43
+ firstGridIndex: firstGridIndex$,
44
+ secondGridIndex: secondGridIndex$,
45
+ fullDataFormatter: observer.fullDataFormatter$,
46
+ }).pipe(
47
+ takeUntil(destroy$),
48
+ switchMap(async (d) => d),
49
+ map(data => {
50
+ // console.log('data', data)
51
+ if (!data.fullDataFormatter.gridList[data.secondGridIndex]) {
52
+ data.fullDataFormatter.gridList[data.secondGridIndex] = Object.assign({}, data.fullDataFormatter.gridList[data.firstGridIndex])
53
+ }
54
+ const position = data.fullDataFormatter.gridList[data.firstGridIndex].valueAxis.position
55
+ // 反轉第二個valueAxis的位置
56
+ let reversePosition = position
57
+ if (position === 'left') {
58
+ reversePosition = 'right'
59
+ } else if (position === 'bottom') {
60
+ reversePosition = 'top'
61
+ } else if (position === 'top') {
62
+ reversePosition = 'bottom'
63
+ } else if (position === 'right') {
64
+ reversePosition = 'left'
65
+ }
66
+ // console.log('reversePosition', reversePosition)
67
+ return <DataFormatterGrid>{
68
+ type: 'grid',
69
+ visibleFilter: data.fullDataFormatter.visibleFilter as any,
70
+ grid: {
71
+ ...data.fullDataFormatter.gridList[data.secondGridIndex],
72
+ valueAxis: {
73
+ ...data.fullDataFormatter.gridList[data.secondGridIndex].valueAxis,
74
+ position: reversePosition
75
+ }
76
+ },
77
+ container: {
78
+ ...data.fullDataFormatter.container
79
+ }
80
+ }
81
+ })
82
+ )
83
+
84
+ const multiGridPluginDetail$ = of(observer).pipe(
85
+ takeUntil(destroy$),
86
+ map(observer => {
87
+ // 將observer的gridIndexes限制在2個
88
+ return {
89
+ ...observer,
90
+ fullParams$: observer.fullParams$.pipe(
91
+ map(fullParams => {
92
+ if (fullParams.gridIndexes.length > 2) {
93
+ fullParams.gridIndexes.length = 2
94
+ }
95
+ return fullParams
96
+ })
97
+ )
98
+ }
99
+ }),
100
+ switchMap(observer => multiGridPluginDetailObservables(observer)),
101
+ map(data => {
102
+ return data.map((observables, index) => {
103
+ if (index === 0) {
104
+ return observables
105
+ }
106
+ // index === 1,將跟第二個valueAxis有關的observables全部重新計算
107
+ const gridAxesTransform$ = gridAxesTransformObservable({
108
+ fullDataFormatter$: secondGridDataFormatter$,
109
+ layout$: observer.layout$
110
+ })
111
+ const gridAxesReverseTransform$ = gridAxesReverseTransformObservable({
112
+ gridAxesTransform$
113
+ })
114
+ const gridContainerPosition$ = gridContainerPositionObservable({
115
+ computedData$: observables.computedData$,
116
+ fullDataFormatter$: secondGridDataFormatter$,
117
+ layout$: observer.layout$
118
+ })
119
+ return {
120
+ ...observables,
121
+ dataFormatter$: secondGridDataFormatter$,
122
+ gridAxesTransform$,
123
+ gridAxesReverseTransform$,
124
+ gridContainerPosition$,
125
+ }
126
+ })
127
+ })
128
+ )
129
+
130
+ multiGridPluginDetail$
131
+ .pipe(
132
+ takeUntil(destroy$)
133
+ )
134
+ .subscribe(data => {
135
+ // 每次重新計算時,清除之前的訂閱
136
+ unsubscribeFnArr.forEach(fn => fn())
137
+
138
+ selection.selectAll(`g.${gridClassName}`)
139
+ .data(data)
140
+ .join('g')
141
+ .attr('class', gridClassName)
142
+ .each((d, i, g) => {
143
+ if (i > 1) {
144
+ return
145
+ }
146
+
147
+ const gridSelection = d3.select(g[i])
148
+
149
+ unsubscribeFnArr[i] = createBaseValueAxis(pluginName, {
150
+ selection: gridSelection,
151
+ computedData$: d.computedData$,
152
+ fullParams$: observer.fullParams$.pipe(
153
+ map(fullParams => i === 0 ? fullParams.firstAxis : fullParams.secondAxis)
154
+ ),
155
+ fullDataFormatter$: d.dataFormatter$,
156
+ fullChartParams$: observer.fullChartParams$,
157
+ gridAxesTransform$: d.gridAxesTransform$,
158
+ gridAxesReverseTransform$: d.gridAxesReverseTransform$,
159
+ gridAxesSize$: d.gridAxesSize$,
160
+ gridContainerPosition$: d.gridContainerPosition$,
161
+ isSeriesSeprate$: d.isSeriesSeprate$,
162
+ })
163
+ })
164
+ })
165
+
166
+ return () => {
167
+ destroy$.next(undefined)
168
+ unsubscribeFnArr.forEach(fn => fn())
169
+ }
170
+ })