@orbcharts/core 3.0.0-alpha.68 → 3.0.0-beta.10

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 (45) hide show
  1. package/dist/orbcharts-core.es.js +3239 -2854
  2. package/dist/orbcharts-core.umd.js +4 -4
  3. package/dist/src/defaults.d.ts +24 -23
  4. package/dist/src/utils/d3Scale.d.ts +28 -0
  5. package/dist/src/utils/gridObservables.d.ts +29 -19
  6. package/dist/src/utils/index.d.ts +1 -1
  7. package/dist/src/utils/multiGridObservables.d.ts +2 -2
  8. package/dist/src/utils/multiValueObservables.d.ts +73 -0
  9. package/dist/src/utils/orbchartsUtils.d.ts +24 -10
  10. package/dist/src/utils/relationshipObservables.d.ts +13 -0
  11. package/dist/src/utils/seriesObservables.d.ts +4 -4
  12. package/dist/src/utils/treeObservables.d.ts +2 -5
  13. package/package.json +2 -2
  14. package/src/GridChart.ts +2 -2
  15. package/src/MultiGridChart.ts +2 -2
  16. package/src/MultiValueChart.ts +2 -2
  17. package/src/RelationshipChart.ts +2 -2
  18. package/src/SeriesChart.ts +2 -2
  19. package/src/TreeChart.ts +2 -2
  20. package/src/base/createBaseChart.ts +13 -13
  21. package/src/base/validators/chartParamsValidator.ts +6 -6
  22. package/src/defaults.ts +63 -47
  23. package/src/grid/computedDataFn.ts +4 -4
  24. package/src/grid/contextObserverCallback.ts +58 -37
  25. package/src/grid/dataFormatterValidator.ts +14 -14
  26. package/src/multiGrid/computedDataFn.ts +2 -2
  27. package/src/multiValue/computedDataFn.ts +81 -147
  28. package/src/multiValue/contextObserverCallback.ts +150 -2
  29. package/src/relationship/computedDataFn.ts +94 -60
  30. package/src/relationship/contextObserverCallback.ts +68 -0
  31. package/src/tree/computedDataFn.ts +9 -10
  32. package/src/tree/contextObserverCallback.ts +6 -9
  33. package/src/utils/d3Scale.ts +198 -0
  34. package/src/utils/gridObservables.ts +320 -248
  35. package/src/utils/index.ts +1 -1
  36. package/src/utils/multiGridObservables.ts +75 -49
  37. package/src/utils/multiValueObservables.ts +662 -0
  38. package/src/utils/observables.ts +30 -12
  39. package/src/utils/orbchartsUtils.ts +90 -65
  40. package/src/utils/relationshipObservables.ts +85 -0
  41. package/src/utils/seriesObservables.ts +7 -7
  42. package/src/utils/treeObservables.ts +44 -33
  43. package/src/utils/validator.ts +5 -4
  44. package/dist/src/utils/d3Utils.d.ts +0 -19
  45. package/src/utils/d3Utils.ts +0 -108
package/src/defaults.ts CHANGED
@@ -8,6 +8,7 @@ import type {
8
8
  DataRelationship,
9
9
  DataFormatterValueAxis,
10
10
  DataFormatterGroupAxis,
11
+ DataFormatterAxis,
11
12
  DataFormatterContainer,
12
13
  DataFormatterSeries,
13
14
  DataFormatterGrid,
@@ -21,7 +22,7 @@ import type {
21
22
  Padding
22
23
  } from '../lib/core-types'
23
24
 
24
- export const CHART_OPTIONS_DEFAULT: ChartOptionsPartial<any> = {
25
+ export const DEFAULT_CHART_OPTIONS: ChartOptionsPartial<any> = {
25
26
  // preset: {} // 預設為空
26
27
  width: 'auto',
27
28
  height: 'auto'
@@ -42,32 +43,38 @@ export const CHART_OPTIONS_DEFAULT: ChartOptionsPartial<any> = {
42
43
  // export const COLORS_DEFAULT = ['#67B7DC', '#6794DC', '#6771DC', '#8067DC', '#A367DC', '#C767DC', '#DC67CE', '#DC67AB', '#DC6788', '#DC6967', '#DC8C67', '#DCAF67']
43
44
  // ['#ff7ab9', '#66dec8', '#84c8ff', '#30ad1b', '#f8c43e', '#fa5640', '#9d79d7', '#ea4f98']
44
45
 
45
- export const PADDING_DEFAULT: Padding = {
46
+ export const DEFAULT_PADDING: Padding = {
46
47
  top: 60,
47
48
  right: 60,
48
49
  bottom: 60,
49
50
  left: 60
50
51
  }
51
52
 
52
- export const CHART_PARAMS_DEFAULT: ChartParams = {
53
- padding: PADDING_DEFAULT,
53
+ export const DEFAULT_CHART_PARAMS: ChartParams = {
54
+ padding: DEFAULT_PADDING,
54
55
  highlightTarget: 'datum',
55
56
  highlightDefault: null,
56
57
  colorScheme: 'light',
57
58
  colors: {
58
59
  light: {
59
- series: ['#67B7DC', '#6794DC', '#6771DC', '#8067DC', '#A367DC', '#C767DC', '#DC67CE', '#DC67AB', '#DC6788', '#DC6967', '#DC8C67', '#DCAF67'],
60
+ label: ['#67B7DC', '#6794DC', '#6771DC', '#8067DC', '#A367DC', '#C767DC', '#DC67CE', '#DC67AB', '#DC6788', '#DC6967', '#DC8C67', '#DCAF67'],
61
+ // label: ['#F3A356', '#7A60F0', '#38B1AF', '#60A2F0', '#F06062', '#FF383C', '#6580EA', '#079F9C', '#9F65EA', '#EA7465', '#EA7465', '#8657D2', '#59B757', '#2797FF', '#D25786', '#F54BA6', '#4BECF5', '#74FD72', '#CA4BF5', '#EFE26E'],
62
+ // label: ['#60A2F0', '#F3A356', '#7A60F0', '#38B1AF', '#F06062', '#FF383C', '#6580EA', '#079F9C', '#9F65EA', '#EA7465', '#EA7465', '#8657D2', '#59B757', '#2797FF', '#D25786', '#F54BA6', '#4BECF5', '#74FD72', '#CA4BF5', '#EFE26E'],
60
63
  // primary: '#454545',
61
64
  primary: '#1b1e23',
62
65
  secondary: '#e1e1e1',
63
- white: '#ffffff',
66
+ // white: '#ffffff',
67
+ labelContrast: ['#ffffff', '#1b1e23'],
64
68
  background: '#ffffff'
65
69
  },
66
70
  dark: {
67
- series: ['#67B7DC', '#6794DC', '#6771DC', '#8067DC', '#A367DC', '#C767DC', '#DC67CE', '#DC67AB', '#DC6788', '#DC6967', '#DC8C67', '#DCAF67'],
71
+ label: ['#67B7DC', '#6794DC', '#6771DC', '#8067DC', '#A367DC', '#C767DC', '#DC67CE', '#DC67AB', '#DC6788', '#DC6967', '#DC8C67', '#DCAF67'],
72
+ // label: ['#67B7DC', '#6794DC', '#38B1AF', '#6771DC', '#8067DC', '#A367DC', '#C767DC', '#DC67CE', '#DC67AB', '#DC6788', '#DC6967', '#DC8C67', '#DCAF67'],
73
+ // label: ['#60A2F0', '#F3A356', '#7A60F0', '#38B1AF', '#F06062', '#FF383C', '#6580EA', '#079F9C', '#9F65EA', '#EA7465', '#EA7465', '#8657D2', '#59B757', '#2797FF', '#D25786', '#F54BA6', '#4BECF5', '#74FD72', '#CA4BF5', '#EFE26E'],
68
74
  primary: '#f0f0f0',
69
75
  secondary: '#e1e1e1',
70
- white: '#ffffff',
76
+ // white: '#ffffff',
77
+ labelContrast: ['#ffffff', '#1b1e23'],
71
78
  background: '#000000'
72
79
  }
73
80
  },
@@ -80,56 +87,62 @@ export const CHART_PARAMS_DEFAULT: ChartParams = {
80
87
  transitionEase: 'easeCubic'
81
88
  }
82
89
 
83
- export const CHART_WIDTH_DEFAULT = 800
90
+ export const DEFAULT_CHART_WIDTH = 800
84
91
 
85
- export const CHART_HEIGHT_DEFAULT = 500
92
+ export const DEFAULT_CHART_HEIGHT = 500
86
93
 
87
94
  // -- Data --
88
95
 
89
- export const DATA_SERIES_DEFAULT: DataSeries = []
96
+ export const DEFAULT_DATA_SERIES: DataSeries = []
90
97
 
91
- export const DATA_GRID_DEFAULT: DataGrid = []
98
+ export const DEFAULT_DATA_GRID: DataGrid = []
92
99
 
93
- export const DATA_MULTI_GRID_DEFAULT: DataMultiGrid = []
100
+ export const DEFAULT_DATA_MULTI_GRID: DataMultiGrid = []
94
101
 
95
- export const DATA_MULTI_VALUE_DEFAULT: DataMultiValue = []
102
+ export const DEFAULT_DATA_MULTI_VALUE: DataMultiValue = []
96
103
 
97
- export const DATA_TREE_DEFAULT: DataTree = []
104
+ export const DEFAULT_DATA_TREE: DataTree = []
98
105
 
99
- export const DATA_RELATIONA_DEFAULTL: DataRelationship = {
106
+ export const DEFAULTL_DATA_RELATIONA: DataRelationship = {
100
107
  nodes: [],
101
108
  edges: []
102
109
  }
103
110
 
104
111
  // -- Data Formatter --
105
112
 
106
- export const DATA_FORMATTER_VALUE_AXIS_DEFAULT: DataFormatterValueAxis = {
113
+ export const DEFAULT_DATA_FORMATTER_VALUE_AXIS: DataFormatterValueAxis = {
107
114
  position: 'left',
108
115
  scaleDomain: ['auto', 'auto'],
109
116
  scaleRange: [0, 0.9],
110
117
  label: '',
111
118
  }
112
119
 
113
- export const DATA_FORMATTER_GROUP_AXIS_DEFAULT: DataFormatterGroupAxis = {
120
+ export const DEFAULT_DATA_FORMATTER_GROUP_AXIS: DataFormatterGroupAxis = {
114
121
  position: 'bottom',
115
122
  scaleDomain: [0, 'max'],
116
123
  scalePadding: 0.5,
117
124
  label: ''
118
125
  }
119
126
 
120
- export const DATA_FORMATTER_CONTAINER_DEFAULT: DataFormatterContainer = {
127
+ export const DEFAULT_DATA_FORMATTER_AXIS: DataFormatterAxis = {
128
+ scaleDomain: ['auto', 'auto'],
129
+ scaleRange: [0, 0.9],
130
+ label: '',
131
+ }
132
+
133
+ export const DEFAULT_DATA_FORMATTER_CONTAINER: DataFormatterContainer = {
121
134
  gap: 120,
122
135
  rowAmount: 1,
123
136
  columnAmount: 1
124
137
  }
125
138
 
126
- export const DATA_FORMATTER_SERIES_DEFAULT: DataFormatterSeries = {
139
+ export const DEFAULT_DATA_FORMATTER_SERIES: DataFormatterSeries = {
127
140
  type: 'series',
128
141
  visibleFilter: (datum, context) => true,
129
142
  sort: null,
130
143
  seriesLabels: [],
131
144
  container: {
132
- ...DATA_FORMATTER_CONTAINER_DEFAULT
145
+ ...DEFAULT_DATA_FORMATTER_CONTAINER
133
146
  },
134
147
  separateSeries: false,
135
148
  sumSeries: false
@@ -147,75 +160,78 @@ export const DATA_FORMATTER_SERIES_DEFAULT: DataFormatterSeries = {
147
160
  // ]
148
161
  // },
149
162
  }
150
- DATA_FORMATTER_SERIES_DEFAULT.visibleFilter.toString = () => `(datum, context) => true`
163
+ DEFAULT_DATA_FORMATTER_SERIES.visibleFilter.toString = () => `(datum, context) => true`
151
164
 
152
- export const DATA_FORMATTER_GRID_GRID_DEFAULT: DataFormatterGridGrid = {
165
+ export const DEFAULT_DATA_FORMATTER_GRID_GRID: DataFormatterGridGrid = {
153
166
  seriesDirection: 'row',
154
167
  rowLabels: [],
155
168
  columnLabels: [],
156
- valueAxis: { ...DATA_FORMATTER_VALUE_AXIS_DEFAULT },
157
- groupAxis: { ...DATA_FORMATTER_GROUP_AXIS_DEFAULT, },
169
+ valueAxis: { ...DEFAULT_DATA_FORMATTER_VALUE_AXIS },
170
+ groupAxis: { ...DEFAULT_DATA_FORMATTER_GROUP_AXIS, },
158
171
  separateSeries: false,
159
172
  // slotIndex: 0,
160
173
  // seriesSlotIndexes: null
161
174
  }
162
175
 
163
- export const DATA_FORMATTER_GRID_DEFAULT: DataFormatterGrid = {
176
+ export const DEFAULT_DATA_FORMATTER_GRID: DataFormatterGrid = {
164
177
  type: 'grid',
165
178
  visibleFilter: (datum, context) => true,
166
- grid: {
167
- ...DATA_FORMATTER_GRID_GRID_DEFAULT
168
- },
179
+ // grid: {
180
+ ...DEFAULT_DATA_FORMATTER_GRID_GRID,
181
+ // },
169
182
  container: {
170
- ...DATA_FORMATTER_CONTAINER_DEFAULT
183
+ ...DEFAULT_DATA_FORMATTER_CONTAINER
171
184
  }
172
185
  }
173
- DATA_FORMATTER_GRID_DEFAULT.visibleFilter.toString = () => `(datum, context) => true`
186
+ DEFAULT_DATA_FORMATTER_GRID.visibleFilter.toString = () => `(datum, context) => true`
174
187
 
175
188
  // export const DATA_FORMATTER_MULTI_GRID_MULTI_GRID_DEFAULT: DataFormatterMultiGridMultiGrid = {
176
- // ...DATA_FORMATTER_GRID_DEFAULT,
189
+ // ...DEFAULT_DATA_FORMATTER_GRID,
177
190
  // slotIndex: 0,
178
191
  // seriesSlotIndexes: null
179
192
  // }
180
193
 
181
- export const DATA_FORMATTER_MULTI_GRID_GRID_DEFAULT: DataFormatterMultiGridGrid = {
182
- ...DATA_FORMATTER_GRID_GRID_DEFAULT
194
+ export const DEFAULT_DATA_FORMATTER_MULTI_GRID_GRID: DataFormatterMultiGridGrid = {
195
+ ...DEFAULT_DATA_FORMATTER_GRID_GRID
183
196
  }
184
197
 
185
- export const DATA_FORMATTER_MULTI_GRID_DEFAULT: DataFormatterMultiGrid = {
198
+ export const DEFAULT_DATA_FORMATTER_MULTI_GRID: DataFormatterMultiGrid = {
186
199
  type: 'multiGrid',
187
200
  visibleFilter: (datum, context) => true,
188
201
  gridList: [
189
202
  {
190
- ...DATA_FORMATTER_MULTI_GRID_GRID_DEFAULT
203
+ ...DEFAULT_DATA_FORMATTER_MULTI_GRID_GRID
191
204
  },
192
205
  ],
193
206
  separateGrid: false,
194
207
  container: {
195
- ...DATA_FORMATTER_CONTAINER_DEFAULT
208
+ ...DEFAULT_DATA_FORMATTER_CONTAINER
196
209
  }
197
210
  }
198
- DATA_FORMATTER_MULTI_GRID_DEFAULT.visibleFilter.toString = () => `(datum, context) => true`
211
+ DEFAULT_DATA_FORMATTER_MULTI_GRID.visibleFilter.toString = () => `(datum, context) => true`
199
212
 
200
- export const DATA_FORMATTER_MULTI_VALUE_DEFAULT: DataFormatterMultiValue = {
213
+ export const DEFAULT_DATA_FORMATTER_MULTI_VALUE: DataFormatterMultiValue = {
201
214
  type: 'multiValue',
202
215
  visibleFilter: (datum, context) => true,
203
216
  categoryLabels: [],
204
- multiValue: [],
205
- xAxis: { ...DATA_FORMATTER_VALUE_AXIS_DEFAULT },
206
- yAxis: { ...DATA_FORMATTER_VALUE_AXIS_DEFAULT },
217
+ xAxis: { ...DEFAULT_DATA_FORMATTER_AXIS },
218
+ yAxis: { ...DEFAULT_DATA_FORMATTER_AXIS },
219
+ container: {
220
+ ...DEFAULT_DATA_FORMATTER_CONTAINER
221
+ },
222
+ separateCategory: false
207
223
  }
208
- DATA_FORMATTER_MULTI_VALUE_DEFAULT.visibleFilter.toString = () => `(datum, context) => true`
224
+ DEFAULT_DATA_FORMATTER_MULTI_VALUE.visibleFilter.toString = () => `(datum, context) => true`
209
225
 
210
- export const DATA_FORMATTER_TREE_DEFAULT: DataFormatterTree = {
226
+ export const DEFAULT_DATA_FORMATTER_TREE: DataFormatterTree = {
211
227
  type: 'tree',
212
228
  visibleFilter: (datum, context) => true,
213
229
  // labelFormat: (datum: any) => (datum && datum.label) ?? '',
214
230
  categoryLabels: []
215
231
  }
216
- DATA_FORMATTER_TREE_DEFAULT.visibleFilter.toString = () => `(datum, context) => true`
232
+ DEFAULT_DATA_FORMATTER_TREE.visibleFilter.toString = () => `(datum, context) => true`
217
233
 
218
- export const DATA_FORMATTER_RELATIONAL_DEFAULT: DataFormatterRelationship = {
234
+ export const DEFAULT_DATA_FORMATTER_RELATIONSHIP: DataFormatterRelationship = {
219
235
  type: 'relationship',
220
236
  visibleFilter: (datum, context) => true,
221
237
  categoryLabels: []
@@ -228,5 +244,5 @@ export const DATA_FORMATTER_RELATIONAL_DEFAULT: DataFormatterRelationship = {
228
244
  // descriptionFormat: (edge: any) => (edge && edge.label) ?? ''
229
245
  // },
230
246
  }
231
- DATA_FORMATTER_RELATIONAL_DEFAULT.visibleFilter.toString = () => `(datum, context) => true`
247
+ DEFAULT_DATA_FORMATTER_RELATIONSHIP.visibleFilter.toString = () => `(datum, context) => true`
232
248
 
@@ -1,7 +1,7 @@
1
1
  // import * as d3 from 'd3'
2
2
  import type { ComputedDataFn, DataGrid, DataGridDatum, DataFormatterGridGrid, ComputedDatumGrid } from '../../lib/core-types'
3
3
  import { formatValueToLabel, createDefaultDatumId, createDefaultSeriesLabel, createDefaultGroupLabel } from '../utils/orbchartsUtils'
4
- import { getMinAndMaxValue, transposeData, createGridSeriesLabels, createGridGroupLabels, seriesColorPredicate } from '../utils/orbchartsUtils'
4
+ import { getMinMaxValue, transposeData, createGridSeriesLabels, createGridGroupLabels, seriesColorPredicate } from '../utils/orbchartsUtils'
5
5
 
6
6
  // 統一 DataGrid 格式、並欄列資料轉置為一致方式
7
7
  export function createTransposedDataGrid (data: DataGrid, dataFormatterGrid: DataFormatterGridGrid): DataGridDatum[][] {
@@ -76,16 +76,16 @@ export const computedDataFn: ComputedDataFn<'grid'> = (context) => {
76
76
  try {
77
77
 
78
78
  // 依seriesDirection轉置資料矩陣
79
- const transposedDataGrid = createTransposedDataGrid(data, dataFormatter.grid)
79
+ const transposedDataGrid = createTransposedDataGrid(data, dataFormatter)
80
80
 
81
81
  const seriesLabels = createGridSeriesLabels({
82
82
  transposedDataGrid,
83
- dataFormatterGrid: dataFormatter.grid,
83
+ dataFormatterGrid: dataFormatter,
84
84
  chartType: 'grid'
85
85
  })
86
86
  const groupLabels = createGridGroupLabels({
87
87
  transposedDataGrid,
88
- dataFormatterGrid: dataFormatter.grid,
88
+ dataFormatterGrid: dataFormatter,
89
89
  chartType: 'grid'
90
90
  })
91
91
 
@@ -7,17 +7,20 @@ import {
7
7
  textSizePxObservable } from '../utils/observables'
8
8
  import {
9
9
  gridComputedLayoutDataObservable,
10
- gridAxesTransformObservable,
11
- gridAxesReverseTransformObservable,
12
- gridGraphicTransformObservable,
13
- gridGraphicReverseScaleObservable,
14
10
  gridAxesSizeObservable,
15
11
  gridSeriesLabelsObservable,
16
12
  gridVisibleComputedDataObservable,
17
13
  gridVisibleComputedLayoutDataObservable,
18
14
  // isSeriesSeprateObservable,
19
15
  gridContainerPositionObservable,
20
- computedStackedDataObservables } from '../utils/gridObservables'
16
+ computedStackedDataObservables,
17
+ groupScaleDomainValueObservable,
18
+ filteredMinMaxValueObservable,
19
+ gridAxesTransformObservable,
20
+ gridAxesReverseTransformObservable,
21
+ gridGraphicTransformObservable,
22
+ gridGraphicReverseScaleObservable,
23
+ } from '../utils/gridObservables'
21
24
 
22
25
  export const contextObserverCallback: ContextObserverCallback<'grid'> = ({ subject, observer }) => {
23
26
 
@@ -26,7 +29,7 @@ export const contextObserverCallback: ContextObserverCallback<'grid'> = ({ subje
26
29
  )
27
30
 
28
31
  const isSeriesSeprate$ = observer.fullDataFormatter$.pipe(
29
- map(d => d.grid.separateSeries),
32
+ map(d => d.separateSeries),
30
33
  distinctUntilChanged(),
31
34
  shareReplay(1)
32
35
  )
@@ -37,33 +40,6 @@ export const contextObserverCallback: ContextObserverCallback<'grid'> = ({ subje
37
40
  layout$: observer.layout$,
38
41
  })
39
42
 
40
- const gridAxesTransform$ = gridAxesTransformObservable({
41
- fullDataFormatter$: observer.fullDataFormatter$,
42
- layout$: observer.layout$
43
- }).pipe(
44
- shareReplay(1)
45
- )
46
-
47
- const gridAxesReverseTransform$ = gridAxesReverseTransformObservable({
48
- gridAxesTransform$
49
- }).pipe(
50
- shareReplay(1)
51
- )
52
-
53
- const gridGraphicTransform$ = gridGraphicTransformObservable({
54
- computedData$: observer.computedData$,
55
- fullDataFormatter$: observer.fullDataFormatter$,
56
- layout$: observer.layout$
57
- }).pipe(
58
- shareReplay(1)
59
- )
60
-
61
- const gridGraphicReverseScale$ = gridGraphicReverseScaleObservable({
62
- gridContainerPosition$: gridContainerPosition$,
63
- gridAxesTransform$: gridAxesTransform$,
64
- gridGraphicTransform$: gridGraphicTransform$,
65
- })
66
-
67
43
  const gridAxesSize$ = gridAxesSizeObservable({
68
44
  fullDataFormatter$: observer.fullDataFormatter$,
69
45
  layout$: observer.layout$
@@ -128,6 +104,49 @@ export const contextObserverCallback: ContextObserverCallback<'grid'> = ({ subje
128
104
  shareReplay(1)
129
105
  )
130
106
 
107
+ const groupScaleDomainValue$ = groupScaleDomainValueObservable({
108
+ computedData$: observer.computedData$,
109
+ fullDataFormatter$: observer.fullDataFormatter$,
110
+ }).pipe(
111
+ shareReplay(1)
112
+ )
113
+
114
+ const filteredMinMaxValue$ = filteredMinMaxValueObservable({
115
+ computedData$: observer.computedData$,
116
+ groupScaleDomainValue$: groupScaleDomainValue$,
117
+ }).pipe(
118
+ shareReplay(1)
119
+ )
120
+
121
+ const gridAxesTransform$ = gridAxesTransformObservable({
122
+ fullDataFormatter$: observer.fullDataFormatter$,
123
+ layout$: observer.layout$
124
+ }).pipe(
125
+ shareReplay(1)
126
+ )
127
+
128
+ const gridAxesReverseTransform$ = gridAxesReverseTransformObservable({
129
+ gridAxesTransform$
130
+ }).pipe(
131
+ shareReplay(1)
132
+ )
133
+
134
+ const gridGraphicTransform$ = gridGraphicTransformObservable({
135
+ computedData$: observer.computedData$,
136
+ groupScaleDomainValue$: groupScaleDomainValue$,
137
+ filteredMinMaxValue$: filteredMinMaxValue$,
138
+ fullDataFormatter$: observer.fullDataFormatter$,
139
+ layout$: observer.layout$
140
+ }).pipe(
141
+ shareReplay(1)
142
+ )
143
+
144
+ const gridGraphicReverseScale$ = gridGraphicReverseScaleObservable({
145
+ gridContainerPosition$: gridContainerPosition$,
146
+ gridAxesTransform$: gridAxesTransform$,
147
+ gridGraphicTransform$: gridGraphicTransform$,
148
+ })
149
+
131
150
 
132
151
  return {
133
152
  fullParams$: observer.fullParams$,
@@ -138,10 +157,6 @@ export const contextObserverCallback: ContextObserverCallback<'grid'> = ({ subje
138
157
  textSizePx$,
139
158
  isSeriesSeprate$,
140
159
  gridContainerPosition$,
141
- gridAxesTransform$,
142
- gridAxesReverseTransform$,
143
- gridGraphicTransform$,
144
- gridGraphicReverseScale$,
145
160
  gridAxesSize$,
146
161
  gridHighlight$,
147
162
  seriesLabels$,
@@ -151,5 +166,11 @@ export const contextObserverCallback: ContextObserverCallback<'grid'> = ({ subje
151
166
  visibleComputedData$,
152
167
  visibleComputedLayoutData$,
153
168
  computedStackedData$,
169
+ groupScaleDomainValue$,
170
+ filteredMinMaxValue$,
171
+ gridAxesTransform$,
172
+ gridAxesReverseTransform$,
173
+ gridGraphicTransform$,
174
+ gridGraphicReverseScale$,
154
175
  }
155
176
  }
@@ -6,15 +6,15 @@ export const dataFormatterValidator: DataFormatterValidator<'grid'> = (dataForma
6
6
  visibleFilter: {
7
7
  toBeTypes: ['Function']
8
8
  },
9
- grid: {
10
- toBeTypes: ['object']
11
- },
9
+ // grid: {
10
+ // toBeTypes: ['object']
11
+ // },
12
12
  container: {
13
13
  toBeTypes: ['object']
14
14
  }
15
15
  })
16
- if (dataFormatter.grid) {
17
- const visibleFilterResult = validateColumns(dataFormatter.grid, {
16
+ // if (dataFormatter.grid) {
17
+ const visibleFilterResult = validateColumns(dataFormatter, {
18
18
  seriesDirection: {
19
19
  toBe: '"row" | "column"',
20
20
  test: (value) => value === 'row' || value === 'column'
@@ -38,11 +38,11 @@ export const dataFormatterValidator: DataFormatterValidator<'grid'> = (dataForma
38
38
  if (visibleFilterResult.status === 'error') {
39
39
  return visibleFilterResult
40
40
  }
41
- if (dataFormatter.grid.valueAxis) {
42
- const valueAxisResult = validateColumns(dataFormatter.grid.valueAxis, {
41
+ if (dataFormatter.valueAxis) {
42
+ const valueAxisResult = validateColumns(dataFormatter.valueAxis, {
43
43
  position: {
44
- toBe: '"left" | "right"',
45
- test: (value) => value === 'left' || value === 'right'
44
+ toBe: '"bottom" | "left" | "top" | "right"',
45
+ test: (value) => value === 'bottom' || value === 'left' || value === 'top' || value === 'right'
46
46
  },
47
47
  scaleDomain: {
48
48
  toBe: '[number | "min" | "auto", number | "max" | "auto"]',
@@ -60,11 +60,11 @@ export const dataFormatterValidator: DataFormatterValidator<'grid'> = (dataForma
60
60
  return valueAxisResult
61
61
  }
62
62
  }
63
- if (dataFormatter.grid.groupAxis) {
64
- const groupAxisResult = validateColumns(dataFormatter.grid.groupAxis, {
63
+ if (dataFormatter.groupAxis) {
64
+ const groupAxisResult = validateColumns(dataFormatter.groupAxis, {
65
65
  position: {
66
- toBe: '"top" | "bottom"',
67
- test: (value) => value === 'top' || value === 'bottom'
66
+ toBe: '"bottom" | "left" | "top" | "right"',
67
+ test: (value) => value === 'bottom' || value === 'left' || value === 'top' || value === 'right'
68
68
  },
69
69
  scaleDomain: {
70
70
  toBe: '[number, number | "max"]',
@@ -81,7 +81,7 @@ export const dataFormatterValidator: DataFormatterValidator<'grid'> = (dataForma
81
81
  return groupAxisResult
82
82
  }
83
83
  }
84
- }
84
+ // }
85
85
  if (dataFormatter.container) {
86
86
  const containerResult = validateColumns(dataFormatter.container, {
87
87
  gap: {
@@ -1,5 +1,5 @@
1
1
  import type { ComputedDataFn, ComputedDatumGrid, DataFormatterGridGrid, ComputedDataMultiGrid } from '../../lib/core-types'
2
- import { DATA_FORMATTER_MULTI_GRID_GRID_DEFAULT } from '../defaults'
2
+ import { DEFAULT_DATA_FORMATTER_MULTI_GRID_GRID } from '../defaults'
3
3
  import {
4
4
  createDefaultDatumId,
5
5
  seriesColorPredicate,
@@ -18,7 +18,7 @@ export const computedDataFn: ComputedDataFn<'multiGrid'> = (context) => {
18
18
  let multiGridData: ComputedDataMultiGrid = []
19
19
 
20
20
  try {
21
- const defaultGrid = dataFormatter.gridList[0] || DATA_FORMATTER_MULTI_GRID_GRID_DEFAULT
21
+ const defaultGrid = dataFormatter.gridList[0] || DEFAULT_DATA_FORMATTER_MULTI_GRID_GRID
22
22
 
23
23
  // 計算每個grid的dataFormatter
24
24
  const gridDataFormatterList: DataFormatterGridGrid[] = data.map((gridData, gridIndex) => {