@orbcharts/plugins-basic 3.0.2 → 3.0.4

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 (133) hide show
  1. package/LICENSE +200 -200
  2. package/dist/lib/gridObservables.d.ts +1 -0
  3. package/dist/orbcharts-plugins-basic.es.js +14803 -13543
  4. package/dist/orbcharts-plugins-basic.umd.js +129 -99
  5. package/dist/src/base/BaseOrdinalBubbles.d.ts +26 -0
  6. package/dist/src/base/BaseRacingBars.d.ts +2 -1
  7. package/dist/src/base/BaseRacingLabels.d.ts +1 -0
  8. package/dist/src/base/BaseXZoom.d.ts +18 -0
  9. package/dist/src/grid/gridObservables.d.ts +4 -7
  10. package/dist/src/multiValue/defaults.d.ts +5 -1
  11. package/dist/src/multiValue/index.d.ts +4 -0
  12. package/dist/src/multiValue/multiValueObservables.d.ts +14 -1
  13. package/dist/src/multiValue/plugins/OrdinalAux.d.ts +3 -0
  14. package/dist/src/multiValue/plugins/OrdinalAxis.d.ts +3 -0
  15. package/dist/src/multiValue/plugins/OrdinalBubbles.d.ts +3 -0
  16. package/dist/src/multiValue/plugins/OrdinalZoom.d.ts +1 -0
  17. package/lib/core-types.ts +7 -7
  18. package/lib/core.ts +6 -6
  19. package/lib/gridObservables.ts +6 -0
  20. package/lib/plugins-basic-types.ts +6 -6
  21. package/package.json +48 -48
  22. package/src/base/BaseBars.ts +765 -765
  23. package/src/base/BaseBarsTriangle.ts +676 -676
  24. package/src/base/BaseDots.ts +464 -464
  25. package/src/base/BaseGroupAxis.ts +691 -691
  26. package/src/base/BaseLegend.ts +684 -684
  27. package/src/base/BaseLineAreas.ts +629 -629
  28. package/src/base/BaseLines.ts +706 -706
  29. package/src/base/BaseOrdinalBubbles.ts +730 -0
  30. package/src/base/BaseRacingBars.ts +582 -551
  31. package/src/base/BaseRacingLabels.ts +404 -396
  32. package/src/base/BaseRacingValueLabels.ts +403 -403
  33. package/src/base/BaseStackedBars.ts +782 -782
  34. package/src/base/BaseTooltip.ts +386 -386
  35. package/src/base/BaseValueAxis.ts +600 -600
  36. package/src/base/BaseXAxis.ts +427 -427
  37. package/src/base/BaseXZoom.ts +242 -0
  38. package/src/base/BaseYAxis.ts +389 -389
  39. package/src/base/types.ts +2 -2
  40. package/src/const.ts +30 -30
  41. package/src/grid/defaults.ts +213 -213
  42. package/src/grid/gridObservables.ts +635 -612
  43. package/src/grid/index.ts +16 -16
  44. package/src/grid/plugins/Bars.ts +69 -69
  45. package/src/grid/plugins/BarsPN.ts +66 -66
  46. package/src/grid/plugins/BarsTriangle.ts +73 -73
  47. package/src/grid/plugins/Dots.ts +68 -68
  48. package/src/grid/plugins/GridLegend.ts +107 -107
  49. package/src/grid/plugins/GridTooltip.ts +66 -66
  50. package/src/grid/plugins/GroupAux.ts +1095 -1120
  51. package/src/grid/plugins/GroupAxis.ts +73 -73
  52. package/src/grid/plugins/GroupZoom.ts +218 -218
  53. package/src/grid/plugins/LineAreas.ts +65 -65
  54. package/src/grid/plugins/Lines.ts +59 -59
  55. package/src/grid/plugins/StackedBars.ts +64 -64
  56. package/src/grid/plugins/StackedValueAxis.ts +96 -96
  57. package/src/grid/plugins/ValueAxis.ts +94 -94
  58. package/src/index.ts +6 -6
  59. package/src/multiGrid/defaults.ts +244 -244
  60. package/src/multiGrid/index.ts +14 -14
  61. package/src/multiGrid/multiGridObservables.ts +50 -50
  62. package/src/multiGrid/plugins/MultiBars.ts +108 -108
  63. package/src/multiGrid/plugins/MultiBarsTriangle.ts +114 -114
  64. package/src/multiGrid/plugins/MultiDots.ts +102 -102
  65. package/src/multiGrid/plugins/MultiGridLegend.ts +169 -169
  66. package/src/multiGrid/plugins/MultiGridTooltip.ts +66 -66
  67. package/src/multiGrid/plugins/MultiGroupAxis.ts +137 -137
  68. package/src/multiGrid/plugins/MultiLineAreas.ts +107 -107
  69. package/src/multiGrid/plugins/MultiLines.ts +101 -101
  70. package/src/multiGrid/plugins/MultiStackedBars.ts +106 -106
  71. package/src/multiGrid/plugins/MultiStackedValueAxis.ts +134 -134
  72. package/src/multiGrid/plugins/MultiValueAxis.ts +134 -134
  73. package/src/multiGrid/plugins/OverlappingStackedValueAxes.ts +300 -300
  74. package/src/multiGrid/plugins/OverlappingValueAxes.ts +300 -300
  75. package/src/multiValue/defaults.ts +523 -431
  76. package/src/multiValue/index.ts +16 -12
  77. package/src/multiValue/multiValueObservables.ts +781 -666
  78. package/src/multiValue/plugins/MultiValueLegend.ts +107 -107
  79. package/src/multiValue/plugins/MultiValueTooltip.ts +66 -66
  80. package/src/multiValue/plugins/OrdinalAux.ts +661 -0
  81. package/src/multiValue/plugins/OrdinalAxis.ts +525 -0
  82. package/src/multiValue/plugins/OrdinalBubbles.ts +226 -0
  83. package/src/multiValue/plugins/OrdinalZoom.ts +57 -0
  84. package/src/multiValue/plugins/RacingBars.ts +375 -373
  85. package/src/multiValue/plugins/RacingCounterTexts.ts +300 -300
  86. package/src/multiValue/plugins/RacingValueAxis.ts +114 -114
  87. package/src/multiValue/plugins/Scatter.ts +486 -426
  88. package/src/multiValue/plugins/ScatterBubbles.ts +635 -554
  89. package/src/multiValue/plugins/XAxis.ts +107 -107
  90. package/src/multiValue/plugins/XYAux.ts +683 -682
  91. package/src/multiValue/plugins/XYAxes.ts +194 -194
  92. package/src/multiValue/plugins/XYAxes_legacy.ts +683 -683
  93. package/src/multiValue/plugins/XZoom.ts +40 -299
  94. package/src/noneData/defaults.ts +102 -102
  95. package/src/noneData/index.ts +3 -3
  96. package/src/noneData/plugins/Container.ts +27 -27
  97. package/src/noneData/plugins/Tooltip.ts +373 -373
  98. package/src/relationship/defaults.ts +221 -221
  99. package/src/relationship/index.ts +5 -5
  100. package/src/relationship/plugins/ForceDirected.ts +1173 -1173
  101. package/src/relationship/plugins/ForceDirectedBubbles.ts +1411 -1411
  102. package/src/relationship/plugins/RelationshipLegend.ts +100 -100
  103. package/src/relationship/plugins/RelationshipTooltip.ts +66 -66
  104. package/src/relationship/relationshipObservables.ts +49 -49
  105. package/src/series/defaults.ts +221 -221
  106. package/src/series/index.ts +9 -9
  107. package/src/series/plugins/Bubbles.ts +636 -636
  108. package/src/series/plugins/Pie.ts +623 -623
  109. package/src/series/plugins/PieEventTexts.ts +284 -284
  110. package/src/series/plugins/PieLabels.ts +640 -640
  111. package/src/series/plugins/Rose.ts +516 -516
  112. package/src/series/plugins/RoseLabels.ts +600 -600
  113. package/src/series/plugins/SeriesLegend.ts +107 -107
  114. package/src/series/plugins/SeriesTooltip.ts +66 -66
  115. package/src/series/seriesObservables.ts +145 -145
  116. package/src/series/seriesUtils.ts +51 -51
  117. package/src/tree/defaults.ts +102 -102
  118. package/src/tree/index.ts +4 -4
  119. package/src/tree/plugins/TreeLegend.ts +100 -100
  120. package/src/tree/plugins/TreeMap.ts +341 -341
  121. package/src/tree/plugins/TreeTooltip.ts +66 -66
  122. package/src/utils/commonUtils.ts +31 -31
  123. package/src/utils/d3Graphics.ts +176 -176
  124. package/src/utils/d3Utils.ts +92 -92
  125. package/src/utils/observables.ts +14 -14
  126. package/src/utils/orbchartsUtils.ts +129 -129
  127. package/tsconfig.base.json +13 -13
  128. package/tsconfig.json +2 -2
  129. package/vite.config.js +22 -22
  130. package/dist/src/multiValue/plugins/OrdinalXAxis.d.ts +0 -0
  131. package/dist/src/multiValue/plugins/RankingAxis_legacy.d.ts +0 -0
  132. package/src/multiValue/plugins/OrdinalXAxis.ts +0 -0
  133. package/src/multiValue/plugins/RankingAxis_legacy.ts +0 -109
@@ -1,245 +1,245 @@
1
- import type {
2
- MultiGridLegendParams,
3
- MultiBarsParams,
4
- MultiStackedBarsParams,
5
- MultiBarsTriangleParams,
6
- MultiLinesParams,
7
- MultiLineAreasParams,
8
- MultiDotsParams,
9
- MultiGroupAxisParams,
10
- MultiGridTooltipParams,
11
- MultiValueAxisParams,
12
- MultiStackedValueAxisParams,
13
- OverlappingValueAxesParams,
14
- OverlappingStackedValueAxesParams
15
- } from '../../lib/plugins-basic-types'
16
- import { measureTextWidth } from '../utils/commonUtils'
17
-
18
- export const DEFAULT_MULTI_GRID_LEGEND_PARAMS: MultiGridLegendParams = {
19
- // position: 'right',
20
- // justify: 'end',
21
- placement: 'bottom',
22
- padding: 28,
23
- backgroundFill: 'none',
24
- backgroundStroke: 'none',
25
- gap: 10,
26
- listRectWidth: 14,
27
- listRectHeight: 14,
28
- listRectRadius: 0,
29
- gridList: [
30
- {
31
- listRectWidth: 14,
32
- listRectHeight: 14,
33
- listRectRadius: 0,
34
- }
35
- ],
36
- textColorType: 'primary'
37
- }
38
-
39
- export const DEFAULT_MULTI_GROUP_AXIS_PARAMS: MultiGroupAxisParams = {
40
- // labelAnchor: 'start',
41
- labelOffset: [0, 0],
42
- labelColorType: 'primary',
43
- axisLineVisible: true,
44
- axisLineColorType: 'primary',
45
- ticks: 'all',
46
- tickFormat: text => text,
47
- tickLineVisible: true,
48
- tickPadding: 20,
49
- tickFullLine: false,
50
- tickFullLineDasharray: 'none',
51
- tickColorType: 'secondary',
52
- tickTextRotate: 0,
53
- tickTextColorType: 'primary',
54
- gridIndexes: [0]
55
- }
56
- DEFAULT_MULTI_GROUP_AXIS_PARAMS.tickFormat.toString = () => `text => text`
57
-
58
- export const DEFAULT_MULTI_VALUE_AXIS_PARAMS: MultiValueAxisParams = {
59
- // labelAnchor: 'end',
60
- labelOffset: [0, 0],
61
- labelColorType: 'primary',
62
- axisLineVisible: false,
63
- axisLineColorType: 'primary',
64
- ticks: 4,
65
- // tickFormat: ',.0f',
66
- tickFormat: num => {
67
- if (num === null || Number.isNaN(num) == true) {
68
- return num || 0
69
- }
70
- const parts = num.toString().split('.')
71
- parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',')
72
- return parts.join('.')
73
- },
74
- tickLineVisible: true,
75
- tickPadding: 20,
76
- tickFullLine: true,
77
- tickFullLineDasharray: 'none',
78
- tickColorType: 'secondary',
79
- tickTextRotate: 0,
80
- tickTextColorType: 'primary',
81
- gridIndexes: 'all'
82
- }
83
- DEFAULT_MULTI_VALUE_AXIS_PARAMS.tickFormat.toString = () => `num => {
84
- if (num === null || Number.isNaN(num) == true) {
85
- return num || 0
86
- }
87
- const parts = num.toString().split('.')
88
- parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',')
89
- return parts.join('.')
90
- }`
91
-
92
- export const DEFAULT_MULTI_STACKED_VALUE_AXIS_PARAMS: MultiStackedValueAxisParams = {
93
- ...DEFAULT_MULTI_VALUE_AXIS_PARAMS
94
- }
95
-
96
- export const DEFAULT_MULTI_BARS_PARAMS: MultiBarsParams = {
97
- barWidth: 0,
98
- barPadding: 1,
99
- barGroupPadding: 40,
100
- barRadius: false,
101
- gridIndexes: [0]
102
- }
103
-
104
- export const DEFAULT_MULTI_STACKED_BARS_PARAMS: MultiStackedBarsParams = {
105
- barWidth: 0,
106
- barGroupPadding: 10,
107
- barRadius: false,
108
- gridIndexes: [0]
109
- }
110
-
111
- export const DEFAULT_MULTI_BARS_TRIANGLE_PARAMS: MultiBarsTriangleParams = {
112
- barWidth: 0,
113
- barPadding: 1,
114
- barGroupPadding: 20,
115
- linearGradientOpacity: [1, 0],
116
- gridIndexes: [0]
117
- }
118
-
119
- export const DEFAULT_MULTI_LINES_PARAMS: MultiLinesParams = {
120
- lineCurve: 'curveLinear',
121
- lineWidth: 2,
122
- gridIndexes: [1]
123
- }
124
-
125
- export const DEFAULT_MULTI_LINE_AREAS_PARAMS: MultiLineAreasParams = {
126
- lineCurve: 'curveLinear',
127
- linearGradientOpacity: [1, 0],
128
- gridIndexes: [1]
129
- }
130
-
131
- export const DEFAULT_MULTI_DOTS_PARAMS: MultiDotsParams = {
132
- radius: 4,
133
- fillColorType: 'background',
134
- strokeColorType: 'label',
135
- strokeWidth: 2,
136
- onlyShowHighlighted: false,
137
- gridIndexes: [1]
138
- }
139
-
140
- export const DEFAULT_OVERLAPPING_VALUE_AXES_PARAMS: OverlappingValueAxesParams = {
141
- firstAxis: {
142
- // labelAnchor: 'end',
143
- labelOffset: [0, 0],
144
- labelColorType: 'primary',
145
- axisLineVisible: false,
146
- axisLineColorType: 'primary',
147
- ticks: 4,
148
- tickFormat: ',.0f',
149
- tickLineVisible: true,
150
- tickPadding: 20,
151
- tickFullLine: true,
152
- tickFullLineDasharray: 'none',
153
- tickColorType: 'secondary',
154
- tickTextRotate: 0,
155
- tickTextColorType: 'primary',
156
- },
157
- secondAxis: {
158
- // labelAnchor: 'end',
159
- labelOffset: [0, 0],
160
- labelColorType: 'primary',
161
- axisLineVisible: false,
162
- axisLineColorType: 'primary',
163
- ticks: 4,
164
- tickFormat: ',.0f',
165
- tickLineVisible: true,
166
- tickPadding: 20,
167
- tickFullLine: true,
168
- tickFullLineDasharray: 'none',
169
- tickColorType: 'secondary',
170
- tickTextRotate: 0,
171
- tickTextColorType: 'primary',
172
- },
173
- gridIndexes: [0, 1]
174
- }
175
-
176
- export const DEFAULT_OVERLAPPING_STACKED_VALUE_AXES_PARAMS: OverlappingStackedValueAxesParams = {
177
- ...DEFAULT_OVERLAPPING_VALUE_AXES_PARAMS
178
- }
179
-
180
- export const DEFAULT_MULTI_GRID_TOOLTIP_PARAMS: MultiGridTooltipParams = {
181
- backgroundColorType: 'background',
182
- strokeColorType: 'primary',
183
- backgroundOpacity: 0.8,
184
- textColorType: 'primary',
185
- offset: [20, 5],
186
- padding: 10,
187
- renderFn: (eventData, { styles, utils }) => {
188
- const bulletWidth = styles.textSizePx * 0.7
189
- const offset = (styles.textSizePx / 2) - (bulletWidth / 2)
190
-
191
- const titleSvg = `<g><text dominant-baseline="hanging" font-size="${styles.textSizePx}" fill="${styles.textColor}">${eventData.groupLabel}</text></g>`
192
- const groupLabelTextWidth = utils.measureTextWidth(eventData.groupLabel, styles.textSizePx)
193
- const listTextWidth = eventData.group.reduce((acc, group) => {
194
- const text = `${group.seriesLabel}${utils.toCurrency(group.value)}`
195
- const _maxTextWidth = utils.measureTextWidth(text, styles.textSizePx)
196
- return _maxTextWidth > acc ? _maxTextWidth : acc
197
- }, 0)
198
- const maxTextWidth = Math.max(groupLabelTextWidth, listTextWidth)
199
- const lineEndX = maxTextWidth + styles.textSizePx * 3
200
- const contentSvg = eventData.group
201
- .map((group, i) => {
202
- const y = i * styles.textSizePx * 1.5
203
- const isHighlight = group.id === (eventData.datum && eventData.datum.id)
204
- return `<g transform="translate(0, ${styles.textSizePx * 2})">
205
- <rect width="${bulletWidth}" height="${bulletWidth}" x="${offset}" y="${y + offset}" rx="${bulletWidth / 2}" fill="${group.color}"></rect>
206
- <text x="${styles.textSizePx * 1.5}" y="${y}" font-size="${styles.textSizePx}" dominant-baseline="hanging" fill="${styles.textColor}">
207
- <tspan font-weight="${isHighlight ? 'bold' : ''}">${group.seriesLabel}</tspan>
208
- <tspan font-weight="bold" text-anchor="end" x="${lineEndX}">${utils.toCurrency(group.value)}</tspan>
209
- </text>
210
- </g>`
211
- })
212
- .join('')
213
- return `${titleSvg}
214
- ${contentSvg}`
215
- }
216
- }
217
- DEFAULT_MULTI_GRID_TOOLTIP_PARAMS.renderFn.toString = () => `(eventData, { styles, utils }) => {
218
- const bulletWidth = styles.textSizePx * 0.7
219
- const offset = (styles.textSizePx / 2) - (bulletWidth / 2)
220
-
221
- const titleSvg = \`<g><text dominant-baseline="hanging" font-size="\${styles.textSizePx}" fill="\${styles.textColor}">\${eventData.groupLabel}</text></g>\`
222
- const groupLabelTextWidth = utils.measureTextWidth(eventData.groupLabel, styles.textSizePx)
223
- const listTextWidth = eventData.group.reduce((acc, group) => {
224
- const text = \`\${group.seriesLabel}\${utils.toCurrency(group.value)}\`
225
- const _maxTextWidth = utils.measureTextWidth(text, styles.textSizePx)
226
- return _maxTextWidth > acc ? _maxTextWidth : acc
227
- }, 0)
228
- const maxTextWidth = Math.max(groupLabelTextWidth, listTextWidth)
229
- const lineEndX = maxTextWidth + styles.textSizePx * 3
230
- const contentSvg = eventData.group
231
- .map((group, i) => {
232
- const y = i * styles.textSizePx * 1.5
233
- const isHighlight = group.id === (eventData.datum && eventData.datum.id)
234
- return \`<g transform="translate(0, \${styles.textSizePx * 2})">
235
- <rect width="\${bulletWidth}" height="\${bulletWidth}" x="\${offset}" y="\${y + offset}" rx="\${bulletWidth / 2}" fill="\${group.color}"></rect>
236
- <text x="\${styles.textSizePx * 1.5}" y="\${y}" font-size="\${styles.textSizePx}" dominant-baseline="hanging" fill="\${styles.textColor}">
237
- <tspan font-weight="\${isHighlight ? 'bold' : ''}">\${group.seriesLabel}</tspan>
238
- <tspan font-weight="bold" text-anchor="end" x="\${lineEndX}">\${utils.toCurrency(group.value)}</tspan>
239
- </text>
240
- </g>\`
241
- })
242
- .join('')
243
- return \`\${titleSvg}
244
- \${contentSvg}\`
1
+ import type {
2
+ MultiGridLegendParams,
3
+ MultiBarsParams,
4
+ MultiStackedBarsParams,
5
+ MultiBarsTriangleParams,
6
+ MultiLinesParams,
7
+ MultiLineAreasParams,
8
+ MultiDotsParams,
9
+ MultiGroupAxisParams,
10
+ MultiGridTooltipParams,
11
+ MultiValueAxisParams,
12
+ MultiStackedValueAxisParams,
13
+ OverlappingValueAxesParams,
14
+ OverlappingStackedValueAxesParams
15
+ } from '../../lib/plugins-basic-types'
16
+ import { measureTextWidth } from '../utils/commonUtils'
17
+
18
+ export const DEFAULT_MULTI_GRID_LEGEND_PARAMS: MultiGridLegendParams = {
19
+ // position: 'right',
20
+ // justify: 'end',
21
+ placement: 'bottom',
22
+ padding: 28,
23
+ backgroundFill: 'none',
24
+ backgroundStroke: 'none',
25
+ gap: 10,
26
+ listRectWidth: 14,
27
+ listRectHeight: 14,
28
+ listRectRadius: 0,
29
+ gridList: [
30
+ {
31
+ listRectWidth: 14,
32
+ listRectHeight: 14,
33
+ listRectRadius: 0,
34
+ }
35
+ ],
36
+ textColorType: 'primary'
37
+ }
38
+
39
+ export const DEFAULT_MULTI_GROUP_AXIS_PARAMS: MultiGroupAxisParams = {
40
+ // labelAnchor: 'start',
41
+ labelOffset: [0, 0],
42
+ labelColorType: 'primary',
43
+ axisLineVisible: true,
44
+ axisLineColorType: 'primary',
45
+ ticks: 'all',
46
+ tickFormat: text => text,
47
+ tickLineVisible: true,
48
+ tickPadding: 20,
49
+ tickFullLine: false,
50
+ tickFullLineDasharray: 'none',
51
+ tickColorType: 'secondary',
52
+ tickTextRotate: 0,
53
+ tickTextColorType: 'primary',
54
+ gridIndexes: [0]
55
+ }
56
+ DEFAULT_MULTI_GROUP_AXIS_PARAMS.tickFormat.toString = () => `text => text`
57
+
58
+ export const DEFAULT_MULTI_VALUE_AXIS_PARAMS: MultiValueAxisParams = {
59
+ // labelAnchor: 'end',
60
+ labelOffset: [0, 0],
61
+ labelColorType: 'primary',
62
+ axisLineVisible: false,
63
+ axisLineColorType: 'primary',
64
+ ticks: 4,
65
+ // tickFormat: ',.0f',
66
+ tickFormat: num => {
67
+ if (num === null || Number.isNaN(num) == true) {
68
+ return num || 0
69
+ }
70
+ const parts = num.toString().split('.')
71
+ parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',')
72
+ return parts.join('.')
73
+ },
74
+ tickLineVisible: true,
75
+ tickPadding: 20,
76
+ tickFullLine: true,
77
+ tickFullLineDasharray: 'none',
78
+ tickColorType: 'secondary',
79
+ tickTextRotate: 0,
80
+ tickTextColorType: 'primary',
81
+ gridIndexes: 'all'
82
+ }
83
+ DEFAULT_MULTI_VALUE_AXIS_PARAMS.tickFormat.toString = () => `num => {
84
+ if (num === null || Number.isNaN(num) == true) {
85
+ return num || 0
86
+ }
87
+ const parts = num.toString().split('.')
88
+ parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',')
89
+ return parts.join('.')
90
+ }`
91
+
92
+ export const DEFAULT_MULTI_STACKED_VALUE_AXIS_PARAMS: MultiStackedValueAxisParams = {
93
+ ...DEFAULT_MULTI_VALUE_AXIS_PARAMS
94
+ }
95
+
96
+ export const DEFAULT_MULTI_BARS_PARAMS: MultiBarsParams = {
97
+ barWidth: 0,
98
+ barPadding: 1,
99
+ barGroupPadding: 40,
100
+ barRadius: false,
101
+ gridIndexes: [0]
102
+ }
103
+
104
+ export const DEFAULT_MULTI_STACKED_BARS_PARAMS: MultiStackedBarsParams = {
105
+ barWidth: 0,
106
+ barGroupPadding: 10,
107
+ barRadius: false,
108
+ gridIndexes: [0]
109
+ }
110
+
111
+ export const DEFAULT_MULTI_BARS_TRIANGLE_PARAMS: MultiBarsTriangleParams = {
112
+ barWidth: 0,
113
+ barPadding: 1,
114
+ barGroupPadding: 20,
115
+ linearGradientOpacity: [1, 0],
116
+ gridIndexes: [0]
117
+ }
118
+
119
+ export const DEFAULT_MULTI_LINES_PARAMS: MultiLinesParams = {
120
+ lineCurve: 'curveLinear',
121
+ lineWidth: 2,
122
+ gridIndexes: [1]
123
+ }
124
+
125
+ export const DEFAULT_MULTI_LINE_AREAS_PARAMS: MultiLineAreasParams = {
126
+ lineCurve: 'curveLinear',
127
+ linearGradientOpacity: [1, 0],
128
+ gridIndexes: [1]
129
+ }
130
+
131
+ export const DEFAULT_MULTI_DOTS_PARAMS: MultiDotsParams = {
132
+ radius: 4,
133
+ fillColorType: 'background',
134
+ strokeColorType: 'label',
135
+ strokeWidth: 2,
136
+ onlyShowHighlighted: false,
137
+ gridIndexes: [1]
138
+ }
139
+
140
+ export const DEFAULT_OVERLAPPING_VALUE_AXES_PARAMS: OverlappingValueAxesParams = {
141
+ firstAxis: {
142
+ // labelAnchor: 'end',
143
+ labelOffset: [0, 0],
144
+ labelColorType: 'primary',
145
+ axisLineVisible: false,
146
+ axisLineColorType: 'primary',
147
+ ticks: 4,
148
+ tickFormat: ',.0f',
149
+ tickLineVisible: true,
150
+ tickPadding: 20,
151
+ tickFullLine: true,
152
+ tickFullLineDasharray: 'none',
153
+ tickColorType: 'secondary',
154
+ tickTextRotate: 0,
155
+ tickTextColorType: 'primary',
156
+ },
157
+ secondAxis: {
158
+ // labelAnchor: 'end',
159
+ labelOffset: [0, 0],
160
+ labelColorType: 'primary',
161
+ axisLineVisible: false,
162
+ axisLineColorType: 'primary',
163
+ ticks: 4,
164
+ tickFormat: ',.0f',
165
+ tickLineVisible: true,
166
+ tickPadding: 20,
167
+ tickFullLine: true,
168
+ tickFullLineDasharray: 'none',
169
+ tickColorType: 'secondary',
170
+ tickTextRotate: 0,
171
+ tickTextColorType: 'primary',
172
+ },
173
+ gridIndexes: [0, 1]
174
+ }
175
+
176
+ export const DEFAULT_OVERLAPPING_STACKED_VALUE_AXES_PARAMS: OverlappingStackedValueAxesParams = {
177
+ ...DEFAULT_OVERLAPPING_VALUE_AXES_PARAMS
178
+ }
179
+
180
+ export const DEFAULT_MULTI_GRID_TOOLTIP_PARAMS: MultiGridTooltipParams = {
181
+ backgroundColorType: 'background',
182
+ strokeColorType: 'primary',
183
+ backgroundOpacity: 0.8,
184
+ textColorType: 'primary',
185
+ offset: [20, 5],
186
+ padding: 10,
187
+ renderFn: (eventData, { styles, utils }) => {
188
+ const bulletWidth = styles.textSizePx * 0.7
189
+ const offset = (styles.textSizePx / 2) - (bulletWidth / 2)
190
+
191
+ const titleSvg = `<g><text dominant-baseline="hanging" font-size="${styles.textSizePx}" fill="${styles.textColor}">${eventData.groupLabel}</text></g>`
192
+ const groupLabelTextWidth = utils.measureTextWidth(eventData.groupLabel, styles.textSizePx)
193
+ const listTextWidth = eventData.group.reduce((acc, group) => {
194
+ const text = `${group.seriesLabel}${utils.toCurrency(group.value)}`
195
+ const _maxTextWidth = utils.measureTextWidth(text, styles.textSizePx)
196
+ return _maxTextWidth > acc ? _maxTextWidth : acc
197
+ }, 0)
198
+ const maxTextWidth = Math.max(groupLabelTextWidth, listTextWidth)
199
+ const lineEndX = maxTextWidth + styles.textSizePx * 3
200
+ const contentSvg = eventData.group
201
+ .map((group, i) => {
202
+ const y = i * styles.textSizePx * 1.5
203
+ const isHighlight = group.id === (eventData.datum && eventData.datum.id)
204
+ return `<g transform="translate(0, ${styles.textSizePx * 2})">
205
+ <rect width="${bulletWidth}" height="${bulletWidth}" x="${offset}" y="${y + offset}" rx="${bulletWidth / 2}" fill="${group.color}"></rect>
206
+ <text x="${styles.textSizePx * 1.5}" y="${y}" font-size="${styles.textSizePx}" dominant-baseline="hanging" fill="${styles.textColor}">
207
+ <tspan font-weight="${isHighlight ? 'bold' : ''}">${group.seriesLabel}</tspan>
208
+ <tspan font-weight="bold" text-anchor="end" x="${lineEndX}">${utils.toCurrency(group.value)}</tspan>
209
+ </text>
210
+ </g>`
211
+ })
212
+ .join('')
213
+ return `${titleSvg}
214
+ ${contentSvg}`
215
+ }
216
+ }
217
+ DEFAULT_MULTI_GRID_TOOLTIP_PARAMS.renderFn.toString = () => `(eventData, { styles, utils }) => {
218
+ const bulletWidth = styles.textSizePx * 0.7
219
+ const offset = (styles.textSizePx / 2) - (bulletWidth / 2)
220
+
221
+ const titleSvg = \`<g><text dominant-baseline="hanging" font-size="\${styles.textSizePx}" fill="\${styles.textColor}">\${eventData.groupLabel}</text></g>\`
222
+ const groupLabelTextWidth = utils.measureTextWidth(eventData.groupLabel, styles.textSizePx)
223
+ const listTextWidth = eventData.group.reduce((acc, group) => {
224
+ const text = \`\${group.seriesLabel}\${utils.toCurrency(group.value)}\`
225
+ const _maxTextWidth = utils.measureTextWidth(text, styles.textSizePx)
226
+ return _maxTextWidth > acc ? _maxTextWidth : acc
227
+ }, 0)
228
+ const maxTextWidth = Math.max(groupLabelTextWidth, listTextWidth)
229
+ const lineEndX = maxTextWidth + styles.textSizePx * 3
230
+ const contentSvg = eventData.group
231
+ .map((group, i) => {
232
+ const y = i * styles.textSizePx * 1.5
233
+ const isHighlight = group.id === (eventData.datum && eventData.datum.id)
234
+ return \`<g transform="translate(0, \${styles.textSizePx * 2})">
235
+ <rect width="\${bulletWidth}" height="\${bulletWidth}" x="\${offset}" y="\${y + offset}" rx="\${bulletWidth / 2}" fill="\${group.color}"></rect>
236
+ <text x="\${styles.textSizePx * 1.5}" y="\${y}" font-size="\${styles.textSizePx}" dominant-baseline="hanging" fill="\${styles.textColor}">
237
+ <tspan font-weight="\${isHighlight ? 'bold' : ''}">\${group.seriesLabel}</tspan>
238
+ <tspan font-weight="bold" text-anchor="end" x="\${lineEndX}">\${utils.toCurrency(group.value)}</tspan>
239
+ </text>
240
+ </g>\`
241
+ })
242
+ .join('')
243
+ return \`\${titleSvg}
244
+ \${contentSvg}\`
245
245
  }`
@@ -1,15 +1,15 @@
1
- export * from './defaults'
2
- // export * from './types'
3
- export { MultiGridLegend } from './plugins/MultiGridLegend'
4
- export { MultiBars } from './plugins/MultiBars'
5
- export { MultiStackedBars } from './plugins/MultiStackedBars'
6
- export { MultiBarsTriangle } from './plugins/MultiBarsTriangle'
7
- export { MultiLines } from './plugins/MultiLines'
8
- export { MultiLineAreas } from './plugins/MultiLineAreas'
9
- export { MultiDots } from './plugins/MultiDots'
10
- export { MultiGroupAxis } from './plugins/MultiGroupAxis'
11
- export { MultiValueAxis } from './plugins/MultiValueAxis'
12
- export { MultiGridTooltip } from './plugins/MultiGridTooltip'
13
- export { MultiStackedValueAxis } from './plugins/MultiStackedValueAxis'
14
- export { OverlappingValueAxes } from './plugins/OverlappingValueAxes'
1
+ export * from './defaults'
2
+ // export * from './types'
3
+ export { MultiGridLegend } from './plugins/MultiGridLegend'
4
+ export { MultiBars } from './plugins/MultiBars'
5
+ export { MultiStackedBars } from './plugins/MultiStackedBars'
6
+ export { MultiBarsTriangle } from './plugins/MultiBarsTriangle'
7
+ export { MultiLines } from './plugins/MultiLines'
8
+ export { MultiLineAreas } from './plugins/MultiLineAreas'
9
+ export { MultiDots } from './plugins/MultiDots'
10
+ export { MultiGroupAxis } from './plugins/MultiGroupAxis'
11
+ export { MultiValueAxis } from './plugins/MultiValueAxis'
12
+ export { MultiGridTooltip } from './plugins/MultiGridTooltip'
13
+ export { MultiStackedValueAxis } from './plugins/MultiStackedValueAxis'
14
+ export { OverlappingValueAxes } from './plugins/OverlappingValueAxes'
15
15
  export { OverlappingStackedValueAxes } from './plugins/OverlappingStackedValueAxes'
@@ -1,50 +1,50 @@
1
- import type { Observable } from 'rxjs'
2
- import {
3
- Subject,
4
- takeUntil,
5
- of,
6
- map,
7
- reduce,
8
- switchMap,
9
- combineLatest,
10
- distinctUntilChanged,
11
- shareReplay
12
- } from 'rxjs'
13
- import type {
14
- ContextObserverMultiGrid,
15
- ComputedDataGrid,
16
- DataFormatterGrid,
17
- ContextObserverGridDetail,
18
- ContextObserverMultiGridDetail } from '../../lib/core-types'
19
-
20
- // 可設定多個gridIndex的params
21
- interface MultiGridPluginParams {
22
- gridIndexes: number[] | 'all'
23
- }
24
-
25
- // 對應grid資料的plugin所需Observable(必須有gridIndexes)
26
- export const multiGridPluginDetailObservables = (observer: ContextObserverMultiGrid<MultiGridPluginParams>): Observable<ContextObserverMultiGridDetail[]> => {
27
- const gridIndexes$ = observer.fullParams$.pipe(
28
- map(fullParams => fullParams.gridIndexes),
29
- distinctUntilChanged(),
30
- shareReplay(1)
31
- )
32
-
33
- return combineLatest({
34
- multiGridEachDetail: observer.multiGridEachDetail$,
35
- gridIndexes: gridIndexes$,
36
- }).pipe(
37
- switchMap(async d => d),
38
- map(data => {
39
- // 對應所有grid
40
- if (data.gridIndexes === 'all') {
41
- return data.multiGridEachDetail
42
- }
43
- // 自訂對應grid
44
- return data.gridIndexes.map(gridIndex => {
45
- return data.multiGridEachDetail[gridIndex] ?? data.multiGridEachDetail[0]
46
- })
47
- })
48
- )
49
- }
50
-
1
+ import type { Observable } from 'rxjs'
2
+ import {
3
+ Subject,
4
+ takeUntil,
5
+ of,
6
+ map,
7
+ reduce,
8
+ switchMap,
9
+ combineLatest,
10
+ distinctUntilChanged,
11
+ shareReplay
12
+ } from 'rxjs'
13
+ import type {
14
+ ContextObserverMultiGrid,
15
+ ComputedDataGrid,
16
+ DataFormatterGrid,
17
+ ContextObserverGridDetail,
18
+ ContextObserverMultiGridDetail } from '../../lib/core-types'
19
+
20
+ // 可設定多個gridIndex的params
21
+ interface MultiGridPluginParams {
22
+ gridIndexes: number[] | 'all'
23
+ }
24
+
25
+ // 對應grid資料的plugin所需Observable(必須有gridIndexes)
26
+ export const multiGridPluginDetailObservables = (observer: ContextObserverMultiGrid<MultiGridPluginParams>): Observable<ContextObserverMultiGridDetail[]> => {
27
+ const gridIndexes$ = observer.fullParams$.pipe(
28
+ map(fullParams => fullParams.gridIndexes),
29
+ distinctUntilChanged(),
30
+ shareReplay(1)
31
+ )
32
+
33
+ return combineLatest({
34
+ multiGridEachDetail: observer.multiGridEachDetail$,
35
+ gridIndexes: gridIndexes$,
36
+ }).pipe(
37
+ switchMap(async d => d),
38
+ map(data => {
39
+ // 對應所有grid
40
+ if (data.gridIndexes === 'all') {
41
+ return data.multiGridEachDetail
42
+ }
43
+ // 自訂對應grid
44
+ return data.gridIndexes.map(gridIndex => {
45
+ return data.multiGridEachDetail[gridIndex] ?? data.multiGridEachDetail[0]
46
+ })
47
+ })
48
+ )
49
+ }
50
+