@orbcharts/plugins-basic 3.0.0-beta.15 → 3.0.0-beta.17

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 (228) hide show
  1. package/LICENSE +200 -200
  2. package/dist/orbcharts-plugins-basic.es.js +11839 -10485
  3. package/dist/orbcharts-plugins-basic.umd.js +231 -171
  4. package/dist/{orbcharts-plugins-basic/src → src}/base/BaseBars.d.ts +3 -3
  5. package/dist/{orbcharts-plugins-basic/src → src}/base/BaseBarsTriangle.d.ts +3 -3
  6. package/dist/{orbcharts-plugins-basic/src → src}/base/BaseDots.d.ts +3 -3
  7. package/dist/{orbcharts-plugins-basic/src → src}/base/BaseLineAreas.d.ts +3 -3
  8. package/dist/{orbcharts-plugins-basic/src → src}/base/BaseLines.d.ts +3 -3
  9. package/dist/src/base/BaseRacingBars.d.ts +23 -0
  10. package/dist/src/base/BaseRacingLabels.d.ts +20 -0
  11. package/dist/src/base/BaseRacingValueLabels.d.ts +20 -0
  12. package/dist/{orbcharts-plugins-basic/src/base/BaseStackedBar.d.ts → src/base/BaseStackedBars.d.ts} +7 -7
  13. package/dist/{orbcharts-plugins-basic/src → src}/base/BaseValueAxis.d.ts +4 -7
  14. package/dist/src/base/BaseXAxis.d.ts +20 -0
  15. package/dist/src/base/BaseYAxis.d.ts +18 -0
  16. package/dist/{orbcharts-plugins-basic/src → src}/grid/defaults.d.ts +3 -3
  17. package/dist/{orbcharts-plugins-basic/src → src}/grid/gridObservables.d.ts +8 -1
  18. package/dist/{orbcharts-plugins-basic/src → src}/grid/index.d.ts +2 -2
  19. package/dist/src/grid/plugins/GroupZoom.d.ts +1 -0
  20. package/dist/src/grid/plugins/StackedBars.d.ts +1 -0
  21. package/dist/src/index.d.ts +7 -1
  22. package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/defaults.d.ts +2 -2
  23. package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/index.d.ts +1 -1
  24. package/dist/src/multiGrid/plugins/MultiStackedBars.d.ts +1 -0
  25. package/dist/src/multiValue/defaults.d.ts +13 -0
  26. package/dist/{orbcharts-plugins-basic/src → src}/multiValue/index.d.ts +5 -1
  27. package/dist/src/multiValue/multiValueObservables.d.ts +56 -0
  28. package/dist/src/multiValue/plugins/RacingBars.d.ts +1 -0
  29. package/dist/src/multiValue/plugins/RacingCounterTexts.d.ts +3 -0
  30. package/dist/src/multiValue/plugins/RacingValueAxis.d.ts +1 -0
  31. package/dist/src/multiValue/plugins/XAxis.d.ts +1 -0
  32. package/dist/src/multiValue/plugins/XYAxes.d.ts +1 -0
  33. package/dist/src/multiValue/plugins/XZoom.d.ts +1 -0
  34. package/dist/{orbcharts-plugins-basic/src → src}/utils/commonUtils.d.ts +1 -0
  35. package/dist/{orbcharts-plugins-basic/src → src}/utils/d3Graphics.d.ts +2 -1
  36. package/lib/core-types.ts +7 -7
  37. package/lib/core.ts +6 -6
  38. package/lib/plugins-basic-types.ts +6 -6
  39. package/package.json +44 -44
  40. package/src/base/BaseBars.ts +765 -765
  41. package/src/base/BaseBarsTriangle.ts +676 -676
  42. package/src/base/BaseDots.ts +464 -464
  43. package/src/base/BaseGroupAxis.ts +691 -679
  44. package/src/base/BaseLegend.ts +684 -684
  45. package/src/base/BaseLineAreas.ts +629 -629
  46. package/src/base/BaseLines.ts +706 -706
  47. package/src/base/BaseRacingBars.ts +552 -0
  48. package/src/base/BaseRacingLabels.ts +396 -0
  49. package/src/base/BaseRacingValueLabels.ts +403 -0
  50. package/src/base/{BaseStackedBar.ts → BaseStackedBars.ts} +782 -782
  51. package/src/base/BaseTooltip.ts +386 -385
  52. package/src/base/BaseValueAxis.ts +600 -583
  53. package/src/base/BaseXAxis.ts +427 -0
  54. package/src/base/BaseYAxis.ts +389 -0
  55. package/src/base/types.ts +2 -2
  56. package/src/const.ts +30 -30
  57. package/src/grid/defaults.ts +213 -250
  58. package/src/grid/gridObservables.ts +612 -554
  59. package/src/grid/index.ts +16 -16
  60. package/src/grid/plugins/Bars.ts +69 -69
  61. package/src/grid/plugins/BarsPN.ts +66 -66
  62. package/src/grid/plugins/BarsTriangle.ts +73 -73
  63. package/src/grid/plugins/Dots.ts +68 -68
  64. package/src/grid/plugins/GridLegend.ts +107 -107
  65. package/src/grid/plugins/GridTooltip.ts +66 -66
  66. package/src/grid/plugins/GroupAux.ts +1120 -1103
  67. package/src/grid/plugins/GroupAxis.ts +73 -97
  68. package/src/grid/plugins/{GridZoom.ts → GroupZoom.ts} +218 -218
  69. package/src/grid/plugins/LineAreas.ts +65 -65
  70. package/src/grid/plugins/Lines.ts +59 -59
  71. package/src/grid/plugins/{StackedBar.ts → StackedBars.ts} +64 -64
  72. package/src/grid/plugins/StackedValueAxis.ts +96 -96
  73. package/src/grid/plugins/ValueAxis.ts +94 -94
  74. package/src/index.ts +6 -6
  75. package/src/multiGrid/defaults.ts +244 -228
  76. package/src/multiGrid/index.ts +14 -14
  77. package/src/multiGrid/multiGridObservables.ts +50 -49
  78. package/src/multiGrid/plugins/MultiBars.ts +108 -108
  79. package/src/multiGrid/plugins/MultiBarsTriangle.ts +114 -114
  80. package/src/multiGrid/plugins/MultiDots.ts +102 -102
  81. package/src/multiGrid/plugins/MultiGridLegend.ts +169 -159
  82. package/src/multiGrid/plugins/MultiGridTooltip.ts +66 -66
  83. package/src/multiGrid/plugins/MultiGroupAxis.ts +137 -137
  84. package/src/multiGrid/plugins/MultiLineAreas.ts +107 -107
  85. package/src/multiGrid/plugins/MultiLines.ts +101 -101
  86. package/src/multiGrid/plugins/{MultiStackedBar.ts → MultiStackedBars.ts} +106 -106
  87. package/src/multiGrid/plugins/MultiStackedValueAxis.ts +134 -134
  88. package/src/multiGrid/plugins/MultiValueAxis.ts +134 -134
  89. package/src/multiGrid/plugins/OverlappingStackedValueAxes.ts +300 -299
  90. package/src/multiGrid/plugins/OverlappingValueAxes.ts +300 -300
  91. package/src/multiValue/defaults.ts +388 -166
  92. package/src/multiValue/index.ts +13 -9
  93. package/src/multiValue/multiValueObservables.ts +667 -297
  94. package/src/multiValue/plugins/MultiValueLegend.ts +107 -107
  95. package/src/multiValue/plugins/MultiValueTooltip.ts +66 -66
  96. package/src/multiValue/plugins/OrdinalBubbles.ts +0 -0
  97. package/src/multiValue/plugins/OrdinalXAxis.ts +0 -0
  98. package/src/multiValue/plugins/RacingBars.ts +373 -0
  99. package/src/multiValue/plugins/RacingCounterAxis.ts +0 -0
  100. package/src/multiValue/plugins/RacingCounterTexts.ts +300 -0
  101. package/src/multiValue/plugins/RacingValueAxis.ts +115 -0
  102. package/src/multiValue/plugins/RankingAxis_legacy.ts +109 -0
  103. package/src/multiValue/plugins/Scatter.ts +426 -426
  104. package/src/multiValue/plugins/ScatterBubbles.ts +554 -554
  105. package/src/multiValue/plugins/XAxis.ts +108 -0
  106. package/src/multiValue/plugins/XYAux.ts +682 -681
  107. package/src/multiValue/plugins/XYAxes.ts +194 -684
  108. package/src/multiValue/plugins/XYAxes_legacy.ts +684 -0
  109. package/src/multiValue/plugins/{XYZoom.ts → XZoom.ts} +299 -299
  110. package/src/noneData/defaults.ts +102 -102
  111. package/src/noneData/index.ts +3 -3
  112. package/src/noneData/plugins/Container.ts +27 -27
  113. package/src/noneData/plugins/Tooltip.ts +373 -373
  114. package/src/relationship/defaults.ts +220 -218
  115. package/src/relationship/index.ts +5 -5
  116. package/src/relationship/plugins/ForceDirected.ts +1168 -1168
  117. package/src/relationship/plugins/ForceDirectedBubbles.ts +1403 -1403
  118. package/src/relationship/plugins/RelationshipLegend.ts +100 -100
  119. package/src/relationship/plugins/RelationshipTooltip.ts +66 -66
  120. package/src/relationship/relationshipObservables.ts +49 -49
  121. package/src/series/defaults.ts +221 -230
  122. package/src/series/index.ts +9 -9
  123. package/src/series/plugins/Bubbles.ts +636 -620
  124. package/src/series/plugins/Pie.ts +623 -623
  125. package/src/series/plugins/PieEventTexts.ts +284 -284
  126. package/src/series/plugins/PieLabels.ts +640 -640
  127. package/src/series/plugins/Rose.ts +516 -516
  128. package/src/series/plugins/RoseLabels.ts +600 -600
  129. package/src/series/plugins/SeriesLegend.ts +107 -107
  130. package/src/series/plugins/SeriesTooltip.ts +66 -66
  131. package/src/series/seriesObservables.ts +145 -145
  132. package/src/series/seriesUtils.ts +51 -51
  133. package/src/tree/defaults.ts +102 -100
  134. package/src/tree/index.ts +4 -4
  135. package/src/tree/plugins/TreeLegend.ts +100 -100
  136. package/src/tree/plugins/TreeMap.ts +341 -341
  137. package/src/tree/plugins/TreeTooltip.ts +66 -66
  138. package/src/utils/commonUtils.ts +31 -22
  139. package/src/utils/d3Graphics.ts +176 -174
  140. package/src/utils/d3Utils.ts +92 -92
  141. package/src/utils/observables.ts +14 -14
  142. package/src/utils/orbchartsUtils.ts +129 -129
  143. package/tsconfig.base.json +13 -13
  144. package/tsconfig.json +2 -2
  145. package/vite.config.js +22 -22
  146. package/dist/orbcharts-plugins-basic/src/grid/plugins/GridZoom.d.ts +0 -1
  147. package/dist/orbcharts-plugins-basic/src/grid/plugins/StackedBar.d.ts +0 -1
  148. package/dist/orbcharts-plugins-basic/src/index.d.ts +0 -7
  149. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiStackedBar.d.ts +0 -1
  150. package/dist/orbcharts-plugins-basic/src/multiValue/defaults.d.ts +0 -9
  151. package/dist/orbcharts-plugins-basic/src/multiValue/multiValueObservables.d.ts +0 -33
  152. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/XYZoom.d.ts +0 -1
  153. /package/dist/{orbcharts-plugins-basic/lib → lib}/core-types.d.ts +0 -0
  154. /package/dist/{orbcharts-plugins-basic/lib → lib}/core.d.ts +0 -0
  155. /package/dist/{orbcharts-plugins-basic/lib → lib}/plugins-basic-types.d.ts +0 -0
  156. /package/dist/{orbcharts-plugins-basic/src → src}/base/BaseGroupAxis.d.ts +0 -0
  157. /package/dist/{orbcharts-plugins-basic/src → src}/base/BaseLegend.d.ts +0 -0
  158. /package/dist/{orbcharts-plugins-basic/src → src}/base/BaseTooltip.d.ts +0 -0
  159. /package/dist/{orbcharts-plugins-basic/src → src}/base/types.d.ts +0 -0
  160. /package/dist/{orbcharts-plugins-basic/src → src}/const.d.ts +0 -0
  161. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/Bars.d.ts +0 -0
  162. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/BarsPN.d.ts +0 -0
  163. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/BarsTriangle.d.ts +0 -0
  164. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/Dots.d.ts +0 -0
  165. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/GridLegend.d.ts +0 -0
  166. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/GridTooltip.d.ts +0 -0
  167. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/GroupAux.d.ts +0 -0
  168. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/GroupAxis.d.ts +0 -0
  169. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/LineAreas.d.ts +0 -0
  170. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/Lines.d.ts +0 -0
  171. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/StackedValueAxis.d.ts +0 -0
  172. /package/dist/{orbcharts-plugins-basic/src → src}/grid/plugins/ValueAxis.d.ts +0 -0
  173. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/multiGridObservables.d.ts +0 -0
  174. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/plugins/MultiBars.d.ts +0 -0
  175. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/plugins/MultiBarsTriangle.d.ts +0 -0
  176. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/plugins/MultiDots.d.ts +0 -0
  177. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/plugins/MultiGridLegend.d.ts +0 -0
  178. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/plugins/MultiGridTooltip.d.ts +0 -0
  179. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/plugins/MultiGroupAxis.d.ts +0 -0
  180. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/plugins/MultiLineAreas.d.ts +0 -0
  181. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/plugins/MultiLines.d.ts +0 -0
  182. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/plugins/MultiStackedValueAxis.d.ts +0 -0
  183. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/plugins/MultiValueAxis.d.ts +0 -0
  184. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/plugins/OverlappingStackedValueAxes.d.ts +0 -0
  185. /package/dist/{orbcharts-plugins-basic/src → src}/multiGrid/plugins/OverlappingValueAxes.d.ts +0 -0
  186. /package/dist/{orbcharts-plugins-basic/src → src}/multiValue/plugins/MultiValueLegend.d.ts +0 -0
  187. /package/dist/{orbcharts-plugins-basic/src → src}/multiValue/plugins/MultiValueTooltip.d.ts +0 -0
  188. /package/dist/{orbcharts-plugins-basic/src/multiValue/plugins/Ranking.d.ts → src/multiValue/plugins/OrdinalBubbles.d.ts} +0 -0
  189. /package/dist/{orbcharts-plugins-basic/src/multiValue/plugins/RankingAxis.d.ts → src/multiValue/plugins/OrdinalXAxis.d.ts} +0 -0
  190. /package/dist/{orbcharts-plugins-basic/src/noneData/plugins/Container.d.ts → src/multiValue/plugins/RacingCounterAxis.d.ts} +0 -0
  191. /package/dist/{orbcharts-plugins-basic/src/noneData/plugins/Tooltip.d.ts → src/multiValue/plugins/RankingAxis_legacy.d.ts} +0 -0
  192. /package/dist/{orbcharts-plugins-basic/src → src}/multiValue/plugins/Scatter.d.ts +0 -0
  193. /package/dist/{orbcharts-plugins-basic/src → src}/multiValue/plugins/ScatterBubbles.d.ts +0 -0
  194. /package/dist/{orbcharts-plugins-basic/src → src}/multiValue/plugins/XYAux.d.ts +0 -0
  195. /package/dist/{orbcharts-plugins-basic/src/multiValue/plugins/XYAxes.d.ts → src/multiValue/plugins/XYAxes_legacy.d.ts} +0 -0
  196. /package/dist/{orbcharts-plugins-basic/src → src}/noneData/defaults.d.ts +0 -0
  197. /package/dist/{orbcharts-plugins-basic/src → src}/noneData/index.d.ts +0 -0
  198. /package/dist/{orbcharts-plugins-basic/src/series/plugins/Waffle.d.ts → src/noneData/plugins/Container.d.ts} +0 -0
  199. /package/{src/multiValue/plugins/Ranking.ts → dist/src/noneData/plugins/Tooltip.d.ts} +0 -0
  200. /package/dist/{orbcharts-plugins-basic/src → src}/relationship/defaults.d.ts +0 -0
  201. /package/dist/{orbcharts-plugins-basic/src → src}/relationship/index.d.ts +0 -0
  202. /package/dist/{orbcharts-plugins-basic/src → src}/relationship/plugins/ForceDirected.d.ts +0 -0
  203. /package/dist/{orbcharts-plugins-basic/src → src}/relationship/plugins/ForceDirectedBubbles.d.ts +0 -0
  204. /package/dist/{orbcharts-plugins-basic/src → src}/relationship/plugins/RelationshipLegend.d.ts +0 -0
  205. /package/dist/{orbcharts-plugins-basic/src → src}/relationship/plugins/RelationshipTooltip.d.ts +0 -0
  206. /package/dist/{orbcharts-plugins-basic/src → src}/relationship/relationshipObservables.d.ts +0 -0
  207. /package/dist/{orbcharts-plugins-basic/src → src}/series/defaults.d.ts +0 -0
  208. /package/dist/{orbcharts-plugins-basic/src → src}/series/index.d.ts +0 -0
  209. /package/dist/{orbcharts-plugins-basic/src → src}/series/plugins/Bubbles.d.ts +0 -0
  210. /package/dist/{orbcharts-plugins-basic/src → src}/series/plugins/Pie.d.ts +0 -0
  211. /package/dist/{orbcharts-plugins-basic/src → src}/series/plugins/PieEventTexts.d.ts +0 -0
  212. /package/dist/{orbcharts-plugins-basic/src → src}/series/plugins/PieLabels.d.ts +0 -0
  213. /package/dist/{orbcharts-plugins-basic/src → src}/series/plugins/Rose.d.ts +0 -0
  214. /package/dist/{orbcharts-plugins-basic/src → src}/series/plugins/RoseLabels.d.ts +0 -0
  215. /package/dist/{orbcharts-plugins-basic/src → src}/series/plugins/SeriesLegend.d.ts +0 -0
  216. /package/dist/{orbcharts-plugins-basic/src → src}/series/plugins/SeriesTooltip.d.ts +0 -0
  217. /package/{src/multiValue/plugins/RankingAxis.ts → dist/src/series/plugins/Waffle.d.ts} +0 -0
  218. /package/dist/{orbcharts-plugins-basic/src → src}/series/seriesObservables.d.ts +0 -0
  219. /package/dist/{orbcharts-plugins-basic/src → src}/series/seriesUtils.d.ts +0 -0
  220. /package/dist/{orbcharts-plugins-basic/src → src}/tree/defaults.d.ts +0 -0
  221. /package/dist/{orbcharts-plugins-basic/src → src}/tree/index.d.ts +0 -0
  222. /package/dist/{orbcharts-plugins-basic/src → src}/tree/plugins/TreeLegend.d.ts +0 -0
  223. /package/dist/{orbcharts-plugins-basic/src → src}/tree/plugins/TreeMap.d.ts +0 -0
  224. /package/dist/{orbcharts-plugins-basic/src → src}/tree/plugins/TreeTooltip.d.ts +0 -0
  225. /package/dist/{orbcharts-plugins-basic/src → src}/utils/d3Utils.d.ts +0 -0
  226. /package/dist/{orbcharts-plugins-basic/src → src}/utils/observables.d.ts +0 -0
  227. /package/dist/{orbcharts-plugins-basic/src → src}/utils/orbchartsUtils.d.ts +0 -0
  228. /package/dist/{orbcharts-plugins-basic/vite.config.d.ts → vite.config.d.ts} +0 -0
@@ -1,299 +1,300 @@
1
- import * as d3 from 'd3'
2
- import {
3
- of,
4
- map,
5
- switchMap,
6
- combineLatest,
7
- takeUntil,
8
- distinctUntilChanged,
9
- shareReplay,
10
- iif,
11
- Observable,
12
- Subject } from 'rxjs'
13
- import type { DefinePluginConfig } from '../../../lib/core-types'
14
- import type { ContextObserverMultiGrid, DataFormatterGrid, DataFormatterTypeMap, Layout } from '../../../lib/core-types'
15
- import {
16
- defineMultiGridPlugin } from '../../../lib/core'
17
- import { DEFAULT_OVERLAPPING_STACKED_VALUE_AXES_PARAMS } from '../defaults'
18
- import { createBaseValueAxis } from '../../base/BaseValueAxis'
19
- import { multiGridPluginDetailObservables } from '../multiGridObservables'
20
- import { getClassName, getUniID } from '../../utils/orbchartsUtils'
21
- import { gridAxesTransformObservable, gridAxesReverseTransformObservable, gridContainerPositionObservable } from '../../../lib/core'
22
- import { LAYER_INDEX_OF_AXIS } from '../../const'
23
-
24
- const pluginName = 'OverlappingStackedValueAxes'
25
-
26
- const gridClassName = getClassName(pluginName, 'grid')
27
-
28
- const pluginConfig: DefinePluginConfig<typeof pluginName, typeof DEFAULT_OVERLAPPING_STACKED_VALUE_AXES_PARAMS> = {
29
- name: pluginName,
30
- defaultParams: DEFAULT_OVERLAPPING_STACKED_VALUE_AXES_PARAMS,
31
- layerIndex: LAYER_INDEX_OF_AXIS,
32
- validator: (params, { validateColumns }) => {
33
- const result = validateColumns(params, {
34
- firstAxis: {
35
- toBeTypes: ['object']
36
- },
37
- secondAxis: {
38
- toBeTypes: ['object']
39
- },
40
- gridIndexes: {
41
- toBe: '[number, number]',
42
- test: (value: any) => {
43
- return Array.isArray(value) && value.length === 2
44
- }
45
- }
46
- })
47
- if (params.firstAxis) {
48
- const firstAxisResult = validateColumns(params.firstAxis, {
49
- labelOffset: {
50
- toBe: '[number, number]',
51
- test: (value: any) => {
52
- return Array.isArray(value)
53
- && value.length === 2
54
- && typeof value[0] === 'number'
55
- && typeof value[1] === 'number'
56
- }
57
- },
58
- labelColorType: {
59
- toBeOption: 'ColorType',
60
- },
61
- axisLineVisible: {
62
- toBeTypes: ['boolean']
63
- },
64
- axisLineColorType: {
65
- toBeOption: 'ColorType',
66
- },
67
- ticks: {
68
- toBeTypes: ['number']
69
- },
70
- tickFormat: {
71
- toBeTypes: ['string', 'Function']
72
- },
73
- tickLineVisible: {
74
- toBeTypes: ['boolean']
75
- },
76
- tickPadding: {
77
- toBeTypes: ['number']
78
- },
79
- tickFullLine: {
80
- toBeTypes: ['boolean']
81
- },
82
- tickFullLineDasharray: {
83
- toBeTypes: ['string']
84
- },
85
- tickColorType: {
86
- toBeOption: 'ColorType',
87
- },
88
- tickTextRotate: {
89
- toBeTypes: ['number']
90
- },
91
- tickTextColorType: {
92
- toBeOption: 'ColorType',
93
- }
94
- })
95
- if (firstAxisResult.status === 'error') {
96
- return firstAxisResult
97
- }
98
- }
99
- if (params.secondAxis) {
100
- const secondAxisResult = validateColumns(params.secondAxis, {
101
- labelOffset: {
102
- toBe: '[number, number]',
103
- test: (value: any) => {
104
- return Array.isArray(value)
105
- && value.length === 2
106
- && typeof value[0] === 'number'
107
- && typeof value[1] === 'number'
108
- }
109
- },
110
- labelColorType: {
111
- toBeOption: 'ColorType',
112
- },
113
- axisLineVisible: {
114
- toBeTypes: ['boolean']
115
- },
116
- axisLineColorType: {
117
- toBeOption: 'ColorType',
118
- },
119
- ticks: {
120
- toBeTypes: ['number']
121
- },
122
- tickFormat: {
123
- toBeTypes: ['string', 'Function']
124
- },
125
- tickLineVisible: {
126
- toBeTypes: ['boolean']
127
- },
128
- tickPadding: {
129
- toBeTypes: ['number']
130
- },
131
- tickFullLine: {
132
- toBeTypes: ['boolean']
133
- },
134
- tickFullLineDasharray: {
135
- toBeTypes: ['string']
136
- },
137
- tickColorType: {
138
- toBeOption: 'ColorType',
139
- },
140
- tickTextRotate: {
141
- toBeTypes: ['number']
142
- },
143
- tickTextColorType: {
144
- toBeOption: 'ColorType',
145
- }
146
- })
147
- if (secondAxisResult.status === 'error') {
148
- return secondAxisResult
149
- }
150
- }
151
- return result
152
- }
153
- }
154
-
155
- // 第一個圖軸使用堆疊的資料,第二個圖軸使用原始資料
156
- export const OverlappingStackedValueAxes = defineMultiGridPlugin(pluginConfig)(({ selection, name, subject, observer }) => {
157
- const destroy$ = new Subject()
158
-
159
- const unsubscribeFnArr: (() => void)[] = []
160
-
161
- const firstGridIndex$ = observer.fullParams$.pipe(
162
- takeUntil(destroy$),
163
- map(fullParams => fullParams.gridIndexes[0])
164
- )
165
-
166
- const secondGridIndex$ = observer.fullParams$.pipe(
167
- takeUntil(destroy$),
168
- map(fullParams => fullParams.gridIndexes[1])
169
- )
170
-
171
- // 為了要反轉第二個valueAxis的位置所以要重新計算
172
- const secondGridDataFormatter$: Observable<DataFormatterGrid> = combineLatest({
173
- firstGridIndex: firstGridIndex$,
174
- secondGridIndex: secondGridIndex$,
175
- fullDataFormatter: observer.fullDataFormatter$,
176
- }).pipe(
177
- takeUntil(destroy$),
178
- switchMap(async (d) => d),
179
- map(data => {
180
- if (!data.fullDataFormatter.gridList[data.secondGridIndex]) {
181
- data.fullDataFormatter.gridList[data.secondGridIndex] = Object.assign({}, data.fullDataFormatter.gridList[data.firstGridIndex])
182
- }
183
- const position = data.fullDataFormatter.gridList[data.firstGridIndex].valueAxis.position
184
- // 反轉第二個valueAxis的位置
185
- let reversePosition = position
186
- if (position === 'left') {
187
- reversePosition = 'right'
188
- } else if (position === 'bottom') {
189
- reversePosition = 'top'
190
- } else if (position === 'top') {
191
- reversePosition = 'bottom'
192
- } else if (position === 'right') {
193
- reversePosition = 'left'
194
- }
195
- return <DataFormatterGrid>{
196
- type: 'grid',
197
- visibleFilter: data.fullDataFormatter.visibleFilter as any,
198
- // grid: {
199
- ...data.fullDataFormatter.gridList[data.secondGridIndex],
200
- valueAxis: {
201
- ...data.fullDataFormatter.gridList[data.secondGridIndex].valueAxis,
202
- position: reversePosition
203
- },
204
- // },
205
- container: {
206
- ...data.fullDataFormatter.container
207
- }
208
- }
209
- })
210
- )
211
-
212
- const multiGridPluginDetail$ = of(observer).pipe(
213
- takeUntil(destroy$),
214
- map(observer => {
215
- // 將observer的gridIndexes限制在2個
216
- return {
217
- ...observer,
218
- fullParams$: observer.fullParams$.pipe(
219
- map(fullParams => {
220
- if (fullParams.gridIndexes.length > 2) {
221
- fullParams.gridIndexes.length = 2
222
- }
223
- return fullParams
224
- })
225
- )
226
- }
227
- }),
228
- switchMap(observer => multiGridPluginDetailObservables(observer)),
229
- map(data => {
230
- return data.map((observables, index) => {
231
- if (index === 0) {
232
- return observables
233
- }
234
- // index === 1,將跟第二個valueAxis有關的observables全部重新計算
235
- const gridAxesTransform$ = gridAxesTransformObservable({
236
- fullDataFormatter$: secondGridDataFormatter$,
237
- layout$: observer.layout$
238
- })
239
- const gridAxesReverseTransform$ = gridAxesReverseTransformObservable({
240
- gridAxesTransform$
241
- })
242
- const gridContainerPosition$ = gridContainerPositionObservable({
243
- computedData$: observables.computedData$,
244
- fullDataFormatter$: secondGridDataFormatter$,
245
- layout$: observer.layout$
246
- })
247
- return {
248
- ...observables,
249
- dataFormatter$: secondGridDataFormatter$,
250
- gridAxesTransform$,
251
- gridAxesReverseTransform$,
252
- gridContainerPosition$,
253
- }
254
- })
255
- })
256
- )
257
-
258
- multiGridPluginDetail$
259
- .pipe(
260
- takeUntil(destroy$)
261
- )
262
- .subscribe(data => {
263
- // 每次重新計算時,清除之前的訂閱
264
- unsubscribeFnArr.forEach(fn => fn())
265
-
266
- selection.selectAll(`g.${gridClassName}`)
267
- .data(data)
268
- .join('g')
269
- .attr('class', gridClassName)
270
- .each((d, i, g) => {
271
- if (i > 1) {
272
- return
273
- }
274
-
275
- const gridSelection = d3.select(g[i])
276
-
277
- unsubscribeFnArr[i] = createBaseValueAxis(pluginName, {
278
- selection: gridSelection,
279
- computedData$: i === 0 ? d.computedStackedData$ : d.computedData$, // 第一個圖軸計算疊加value的資料
280
- filteredMinMaxValue$: d.filteredMinMaxValue$,
281
- fullParams$: observer.fullParams$.pipe(
282
- map(fullParams => i === 0 ? fullParams.firstAxis : fullParams.secondAxis)
283
- ),
284
- fullDataFormatter$: d.dataFormatter$,
285
- fullChartParams$: observer.fullChartParams$,
286
- gridAxesTransform$: d.gridAxesTransform$,
287
- gridAxesReverseTransform$: d.gridAxesReverseTransform$,
288
- gridAxesSize$: d.gridAxesSize$,
289
- gridContainerPosition$: d.gridContainerPosition$,
290
- isSeriesSeprate$: d.isSeriesSeprate$,
291
- })
292
- })
293
- })
294
-
295
- return () => {
296
- destroy$.next(undefined)
297
- unsubscribeFnArr.forEach(fn => fn())
298
- }
299
- })
1
+ import * as d3 from 'd3'
2
+ import {
3
+ of,
4
+ map,
5
+ switchMap,
6
+ combineLatest,
7
+ takeUntil,
8
+ distinctUntilChanged,
9
+ shareReplay,
10
+ iif,
11
+ Observable,
12
+ Subject } from 'rxjs'
13
+ import type { DefinePluginConfig } from '../../../lib/core-types'
14
+ import type { ContextObserverMultiGrid, DataFormatterGrid, DataFormatterTypeMap, Layout } from '../../../lib/core-types'
15
+ import {
16
+ defineMultiGridPlugin } from '../../../lib/core'
17
+ import { DEFAULT_OVERLAPPING_STACKED_VALUE_AXES_PARAMS } from '../defaults'
18
+ import { createBaseValueAxis } from '../../base/BaseValueAxis'
19
+ import { multiGridPluginDetailObservables } from '../multiGridObservables'
20
+ import { getClassName, getUniID } from '../../utils/orbchartsUtils'
21
+ import { gridAxesTransformObservable, gridAxesReverseTransformObservable, gridContainerPositionObservable } from '../../../lib/core'
22
+ // import { gridAxesTransformObservable, gridAxesReverseTransformObservable, gridContainerPositionObservable } from '@orbcharts/core/src'
23
+ import { LAYER_INDEX_OF_AXIS } from '../../const'
24
+
25
+ const pluginName = 'OverlappingStackedValueAxes'
26
+
27
+ const gridClassName = getClassName(pluginName, 'grid')
28
+
29
+ const pluginConfig: DefinePluginConfig<typeof pluginName, typeof DEFAULT_OVERLAPPING_STACKED_VALUE_AXES_PARAMS> = {
30
+ name: pluginName,
31
+ defaultParams: DEFAULT_OVERLAPPING_STACKED_VALUE_AXES_PARAMS,
32
+ layerIndex: LAYER_INDEX_OF_AXIS,
33
+ validator: (params, { validateColumns }) => {
34
+ const result = validateColumns(params, {
35
+ firstAxis: {
36
+ toBeTypes: ['object']
37
+ },
38
+ secondAxis: {
39
+ toBeTypes: ['object']
40
+ },
41
+ gridIndexes: {
42
+ toBe: '[number, number]',
43
+ test: (value: any) => {
44
+ return Array.isArray(value) && value.length === 2
45
+ }
46
+ }
47
+ })
48
+ if (params.firstAxis) {
49
+ const firstAxisResult = validateColumns(params.firstAxis, {
50
+ labelOffset: {
51
+ toBe: '[number, number]',
52
+ test: (value: any) => {
53
+ return Array.isArray(value)
54
+ && value.length === 2
55
+ && typeof value[0] === 'number'
56
+ && typeof value[1] === 'number'
57
+ }
58
+ },
59
+ labelColorType: {
60
+ toBeOption: 'ColorType',
61
+ },
62
+ axisLineVisible: {
63
+ toBeTypes: ['boolean']
64
+ },
65
+ axisLineColorType: {
66
+ toBeOption: 'ColorType',
67
+ },
68
+ ticks: {
69
+ toBeTypes: ['number']
70
+ },
71
+ tickFormat: {
72
+ toBeTypes: ['string', 'Function']
73
+ },
74
+ tickLineVisible: {
75
+ toBeTypes: ['boolean']
76
+ },
77
+ tickPadding: {
78
+ toBeTypes: ['number']
79
+ },
80
+ tickFullLine: {
81
+ toBeTypes: ['boolean']
82
+ },
83
+ tickFullLineDasharray: {
84
+ toBeTypes: ['string']
85
+ },
86
+ tickColorType: {
87
+ toBeOption: 'ColorType',
88
+ },
89
+ tickTextRotate: {
90
+ toBeTypes: ['number']
91
+ },
92
+ tickTextColorType: {
93
+ toBeOption: 'ColorType',
94
+ }
95
+ })
96
+ if (firstAxisResult.status === 'error') {
97
+ return firstAxisResult
98
+ }
99
+ }
100
+ if (params.secondAxis) {
101
+ const secondAxisResult = validateColumns(params.secondAxis, {
102
+ labelOffset: {
103
+ toBe: '[number, number]',
104
+ test: (value: any) => {
105
+ return Array.isArray(value)
106
+ && value.length === 2
107
+ && typeof value[0] === 'number'
108
+ && typeof value[1] === 'number'
109
+ }
110
+ },
111
+ labelColorType: {
112
+ toBeOption: 'ColorType',
113
+ },
114
+ axisLineVisible: {
115
+ toBeTypes: ['boolean']
116
+ },
117
+ axisLineColorType: {
118
+ toBeOption: 'ColorType',
119
+ },
120
+ ticks: {
121
+ toBeTypes: ['number']
122
+ },
123
+ tickFormat: {
124
+ toBeTypes: ['string', 'Function']
125
+ },
126
+ tickLineVisible: {
127
+ toBeTypes: ['boolean']
128
+ },
129
+ tickPadding: {
130
+ toBeTypes: ['number']
131
+ },
132
+ tickFullLine: {
133
+ toBeTypes: ['boolean']
134
+ },
135
+ tickFullLineDasharray: {
136
+ toBeTypes: ['string']
137
+ },
138
+ tickColorType: {
139
+ toBeOption: 'ColorType',
140
+ },
141
+ tickTextRotate: {
142
+ toBeTypes: ['number']
143
+ },
144
+ tickTextColorType: {
145
+ toBeOption: 'ColorType',
146
+ }
147
+ })
148
+ if (secondAxisResult.status === 'error') {
149
+ return secondAxisResult
150
+ }
151
+ }
152
+ return result
153
+ }
154
+ }
155
+
156
+ // 第一個圖軸使用堆疊的資料,第二個圖軸使用原始資料
157
+ export const OverlappingStackedValueAxes = defineMultiGridPlugin(pluginConfig)(({ selection, name, subject, observer }) => {
158
+ const destroy$ = new Subject()
159
+
160
+ const unsubscribeFnArr: (() => void)[] = []
161
+
162
+ const firstGridIndex$ = observer.fullParams$.pipe(
163
+ takeUntil(destroy$),
164
+ map(fullParams => fullParams.gridIndexes[0])
165
+ )
166
+
167
+ const secondGridIndex$ = observer.fullParams$.pipe(
168
+ takeUntil(destroy$),
169
+ map(fullParams => fullParams.gridIndexes[1])
170
+ )
171
+
172
+ // 為了要反轉第二個valueAxis的位置所以要重新計算
173
+ const secondGridDataFormatter$: Observable<DataFormatterGrid> = combineLatest({
174
+ firstGridIndex: firstGridIndex$,
175
+ secondGridIndex: secondGridIndex$,
176
+ fullDataFormatter: observer.fullDataFormatter$,
177
+ }).pipe(
178
+ takeUntil(destroy$),
179
+ switchMap(async (d) => d),
180
+ map(data => {
181
+ if (!data.fullDataFormatter.gridList[data.secondGridIndex]) {
182
+ data.fullDataFormatter.gridList[data.secondGridIndex] = Object.assign({}, data.fullDataFormatter.gridList[data.firstGridIndex])
183
+ }
184
+ const position = data.fullDataFormatter.gridList[data.firstGridIndex].valueAxis.position
185
+ // 反轉第二個valueAxis的位置
186
+ let reversePosition = position
187
+ if (position === 'left') {
188
+ reversePosition = 'right'
189
+ } else if (position === 'bottom') {
190
+ reversePosition = 'top'
191
+ } else if (position === 'top') {
192
+ reversePosition = 'bottom'
193
+ } else if (position === 'right') {
194
+ reversePosition = 'left'
195
+ }
196
+ return <DataFormatterGrid>{
197
+ type: 'grid',
198
+ visibleFilter: data.fullDataFormatter.visibleFilter as any,
199
+ // grid: {
200
+ ...data.fullDataFormatter.gridList[data.secondGridIndex],
201
+ valueAxis: {
202
+ ...data.fullDataFormatter.gridList[data.secondGridIndex].valueAxis,
203
+ position: reversePosition
204
+ },
205
+ // },
206
+ container: {
207
+ ...data.fullDataFormatter.container
208
+ }
209
+ }
210
+ })
211
+ )
212
+
213
+ const multiGridPluginDetail$ = of(observer).pipe(
214
+ takeUntil(destroy$),
215
+ map(observer => {
216
+ // 將observer的gridIndexes限制在2個
217
+ return {
218
+ ...observer,
219
+ fullParams$: observer.fullParams$.pipe(
220
+ map(fullParams => {
221
+ if (fullParams.gridIndexes.length > 2) {
222
+ fullParams.gridIndexes.length = 2
223
+ }
224
+ return fullParams
225
+ })
226
+ )
227
+ }
228
+ }),
229
+ switchMap(observer => multiGridPluginDetailObservables(observer)),
230
+ map(data => {
231
+ return data.map((observables, index) => {
232
+ if (index === 0) {
233
+ return observables
234
+ }
235
+ // index === 1,將跟第二個valueAxis有關的observables全部重新計算
236
+ const gridAxesTransform$ = gridAxesTransformObservable({
237
+ fullDataFormatter$: secondGridDataFormatter$,
238
+ layout$: observer.layout$
239
+ })
240
+ const gridAxesReverseTransform$ = gridAxesReverseTransformObservable({
241
+ gridAxesTransform$
242
+ })
243
+ const gridContainerPosition$ = gridContainerPositionObservable({
244
+ computedData$: observables.computedData$,
245
+ fullDataFormatter$: secondGridDataFormatter$,
246
+ layout$: observer.layout$
247
+ })
248
+ return {
249
+ ...observables,
250
+ dataFormatter$: secondGridDataFormatter$,
251
+ gridAxesTransform$,
252
+ gridAxesReverseTransform$,
253
+ gridContainerPosition$,
254
+ }
255
+ })
256
+ })
257
+ )
258
+
259
+ multiGridPluginDetail$
260
+ .pipe(
261
+ takeUntil(destroy$)
262
+ )
263
+ .subscribe(data => {
264
+ // 每次重新計算時,清除之前的訂閱
265
+ unsubscribeFnArr.forEach(fn => fn())
266
+
267
+ selection.selectAll(`g.${gridClassName}`)
268
+ .data(data)
269
+ .join('g')
270
+ .attr('class', gridClassName)
271
+ .each((d, i, g) => {
272
+ if (i > 1) {
273
+ return
274
+ }
275
+
276
+ const gridSelection = d3.select(g[i])
277
+
278
+ unsubscribeFnArr[i] = createBaseValueAxis(pluginName, {
279
+ selection: gridSelection,
280
+ computedData$: i === 0 ? d.computedStackedData$ : d.computedData$, // 第一個圖軸計算疊加value的資料
281
+ filteredMinMaxValue$: d.filteredMinMaxValue$,
282
+ fullParams$: observer.fullParams$.pipe(
283
+ map(fullParams => i === 0 ? fullParams.firstAxis : fullParams.secondAxis)
284
+ ),
285
+ fullDataFormatter$: d.dataFormatter$,
286
+ fullChartParams$: observer.fullChartParams$,
287
+ gridAxesTransform$: d.gridAxesTransform$,
288
+ gridAxesReverseTransform$: d.gridAxesReverseTransform$,
289
+ gridAxesSize$: d.gridAxesSize$,
290
+ gridContainerPosition$: d.gridContainerPosition$,
291
+ isSeriesSeprate$: d.isSeriesSeprate$,
292
+ })
293
+ })
294
+ })
295
+
296
+ return () => {
297
+ destroy$.next(undefined)
298
+ unsubscribeFnArr.forEach(fn => fn())
299
+ }
300
+ })