@orbcharts/core 3.0.0-beta.1 → 3.0.0-beta.11

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 +3271 -2862
  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 +87 -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,62 @@ 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: [
61
+ "#6CBAFF",
62
+ "#FF6C6C",
63
+ "#F9B052",
64
+ "#7DD3C4",
65
+ "#AA93D2",
66
+ "#0088FF",
67
+ "#FFBABA",
68
+ "#86DC72",
69
+ "#EF76FF",
70
+ "#C4C4C4"
71
+ ],
72
+ // label: ['#67B7DC', '#6794DC', '#6771DC', '#8067DC', '#A367DC', '#C767DC', '#DC67CE', '#DC67AB', '#DC6788', '#DC6967', '#DC8C67', '#DCAF67'],
73
+ // label: ['#F3A356', '#7A60F0', '#38B1AF', '#60A2F0', '#F06062', '#FF383C', '#6580EA', '#079F9C', '#9F65EA', '#EA7465', '#EA7465', '#8657D2', '#59B757', '#2797FF', '#D25786', '#F54BA6', '#4BECF5', '#74FD72', '#CA4BF5', '#EFE26E'],
74
+ // label: ['#60A2F0', '#F3A356', '#7A60F0', '#38B1AF', '#F06062', '#FF383C', '#6580EA', '#079F9C', '#9F65EA', '#EA7465', '#EA7465', '#8657D2', '#59B757', '#2797FF', '#D25786', '#F54BA6', '#4BECF5', '#74FD72', '#CA4BF5', '#EFE26E'],
60
75
  // primary: '#454545',
61
76
  primary: '#1b1e23',
62
77
  secondary: '#e1e1e1',
63
- white: '#ffffff',
78
+ // white: '#ffffff',
79
+ labelContrast: ['#ffffff', '#1b1e23'],
64
80
  background: '#ffffff'
65
81
  },
66
82
  dark: {
67
- series: ['#67B7DC', '#6794DC', '#6771DC', '#8067DC', '#A367DC', '#C767DC', '#DC67CE', '#DC67AB', '#DC6788', '#DC6967', '#DC8C67', '#DCAF67'],
83
+ label: [
84
+ "#6CBAFF",
85
+ "#FF6C6C",
86
+ "#F9B052",
87
+ "#7DD3C4",
88
+ "#AA93D2",
89
+ "#0088FF",
90
+ "#FFBABA",
91
+ "#86DC72",
92
+ "#EF76FF",
93
+ "#C4C4C4"
94
+ ],
95
+ // label: ['#67B7DC', '#6794DC', '#6771DC', '#8067DC', '#A367DC', '#C767DC', '#DC67CE', '#DC67AB', '#DC6788', '#DC6967', '#DC8C67', '#DCAF67'],
96
+ // label: ['#67B7DC', '#6794DC', '#38B1AF', '#6771DC', '#8067DC', '#A367DC', '#C767DC', '#DC67CE', '#DC67AB', '#DC6788', '#DC6967', '#DC8C67', '#DCAF67'],
97
+ // label: ['#60A2F0', '#F3A356', '#7A60F0', '#38B1AF', '#F06062', '#FF383C', '#6580EA', '#079F9C', '#9F65EA', '#EA7465', '#EA7465', '#8657D2', '#59B757', '#2797FF', '#D25786', '#F54BA6', '#4BECF5', '#74FD72', '#CA4BF5', '#EFE26E'],
68
98
  primary: '#f0f0f0',
69
99
  secondary: '#e1e1e1',
70
- white: '#ffffff',
100
+ // white: '#ffffff',
101
+ labelContrast: ['#ffffff', '#1b1e23'],
71
102
  background: '#000000'
72
103
  }
73
104
  },
@@ -80,56 +111,62 @@ export const CHART_PARAMS_DEFAULT: ChartParams = {
80
111
  transitionEase: 'easeCubic'
81
112
  }
82
113
 
83
- export const CHART_WIDTH_DEFAULT = 800
114
+ export const DEFAULT_CHART_WIDTH = 800
84
115
 
85
- export const CHART_HEIGHT_DEFAULT = 500
116
+ export const DEFAULT_CHART_HEIGHT = 500
86
117
 
87
118
  // -- Data --
88
119
 
89
- export const DATA_SERIES_DEFAULT: DataSeries = []
120
+ export const DEFAULT_DATA_SERIES: DataSeries = []
90
121
 
91
- export const DATA_GRID_DEFAULT: DataGrid = []
122
+ export const DEFAULT_DATA_GRID: DataGrid = []
92
123
 
93
- export const DATA_MULTI_GRID_DEFAULT: DataMultiGrid = []
124
+ export const DEFAULT_DATA_MULTI_GRID: DataMultiGrid = []
94
125
 
95
- export const DATA_MULTI_VALUE_DEFAULT: DataMultiValue = []
126
+ export const DEFAULT_DATA_MULTI_VALUE: DataMultiValue = []
96
127
 
97
- export const DATA_TREE_DEFAULT: DataTree = []
128
+ export const DEFAULT_DATA_TREE: DataTree = []
98
129
 
99
- export const DATA_RELATIONA_DEFAULTL: DataRelationship = {
130
+ export const DEFAULTL_DATA_RELATIONA: DataRelationship = {
100
131
  nodes: [],
101
132
  edges: []
102
133
  }
103
134
 
104
135
  // -- Data Formatter --
105
136
 
106
- export const DATA_FORMATTER_VALUE_AXIS_DEFAULT: DataFormatterValueAxis = {
137
+ export const DEFAULT_DATA_FORMATTER_VALUE_AXIS: DataFormatterValueAxis = {
107
138
  position: 'left',
108
139
  scaleDomain: ['auto', 'auto'],
109
140
  scaleRange: [0, 0.9],
110
141
  label: '',
111
142
  }
112
143
 
113
- export const DATA_FORMATTER_GROUP_AXIS_DEFAULT: DataFormatterGroupAxis = {
144
+ export const DEFAULT_DATA_FORMATTER_GROUP_AXIS: DataFormatterGroupAxis = {
114
145
  position: 'bottom',
115
146
  scaleDomain: [0, 'max'],
116
147
  scalePadding: 0.5,
117
148
  label: ''
118
149
  }
119
150
 
120
- export const DATA_FORMATTER_CONTAINER_DEFAULT: DataFormatterContainer = {
151
+ export const DEFAULT_DATA_FORMATTER_AXIS: DataFormatterAxis = {
152
+ scaleDomain: ['auto', 'auto'],
153
+ scaleRange: [0, 0.9],
154
+ label: '',
155
+ }
156
+
157
+ export const DEFAULT_DATA_FORMATTER_CONTAINER: DataFormatterContainer = {
121
158
  gap: 120,
122
159
  rowAmount: 1,
123
160
  columnAmount: 1
124
161
  }
125
162
 
126
- export const DATA_FORMATTER_SERIES_DEFAULT: DataFormatterSeries = {
163
+ export const DEFAULT_DATA_FORMATTER_SERIES: DataFormatterSeries = {
127
164
  type: 'series',
128
165
  visibleFilter: (datum, context) => true,
129
166
  sort: null,
130
167
  seriesLabels: [],
131
168
  container: {
132
- ...DATA_FORMATTER_CONTAINER_DEFAULT
169
+ ...DEFAULT_DATA_FORMATTER_CONTAINER
133
170
  },
134
171
  separateSeries: false,
135
172
  sumSeries: false
@@ -147,75 +184,78 @@ export const DATA_FORMATTER_SERIES_DEFAULT: DataFormatterSeries = {
147
184
  // ]
148
185
  // },
149
186
  }
150
- DATA_FORMATTER_SERIES_DEFAULT.visibleFilter.toString = () => `(datum, context) => true`
187
+ DEFAULT_DATA_FORMATTER_SERIES.visibleFilter.toString = () => `(datum, context) => true`
151
188
 
152
- export const DATA_FORMATTER_GRID_GRID_DEFAULT: DataFormatterGridGrid = {
189
+ export const DEFAULT_DATA_FORMATTER_GRID_GRID: DataFormatterGridGrid = {
153
190
  seriesDirection: 'row',
154
191
  rowLabels: [],
155
192
  columnLabels: [],
156
- valueAxis: { ...DATA_FORMATTER_VALUE_AXIS_DEFAULT },
157
- groupAxis: { ...DATA_FORMATTER_GROUP_AXIS_DEFAULT, },
193
+ valueAxis: { ...DEFAULT_DATA_FORMATTER_VALUE_AXIS },
194
+ groupAxis: { ...DEFAULT_DATA_FORMATTER_GROUP_AXIS, },
158
195
  separateSeries: false,
159
196
  // slotIndex: 0,
160
197
  // seriesSlotIndexes: null
161
198
  }
162
199
 
163
- export const DATA_FORMATTER_GRID_DEFAULT: DataFormatterGrid = {
200
+ export const DEFAULT_DATA_FORMATTER_GRID: DataFormatterGrid = {
164
201
  type: 'grid',
165
202
  visibleFilter: (datum, context) => true,
166
- grid: {
167
- ...DATA_FORMATTER_GRID_GRID_DEFAULT
168
- },
203
+ // grid: {
204
+ ...DEFAULT_DATA_FORMATTER_GRID_GRID,
205
+ // },
169
206
  container: {
170
- ...DATA_FORMATTER_CONTAINER_DEFAULT
207
+ ...DEFAULT_DATA_FORMATTER_CONTAINER
171
208
  }
172
209
  }
173
- DATA_FORMATTER_GRID_DEFAULT.visibleFilter.toString = () => `(datum, context) => true`
210
+ DEFAULT_DATA_FORMATTER_GRID.visibleFilter.toString = () => `(datum, context) => true`
174
211
 
175
212
  // export const DATA_FORMATTER_MULTI_GRID_MULTI_GRID_DEFAULT: DataFormatterMultiGridMultiGrid = {
176
- // ...DATA_FORMATTER_GRID_DEFAULT,
213
+ // ...DEFAULT_DATA_FORMATTER_GRID,
177
214
  // slotIndex: 0,
178
215
  // seriesSlotIndexes: null
179
216
  // }
180
217
 
181
- export const DATA_FORMATTER_MULTI_GRID_GRID_DEFAULT: DataFormatterMultiGridGrid = {
182
- ...DATA_FORMATTER_GRID_GRID_DEFAULT
218
+ export const DEFAULT_DATA_FORMATTER_MULTI_GRID_GRID: DataFormatterMultiGridGrid = {
219
+ ...DEFAULT_DATA_FORMATTER_GRID_GRID
183
220
  }
184
221
 
185
- export const DATA_FORMATTER_MULTI_GRID_DEFAULT: DataFormatterMultiGrid = {
222
+ export const DEFAULT_DATA_FORMATTER_MULTI_GRID: DataFormatterMultiGrid = {
186
223
  type: 'multiGrid',
187
224
  visibleFilter: (datum, context) => true,
188
225
  gridList: [
189
226
  {
190
- ...DATA_FORMATTER_MULTI_GRID_GRID_DEFAULT
227
+ ...DEFAULT_DATA_FORMATTER_MULTI_GRID_GRID
191
228
  },
192
229
  ],
193
230
  separateGrid: false,
194
231
  container: {
195
- ...DATA_FORMATTER_CONTAINER_DEFAULT
232
+ ...DEFAULT_DATA_FORMATTER_CONTAINER
196
233
  }
197
234
  }
198
- DATA_FORMATTER_MULTI_GRID_DEFAULT.visibleFilter.toString = () => `(datum, context) => true`
235
+ DEFAULT_DATA_FORMATTER_MULTI_GRID.visibleFilter.toString = () => `(datum, context) => true`
199
236
 
200
- export const DATA_FORMATTER_MULTI_VALUE_DEFAULT: DataFormatterMultiValue = {
237
+ export const DEFAULT_DATA_FORMATTER_MULTI_VALUE: DataFormatterMultiValue = {
201
238
  type: 'multiValue',
202
239
  visibleFilter: (datum, context) => true,
203
240
  categoryLabels: [],
204
- multiValue: [],
205
- xAxis: { ...DATA_FORMATTER_VALUE_AXIS_DEFAULT },
206
- yAxis: { ...DATA_FORMATTER_VALUE_AXIS_DEFAULT },
241
+ xAxis: { ...DEFAULT_DATA_FORMATTER_AXIS },
242
+ yAxis: { ...DEFAULT_DATA_FORMATTER_AXIS },
243
+ container: {
244
+ ...DEFAULT_DATA_FORMATTER_CONTAINER
245
+ },
246
+ separateCategory: false
207
247
  }
208
- DATA_FORMATTER_MULTI_VALUE_DEFAULT.visibleFilter.toString = () => `(datum, context) => true`
248
+ DEFAULT_DATA_FORMATTER_MULTI_VALUE.visibleFilter.toString = () => `(datum, context) => true`
209
249
 
210
- export const DATA_FORMATTER_TREE_DEFAULT: DataFormatterTree = {
250
+ export const DEFAULT_DATA_FORMATTER_TREE: DataFormatterTree = {
211
251
  type: 'tree',
212
252
  visibleFilter: (datum, context) => true,
213
253
  // labelFormat: (datum: any) => (datum && datum.label) ?? '',
214
254
  categoryLabels: []
215
255
  }
216
- DATA_FORMATTER_TREE_DEFAULT.visibleFilter.toString = () => `(datum, context) => true`
256
+ DEFAULT_DATA_FORMATTER_TREE.visibleFilter.toString = () => `(datum, context) => true`
217
257
 
218
- export const DATA_FORMATTER_RELATIONAL_DEFAULT: DataFormatterRelationship = {
258
+ export const DEFAULT_DATA_FORMATTER_RELATIONSHIP: DataFormatterRelationship = {
219
259
  type: 'relationship',
220
260
  visibleFilter: (datum, context) => true,
221
261
  categoryLabels: []
@@ -228,5 +268,5 @@ export const DATA_FORMATTER_RELATIONAL_DEFAULT: DataFormatterRelationship = {
228
268
  // descriptionFormat: (edge: any) => (edge && edge.label) ?? ''
229
269
  // },
230
270
  }
231
- DATA_FORMATTER_RELATIONAL_DEFAULT.visibleFilter.toString = () => `(datum, context) => true`
271
+ DEFAULT_DATA_FORMATTER_RELATIONSHIP.visibleFilter.toString = () => `(datum, context) => true`
232
272
 
@@ -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) => {