@orbcharts/plugins-basic 3.0.0-alpha.75 → 3.0.0-alpha.76

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 (81) hide show
  1. package/LICENSE +200 -200
  2. package/dist/orbcharts-plugins-basic.es.js +3461 -3468
  3. package/dist/orbcharts-plugins-basic.umd.js +17 -17
  4. package/lib/core-types.ts +7 -7
  5. package/lib/core.ts +6 -6
  6. package/package.json +43 -43
  7. package/src/base/BaseBarStack.ts +779 -779
  8. package/src/base/BaseBars.ts +764 -764
  9. package/src/base/BaseBarsTriangle.ts +672 -672
  10. package/src/base/BaseDots.ts +513 -513
  11. package/src/base/BaseGroupAxis.ts +678 -678
  12. package/src/base/BaseLegend.ts +642 -642
  13. package/src/base/BaseLineAreas.ts +627 -627
  14. package/src/base/BaseLines.ts +704 -704
  15. package/src/base/BaseValueAxis.ts +578 -578
  16. package/src/base/types.ts +2 -2
  17. package/src/const.ts +30 -30
  18. package/src/grid/defaults.ts +128 -128
  19. package/src/grid/gridObservables.ts +545 -545
  20. package/src/grid/index.ts +15 -15
  21. package/src/grid/plugins/BarStack.ts +64 -64
  22. package/src/grid/plugins/Bars.ts +69 -69
  23. package/src/grid/plugins/BarsPN.ts +66 -66
  24. package/src/grid/plugins/BarsTriangle.ts +73 -73
  25. package/src/grid/plugins/Dots.ts +68 -68
  26. package/src/grid/plugins/GridLegend.ts +96 -96
  27. package/src/grid/plugins/GroupAux.ts +1098 -1098
  28. package/src/grid/plugins/GroupAxis.ts +97 -97
  29. package/src/grid/plugins/LineAreas.ts +65 -65
  30. package/src/grid/plugins/Lines.ts +59 -59
  31. package/src/grid/plugins/ScalingArea.ts +218 -218
  32. package/src/grid/plugins/ValueAxis.ts +93 -93
  33. package/src/grid/plugins/ValueStackAxis.ts +95 -95
  34. package/src/grid/types.ts +123 -123
  35. package/src/index.ts +9 -9
  36. package/src/multiGrid/defaults.ts +158 -158
  37. package/src/multiGrid/index.ts +13 -13
  38. package/src/multiGrid/multiGridObservables.ts +49 -49
  39. package/src/multiGrid/plugins/MultiBarStack.ts +106 -106
  40. package/src/multiGrid/plugins/MultiBars.ts +108 -108
  41. package/src/multiGrid/plugins/MultiBarsTriangle.ts +114 -114
  42. package/src/multiGrid/plugins/MultiDots.ts +102 -102
  43. package/src/multiGrid/plugins/MultiGridLegend.ts +148 -148
  44. package/src/multiGrid/plugins/MultiGroupAxis.ts +137 -137
  45. package/src/multiGrid/plugins/MultiLineAreas.ts +107 -107
  46. package/src/multiGrid/plugins/MultiLines.ts +101 -101
  47. package/src/multiGrid/plugins/MultiValueAxis.ts +133 -133
  48. package/src/multiGrid/plugins/MultiValueStackAxis.ts +133 -133
  49. package/src/multiGrid/plugins/OverlappingValueAxes.ts +299 -299
  50. package/src/multiGrid/plugins/OverlappingValueStackAxes.ts +298 -298
  51. package/src/multiGrid/types.ts +72 -72
  52. package/src/noneData/defaults.ts +102 -102
  53. package/src/noneData/index.ts +3 -3
  54. package/src/noneData/plugins/Container.ts +27 -27
  55. package/src/noneData/plugins/Tooltip.ts +373 -373
  56. package/src/noneData/types.ts +26 -26
  57. package/src/series/defaults.ts +149 -149
  58. package/src/series/index.ts +9 -9
  59. package/src/series/plugins/Bubbles.ts +603 -603
  60. package/src/series/plugins/Pie.ts +623 -623
  61. package/src/series/plugins/PieEventTexts.ts +283 -283
  62. package/src/series/plugins/PieLabels.ts +640 -640
  63. package/src/series/plugins/Rose.ts +516 -516
  64. package/src/series/plugins/RoseLabels.ts +600 -600
  65. package/src/series/plugins/SeriesLegend.ts +96 -96
  66. package/src/series/seriesObservables.ts +145 -145
  67. package/src/series/seriesUtils.ts +51 -51
  68. package/src/series/types.ts +87 -87
  69. package/src/tree/defaults.ts +23 -23
  70. package/src/tree/index.ts +3 -3
  71. package/src/tree/plugins/TreeLegend.ts +96 -96
  72. package/src/tree/plugins/TreeMap.ts +333 -333
  73. package/src/tree/types.ts +23 -23
  74. package/src/utils/commonUtils.ts +21 -21
  75. package/src/utils/d3Graphics.ts +174 -174
  76. package/src/utils/d3Utils.ts +73 -73
  77. package/src/utils/observables.ts +14 -14
  78. package/src/utils/orbchartsUtils.ts +100 -100
  79. package/tsconfig.base.json +13 -13
  80. package/tsconfig.json +2 -2
  81. package/vite.config.js +22 -22
@@ -1,219 +1,219 @@
1
- import * as d3 from 'd3'
2
- import {
3
- Observable,
4
- combineLatest,
5
- switchMap,
6
- distinctUntilChanged,
7
- first,
8
- map,
9
- takeUntil,
10
- debounceTime,
11
- Subject } from 'rxjs'
12
- import type { DefinePluginConfig } from '../../../lib/core-types'
13
- import type { DataFormatterGrid } from '../../../lib/core-types'
14
- import {
15
- defineGridPlugin, createAxisLinearScale } from '../../../lib/core'
16
- import { DEFAULT_SCALING_AREA_PARAMS } from '../defaults'
17
- import { getClassName, getUniID } from '../../utils/orbchartsUtils'
18
- import { LAYER_INDEX_OF_ROOT } from '../../const'
19
-
20
- const pluginName = 'ScalingArea'
21
- const rectClassName = getClassName(pluginName, 'rect')
22
-
23
- const pluginConfig: DefinePluginConfig<typeof pluginName, typeof DEFAULT_SCALING_AREA_PARAMS> = {
24
- name: pluginName,
25
- defaultParams: DEFAULT_SCALING_AREA_PARAMS,
26
- layerIndex: LAYER_INDEX_OF_ROOT,
27
- validator: (params, { validateColumns }) => {
28
- return {
29
- status: 'success',
30
- columnName: '',
31
- expectToBe: ''
32
- }
33
- }
34
- }
35
-
36
- export const ScalingArea = defineGridPlugin(pluginConfig)(({ selection, rootSelection, name, observer, subject }) => {
37
-
38
- const destroy$ = new Subject()
39
-
40
- // const rootRectSelection: d3.Selection<SVGRectElement, any, any, any> = rootSelection
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<DataFormatterGrid> = 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 initGroupAxis$ = observer.fullDataFormatter$.pipe(
79
- map(d => d.grid.groupAxis),
80
- // 只用第一次資料來計算scale才不會造成每次變動都受到影響
81
- first()
82
- )
83
-
84
-
85
- const groupScale$ = combineLatest({
86
- initGroupAxis: initGroupAxis$,
87
- fullDataFormatter: observer.fullDataFormatter$,
88
- groupMax: groupMax$,
89
- layout: observer.layout$,
90
- axisSize: observer.gridAxesSize$
91
- }).pipe(
92
- takeUntil(destroy$),
93
- switchMap(async (d) => d),
94
- map(data => {
95
- // const groupMin = 0
96
- const groupScaleDomainMin = data.initGroupAxis.scaleDomain[0] - data.initGroupAxis.scalePadding
97
- const groupScaleDomainMax = data.initGroupAxis.scaleDomain[1] === 'max'
98
- ? data.groupMax + data.initGroupAxis.scalePadding
99
- : data.initGroupAxis.scaleDomain[1] as number + data.initGroupAxis.scalePadding
100
-
101
- const groupScale: d3.ScaleLinear<number, number> = createAxisLinearScale({
102
- maxValue: data.groupMax,
103
- minValue: 0,
104
- axisWidth: data.axisSize.width,
105
- scaleDomain: [groupScaleDomainMin, groupScaleDomainMax],
106
- scaleRange: [0, 1]
107
- })
108
-
109
- return groupScale
110
- })
111
- )
112
-
113
- combineLatest({
114
- groupScale: groupScale$,
115
- // initGroupAxis: initGroupAxis$,
116
- // fullDataFormatter: fullDataFormatter$.pipe(first()), // 只用第一次資料來計算scale才不會造成每次變動都受到影響
117
- fullDataFormatter: observer.fullDataFormatter$,
118
- groupMax: groupMax$,
119
- // layout: observer.layout$,
120
- // axisSize: observer.gridAxesSize$
121
- }).pipe(
122
- takeUntil(destroy$),
123
- switchMap(async (d) => d),
124
- ).subscribe(data => {
125
- const groupMin = 0
126
-
127
- const shadowScale = data.groupScale.copy()
128
-
129
- const zoom = d3.zoom()
130
- // .scaleExtent([1, data.groupMaxIndex])
131
- // .translateExtent([[0, 0], [data.layout.rootWidth, data.layout.rootWidth]])
132
- .on("zoom", function zoomed(event) {
133
- // debugger
134
- // console.log('event', event)
135
- const t = event.transform;
136
-
137
- // if (event.sourceEvent.type === 'mousemove') {
138
- // // 當進行平移時,反向計算 x 軸
139
- // const dx = event.transform.x - currentTransform.x; // 本次平移增量
140
- // const reversedX = currentTransform.x - dx; // 反向累積平移
141
- // // 更新變換狀態
142
- // currentTransform = d3.zoomIdentity
143
- // .translate(reversedX, event.transform.y)
144
- // .scale(event.transform.k);
145
- // } else {
146
- // // 縮放操作:只更新縮放比例
147
- // currentTransform = d3.zoomIdentity
148
- // .translate(currentTransform.x, currentTransform.y)
149
- // .scale(event.transform.k);
150
- // }
151
- // console.log('currentTransform', currentTransform)
152
-
153
- // console.log('t.x', t.x)
154
- const mapGroupindex = (d: number) => {
155
- const n = Math.round(d)
156
- return Math.min(data.groupMax, Math.max(groupMin, n));
157
- }
158
-
159
- const zoomedDomain = data.fullDataFormatter.grid.groupAxis.position === 'bottom' || data.fullDataFormatter.grid.groupAxis.position === 'top'
160
- ? t.rescaleX(shadowScale)
161
- .domain()
162
- .map(mapGroupindex)
163
- : t.rescaleY(shadowScale)
164
- .domain()
165
- .map(mapGroupindex)
166
-
167
-
168
- // domain超過極限值
169
- if (zoomedDomain[0] <= groupMin && zoomedDomain[1] >= data.groupMax) {
170
- // 繼續縮小
171
- if (t.k < lastTransform.k) {
172
- // 維持前一次的transform
173
- t.k = lastTransform.k
174
- t.x = lastTransform.x
175
- t.y = lastTransform.y
176
- }
177
- // domain間距小於1
178
- } else if ((zoomedDomain[1] - zoomedDomain[0]) <= 1) {
179
- // 繼續放大
180
- if (t.k > lastTransform.k) {
181
- // 維持前一次的transform
182
- t.k = lastTransform.k
183
- t.x = lastTransform.x
184
- t.y = lastTransform.y
185
- }
186
- }
187
-
188
- // 紀錄transform
189
- lastTransform.k = t.k
190
- lastTransform.x = t.x
191
- lastTransform.y = t.y
192
-
193
-
194
- const newDataFormatter: DataFormatterGrid = {
195
- ...data.fullDataFormatter,
196
- grid: {
197
- ...data.fullDataFormatter.grid,
198
- groupAxis: {
199
- ...data.fullDataFormatter.grid.groupAxis,
200
- scaleDomain: zoomedDomain
201
- }
202
- }
203
- }
204
- subject.dataFormatter$.next(newDataFormatter)
205
- })
206
-
207
- // 傳入外層selection
208
- // subject.selection.call(zoom as any)
209
- rootSelection.call(zoom)
210
-
211
- })
212
-
213
- return () => {
214
- destroy$.next(undefined)
215
- // rootRectSelection.remove()
216
-
217
- rootSelection.call(d3.zoom().on('zoom', null))
218
- }
1
+ import * as d3 from 'd3'
2
+ import {
3
+ Observable,
4
+ combineLatest,
5
+ switchMap,
6
+ distinctUntilChanged,
7
+ first,
8
+ map,
9
+ takeUntil,
10
+ debounceTime,
11
+ Subject } from 'rxjs'
12
+ import type { DefinePluginConfig } from '../../../lib/core-types'
13
+ import type { DataFormatterGrid } from '../../../lib/core-types'
14
+ import {
15
+ defineGridPlugin, createAxisLinearScale } from '../../../lib/core'
16
+ import { DEFAULT_SCALING_AREA_PARAMS } from '../defaults'
17
+ import { getClassName, getUniID } from '../../utils/orbchartsUtils'
18
+ import { LAYER_INDEX_OF_ROOT } from '../../const'
19
+
20
+ const pluginName = 'ScalingArea'
21
+ const rectClassName = getClassName(pluginName, 'rect')
22
+
23
+ const pluginConfig: DefinePluginConfig<typeof pluginName, typeof DEFAULT_SCALING_AREA_PARAMS> = {
24
+ name: pluginName,
25
+ defaultParams: DEFAULT_SCALING_AREA_PARAMS,
26
+ layerIndex: LAYER_INDEX_OF_ROOT,
27
+ validator: (params, { validateColumns }) => {
28
+ return {
29
+ status: 'success',
30
+ columnName: '',
31
+ expectToBe: ''
32
+ }
33
+ }
34
+ }
35
+
36
+ export const ScalingArea = defineGridPlugin(pluginConfig)(({ selection, rootSelection, name, observer, subject }) => {
37
+
38
+ const destroy$ = new Subject()
39
+
40
+ // const rootRectSelection: d3.Selection<SVGRectElement, any, any, any> = rootSelection
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<DataFormatterGrid> = 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 initGroupAxis$ = observer.fullDataFormatter$.pipe(
79
+ map(d => d.grid.groupAxis),
80
+ // 只用第一次資料來計算scale才不會造成每次變動都受到影響
81
+ first()
82
+ )
83
+
84
+
85
+ const groupScale$ = combineLatest({
86
+ initGroupAxis: initGroupAxis$,
87
+ fullDataFormatter: observer.fullDataFormatter$,
88
+ groupMax: groupMax$,
89
+ layout: observer.layout$,
90
+ axisSize: observer.gridAxesSize$
91
+ }).pipe(
92
+ takeUntil(destroy$),
93
+ switchMap(async (d) => d),
94
+ map(data => {
95
+ // const groupMin = 0
96
+ const groupScaleDomainMin = data.initGroupAxis.scaleDomain[0] - data.initGroupAxis.scalePadding
97
+ const groupScaleDomainMax = data.initGroupAxis.scaleDomain[1] === 'max'
98
+ ? data.groupMax + data.initGroupAxis.scalePadding
99
+ : data.initGroupAxis.scaleDomain[1] as number + data.initGroupAxis.scalePadding
100
+
101
+ const groupScale: d3.ScaleLinear<number, number> = createAxisLinearScale({
102
+ maxValue: data.groupMax,
103
+ minValue: 0,
104
+ axisWidth: data.axisSize.width,
105
+ scaleDomain: [groupScaleDomainMin, groupScaleDomainMax],
106
+ scaleRange: [0, 1]
107
+ })
108
+
109
+ return groupScale
110
+ })
111
+ )
112
+
113
+ combineLatest({
114
+ groupScale: groupScale$,
115
+ // initGroupAxis: initGroupAxis$,
116
+ // fullDataFormatter: fullDataFormatter$.pipe(first()), // 只用第一次資料來計算scale才不會造成每次變動都受到影響
117
+ fullDataFormatter: observer.fullDataFormatter$,
118
+ groupMax: groupMax$,
119
+ // layout: observer.layout$,
120
+ // axisSize: observer.gridAxesSize$
121
+ }).pipe(
122
+ takeUntil(destroy$),
123
+ switchMap(async (d) => d),
124
+ ).subscribe(data => {
125
+ const groupMin = 0
126
+
127
+ const shadowScale = data.groupScale.copy()
128
+
129
+ const zoom = d3.zoom()
130
+ // .scaleExtent([1, data.groupMaxIndex])
131
+ // .translateExtent([[0, 0], [data.layout.rootWidth, data.layout.rootWidth]])
132
+ .on("zoom", function zoomed(event) {
133
+ // debugger
134
+ // console.log('event', event)
135
+ const t = event.transform;
136
+
137
+ // if (event.sourceEvent.type === 'mousemove') {
138
+ // // 當進行平移時,反向計算 x 軸
139
+ // const dx = event.transform.x - currentTransform.x; // 本次平移增量
140
+ // const reversedX = currentTransform.x - dx; // 反向累積平移
141
+ // // 更新變換狀態
142
+ // currentTransform = d3.zoomIdentity
143
+ // .translate(reversedX, event.transform.y)
144
+ // .scale(event.transform.k);
145
+ // } else {
146
+ // // 縮放操作:只更新縮放比例
147
+ // currentTransform = d3.zoomIdentity
148
+ // .translate(currentTransform.x, currentTransform.y)
149
+ // .scale(event.transform.k);
150
+ // }
151
+ // console.log('currentTransform', currentTransform)
152
+
153
+ // console.log('t.x', t.x)
154
+ const mapGroupindex = (d: number) => {
155
+ const n = Math.round(d)
156
+ return Math.min(data.groupMax, Math.max(groupMin, n));
157
+ }
158
+
159
+ const zoomedDomain = data.fullDataFormatter.grid.groupAxis.position === 'bottom' || data.fullDataFormatter.grid.groupAxis.position === 'top'
160
+ ? t.rescaleX(shadowScale)
161
+ .domain()
162
+ .map(mapGroupindex)
163
+ : t.rescaleY(shadowScale)
164
+ .domain()
165
+ .map(mapGroupindex)
166
+
167
+
168
+ // domain超過極限值
169
+ if (zoomedDomain[0] <= groupMin && zoomedDomain[1] >= data.groupMax) {
170
+ // 繼續縮小
171
+ if (t.k < lastTransform.k) {
172
+ // 維持前一次的transform
173
+ t.k = lastTransform.k
174
+ t.x = lastTransform.x
175
+ t.y = lastTransform.y
176
+ }
177
+ // domain間距小於1
178
+ } else if ((zoomedDomain[1] - zoomedDomain[0]) <= 1) {
179
+ // 繼續放大
180
+ if (t.k > lastTransform.k) {
181
+ // 維持前一次的transform
182
+ t.k = lastTransform.k
183
+ t.x = lastTransform.x
184
+ t.y = lastTransform.y
185
+ }
186
+ }
187
+
188
+ // 紀錄transform
189
+ lastTransform.k = t.k
190
+ lastTransform.x = t.x
191
+ lastTransform.y = t.y
192
+
193
+
194
+ const newDataFormatter: DataFormatterGrid = {
195
+ ...data.fullDataFormatter,
196
+ grid: {
197
+ ...data.fullDataFormatter.grid,
198
+ groupAxis: {
199
+ ...data.fullDataFormatter.grid.groupAxis,
200
+ scaleDomain: zoomedDomain
201
+ }
202
+ }
203
+ }
204
+ subject.dataFormatter$.next(newDataFormatter)
205
+ })
206
+
207
+ // 傳入外層selection
208
+ // subject.selection.call(zoom as any)
209
+ rootSelection.call(zoom)
210
+
211
+ })
212
+
213
+ return () => {
214
+ destroy$.next(undefined)
215
+ // rootRectSelection.remove()
216
+
217
+ rootSelection.call(d3.zoom().on('zoom', null))
218
+ }
219
219
  })
@@ -1,94 +1,94 @@
1
- import {
2
- Subject,
3
- takeUntil,
4
- map,
5
- distinctUntilChanged,
6
- shareReplay
7
- } from 'rxjs'
8
- import type { DefinePluginConfig } from '../../../lib/core-types'
9
- import {
10
- defineGridPlugin } from '../../../lib/core'
11
- import { DEFAULT_VALUE_AXIS_PARAMS } from '../defaults'
12
- import { LAYER_INDEX_OF_AXIS } from '../../const'
13
- import { createBaseValueAxis } from '../../base/BaseValueAxis'
14
-
15
- const pluginName = 'ValueAxis'
16
-
17
- const pluginConfig: DefinePluginConfig<typeof pluginName, typeof DEFAULT_VALUE_AXIS_PARAMS> = {
18
- name: pluginName,
19
- defaultParams: DEFAULT_VALUE_AXIS_PARAMS,
20
- layerIndex: LAYER_INDEX_OF_AXIS,
21
- validator: (params, { validateColumns }) => {
22
- const result = validateColumns(params, {
23
- labelOffset: {
24
- toBe: '[number, number]',
25
- test: (value: any) => {
26
- return Array.isArray(value)
27
- && value.length === 2
28
- && typeof value[0] === 'number'
29
- && typeof value[1] === 'number'
30
- }
31
- },
32
- labelColorType: {
33
- toBeOption: 'ColorType',
34
- },
35
- axisLineVisible: {
36
- toBeTypes: ['boolean']
37
- },
38
- axisLineColorType: {
39
- toBeOption: 'ColorType',
40
- },
41
- ticks: {
42
- toBeTypes: ['number', 'null']
43
- },
44
- tickFormat: {
45
- toBeTypes: ['string', 'Function']
46
- },
47
- tickLineVisible: {
48
- toBeTypes: ['boolean']
49
- },
50
- tickPadding: {
51
- toBeTypes: ['number']
52
- },
53
- tickFullLine: {
54
- toBeTypes: ['boolean']
55
- },
56
- tickFullLineDasharray: {
57
- toBeTypes: ['string']
58
- },
59
- tickColorType: {
60
- toBeOption: 'ColorType',
61
- },
62
- tickTextRotate: {
63
- toBeTypes: ['number']
64
- },
65
- tickTextColorType: {
66
- toBeOption: 'ColorType',
67
- }
68
- })
69
- return result
70
- }
71
- }
72
-
73
- export const ValueAxis = defineGridPlugin(pluginConfig)(({ selection, name, observer, subject }) => {
74
-
75
- const destroy$ = new Subject()
76
-
77
- const unsubscribeBaseValueAxis = createBaseValueAxis(pluginName, {
78
- selection,
79
- computedData$: observer.computedData$,
80
- fullParams$: observer.fullParams$,
81
- fullDataFormatter$: observer.fullDataFormatter$,
82
- fullChartParams$: observer.fullChartParams$,
83
- gridAxesTransform$: observer.gridAxesTransform$,
84
- gridAxesReverseTransform$: observer.gridAxesReverseTransform$,
85
- gridAxesSize$: observer.gridAxesSize$,
86
- gridContainerPosition$: observer.gridContainerPosition$,
87
- isSeriesSeprate$: observer.isSeriesSeprate$,
88
- })
89
-
90
- return () => {
91
- destroy$.next(undefined)
92
- unsubscribeBaseValueAxis()
93
- }
1
+ import {
2
+ Subject,
3
+ takeUntil,
4
+ map,
5
+ distinctUntilChanged,
6
+ shareReplay
7
+ } from 'rxjs'
8
+ import type { DefinePluginConfig } from '../../../lib/core-types'
9
+ import {
10
+ defineGridPlugin } from '../../../lib/core'
11
+ import { DEFAULT_VALUE_AXIS_PARAMS } from '../defaults'
12
+ import { LAYER_INDEX_OF_AXIS } from '../../const'
13
+ import { createBaseValueAxis } from '../../base/BaseValueAxis'
14
+
15
+ const pluginName = 'ValueAxis'
16
+
17
+ const pluginConfig: DefinePluginConfig<typeof pluginName, typeof DEFAULT_VALUE_AXIS_PARAMS> = {
18
+ name: pluginName,
19
+ defaultParams: DEFAULT_VALUE_AXIS_PARAMS,
20
+ layerIndex: LAYER_INDEX_OF_AXIS,
21
+ validator: (params, { validateColumns }) => {
22
+ const result = validateColumns(params, {
23
+ labelOffset: {
24
+ toBe: '[number, number]',
25
+ test: (value: any) => {
26
+ return Array.isArray(value)
27
+ && value.length === 2
28
+ && typeof value[0] === 'number'
29
+ && typeof value[1] === 'number'
30
+ }
31
+ },
32
+ labelColorType: {
33
+ toBeOption: 'ColorType',
34
+ },
35
+ axisLineVisible: {
36
+ toBeTypes: ['boolean']
37
+ },
38
+ axisLineColorType: {
39
+ toBeOption: 'ColorType',
40
+ },
41
+ ticks: {
42
+ toBeTypes: ['number', 'null']
43
+ },
44
+ tickFormat: {
45
+ toBeTypes: ['string', 'Function']
46
+ },
47
+ tickLineVisible: {
48
+ toBeTypes: ['boolean']
49
+ },
50
+ tickPadding: {
51
+ toBeTypes: ['number']
52
+ },
53
+ tickFullLine: {
54
+ toBeTypes: ['boolean']
55
+ },
56
+ tickFullLineDasharray: {
57
+ toBeTypes: ['string']
58
+ },
59
+ tickColorType: {
60
+ toBeOption: 'ColorType',
61
+ },
62
+ tickTextRotate: {
63
+ toBeTypes: ['number']
64
+ },
65
+ tickTextColorType: {
66
+ toBeOption: 'ColorType',
67
+ }
68
+ })
69
+ return result
70
+ }
71
+ }
72
+
73
+ export const ValueAxis = defineGridPlugin(pluginConfig)(({ selection, name, observer, subject }) => {
74
+
75
+ const destroy$ = new Subject()
76
+
77
+ const unsubscribeBaseValueAxis = createBaseValueAxis(pluginName, {
78
+ selection,
79
+ computedData$: observer.computedData$,
80
+ fullParams$: observer.fullParams$,
81
+ fullDataFormatter$: observer.fullDataFormatter$,
82
+ fullChartParams$: observer.fullChartParams$,
83
+ gridAxesTransform$: observer.gridAxesTransform$,
84
+ gridAxesReverseTransform$: observer.gridAxesReverseTransform$,
85
+ gridAxesSize$: observer.gridAxesSize$,
86
+ gridContainerPosition$: observer.gridContainerPosition$,
87
+ isSeriesSeprate$: observer.isSeriesSeprate$,
88
+ })
89
+
90
+ return () => {
91
+ destroy$.next(undefined)
92
+ unsubscribeBaseValueAxis()
93
+ }
94
94
  })