@orbcharts/core 3.0.0-beta.7 → 3.0.0-beta.8

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 (68) hide show
  1. package/LICENSE +200 -200
  2. package/dist/orbcharts-core.es.js +402 -399
  3. package/dist/orbcharts-core.umd.js +3 -3
  4. package/lib/core-types.ts +7 -7
  5. package/package.json +42 -42
  6. package/src/AbstractChart.ts +57 -57
  7. package/src/GridChart.ts +24 -24
  8. package/src/MultiGridChart.ts +24 -24
  9. package/src/MultiValueChart.ts +24 -24
  10. package/src/RelationshipChart.ts +24 -24
  11. package/src/SeriesChart.ts +24 -24
  12. package/src/TreeChart.ts +24 -24
  13. package/src/base/createBaseChart.ts +505 -505
  14. package/src/base/createBasePlugin.ts +153 -153
  15. package/src/base/validators/chartOptionsValidator.ts +23 -23
  16. package/src/base/validators/chartParamsValidator.ts +133 -133
  17. package/src/base/validators/elementValidator.ts +13 -13
  18. package/src/base/validators/pluginsValidator.ts +14 -14
  19. package/src/defaults.ts +238 -235
  20. package/src/defineGridPlugin.ts +3 -3
  21. package/src/defineMultiGridPlugin.ts +3 -3
  22. package/src/defineMultiValuePlugin.ts +3 -3
  23. package/src/defineNoneDataPlugin.ts +4 -4
  24. package/src/defineRelationshipPlugin.ts +3 -3
  25. package/src/defineSeriesPlugin.ts +3 -3
  26. package/src/defineTreePlugin.ts +3 -3
  27. package/src/grid/computedDataFn.ts +129 -129
  28. package/src/grid/contextObserverCallback.ts +176 -176
  29. package/src/grid/dataFormatterValidator.ts +101 -101
  30. package/src/grid/dataValidator.ts +12 -12
  31. package/src/index.ts +20 -20
  32. package/src/multiGrid/computedDataFn.ts +123 -123
  33. package/src/multiGrid/contextObserverCallback.ts +41 -41
  34. package/src/multiGrid/dataFormatterValidator.ts +115 -115
  35. package/src/multiGrid/dataValidator.ts +12 -12
  36. package/src/multiValue/computedDataFn.ts +110 -110
  37. package/src/multiValue/contextObserverCallback.ts +160 -160
  38. package/src/multiValue/dataFormatterValidator.ts +9 -9
  39. package/src/multiValue/dataValidator.ts +9 -9
  40. package/src/relationship/computedDataFn.ts +144 -144
  41. package/src/relationship/contextObserverCallback.ts +80 -80
  42. package/src/relationship/dataFormatterValidator.ts +9 -9
  43. package/src/relationship/dataValidator.ts +9 -9
  44. package/src/series/computedDataFn.ts +88 -88
  45. package/src/series/contextObserverCallback.ts +100 -100
  46. package/src/series/dataFormatterValidator.ts +41 -41
  47. package/src/series/dataValidator.ts +12 -12
  48. package/src/tree/computedDataFn.ts +129 -129
  49. package/src/tree/contextObserverCallback.ts +58 -58
  50. package/src/tree/dataFormatterValidator.ts +13 -13
  51. package/src/tree/dataValidator.ts +13 -13
  52. package/src/utils/commonUtils.ts +55 -55
  53. package/src/utils/d3Scale.ts +198 -198
  54. package/src/utils/errorMessage.ts +42 -42
  55. package/src/utils/gridObservables.ts +683 -683
  56. package/src/utils/index.ts +9 -9
  57. package/src/utils/multiGridObservables.ts +392 -392
  58. package/src/utils/multiValueObservables.ts +661 -661
  59. package/src/utils/observables.ts +219 -219
  60. package/src/utils/orbchartsUtils.ts +377 -377
  61. package/src/utils/relationshipObservables.ts +84 -84
  62. package/src/utils/seriesObservables.ts +175 -175
  63. package/src/utils/treeObservables.ts +105 -105
  64. package/src/utils/validator.ts +126 -126
  65. package/tsconfig.base.json +13 -13
  66. package/tsconfig.json +2 -2
  67. package/vite-env.d.ts +6 -6
  68. package/vite.config.js +22 -22
@@ -1,198 +1,198 @@
1
- import * as d3 from 'd3'
2
- import { DEFAULT_DATA_FORMATTER_VALUE_AXIS } from '../defaults'
3
-
4
- // scaleLinear - 連續資料 -> 座標
5
- export const createValueToAxisScale = ({
6
- maxValue = 1,
7
- minValue = 0,
8
- axisWidth,
9
- scaleDomain = DEFAULT_DATA_FORMATTER_VALUE_AXIS.scaleDomain,
10
- scaleRange = DEFAULT_DATA_FORMATTER_VALUE_AXIS.scaleRange,
11
- reverse = false
12
- }: {
13
- maxValue: number
14
- minValue: number
15
- axisWidth: number
16
- scaleDomain: [number | 'min' | 'auto', number | 'max' | 'auto']
17
- scaleRange: [number, number] // 0-1
18
- reverse?: boolean
19
- }) => {
20
- // if (minValue === maxValue) {
21
- // maxValue += 1 // 避免最大及最小值相同造成無法計算scale
22
- // minValue -= 1
23
- // }
24
-
25
- // -- 無值補上預設值 --
26
- const domainMin: number | 'min' | 'auto' = scaleDomain[0] ?? DEFAULT_DATA_FORMATTER_VALUE_AXIS.scaleDomain[0]
27
- const domainMax: number | 'max' | 'auto' = scaleDomain[1] ?? DEFAULT_DATA_FORMATTER_VALUE_AXIS.scaleDomain[1]
28
- const rangeMin: number = scaleRange[0] ?? DEFAULT_DATA_FORMATTER_VALUE_AXIS.scaleRange[0]
29
- const rangeMax: number = scaleRange[1] ?? DEFAULT_DATA_FORMATTER_VALUE_AXIS.scaleRange[1]
30
-
31
- // -- 'auto' | 'max' | 'min' 替換成實際值 --
32
- let domainMinValue: number = (() => {
33
- if (domainMin === 'auto') {
34
- return minValue < 0 ? minValue : 0
35
- } else if (domainMin === 'min') {
36
- return minValue
37
- } else {
38
- return domainMin
39
- }
40
- })()
41
-
42
- let domainMaxValue: number = (() => {
43
- if (domainMax === 'auto') {
44
- return maxValue >= 0 ? maxValue : 0
45
- } else if (domainMax === 'max') {
46
- return maxValue
47
- } else {
48
- return domainMax
49
- }
50
- })()
51
- // let rangeMinValue = axisWidth * rangeMin
52
- // let rangeMaxValue = axisWidth * rangeMax
53
-
54
- // -- 計算padding --
55
- // if (padding > 0) {
56
- // const stepAmount = maxValue - minValue + (padding * 2)
57
- // const eachStepWidth = axisWidth / stepAmount
58
- // const paddingWidth = eachStepWidth * padding
59
- // rangeMinValue += paddingWidth
60
- // rangeMaxValue -= paddingWidth
61
- // }
62
-
63
- // -- 依場景大小換算 --
64
- const axisDomainMinValue = maxValue - (maxValue - domainMinValue) / (1 - rangeMin)
65
- const axisDomainMaxValue = domainMaxValue / rangeMax
66
-
67
- // return d3.scaleLinear()
68
- // .domain([domainMinValue, domainMaxValue])
69
- // .range([rangeMinValue, rangeMaxValue])
70
- if (reverse) {
71
- return d3.scaleLinear()
72
- .domain([axisDomainMinValue, axisDomainMaxValue])
73
- .range([axisWidth, 0])
74
- } else {
75
- return d3.scaleLinear()
76
- .domain([axisDomainMinValue, axisDomainMaxValue])
77
- .range([0, axisWidth])
78
- }
79
- }
80
-
81
- // scaleLinear - 座標 -> 連續資料
82
- export const createAxisToValueScale = ({
83
- maxValue = 1,
84
- minValue = 0,
85
- axisWidth,
86
- scaleDomain = DEFAULT_DATA_FORMATTER_VALUE_AXIS.scaleDomain,
87
- scaleRange = DEFAULT_DATA_FORMATTER_VALUE_AXIS.scaleRange,
88
- reverse = false
89
- }: {
90
- maxValue: number
91
- minValue: number
92
- axisWidth: number
93
- scaleDomain: [number | 'min' | 'auto', number | 'max' | 'auto']
94
- scaleRange: [number, number] // 0-1
95
- reverse?: boolean
96
- }) => {
97
- if (minValue === maxValue) {
98
- maxValue += 1 // 避免最大及最小值相同造成無法計算scale
99
- minValue -= 1
100
- }
101
-
102
- // -- 無值補上預設值 --
103
- const domainMin: number | 'min' | 'auto' = scaleDomain[0] ?? DEFAULT_DATA_FORMATTER_VALUE_AXIS.scaleDomain[0]
104
- const domainMax: number | 'max' | 'auto' = scaleDomain[1] ?? DEFAULT_DATA_FORMATTER_VALUE_AXIS.scaleDomain[1]
105
- const rangeMin: number = scaleRange[0] ?? DEFAULT_DATA_FORMATTER_VALUE_AXIS.scaleRange[0]
106
- const rangeMax: number = scaleRange[1] ?? DEFAULT_DATA_FORMATTER_VALUE_AXIS.scaleRange[1]
107
-
108
- // -- 'auto' | 'max' | 'min' 替換成實際值 --
109
- let domainMinValue: number = (() => {
110
- if (domainMin === 'auto') {
111
- return minValue < 0 ? minValue : 0
112
- } else if (domainMin === 'min') {
113
- return minValue
114
- } else {
115
- return domainMin
116
- }
117
- })()
118
-
119
- let domainMaxValue: number = (() => {
120
- if (domainMax === 'auto') {
121
- return maxValue >= 0 ? maxValue : 0
122
- } else if (domainMax === 'max') {
123
- return maxValue
124
- } else {
125
- return domainMax
126
- }
127
- })()
128
- // let rangeMinValue = axisWidth * rangeMin
129
- // let rangeMaxValue = axisWidth * rangeMax
130
-
131
- // -- 計算padding --
132
- // if (padding > 0) {
133
- // const stepAmount = maxValue - minValue + (padding * 2)
134
- // const eachStepWidth = axisWidth / stepAmount
135
- // const paddingWidth = eachStepWidth * padding
136
- // rangeMinValue += paddingWidth
137
- // rangeMaxValue -= paddingWidth
138
- // }
139
-
140
- // -- 依場景大小換算 --
141
- const axisDomainMinValue = maxValue - (maxValue - domainMinValue) / (1 - rangeMin)
142
- const axisDomainMaxValue = domainMaxValue / rangeMax
143
-
144
- // return d3.scaleLinear()
145
- // .domain([domainMinValue, domainMaxValue])
146
- // .range([rangeMinValue, rangeMaxValue])
147
- if (reverse) {
148
- return d3.scaleLinear()
149
- .domain([axisWidth, 0])
150
- .range([axisDomainMinValue, axisDomainMaxValue])
151
- } else {
152
- return d3.scaleLinear()
153
- .domain([0, axisWidth])
154
- .range([axisDomainMinValue, axisDomainMaxValue])
155
- }
156
- }
157
-
158
- // scalePoint - 非連續資料 -> 座標
159
- export const createLabelToAxisScale = ({ axisLabels, axisWidth, padding = 0.5 }: {
160
- axisLabels: string[]
161
- axisWidth: number
162
- padding?: number
163
- // reverse?: boolean
164
- }) => {
165
- let range: [d3.NumberValue, d3.NumberValue] = [0, axisWidth]
166
-
167
- return d3.scalePoint()
168
- .domain(axisLabels)
169
- .range(range)
170
- .padding(padding)
171
- }
172
-
173
- // scaleQuantize - 座標 -> 非連續資料索引
174
- export const createAxisToLabelIndexScale = ({ axisLabels, axisWidth, padding = 0, reverse = false }:{
175
- axisLabels: string[] | Date[],
176
- axisWidth: number
177
- padding?: number
178
- reverse?: boolean
179
- }) => {
180
-
181
- let range: number[] = axisLabels.map((d: string | Date, i: number) => i)
182
- if (reverse) {
183
- range.reverse()
184
- }
185
- // if (reverse) {
186
- // range = axisLabels.map((d: string | Date, i: number) => axisLabels.length - 1 - i)
187
- // } else {
188
- // range = axisLabels.map((d: string | Date, i: number) => i)
189
- // }
190
- const step = range.length - 1 + (padding * 2) // 圖軸刻度分段數量
191
- const stepWidth = axisWidth / step
192
- const rangePadding = stepWidth * padding - (stepWidth * 0.5) // 實際要計算的範圍是圖軸左右那邊增加0.5
193
-
194
- // console.log('rangePadding', rangePadding)
195
- return d3.scaleQuantize<number>()
196
- .domain([rangePadding, axisWidth - rangePadding])
197
- .range(range)
198
- }
1
+ import * as d3 from 'd3'
2
+ import { DEFAULT_DATA_FORMATTER_VALUE_AXIS } from '../defaults'
3
+
4
+ // scaleLinear - 連續資料 -> 座標
5
+ export const createValueToAxisScale = ({
6
+ maxValue = 1,
7
+ minValue = 0,
8
+ axisWidth,
9
+ scaleDomain = DEFAULT_DATA_FORMATTER_VALUE_AXIS.scaleDomain,
10
+ scaleRange = DEFAULT_DATA_FORMATTER_VALUE_AXIS.scaleRange,
11
+ reverse = false
12
+ }: {
13
+ maxValue: number
14
+ minValue: number
15
+ axisWidth: number
16
+ scaleDomain: [number | 'min' | 'auto', number | 'max' | 'auto']
17
+ scaleRange: [number, number] // 0-1
18
+ reverse?: boolean
19
+ }) => {
20
+ // if (minValue === maxValue) {
21
+ // maxValue += 1 // 避免最大及最小值相同造成無法計算scale
22
+ // minValue -= 1
23
+ // }
24
+
25
+ // -- 無值補上預設值 --
26
+ const domainMin: number | 'min' | 'auto' = scaleDomain[0] ?? DEFAULT_DATA_FORMATTER_VALUE_AXIS.scaleDomain[0]
27
+ const domainMax: number | 'max' | 'auto' = scaleDomain[1] ?? DEFAULT_DATA_FORMATTER_VALUE_AXIS.scaleDomain[1]
28
+ const rangeMin: number = scaleRange[0] ?? DEFAULT_DATA_FORMATTER_VALUE_AXIS.scaleRange[0]
29
+ const rangeMax: number = scaleRange[1] ?? DEFAULT_DATA_FORMATTER_VALUE_AXIS.scaleRange[1]
30
+
31
+ // -- 'auto' | 'max' | 'min' 替換成實際值 --
32
+ let domainMinValue: number = (() => {
33
+ if (domainMin === 'auto') {
34
+ return minValue < 0 ? minValue : 0
35
+ } else if (domainMin === 'min') {
36
+ return minValue
37
+ } else {
38
+ return domainMin
39
+ }
40
+ })()
41
+
42
+ let domainMaxValue: number = (() => {
43
+ if (domainMax === 'auto') {
44
+ return maxValue >= 0 ? maxValue : 0
45
+ } else if (domainMax === 'max') {
46
+ return maxValue
47
+ } else {
48
+ return domainMax
49
+ }
50
+ })()
51
+ // let rangeMinValue = axisWidth * rangeMin
52
+ // let rangeMaxValue = axisWidth * rangeMax
53
+
54
+ // -- 計算padding --
55
+ // if (padding > 0) {
56
+ // const stepAmount = maxValue - minValue + (padding * 2)
57
+ // const eachStepWidth = axisWidth / stepAmount
58
+ // const paddingWidth = eachStepWidth * padding
59
+ // rangeMinValue += paddingWidth
60
+ // rangeMaxValue -= paddingWidth
61
+ // }
62
+
63
+ // -- 依場景大小換算 --
64
+ const axisDomainMinValue = maxValue - (maxValue - domainMinValue) / (1 - rangeMin)
65
+ const axisDomainMaxValue = domainMaxValue / rangeMax
66
+
67
+ // return d3.scaleLinear()
68
+ // .domain([domainMinValue, domainMaxValue])
69
+ // .range([rangeMinValue, rangeMaxValue])
70
+ if (reverse) {
71
+ return d3.scaleLinear()
72
+ .domain([axisDomainMinValue, axisDomainMaxValue])
73
+ .range([axisWidth, 0])
74
+ } else {
75
+ return d3.scaleLinear()
76
+ .domain([axisDomainMinValue, axisDomainMaxValue])
77
+ .range([0, axisWidth])
78
+ }
79
+ }
80
+
81
+ // scaleLinear - 座標 -> 連續資料
82
+ export const createAxisToValueScale = ({
83
+ maxValue = 1,
84
+ minValue = 0,
85
+ axisWidth,
86
+ scaleDomain = DEFAULT_DATA_FORMATTER_VALUE_AXIS.scaleDomain,
87
+ scaleRange = DEFAULT_DATA_FORMATTER_VALUE_AXIS.scaleRange,
88
+ reverse = false
89
+ }: {
90
+ maxValue: number
91
+ minValue: number
92
+ axisWidth: number
93
+ scaleDomain: [number | 'min' | 'auto', number | 'max' | 'auto']
94
+ scaleRange: [number, number] // 0-1
95
+ reverse?: boolean
96
+ }) => {
97
+ if (minValue === maxValue) {
98
+ maxValue += 1 // 避免最大及最小值相同造成無法計算scale
99
+ minValue -= 1
100
+ }
101
+
102
+ // -- 無值補上預設值 --
103
+ const domainMin: number | 'min' | 'auto' = scaleDomain[0] ?? DEFAULT_DATA_FORMATTER_VALUE_AXIS.scaleDomain[0]
104
+ const domainMax: number | 'max' | 'auto' = scaleDomain[1] ?? DEFAULT_DATA_FORMATTER_VALUE_AXIS.scaleDomain[1]
105
+ const rangeMin: number = scaleRange[0] ?? DEFAULT_DATA_FORMATTER_VALUE_AXIS.scaleRange[0]
106
+ const rangeMax: number = scaleRange[1] ?? DEFAULT_DATA_FORMATTER_VALUE_AXIS.scaleRange[1]
107
+
108
+ // -- 'auto' | 'max' | 'min' 替換成實際值 --
109
+ let domainMinValue: number = (() => {
110
+ if (domainMin === 'auto') {
111
+ return minValue < 0 ? minValue : 0
112
+ } else if (domainMin === 'min') {
113
+ return minValue
114
+ } else {
115
+ return domainMin
116
+ }
117
+ })()
118
+
119
+ let domainMaxValue: number = (() => {
120
+ if (domainMax === 'auto') {
121
+ return maxValue >= 0 ? maxValue : 0
122
+ } else if (domainMax === 'max') {
123
+ return maxValue
124
+ } else {
125
+ return domainMax
126
+ }
127
+ })()
128
+ // let rangeMinValue = axisWidth * rangeMin
129
+ // let rangeMaxValue = axisWidth * rangeMax
130
+
131
+ // -- 計算padding --
132
+ // if (padding > 0) {
133
+ // const stepAmount = maxValue - minValue + (padding * 2)
134
+ // const eachStepWidth = axisWidth / stepAmount
135
+ // const paddingWidth = eachStepWidth * padding
136
+ // rangeMinValue += paddingWidth
137
+ // rangeMaxValue -= paddingWidth
138
+ // }
139
+
140
+ // -- 依場景大小換算 --
141
+ const axisDomainMinValue = maxValue - (maxValue - domainMinValue) / (1 - rangeMin)
142
+ const axisDomainMaxValue = domainMaxValue / rangeMax
143
+
144
+ // return d3.scaleLinear()
145
+ // .domain([domainMinValue, domainMaxValue])
146
+ // .range([rangeMinValue, rangeMaxValue])
147
+ if (reverse) {
148
+ return d3.scaleLinear()
149
+ .domain([axisWidth, 0])
150
+ .range([axisDomainMinValue, axisDomainMaxValue])
151
+ } else {
152
+ return d3.scaleLinear()
153
+ .domain([0, axisWidth])
154
+ .range([axisDomainMinValue, axisDomainMaxValue])
155
+ }
156
+ }
157
+
158
+ // scalePoint - 非連續資料 -> 座標
159
+ export const createLabelToAxisScale = ({ axisLabels, axisWidth, padding = 0.5 }: {
160
+ axisLabels: string[]
161
+ axisWidth: number
162
+ padding?: number
163
+ // reverse?: boolean
164
+ }) => {
165
+ let range: [d3.NumberValue, d3.NumberValue] = [0, axisWidth]
166
+
167
+ return d3.scalePoint()
168
+ .domain(axisLabels)
169
+ .range(range)
170
+ .padding(padding)
171
+ }
172
+
173
+ // scaleQuantize - 座標 -> 非連續資料索引
174
+ export const createAxisToLabelIndexScale = ({ axisLabels, axisWidth, padding = 0, reverse = false }:{
175
+ axisLabels: string[] | Date[],
176
+ axisWidth: number
177
+ padding?: number
178
+ reverse?: boolean
179
+ }) => {
180
+
181
+ let range: number[] = axisLabels.map((d: string | Date, i: number) => i)
182
+ if (reverse) {
183
+ range.reverse()
184
+ }
185
+ // if (reverse) {
186
+ // range = axisLabels.map((d: string | Date, i: number) => axisLabels.length - 1 - i)
187
+ // } else {
188
+ // range = axisLabels.map((d: string | Date, i: number) => i)
189
+ // }
190
+ const step = range.length - 1 + (padding * 2) // 圖軸刻度分段數量
191
+ const stepWidth = axisWidth / step
192
+ const rangePadding = stepWidth * padding - (stepWidth * 0.5) // 實際要計算的範圍是圖軸左右那邊增加0.5
193
+
194
+ // console.log('rangePadding', rangePadding)
195
+ return d3.scaleQuantize<number>()
196
+ .domain([rangePadding, axisWidth - rangePadding])
197
+ .range(range)
198
+ }
@@ -1,43 +1,43 @@
1
-
2
- // export function createMessagePrefix (status: 'warning' | 'error'): string {
3
- // return `[OrbCharts ${status}]:`
4
- // }
5
-
6
- export function createOrbChartsErrorMessage (e: {
7
- message: string // e.message
8
- stack: string // e.stack
9
- }): string {
10
- return `[OrbCharts warn]: ${e.message}`
11
- }
12
-
13
-
14
- // // 未預期的錯誤
15
- // export function createUnexpectedErrorMessage ({ from, systemMessage }: {
16
- // from: string //
17
- // systemMessage: string // catch 給的的原生錯誤訊息
18
- // }): string {
19
- // return `${createMessagePrefix('error')} unexpected error from '${from}':
20
- // ${systemMessage}`
21
- // }
22
-
23
- // validator 的 error 訊息
24
- export function createValidatorErrorMessage ({ columnName, expectToBe, from }: {
25
- columnName: string // e.g. 'seriesLabels'
26
- expectToBe: string // e.g. 'string[]'
27
- from: string // e.g. Chart.chartParams$, Pie.params$
28
- }): string {
29
- return `Invalid value: '${columnName}' must be '${expectToBe}'
30
-
31
- ----> find in '${from}'`
32
- }
33
-
34
- // validator 的 warning 訊息
35
- export function createValidatorWarningMessage ({ columnName, expectToBe, from }: {
36
- columnName: string // e.g. 'seriesLabels'
37
- expectToBe: string // e.g. 'string[]'
38
- from: string // e.g. Chart.chartParams$, Pie.params$
39
- }): string {
40
- return `Value is not correct: '${columnName}' suppose to be '${expectToBe}', it may cause unexpected errors.'
41
-
42
- ----> find in '${from}'`
1
+
2
+ // export function createMessagePrefix (status: 'warning' | 'error'): string {
3
+ // return `[OrbCharts ${status}]:`
4
+ // }
5
+
6
+ export function createOrbChartsErrorMessage (e: {
7
+ message: string // e.message
8
+ stack: string // e.stack
9
+ }): string {
10
+ return `[OrbCharts warn]: ${e.message}`
11
+ }
12
+
13
+
14
+ // // 未預期的錯誤
15
+ // export function createUnexpectedErrorMessage ({ from, systemMessage }: {
16
+ // from: string //
17
+ // systemMessage: string // catch 給的的原生錯誤訊息
18
+ // }): string {
19
+ // return `${createMessagePrefix('error')} unexpected error from '${from}':
20
+ // ${systemMessage}`
21
+ // }
22
+
23
+ // validator 的 error 訊息
24
+ export function createValidatorErrorMessage ({ columnName, expectToBe, from }: {
25
+ columnName: string // e.g. 'seriesLabels'
26
+ expectToBe: string // e.g. 'string[]'
27
+ from: string // e.g. Chart.chartParams$, Pie.params$
28
+ }): string {
29
+ return `Invalid value: '${columnName}' must be '${expectToBe}'
30
+
31
+ ----> find in '${from}'`
32
+ }
33
+
34
+ // validator 的 warning 訊息
35
+ export function createValidatorWarningMessage ({ columnName, expectToBe, from }: {
36
+ columnName: string // e.g. 'seriesLabels'
37
+ expectToBe: string // e.g. 'string[]'
38
+ from: string // e.g. Chart.chartParams$, Pie.params$
39
+ }): string {
40
+ return `Value is not correct: '${columnName}' suppose to be '${expectToBe}', it may cause unexpected errors.'
41
+
42
+ ----> find in '${from}'`
43
43
  }