@orbcharts/plugins-basic 3.0.3 → 3.0.5
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.
- package/LICENSE +200 -200
- package/dist/orbcharts-plugins-basic.es.js +2486 -2453
- package/dist/orbcharts-plugins-basic.umd.js +44 -44
- package/dist/src/series/seriesObservables.d.ts +5 -7
- package/lib/core-types.ts +7 -7
- package/lib/core.ts +6 -6
- package/lib/gridObservables.ts +6 -6
- package/lib/plugins-basic-types.ts +6 -6
- package/package.json +48 -48
- package/src/base/BaseBars.ts +765 -765
- package/src/base/BaseBarsTriangle.ts +676 -676
- package/src/base/BaseDots.ts +464 -464
- package/src/base/BaseGroupAxis.ts +691 -691
- package/src/base/BaseLegend.ts +684 -684
- package/src/base/BaseLineAreas.ts +629 -629
- package/src/base/BaseLines.ts +706 -706
- package/src/base/BaseOrdinalBubbles.ts +729 -727
- package/src/base/BaseRacingBars.ts +582 -582
- package/src/base/BaseRacingLabels.ts +404 -404
- package/src/base/BaseRacingValueLabels.ts +403 -403
- package/src/base/BaseStackedBars.ts +782 -782
- package/src/base/BaseTooltip.ts +386 -386
- package/src/base/BaseValueAxis.ts +600 -600
- package/src/base/BaseXAxis.ts +427 -427
- package/src/base/BaseXZoom.ts +241 -241
- package/src/base/BaseYAxis.ts +389 -389
- package/src/base/types.ts +2 -2
- package/src/const.ts +30 -30
- package/src/grid/defaults.ts +213 -213
- package/src/grid/gridObservables.ts +635 -635
- package/src/grid/index.ts +16 -16
- package/src/grid/plugins/Bars.ts +69 -69
- package/src/grid/plugins/BarsPN.ts +66 -66
- package/src/grid/plugins/BarsTriangle.ts +73 -73
- package/src/grid/plugins/Dots.ts +68 -68
- package/src/grid/plugins/GridLegend.ts +107 -107
- package/src/grid/plugins/GridTooltip.ts +66 -66
- package/src/grid/plugins/GroupAux.ts +1095 -1095
- package/src/grid/plugins/GroupAxis.ts +73 -73
- package/src/grid/plugins/GroupZoom.ts +218 -218
- package/src/grid/plugins/LineAreas.ts +65 -65
- package/src/grid/plugins/Lines.ts +59 -59
- package/src/grid/plugins/StackedBars.ts +64 -64
- package/src/grid/plugins/StackedValueAxis.ts +96 -96
- package/src/grid/plugins/ValueAxis.ts +94 -94
- package/src/index.ts +6 -6
- package/src/multiGrid/defaults.ts +244 -244
- package/src/multiGrid/index.ts +14 -14
- package/src/multiGrid/multiGridObservables.ts +50 -50
- package/src/multiGrid/plugins/MultiBars.ts +108 -108
- package/src/multiGrid/plugins/MultiBarsTriangle.ts +114 -114
- package/src/multiGrid/plugins/MultiDots.ts +102 -102
- package/src/multiGrid/plugins/MultiGridLegend.ts +169 -169
- package/src/multiGrid/plugins/MultiGridTooltip.ts +66 -66
- package/src/multiGrid/plugins/MultiGroupAxis.ts +137 -137
- package/src/multiGrid/plugins/MultiLineAreas.ts +107 -107
- package/src/multiGrid/plugins/MultiLines.ts +101 -101
- package/src/multiGrid/plugins/MultiStackedBars.ts +106 -106
- package/src/multiGrid/plugins/MultiStackedValueAxis.ts +134 -134
- package/src/multiGrid/plugins/MultiValueAxis.ts +134 -134
- package/src/multiGrid/plugins/OverlappingStackedValueAxes.ts +300 -300
- package/src/multiGrid/plugins/OverlappingValueAxes.ts +300 -300
- package/src/multiValue/defaults.ts +523 -523
- package/src/multiValue/index.ts +16 -16
- package/src/multiValue/multiValueObservables.ts +781 -781
- package/src/multiValue/plugins/MultiValueLegend.ts +107 -107
- package/src/multiValue/plugins/MultiValueTooltip.ts +66 -66
- package/src/multiValue/plugins/OrdinalAux.ts +660 -660
- package/src/multiValue/plugins/OrdinalAxis.ts +524 -524
- package/src/multiValue/plugins/OrdinalBubbles.ts +226 -226
- package/src/multiValue/plugins/OrdinalZoom.ts +57 -57
- package/src/multiValue/plugins/RacingBars.ts +375 -375
- package/src/multiValue/plugins/RacingCounterTexts.ts +300 -300
- package/src/multiValue/plugins/RacingValueAxis.ts +114 -114
- package/src/multiValue/plugins/Scatter.ts +486 -486
- package/src/multiValue/plugins/ScatterBubbles.ts +635 -635
- package/src/multiValue/plugins/XAxis.ts +107 -107
- package/src/multiValue/plugins/XYAux.ts +683 -683
- package/src/multiValue/plugins/XYAxes.ts +194 -194
- package/src/multiValue/plugins/XYAxes_legacy.ts +683 -683
- package/src/multiValue/plugins/XZoom.ts +40 -40
- package/src/noneData/defaults.ts +102 -102
- package/src/noneData/index.ts +3 -3
- package/src/noneData/plugins/Container.ts +27 -27
- package/src/noneData/plugins/Tooltip.ts +373 -373
- package/src/relationship/defaults.ts +221 -221
- package/src/relationship/index.ts +5 -5
- package/src/relationship/plugins/ForceDirected.ts +1056 -1173
- package/src/relationship/plugins/ForceDirectedBubbles.ts +1294 -1411
- package/src/relationship/plugins/RelationshipLegend.ts +100 -100
- package/src/relationship/plugins/RelationshipTooltip.ts +66 -66
- package/src/relationship/relationshipObservables.ts +49 -49
- package/src/series/defaults.ts +222 -221
- package/src/series/index.ts +9 -9
- package/src/series/plugins/Bubbles.ts +766 -636
- package/src/series/plugins/Pie.ts +622 -623
- package/src/series/plugins/PieEventTexts.ts +283 -284
- package/src/series/plugins/PieLabels.ts +639 -640
- package/src/series/plugins/Rose.ts +515 -516
- package/src/series/plugins/RoseLabels.ts +599 -600
- package/src/series/plugins/SeriesLegend.ts +107 -107
- package/src/series/plugins/SeriesTooltip.ts +66 -66
- package/src/series/seriesObservables.ts +168 -145
- package/src/series/seriesUtils.ts +51 -51
- package/src/tree/defaults.ts +102 -102
- package/src/tree/index.ts +4 -4
- package/src/tree/plugins/TreeLegend.ts +100 -100
- package/src/tree/plugins/TreeMap.ts +341 -341
- package/src/tree/plugins/TreeTooltip.ts +66 -66
- package/src/utils/commonUtils.ts +31 -31
- package/src/utils/d3Graphics.ts +176 -176
- package/src/utils/d3Utils.ts +92 -92
- package/src/utils/observables.ts +14 -14
- package/src/utils/orbchartsUtils.ts +129 -129
- package/tsconfig.base.json +13 -13
- package/tsconfig.json +2 -2
- package/vite.config.js +22 -22
package/src/base/types.ts
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
export interface BasePluginFn<Context> {
|
2
|
-
(pluginName: string, context: Context): () => void // return unsubscribe function
|
1
|
+
export interface BasePluginFn<Context> {
|
2
|
+
(pluginName: string, context: Context): () => void // return unsubscribe function
|
3
3
|
}
|
package/src/const.ts
CHANGED
@@ -1,30 +1,30 @@
|
|
1
|
-
|
2
|
-
// 圖層索引 - 底層(無圖型)
|
3
|
-
export const LAYER_INDEX_OF_ROOT = 0
|
4
|
-
|
5
|
-
// 圖層索引 - 背景 *預留
|
6
|
-
export const LAYER_INDEX_OF_BG = 1
|
7
|
-
|
8
|
-
// 圖層索引 - 圖軸
|
9
|
-
export const LAYER_INDEX_OF_AXIS = 2
|
10
|
-
|
11
|
-
// 圖層索引 - 輔助線、圖軸的輔助資訊
|
12
|
-
export const LAYER_INDEX_OF_AUX = 3
|
13
|
-
|
14
|
-
// 圖層索引 - 底層圖型
|
15
|
-
export const LAYER_INDEX_OF_GRAPHIC_GROUND = 4
|
16
|
-
|
17
|
-
// 圖層索引 - 一般圖型
|
18
|
-
export const LAYER_INDEX_OF_GRAPHIC = 5
|
19
|
-
|
20
|
-
// 圖層索引 - 覆蓋圖型
|
21
|
-
export const LAYER_INDEX_OF_GRAPHIC_COVER = 6
|
22
|
-
|
23
|
-
// 圖層索引 - 圖型上的標籤文字
|
24
|
-
export const LAYER_INDEX_OF_LABEL = 7
|
25
|
-
|
26
|
-
// 圖層索引 - 圖例、圖表上的文字
|
27
|
-
export const LAYER_INDEX_OF_INFO = 8
|
28
|
-
|
29
|
-
// 圖層索引 - Tooltip、事件觸發的覆蓋圖型
|
30
|
-
export const LAYER_INDEX_OF_TOOLTIP = 9
|
1
|
+
|
2
|
+
// 圖層索引 - 底層(無圖型)
|
3
|
+
export const LAYER_INDEX_OF_ROOT = 0
|
4
|
+
|
5
|
+
// 圖層索引 - 背景 *預留
|
6
|
+
export const LAYER_INDEX_OF_BG = 1
|
7
|
+
|
8
|
+
// 圖層索引 - 圖軸
|
9
|
+
export const LAYER_INDEX_OF_AXIS = 2
|
10
|
+
|
11
|
+
// 圖層索引 - 輔助線、圖軸的輔助資訊
|
12
|
+
export const LAYER_INDEX_OF_AUX = 3
|
13
|
+
|
14
|
+
// 圖層索引 - 底層圖型
|
15
|
+
export const LAYER_INDEX_OF_GRAPHIC_GROUND = 4
|
16
|
+
|
17
|
+
// 圖層索引 - 一般圖型
|
18
|
+
export const LAYER_INDEX_OF_GRAPHIC = 5
|
19
|
+
|
20
|
+
// 圖層索引 - 覆蓋圖型
|
21
|
+
export const LAYER_INDEX_OF_GRAPHIC_COVER = 6
|
22
|
+
|
23
|
+
// 圖層索引 - 圖型上的標籤文字
|
24
|
+
export const LAYER_INDEX_OF_LABEL = 7
|
25
|
+
|
26
|
+
// 圖層索引 - 圖例、圖表上的文字
|
27
|
+
export const LAYER_INDEX_OF_INFO = 8
|
28
|
+
|
29
|
+
// 圖層索引 - Tooltip、事件觸發的覆蓋圖型
|
30
|
+
export const LAYER_INDEX_OF_TOOLTIP = 9
|
package/src/grid/defaults.ts
CHANGED
@@ -1,214 +1,214 @@
|
|
1
|
-
import type {
|
2
|
-
LinesParams,
|
3
|
-
LineAreasParams,
|
4
|
-
GroupAuxParams,
|
5
|
-
DotsParams,
|
6
|
-
BarsParams,
|
7
|
-
StackedBarsParams,
|
8
|
-
BarsTriangleParams,
|
9
|
-
GroupAxisParams,
|
10
|
-
ValueAxisParams,
|
11
|
-
StackedValueAxisParams,
|
12
|
-
GridTooltipParams,
|
13
|
-
GroupZoomParams,
|
14
|
-
GridLegendParams
|
15
|
-
} from '../../lib/plugins-basic-types'
|
16
|
-
// import { measureTextWidth } from '../utils/commonUtils'
|
17
|
-
|
18
|
-
export const DEFAULT_LINES_PARAMS: LinesParams = {
|
19
|
-
lineCurve: 'curveLinear',
|
20
|
-
lineWidth: 2
|
21
|
-
}
|
22
|
-
|
23
|
-
export const DEFAULT_LINE_AREAS_PARAMS: LineAreasParams = {
|
24
|
-
lineCurve: 'curveLinear',
|
25
|
-
linearGradientOpacity: [1, 0]
|
26
|
-
}
|
27
|
-
|
28
|
-
export const DEFAULT_DOTS_PARAMS: DotsParams = {
|
29
|
-
radius: 4,
|
30
|
-
fillColorType: 'background',
|
31
|
-
strokeColorType: 'label',
|
32
|
-
strokeWidth: 2,
|
33
|
-
// strokeWidthWhileHighlight: 3,
|
34
|
-
onlyShowHighlighted: false
|
35
|
-
}
|
36
|
-
|
37
|
-
export const DEFAULT_GROUP_AUX_PARAMS: GroupAuxParams = {
|
38
|
-
showLine: true,
|
39
|
-
showLabel: true,
|
40
|
-
lineDashArray: '3, 3',
|
41
|
-
lineColorType: 'primary',
|
42
|
-
labelColorType: 'primary',
|
43
|
-
labelTextColorType: 'background',
|
44
|
-
labelTextFormat: text => text,
|
45
|
-
labelPadding: 20,
|
46
|
-
labelRotate: 0
|
47
|
-
}
|
48
|
-
DEFAULT_GROUP_AUX_PARAMS.labelTextFormat.toString = () => `text => text`
|
49
|
-
|
50
|
-
export const DEFAULT_BARS_PARAMS: BarsParams = {
|
51
|
-
// barType: 'rect',
|
52
|
-
barWidth: 0,
|
53
|
-
barPadding: 1,
|
54
|
-
barGroupPadding: 40,
|
55
|
-
barRadius: false,
|
56
|
-
}
|
57
|
-
|
58
|
-
export const DEFAULT_BARS_DIVERGING_PARAMS: BarsParams = {
|
59
|
-
...DEFAULT_BARS_PARAMS
|
60
|
-
}
|
61
|
-
|
62
|
-
export const DEFAULT_STACKED_BARS_PARAMS: StackedBarsParams = {
|
63
|
-
barWidth: 0,
|
64
|
-
barGroupPadding: 10,
|
65
|
-
barRadius: false,
|
66
|
-
}
|
67
|
-
|
68
|
-
export const DEFAULT_BARS_TRIANGLE_PARAMS: BarsTriangleParams = {
|
69
|
-
barWidth: 0,
|
70
|
-
barPadding: 1,
|
71
|
-
barGroupPadding: 20,
|
72
|
-
linearGradientOpacity: [1, 0]
|
73
|
-
}
|
74
|
-
|
75
|
-
export const DEFAULT_GROUP_AXIS_PARAMS: GroupAxisParams = {
|
76
|
-
// labelAnchor: 'start',
|
77
|
-
labelOffset: [0, 0],
|
78
|
-
labelColorType: 'primary',
|
79
|
-
axisLineVisible: true,
|
80
|
-
axisLineColorType: 'primary',
|
81
|
-
ticks: 'all',
|
82
|
-
tickFormat: text => text,
|
83
|
-
tickLineVisible: true,
|
84
|
-
tickPadding: 20,
|
85
|
-
tickFullLine: false,
|
86
|
-
tickFullLineDasharray: 'none',
|
87
|
-
tickColorType: 'secondary',
|
88
|
-
tickTextRotate: 0,
|
89
|
-
tickTextColorType: 'primary',
|
90
|
-
}
|
91
|
-
DEFAULT_GROUP_AXIS_PARAMS.tickFormat.toString = () => `text => text`
|
92
|
-
|
93
|
-
export const DEFAULT_VALUE_AXIS_PARAMS: ValueAxisParams = {
|
94
|
-
// labelAnchor: 'end',
|
95
|
-
labelOffset: [0, 0],
|
96
|
-
labelColorType: 'primary',
|
97
|
-
axisLineVisible: false,
|
98
|
-
axisLineColorType: 'primary',
|
99
|
-
ticks: null,
|
100
|
-
// tickFormat: ',.0f',
|
101
|
-
// tickFormat: v => v,
|
102
|
-
tickFormat: num => {
|
103
|
-
if (num === null || Number.isNaN(num) == true) {
|
104
|
-
return num || 0
|
105
|
-
}
|
106
|
-
const parts = num.toString().split('.')
|
107
|
-
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',')
|
108
|
-
return parts.join('.')
|
109
|
-
},
|
110
|
-
tickLineVisible: true,
|
111
|
-
tickPadding: 20,
|
112
|
-
tickFullLine: true,
|
113
|
-
tickFullLineDasharray: 'none',
|
114
|
-
tickColorType: 'secondary',
|
115
|
-
tickTextRotate: 0,
|
116
|
-
tickTextColorType: 'primary'
|
117
|
-
}
|
118
|
-
DEFAULT_VALUE_AXIS_PARAMS.tickFormat.toString = () => `num => {
|
119
|
-
if (num === null || Number.isNaN(num) == true) {
|
120
|
-
return num || 0
|
121
|
-
}
|
122
|
-
const parts = num.toString().split('.')
|
123
|
-
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',')
|
124
|
-
return parts.join('.')
|
125
|
-
}`
|
126
|
-
|
127
|
-
export const DEFAULT_STACKED_VALUE_AXIS_PARAMS: StackedValueAxisParams = {
|
128
|
-
...DEFAULT_VALUE_AXIS_PARAMS
|
129
|
-
}
|
130
|
-
|
131
|
-
export const DEFAULT_GROUP_ZOOM_PARAMS: GroupZoomParams = {
|
132
|
-
|
133
|
-
}
|
134
|
-
|
135
|
-
export const DEFAULT_GRID_LEGEND_PARAMS: GridLegendParams = {
|
136
|
-
placement: 'bottom',
|
137
|
-
padding: 28,
|
138
|
-
// offset: [0, 0],
|
139
|
-
backgroundFill: 'none',
|
140
|
-
backgroundStroke: 'none',
|
141
|
-
gap: 10,
|
142
|
-
listRectWidth: 14,
|
143
|
-
listRectHeight: 14,
|
144
|
-
listRectRadius: 0,
|
145
|
-
// highlightEvent: false
|
146
|
-
textColorType: 'primary'
|
147
|
-
}
|
148
|
-
|
149
|
-
export const DEFAULT_GRID_TOOLTIP_PARAMS: GridTooltipParams = {
|
150
|
-
backgroundColorType: 'background',
|
151
|
-
strokeColorType: 'primary',
|
152
|
-
backgroundOpacity: 0.8,
|
153
|
-
textColorType: 'primary',
|
154
|
-
offset: [20, 5],
|
155
|
-
padding: 10,
|
156
|
-
renderFn: (eventData, { styles, utils }) => {
|
157
|
-
const bulletWidth = styles.textSizePx * 0.7
|
158
|
-
const offset = (styles.textSizePx / 2) - (bulletWidth / 2)
|
159
|
-
|
160
|
-
const titleSvg = `<g><text dominant-baseline="hanging" font-size="${styles.textSizePx}" fill="${styles.textColor}">${eventData.groupLabel}</text></g>`
|
161
|
-
const groupLabelTextWidth = utils.measureTextWidth(eventData.groupLabel, styles.textSizePx)
|
162
|
-
const listTextWidth = eventData.group.reduce((acc, group) => {
|
163
|
-
const text = `${group.seriesLabel}${utils.toCurrency(group.value)}`
|
164
|
-
const _maxTextWidth = utils.measureTextWidth(text, styles.textSizePx)
|
165
|
-
return _maxTextWidth > acc ? _maxTextWidth : acc
|
166
|
-
}, 0)
|
167
|
-
const maxTextWidth = Math.max(groupLabelTextWidth, listTextWidth)
|
168
|
-
const lineEndX = maxTextWidth + styles.textSizePx * 3
|
169
|
-
const contentSvg = eventData.group
|
170
|
-
.map((group, i) => {
|
171
|
-
const y = i * styles.textSizePx * 1.5
|
172
|
-
const isHighlight = group.id === (eventData.datum && eventData.datum.id)
|
173
|
-
return `<g transform="translate(0, ${styles.textSizePx * 2})">
|
174
|
-
<rect width="${bulletWidth}" height="${bulletWidth}" x="${offset}" y="${y + offset}" rx="${bulletWidth / 2}" fill="${group.color}"></rect>
|
175
|
-
<text x="${styles.textSizePx * 1.5}" y="${y}" font-size="${styles.textSizePx}" dominant-baseline="hanging" fill="${styles.textColor}">
|
176
|
-
<tspan font-weight="${isHighlight ? 'bold' : ''}">${group.seriesLabel}</tspan>
|
177
|
-
<tspan font-weight="bold" text-anchor="end" x="${lineEndX}">${utils.toCurrency(group.value)}</tspan>
|
178
|
-
</text>
|
179
|
-
</g>`
|
180
|
-
})
|
181
|
-
.join('')
|
182
|
-
return `${titleSvg}
|
183
|
-
${contentSvg}`
|
184
|
-
}
|
185
|
-
}
|
186
|
-
DEFAULT_GRID_TOOLTIP_PARAMS.renderFn.toString = () => `(eventData, { styles, utils }) => {
|
187
|
-
const bulletWidth = styles.textSizePx * 0.7
|
188
|
-
const offset = (styles.textSizePx / 2) - (bulletWidth / 2)
|
189
|
-
|
190
|
-
const titleSvg = \`<g><text dominant-baseline="hanging" font-size="\${styles.textSizePx}" fill="\${styles.textColor}">\${eventData.groupLabel}</text></g>\`
|
191
|
-
const groupLabelTextWidth = utils.measureTextWidth(eventData.groupLabel, styles.textSizePx)
|
192
|
-
const listTextWidth = eventData.group.reduce((acc, group) => {
|
193
|
-
const text = \`\${group.seriesLabel}\${utils.toCurrency(group.value)}\`
|
194
|
-
const _maxTextWidth = utils.measureTextWidth(text, styles.textSizePx)
|
195
|
-
return _maxTextWidth > acc ? _maxTextWidth : acc
|
196
|
-
}, 0)
|
197
|
-
const maxTextWidth = Math.max(groupLabelTextWidth, listTextWidth)
|
198
|
-
const lineEndX = maxTextWidth + styles.textSizePx * 3
|
199
|
-
const contentSvg = eventData.group
|
200
|
-
.map((group, i) => {
|
201
|
-
const y = i * styles.textSizePx * 1.5
|
202
|
-
const isHighlight = group.id === (eventData.datum && eventData.datum.id)
|
203
|
-
return \`<g transform="translate(0, \${styles.textSizePx * 2})">
|
204
|
-
<rect width="\${bulletWidth}" height="\${bulletWidth}" x="\${offset}" y="\${y + offset}" rx="\${bulletWidth / 2}" fill="\${group.color}"></rect>
|
205
|
-
<text x="\${styles.textSizePx * 1.5}" y="\${y}" font-size="\${styles.textSizePx}" dominant-baseline="hanging" fill="\${styles.textColor}">
|
206
|
-
<tspan font-weight="\${isHighlight ? 'bold' : ''}">\${group.seriesLabel}</tspan>
|
207
|
-
<tspan font-weight="bold" text-anchor="end" x="\${lineEndX}">\${utils.toCurrency(group.value)}</tspan>
|
208
|
-
</text>
|
209
|
-
</g>\`
|
210
|
-
})
|
211
|
-
.join('')
|
212
|
-
return \`\${titleSvg}
|
213
|
-
\${contentSvg}\`
|
1
|
+
import type {
|
2
|
+
LinesParams,
|
3
|
+
LineAreasParams,
|
4
|
+
GroupAuxParams,
|
5
|
+
DotsParams,
|
6
|
+
BarsParams,
|
7
|
+
StackedBarsParams,
|
8
|
+
BarsTriangleParams,
|
9
|
+
GroupAxisParams,
|
10
|
+
ValueAxisParams,
|
11
|
+
StackedValueAxisParams,
|
12
|
+
GridTooltipParams,
|
13
|
+
GroupZoomParams,
|
14
|
+
GridLegendParams
|
15
|
+
} from '../../lib/plugins-basic-types'
|
16
|
+
// import { measureTextWidth } from '../utils/commonUtils'
|
17
|
+
|
18
|
+
export const DEFAULT_LINES_PARAMS: LinesParams = {
|
19
|
+
lineCurve: 'curveLinear',
|
20
|
+
lineWidth: 2
|
21
|
+
}
|
22
|
+
|
23
|
+
export const DEFAULT_LINE_AREAS_PARAMS: LineAreasParams = {
|
24
|
+
lineCurve: 'curveLinear',
|
25
|
+
linearGradientOpacity: [1, 0]
|
26
|
+
}
|
27
|
+
|
28
|
+
export const DEFAULT_DOTS_PARAMS: DotsParams = {
|
29
|
+
radius: 4,
|
30
|
+
fillColorType: 'background',
|
31
|
+
strokeColorType: 'label',
|
32
|
+
strokeWidth: 2,
|
33
|
+
// strokeWidthWhileHighlight: 3,
|
34
|
+
onlyShowHighlighted: false
|
35
|
+
}
|
36
|
+
|
37
|
+
export const DEFAULT_GROUP_AUX_PARAMS: GroupAuxParams = {
|
38
|
+
showLine: true,
|
39
|
+
showLabel: true,
|
40
|
+
lineDashArray: '3, 3',
|
41
|
+
lineColorType: 'primary',
|
42
|
+
labelColorType: 'primary',
|
43
|
+
labelTextColorType: 'background',
|
44
|
+
labelTextFormat: text => text,
|
45
|
+
labelPadding: 20,
|
46
|
+
labelRotate: 0
|
47
|
+
}
|
48
|
+
DEFAULT_GROUP_AUX_PARAMS.labelTextFormat.toString = () => `text => text`
|
49
|
+
|
50
|
+
export const DEFAULT_BARS_PARAMS: BarsParams = {
|
51
|
+
// barType: 'rect',
|
52
|
+
barWidth: 0,
|
53
|
+
barPadding: 1,
|
54
|
+
barGroupPadding: 40,
|
55
|
+
barRadius: false,
|
56
|
+
}
|
57
|
+
|
58
|
+
export const DEFAULT_BARS_DIVERGING_PARAMS: BarsParams = {
|
59
|
+
...DEFAULT_BARS_PARAMS
|
60
|
+
}
|
61
|
+
|
62
|
+
export const DEFAULT_STACKED_BARS_PARAMS: StackedBarsParams = {
|
63
|
+
barWidth: 0,
|
64
|
+
barGroupPadding: 10,
|
65
|
+
barRadius: false,
|
66
|
+
}
|
67
|
+
|
68
|
+
export const DEFAULT_BARS_TRIANGLE_PARAMS: BarsTriangleParams = {
|
69
|
+
barWidth: 0,
|
70
|
+
barPadding: 1,
|
71
|
+
barGroupPadding: 20,
|
72
|
+
linearGradientOpacity: [1, 0]
|
73
|
+
}
|
74
|
+
|
75
|
+
export const DEFAULT_GROUP_AXIS_PARAMS: GroupAxisParams = {
|
76
|
+
// labelAnchor: 'start',
|
77
|
+
labelOffset: [0, 0],
|
78
|
+
labelColorType: 'primary',
|
79
|
+
axisLineVisible: true,
|
80
|
+
axisLineColorType: 'primary',
|
81
|
+
ticks: 'all',
|
82
|
+
tickFormat: text => text,
|
83
|
+
tickLineVisible: true,
|
84
|
+
tickPadding: 20,
|
85
|
+
tickFullLine: false,
|
86
|
+
tickFullLineDasharray: 'none',
|
87
|
+
tickColorType: 'secondary',
|
88
|
+
tickTextRotate: 0,
|
89
|
+
tickTextColorType: 'primary',
|
90
|
+
}
|
91
|
+
DEFAULT_GROUP_AXIS_PARAMS.tickFormat.toString = () => `text => text`
|
92
|
+
|
93
|
+
export const DEFAULT_VALUE_AXIS_PARAMS: ValueAxisParams = {
|
94
|
+
// labelAnchor: 'end',
|
95
|
+
labelOffset: [0, 0],
|
96
|
+
labelColorType: 'primary',
|
97
|
+
axisLineVisible: false,
|
98
|
+
axisLineColorType: 'primary',
|
99
|
+
ticks: null,
|
100
|
+
// tickFormat: ',.0f',
|
101
|
+
// tickFormat: v => v,
|
102
|
+
tickFormat: num => {
|
103
|
+
if (num === null || Number.isNaN(num) == true) {
|
104
|
+
return num || 0
|
105
|
+
}
|
106
|
+
const parts = num.toString().split('.')
|
107
|
+
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',')
|
108
|
+
return parts.join('.')
|
109
|
+
},
|
110
|
+
tickLineVisible: true,
|
111
|
+
tickPadding: 20,
|
112
|
+
tickFullLine: true,
|
113
|
+
tickFullLineDasharray: 'none',
|
114
|
+
tickColorType: 'secondary',
|
115
|
+
tickTextRotate: 0,
|
116
|
+
tickTextColorType: 'primary'
|
117
|
+
}
|
118
|
+
DEFAULT_VALUE_AXIS_PARAMS.tickFormat.toString = () => `num => {
|
119
|
+
if (num === null || Number.isNaN(num) == true) {
|
120
|
+
return num || 0
|
121
|
+
}
|
122
|
+
const parts = num.toString().split('.')
|
123
|
+
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',')
|
124
|
+
return parts.join('.')
|
125
|
+
}`
|
126
|
+
|
127
|
+
export const DEFAULT_STACKED_VALUE_AXIS_PARAMS: StackedValueAxisParams = {
|
128
|
+
...DEFAULT_VALUE_AXIS_PARAMS
|
129
|
+
}
|
130
|
+
|
131
|
+
export const DEFAULT_GROUP_ZOOM_PARAMS: GroupZoomParams = {
|
132
|
+
|
133
|
+
}
|
134
|
+
|
135
|
+
export const DEFAULT_GRID_LEGEND_PARAMS: GridLegendParams = {
|
136
|
+
placement: 'bottom',
|
137
|
+
padding: 28,
|
138
|
+
// offset: [0, 0],
|
139
|
+
backgroundFill: 'none',
|
140
|
+
backgroundStroke: 'none',
|
141
|
+
gap: 10,
|
142
|
+
listRectWidth: 14,
|
143
|
+
listRectHeight: 14,
|
144
|
+
listRectRadius: 0,
|
145
|
+
// highlightEvent: false
|
146
|
+
textColorType: 'primary'
|
147
|
+
}
|
148
|
+
|
149
|
+
export const DEFAULT_GRID_TOOLTIP_PARAMS: GridTooltipParams = {
|
150
|
+
backgroundColorType: 'background',
|
151
|
+
strokeColorType: 'primary',
|
152
|
+
backgroundOpacity: 0.8,
|
153
|
+
textColorType: 'primary',
|
154
|
+
offset: [20, 5],
|
155
|
+
padding: 10,
|
156
|
+
renderFn: (eventData, { styles, utils }) => {
|
157
|
+
const bulletWidth = styles.textSizePx * 0.7
|
158
|
+
const offset = (styles.textSizePx / 2) - (bulletWidth / 2)
|
159
|
+
|
160
|
+
const titleSvg = `<g><text dominant-baseline="hanging" font-size="${styles.textSizePx}" fill="${styles.textColor}">${eventData.groupLabel}</text></g>`
|
161
|
+
const groupLabelTextWidth = utils.measureTextWidth(eventData.groupLabel, styles.textSizePx)
|
162
|
+
const listTextWidth = eventData.group.reduce((acc, group) => {
|
163
|
+
const text = `${group.seriesLabel}${utils.toCurrency(group.value)}`
|
164
|
+
const _maxTextWidth = utils.measureTextWidth(text, styles.textSizePx)
|
165
|
+
return _maxTextWidth > acc ? _maxTextWidth : acc
|
166
|
+
}, 0)
|
167
|
+
const maxTextWidth = Math.max(groupLabelTextWidth, listTextWidth)
|
168
|
+
const lineEndX = maxTextWidth + styles.textSizePx * 3
|
169
|
+
const contentSvg = eventData.group
|
170
|
+
.map((group, i) => {
|
171
|
+
const y = i * styles.textSizePx * 1.5
|
172
|
+
const isHighlight = group.id === (eventData.datum && eventData.datum.id)
|
173
|
+
return `<g transform="translate(0, ${styles.textSizePx * 2})">
|
174
|
+
<rect width="${bulletWidth}" height="${bulletWidth}" x="${offset}" y="${y + offset}" rx="${bulletWidth / 2}" fill="${group.color}"></rect>
|
175
|
+
<text x="${styles.textSizePx * 1.5}" y="${y}" font-size="${styles.textSizePx}" dominant-baseline="hanging" fill="${styles.textColor}">
|
176
|
+
<tspan font-weight="${isHighlight ? 'bold' : ''}">${group.seriesLabel}</tspan>
|
177
|
+
<tspan font-weight="bold" text-anchor="end" x="${lineEndX}">${utils.toCurrency(group.value)}</tspan>
|
178
|
+
</text>
|
179
|
+
</g>`
|
180
|
+
})
|
181
|
+
.join('')
|
182
|
+
return `${titleSvg}
|
183
|
+
${contentSvg}`
|
184
|
+
}
|
185
|
+
}
|
186
|
+
DEFAULT_GRID_TOOLTIP_PARAMS.renderFn.toString = () => `(eventData, { styles, utils }) => {
|
187
|
+
const bulletWidth = styles.textSizePx * 0.7
|
188
|
+
const offset = (styles.textSizePx / 2) - (bulletWidth / 2)
|
189
|
+
|
190
|
+
const titleSvg = \`<g><text dominant-baseline="hanging" font-size="\${styles.textSizePx}" fill="\${styles.textColor}">\${eventData.groupLabel}</text></g>\`
|
191
|
+
const groupLabelTextWidth = utils.measureTextWidth(eventData.groupLabel, styles.textSizePx)
|
192
|
+
const listTextWidth = eventData.group.reduce((acc, group) => {
|
193
|
+
const text = \`\${group.seriesLabel}\${utils.toCurrency(group.value)}\`
|
194
|
+
const _maxTextWidth = utils.measureTextWidth(text, styles.textSizePx)
|
195
|
+
return _maxTextWidth > acc ? _maxTextWidth : acc
|
196
|
+
}, 0)
|
197
|
+
const maxTextWidth = Math.max(groupLabelTextWidth, listTextWidth)
|
198
|
+
const lineEndX = maxTextWidth + styles.textSizePx * 3
|
199
|
+
const contentSvg = eventData.group
|
200
|
+
.map((group, i) => {
|
201
|
+
const y = i * styles.textSizePx * 1.5
|
202
|
+
const isHighlight = group.id === (eventData.datum && eventData.datum.id)
|
203
|
+
return \`<g transform="translate(0, \${styles.textSizePx * 2})">
|
204
|
+
<rect width="\${bulletWidth}" height="\${bulletWidth}" x="\${offset}" y="\${y + offset}" rx="\${bulletWidth / 2}" fill="\${group.color}"></rect>
|
205
|
+
<text x="\${styles.textSizePx * 1.5}" y="\${y}" font-size="\${styles.textSizePx}" dominant-baseline="hanging" fill="\${styles.textColor}">
|
206
|
+
<tspan font-weight="\${isHighlight ? 'bold' : ''}">\${group.seriesLabel}</tspan>
|
207
|
+
<tspan font-weight="bold" text-anchor="end" x="\${lineEndX}">\${utils.toCurrency(group.value)}</tspan>
|
208
|
+
</text>
|
209
|
+
</g>\`
|
210
|
+
})
|
211
|
+
.join('')
|
212
|
+
return \`\${titleSvg}
|
213
|
+
\${contentSvg}\`
|
214
214
|
}`
|