@orbcharts/plugins-basic 3.0.0-alpha.79 → 3.0.0-beta.10

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 (216) hide show
  1. package/LICENSE +200 -200
  2. package/dist/{src → orbcharts-plugins-basic/src}/base/BaseBars.d.ts +2 -2
  3. package/dist/{src → orbcharts-plugins-basic/src}/base/BaseBarsTriangle.d.ts +2 -2
  4. package/dist/{src → orbcharts-plugins-basic/src}/base/BaseDots.d.ts +2 -2
  5. package/dist/{src → orbcharts-plugins-basic/src}/base/BaseGroupAxis.d.ts +2 -2
  6. package/dist/{src → orbcharts-plugins-basic/src}/base/BaseLegend.d.ts +1 -1
  7. package/dist/{src → orbcharts-plugins-basic/src}/base/BaseLineAreas.d.ts +3 -3
  8. package/dist/{src → orbcharts-plugins-basic/src}/base/BaseLines.d.ts +3 -3
  9. package/dist/{src/base/BaseBarStack.d.ts → orbcharts-plugins-basic/src/base/BaseStackedBar.d.ts} +6 -6
  10. package/dist/orbcharts-plugins-basic/src/base/BaseTooltip.d.ts +14 -0
  11. package/dist/{src → orbcharts-plugins-basic/src}/base/BaseValueAxis.d.ts +3 -2
  12. package/dist/{src → orbcharts-plugins-basic/src}/grid/defaults.d.ts +6 -5
  13. package/dist/{src → orbcharts-plugins-basic/src}/grid/gridObservables.d.ts +5 -5
  14. package/dist/{src → orbcharts-plugins-basic/src}/grid/index.d.ts +4 -3
  15. package/dist/orbcharts-plugins-basic/src/grid/plugins/GridTooltip.d.ts +1 -0
  16. package/dist/orbcharts-plugins-basic/src/grid/plugins/GridZoom.d.ts +1 -0
  17. package/dist/orbcharts-plugins-basic/src/grid/plugins/StackedBar.d.ts +1 -0
  18. package/dist/orbcharts-plugins-basic/src/grid/plugins/StackedValueAxis.d.ts +1 -0
  19. package/dist/orbcharts-plugins-basic/src/index.d.ts +7 -0
  20. package/dist/orbcharts-plugins-basic/src/multiGrid/defaults.d.ts +15 -0
  21. package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/index.d.ts +4 -3
  22. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiGridTooltip.d.ts +1 -0
  23. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiStackedBar.d.ts +1 -0
  24. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiStackedValueAxis.d.ts +1 -0
  25. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/OverlappingStackedValueAxes.d.ts +1 -0
  26. package/dist/orbcharts-plugins-basic/src/multiValue/defaults.d.ts +9 -0
  27. package/dist/orbcharts-plugins-basic/src/multiValue/index.d.ts +8 -0
  28. package/dist/orbcharts-plugins-basic/src/multiValue/multiValueObservables.d.ts +33 -0
  29. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/MultiValueLegend.d.ts +1 -0
  30. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/MultiValueTooltip.d.ts +1 -0
  31. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/Scatter.d.ts +3 -0
  32. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/ScatterBubbles.d.ts +3 -0
  33. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/XYAux.d.ts +3 -0
  34. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/XYAxes.d.ts +3 -0
  35. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/XYZoom.d.ts +1 -0
  36. package/dist/orbcharts-plugins-basic/src/noneData/index.d.ts +1 -0
  37. package/dist/orbcharts-plugins-basic/src/relationship/defaults.d.ts +6 -0
  38. package/dist/orbcharts-plugins-basic/src/relationship/index.d.ts +5 -0
  39. package/dist/orbcharts-plugins-basic/src/relationship/plugins/ForceDirected.d.ts +3 -0
  40. package/dist/orbcharts-plugins-basic/src/relationship/plugins/ForceDirectedBubbles.d.ts +3 -0
  41. package/dist/orbcharts-plugins-basic/src/relationship/plugins/RelationshipLegend.d.ts +1 -0
  42. package/dist/orbcharts-plugins-basic/src/relationship/plugins/RelationshipTooltip.d.ts +1 -0
  43. package/dist/orbcharts-plugins-basic/src/relationship/relationshipObservables.d.ts +1 -0
  44. package/dist/{src → orbcharts-plugins-basic/src}/series/defaults.d.ts +2 -1
  45. package/dist/{src → orbcharts-plugins-basic/src}/series/index.d.ts +1 -0
  46. package/dist/orbcharts-plugins-basic/src/series/plugins/SeriesTooltip.d.ts +1 -0
  47. package/dist/{src → orbcharts-plugins-basic/src}/series/seriesObservables.d.ts +3 -3
  48. package/dist/orbcharts-plugins-basic/src/tree/defaults.d.ts +5 -0
  49. package/dist/{src → orbcharts-plugins-basic/src}/tree/index.d.ts +1 -0
  50. package/dist/orbcharts-plugins-basic/src/tree/plugins/TreeTooltip.d.ts +1 -0
  51. package/dist/{src → orbcharts-plugins-basic/src}/utils/commonUtils.d.ts +1 -1
  52. package/dist/{src → orbcharts-plugins-basic/src}/utils/d3Utils.d.ts +2 -2
  53. package/dist/{src → orbcharts-plugins-basic/src}/utils/observables.d.ts +1 -1
  54. package/dist/{src → orbcharts-plugins-basic/src}/utils/orbchartsUtils.d.ts +3 -3
  55. package/dist/orbcharts-plugins-basic.es.js +13490 -10057
  56. package/dist/orbcharts-plugins-basic.umd.js +179 -24
  57. package/dist/src/index.d.ts +1 -5
  58. package/lib/core-types.ts +7 -7
  59. package/lib/core.ts +6 -6
  60. package/lib/plugins-basic-types.ts +6 -6
  61. package/package.json +44 -44
  62. package/src/base/BaseBars.ts +765 -765
  63. package/src/base/BaseBarsTriangle.ts +676 -674
  64. package/src/base/BaseDots.ts +464 -515
  65. package/src/base/BaseGroupAxis.ts +679 -679
  66. package/src/base/BaseLegend.ts +684 -644
  67. package/src/base/BaseLineAreas.ts +629 -629
  68. package/src/base/BaseLines.ts +706 -706
  69. package/src/base/{BaseBarStack.ts → BaseStackedBar.ts} +782 -780
  70. package/src/base/BaseTooltip.ts +386 -0
  71. package/src/base/BaseValueAxis.ts +583 -580
  72. package/src/base/types.ts +2 -2
  73. package/src/const.ts +30 -30
  74. package/src/grid/defaults.ts +247 -128
  75. package/src/grid/gridObservables.ts +554 -545
  76. package/src/grid/index.ts +16 -15
  77. package/src/grid/plugins/Bars.ts +69 -69
  78. package/src/grid/plugins/BarsPN.ts +66 -66
  79. package/src/grid/plugins/BarsTriangle.ts +73 -73
  80. package/src/grid/plugins/Dots.ts +68 -68
  81. package/src/grid/plugins/GridLegend.ts +107 -96
  82. package/src/grid/plugins/GridTooltip.ts +66 -0
  83. package/src/grid/plugins/{ScalingArea.ts → GridZoom.ts} +218 -218
  84. package/src/grid/plugins/GroupAux.ts +1103 -1098
  85. package/src/grid/plugins/GroupAxis.ts +97 -97
  86. package/src/grid/plugins/LineAreas.ts +65 -65
  87. package/src/grid/plugins/Lines.ts +59 -59
  88. package/src/grid/plugins/{BarStack.ts → StackedBar.ts} +64 -64
  89. package/src/grid/plugins/{ValueStackAxis.ts → StackedValueAxis.ts} +96 -95
  90. package/src/grid/plugins/ValueAxis.ts +94 -93
  91. package/src/index.ts +6 -9
  92. package/src/multiGrid/defaults.ts +225 -159
  93. package/src/multiGrid/index.ts +15 -14
  94. package/src/multiGrid/multiGridObservables.ts +49 -49
  95. package/src/multiGrid/plugins/MultiBars.ts +108 -108
  96. package/src/multiGrid/plugins/MultiBarsTriangle.ts +114 -114
  97. package/src/multiGrid/plugins/MultiDots.ts +102 -102
  98. package/src/multiGrid/plugins/MultiGridLegend.ts +159 -148
  99. package/src/multiGrid/plugins/MultiGridTooltip.ts +66 -0
  100. package/src/multiGrid/plugins/MultiGroupAxis.ts +137 -137
  101. package/src/multiGrid/plugins/MultiLineAreas.ts +107 -107
  102. package/src/multiGrid/plugins/MultiLines.ts +101 -101
  103. package/src/multiGrid/plugins/{MultiBarStack.ts → MultiStackedBar.ts} +106 -106
  104. package/src/multiGrid/plugins/{MultiValueStackAxis.ts → MultiStackedValueAxis.ts} +134 -133
  105. package/src/multiGrid/plugins/MultiValueAxis.ts +134 -133
  106. package/src/multiGrid/plugins/{OverlappingValueStackAxes.ts → OverlappingStackedValueAxes.ts} +299 -298
  107. package/src/multiGrid/plugins/OverlappingValueAxes.ts +300 -299
  108. package/src/multiValue/defaults.ts +167 -0
  109. package/src/multiValue/index.ts +9 -0
  110. package/src/multiValue/multiValueObservables.ts +297 -0
  111. package/src/multiValue/plugins/MultiValueLegend.ts +107 -0
  112. package/src/multiValue/plugins/MultiValueTooltip.ts +66 -0
  113. package/src/multiValue/plugins/Scatter.ts +426 -0
  114. package/src/multiValue/plugins/ScatterBubbles.ts +554 -0
  115. package/src/multiValue/plugins/XYAux.ts +682 -0
  116. package/src/multiValue/plugins/XYAxes.ts +685 -0
  117. package/src/multiValue/plugins/XYZoom.ts +300 -0
  118. package/src/noneData/defaults.ts +102 -102
  119. package/src/noneData/index.ts +4 -4
  120. package/src/noneData/plugins/Container.ts +28 -28
  121. package/src/noneData/plugins/Tooltip.ts +374 -374
  122. package/src/relationship/defaults.ts +196 -0
  123. package/src/relationship/index.ts +5 -0
  124. package/src/relationship/plugins/ForceDirected.ts +1167 -0
  125. package/src/relationship/plugins/ForceDirectedBubbles.ts +1391 -0
  126. package/src/relationship/plugins/RelationshipLegend.ts +100 -0
  127. package/src/relationship/plugins/RelationshipTooltip.ts +66 -0
  128. package/src/relationship/relationshipObservables.ts +50 -0
  129. package/src/series/defaults.ts +207 -149
  130. package/src/series/index.ts +10 -9
  131. package/src/series/plugins/Bubbles.ts +606 -603
  132. package/src/series/plugins/Pie.ts +623 -623
  133. package/src/series/plugins/PieEventTexts.ts +284 -283
  134. package/src/series/plugins/PieLabels.ts +640 -640
  135. package/src/series/plugins/Rose.ts +516 -516
  136. package/src/series/plugins/RoseLabels.ts +600 -600
  137. package/src/series/plugins/SeriesLegend.ts +107 -96
  138. package/src/series/plugins/SeriesTooltip.ts +66 -0
  139. package/src/series/seriesObservables.ts +145 -145
  140. package/src/series/seriesUtils.ts +51 -51
  141. package/src/tree/defaults.ts +79 -23
  142. package/src/tree/index.ts +5 -4
  143. package/src/tree/plugins/TreeLegend.ts +100 -96
  144. package/src/tree/plugins/TreeMap.ts +333 -333
  145. package/src/tree/plugins/TreeTooltip.ts +66 -0
  146. package/src/utils/commonUtils.ts +21 -21
  147. package/src/utils/d3Graphics.ts +174 -174
  148. package/src/utils/d3Utils.ts +74 -73
  149. package/src/utils/observables.ts +14 -14
  150. package/src/utils/orbchartsUtils.ts +116 -100
  151. package/tsconfig.base.json +13 -13
  152. package/tsconfig.json +2 -2
  153. package/vite.config.js +22 -22
  154. package/dist/src/grid/plugins/BarStack.d.ts +0 -1
  155. package/dist/src/grid/plugins/ScalingArea.d.ts +0 -1
  156. package/dist/src/grid/plugins/ValueStackAxis.d.ts +0 -1
  157. package/dist/src/multiGrid/defaults.d.ts +0 -14
  158. package/dist/src/multiGrid/plugins/MultiBarStack.d.ts +0 -1
  159. package/dist/src/multiGrid/plugins/MultiValueStackAxis.d.ts +0 -1
  160. package/dist/src/multiGrid/plugins/OverlappingValueStackAxes.d.ts +0 -1
  161. package/dist/src/multiValue/plugins/Scatter.d.ts +0 -0
  162. package/dist/src/multiValue/plugins/ScatterAxes.d.ts +0 -0
  163. package/dist/src/noneData/index.d.ts +0 -2
  164. package/dist/src/noneData/plugins/Container.d.ts +0 -1
  165. package/dist/src/noneData/plugins/Tooltip.d.ts +0 -3
  166. package/dist/src/relationship/index.d.ts +0 -0
  167. package/dist/src/relationship/plugins/Relationship.d.ts +0 -0
  168. package/dist/src/tree/defaults.d.ts +0 -4
  169. package/src/base/BaseGroupArea.ts +0 -0
  170. package/src/multiValue/plugins/ScatterAxes.ts +0 -0
  171. package/src/relationship/plugins/Relationship.ts +0 -0
  172. /package/dist/{lib → orbcharts-plugins-basic/lib}/core-types.d.ts +0 -0
  173. /package/dist/{lib → orbcharts-plugins-basic/lib}/core.d.ts +0 -0
  174. /package/dist/{lib → orbcharts-plugins-basic/lib}/plugins-basic-types.d.ts +0 -0
  175. /package/dist/{src → orbcharts-plugins-basic/src}/base/types.d.ts +0 -0
  176. /package/dist/{src → orbcharts-plugins-basic/src}/const.d.ts +0 -0
  177. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/Bars.d.ts +0 -0
  178. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/BarsPN.d.ts +0 -0
  179. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/BarsTriangle.d.ts +0 -0
  180. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/Dots.d.ts +0 -0
  181. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/GridLegend.d.ts +0 -0
  182. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/GroupAux.d.ts +0 -0
  183. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/GroupAxis.d.ts +0 -0
  184. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/LineAreas.d.ts +0 -0
  185. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/Lines.d.ts +0 -0
  186. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/ValueAxis.d.ts +0 -0
  187. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/multiGridObservables.d.ts +0 -0
  188. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiBars.d.ts +0 -0
  189. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiBarsTriangle.d.ts +0 -0
  190. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiDots.d.ts +0 -0
  191. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiGridLegend.d.ts +0 -0
  192. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiGroupAxis.d.ts +0 -0
  193. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiLineAreas.d.ts +0 -0
  194. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiLines.d.ts +0 -0
  195. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiValueAxis.d.ts +0 -0
  196. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/OverlappingValueAxes.d.ts +0 -0
  197. /package/dist/{src/grid → orbcharts-plugins-basic/src/multiValue}/plugins/Ranking.d.ts +0 -0
  198. /package/dist/{src/grid → orbcharts-plugins-basic/src/multiValue}/plugins/RankingAxis.d.ts +0 -0
  199. /package/dist/{src → orbcharts-plugins-basic/src}/noneData/defaults.d.ts +0 -0
  200. /package/dist/{src/base/BaseGroupArea.d.ts → orbcharts-plugins-basic/src/noneData/plugins/Container.d.ts} +0 -0
  201. /package/dist/{src/multiValue/index.d.ts → orbcharts-plugins-basic/src/noneData/plugins/Tooltip.d.ts} +0 -0
  202. /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/Bubbles.d.ts +0 -0
  203. /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/Pie.d.ts +0 -0
  204. /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/PieEventTexts.d.ts +0 -0
  205. /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/PieLabels.d.ts +0 -0
  206. /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/Rose.d.ts +0 -0
  207. /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/RoseLabels.d.ts +0 -0
  208. /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/SeriesLegend.d.ts +0 -0
  209. /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/Waffle.d.ts +0 -0
  210. /package/dist/{src → orbcharts-plugins-basic/src}/series/seriesUtils.d.ts +0 -0
  211. /package/dist/{src → orbcharts-plugins-basic/src}/tree/plugins/TreeLegend.d.ts +0 -0
  212. /package/dist/{src → orbcharts-plugins-basic/src}/tree/plugins/TreeMap.d.ts +0 -0
  213. /package/dist/{src → orbcharts-plugins-basic/src}/utils/d3Graphics.d.ts +0 -0
  214. /package/dist/{vite.config.d.ts → orbcharts-plugins-basic/vite.config.d.ts} +0 -0
  215. /package/src/{grid → multiValue}/plugins/Ranking.ts +0 -0
  216. /package/src/{grid → multiValue}/plugins/RankingAxis.ts +0 -0
@@ -1,96 +1,107 @@
1
- import * as d3 from 'd3'
2
- import {
3
- combineLatest,
4
- map,
5
- switchMap,
6
- takeUntil,
7
- Observable,
8
- Subject } from 'rxjs'
9
- import type { DefinePluginConfig } from '../../../lib/core-types'
10
- import {
11
- defineSeriesPlugin } from '../../../lib/core'
12
- import { DEFAULT_SERIES_LEGEND_PARAMS } from '../defaults'
13
- import { createBaseLegend } from '../../base/BaseLegend'
14
- import { LAYER_INDEX_OF_INFO } from '../../const'
15
-
16
- const pluginName = 'SeriesLegend'
17
-
18
- const pluginConfig: DefinePluginConfig<typeof pluginName, typeof DEFAULT_SERIES_LEGEND_PARAMS> = {
19
- name: pluginName,
20
- defaultParams: DEFAULT_SERIES_LEGEND_PARAMS,
21
- layerIndex: LAYER_INDEX_OF_INFO,
22
- validator: (params, { validateColumns }) => {
23
- const result = validateColumns(params, {
24
- padding: {
25
- toBeTypes: ['number']
26
- },
27
- backgroundFill: {
28
- toBeOption: 'ColorType',
29
- },
30
- backgroundStroke: {
31
- toBeOption: 'ColorType',
32
- },
33
- gap: {
34
- toBeTypes: ['number']
35
- },
36
- listRectWidth: {
37
- toBeTypes: ['number']
38
- },
39
- listRectHeight: {
40
- toBeTypes: ['number']
41
- },
42
- listRectRadius: {
43
- toBeTypes: ['number']
44
- },
45
- textColorType: {
46
- toBeOption: 'ColorType',
47
- }
48
- })
49
- return result
50
- }
51
- }
52
-
53
- export const SeriesLegend = defineSeriesPlugin(pluginConfig)(({ selection, rootSelection, observer, subject }) => {
54
-
55
- const destroy$ = new Subject()
56
-
57
- const seriesLabels$: Observable<string[]> = observer.SeriesDataMap$.pipe(
58
- takeUntil(destroy$),
59
- map(data => {
60
- return Array.from(data.keys())
61
- })
62
- )
63
-
64
- // 全部列點矩型使用相同樣式參數
65
- const fullParams$ = observer.fullParams$.pipe(
66
- takeUntil(destroy$),
67
- map(d => {
68
- const seriesList = [
69
- {
70
- listRectWidth: d.listRectWidth,
71
- listRectHeight: d.listRectHeight,
72
- listRectRadius: d.listRectRadius,
73
- }
74
- ]
75
- return {
76
- ...d,
77
- seriesList
78
- }
79
- })
80
- )
81
-
82
- const unsubscribeBaseLegend = createBaseLegend(pluginName, {
83
- rootSelection,
84
- seriesLabels$,
85
- fullParams$,
86
- layout$: observer.layout$,
87
- fullChartParams$: observer.fullChartParams$,
88
- textSizePx$: observer.textSizePx$
89
- })
90
-
91
- return () => {
92
- destroy$.next(undefined)
93
- unsubscribeBaseLegend()
94
- }
95
- })
96
-
1
+ import * as d3 from 'd3'
2
+ import {
3
+ combineLatest,
4
+ map,
5
+ switchMap,
6
+ takeUntil,
7
+ Observable,
8
+ Subject } from 'rxjs'
9
+ import type { DefinePluginConfig } from '../../../lib/core-types'
10
+ import {
11
+ defineSeriesPlugin } from '../../../lib/core'
12
+ import { DEFAULT_SERIES_LEGEND_PARAMS } from '../defaults'
13
+ import { createBaseLegend } from '../../base/BaseLegend'
14
+ import { LAYER_INDEX_OF_INFO } from '../../const'
15
+
16
+ const pluginName = 'SeriesLegend'
17
+
18
+ const pluginConfig: DefinePluginConfig<typeof pluginName, typeof DEFAULT_SERIES_LEGEND_PARAMS> = {
19
+ name: pluginName,
20
+ defaultParams: DEFAULT_SERIES_LEGEND_PARAMS,
21
+ layerIndex: LAYER_INDEX_OF_INFO,
22
+ validator: (params, { validateColumns }) => {
23
+ const result = validateColumns(params, {
24
+ placement: {
25
+ toBe: '"top" | "top-start" | "top-end" | "bottom" | "bottom-start" | "bottom-end" | "left" | "left-start" | "left-end" | "right" | "right-start" | "right-end"',
26
+ test: (value) => {
27
+ return [
28
+ 'top', 'top-start', 'top-end',
29
+ 'bottom', 'bottom-start', 'bottom-end',
30
+ 'left', 'left-start', 'left-end',
31
+ 'right', 'right-start', 'right-end'
32
+ ].includes(value)
33
+ }
34
+ },
35
+ padding: {
36
+ toBeTypes: ['number']
37
+ },
38
+ backgroundFill: {
39
+ toBeOption: 'ColorType',
40
+ },
41
+ backgroundStroke: {
42
+ toBeOption: 'ColorType',
43
+ },
44
+ gap: {
45
+ toBeTypes: ['number']
46
+ },
47
+ listRectWidth: {
48
+ toBeTypes: ['number']
49
+ },
50
+ listRectHeight: {
51
+ toBeTypes: ['number']
52
+ },
53
+ listRectRadius: {
54
+ toBeTypes: ['number']
55
+ },
56
+ textColorType: {
57
+ toBeOption: 'ColorType',
58
+ }
59
+ })
60
+ return result
61
+ }
62
+ }
63
+
64
+ export const SeriesLegend = defineSeriesPlugin(pluginConfig)(({ selection, rootSelection, observer, subject }) => {
65
+
66
+ const destroy$ = new Subject()
67
+
68
+ const legendLabels$: Observable<string[]> = observer.SeriesDataMap$.pipe(
69
+ takeUntil(destroy$),
70
+ map(data => {
71
+ return Array.from(data.keys())
72
+ })
73
+ )
74
+
75
+ // 全部列點矩型使用相同樣式參數
76
+ const fullParams$ = observer.fullParams$.pipe(
77
+ takeUntil(destroy$),
78
+ map(d => {
79
+ const labelList = [
80
+ {
81
+ listRectWidth: d.listRectWidth,
82
+ listRectHeight: d.listRectHeight,
83
+ listRectRadius: d.listRectRadius,
84
+ }
85
+ ]
86
+ return {
87
+ ...d,
88
+ labelList
89
+ }
90
+ })
91
+ )
92
+
93
+ const unsubscribeBaseLegend = createBaseLegend(pluginName, {
94
+ rootSelection,
95
+ legendLabels$,
96
+ fullParams$,
97
+ layout$: observer.layout$,
98
+ fullChartParams$: observer.fullChartParams$,
99
+ textSizePx$: observer.textSizePx$
100
+ })
101
+
102
+ return () => {
103
+ destroy$.next(undefined)
104
+ unsubscribeBaseLegend()
105
+ }
106
+ })
107
+
@@ -0,0 +1,66 @@
1
+ import {
2
+ Subject,
3
+ } from 'rxjs'
4
+ import type { DefinePluginConfig } from '../../../lib/core-types'
5
+ import {
6
+ defineSeriesPlugin } from '../../../lib/core'
7
+ import { DEFAULT_SERIES_TOOLTIP_PARAMS } from '../defaults'
8
+ import { LAYER_INDEX_OF_TOOLTIP } from '../../const'
9
+ import { createBaseTooltip } from '../../base/BaseTooltip'
10
+
11
+ const pluginName = 'SeriesTooltip'
12
+
13
+ const pluginConfig: DefinePluginConfig<typeof pluginName, typeof DEFAULT_SERIES_TOOLTIP_PARAMS> = {
14
+ name: pluginName,
15
+ defaultParams: DEFAULT_SERIES_TOOLTIP_PARAMS,
16
+ layerIndex: LAYER_INDEX_OF_TOOLTIP,
17
+ validator: (params, { validateColumns }) => {
18
+ const result = validateColumns(params, {
19
+ backgroundColorType: {
20
+ toBeOption: 'ColorType',
21
+ },
22
+ backgroundOpacity: {
23
+ toBeTypes: ['number']
24
+ },
25
+ strokeColorType: {
26
+ toBeOption: 'ColorType',
27
+ },
28
+ offset: {
29
+ toBe: '[number, number]',
30
+ test: (value: any) => {
31
+ return Array.isArray(value)
32
+ && value.length === 2
33
+ && typeof value[0] === 'number'
34
+ && typeof value[1] === 'number'
35
+ }
36
+ },
37
+ padding: {
38
+ toBeTypes: ['number']
39
+ },
40
+ textColorType: {
41
+ toBeOption: 'ColorType',
42
+ },
43
+ renderFn: {
44
+ toBeTypes: ['Function']
45
+ },
46
+ })
47
+ return result
48
+ }
49
+ }
50
+
51
+ export const SeriesTooltip = defineSeriesPlugin(pluginConfig)(({ selection, rootSelection, name, subject, observer }) => {
52
+ const destroy$ = new Subject()
53
+
54
+ const unsubscribeTooltip = createBaseTooltip(pluginName, {
55
+ rootSelection,
56
+ fullParams$: observer.fullParams$,
57
+ fullChartParams$: observer.fullChartParams$,
58
+ layout$: observer.layout$,
59
+ event$: subject.event$,
60
+ })
61
+
62
+ return () => {
63
+ destroy$.next(undefined)
64
+ unsubscribeTooltip()
65
+ }
66
+ })
@@ -1,145 +1,145 @@
1
- import * as d3 from 'd3'
2
- import {
3
- Observable,
4
- Subject,
5
- of,
6
- takeUntil,
7
- filter,
8
- first,
9
- map,
10
- switchMap,
11
- combineLatest,
12
- merge,
13
- shareReplay,
14
- distinctUntilChanged
15
- } from 'rxjs'
16
- import type {
17
- SeriesContainerPosition } from '../../lib/core-types'
18
- import { getClassName, getUniID } from '../utils/orbchartsUtils'
19
-
20
- function createSeriesSelection ({ selection, pluginName, separateSeries$, seriesLabels$ }: {
21
- selection: d3.Selection<any, unknown, any, unknown>
22
- pluginName: string
23
- separateSeries$: Observable<boolean>
24
- seriesLabels$: Observable<string[]>
25
- }) {
26
- const seriesClassName = getClassName(pluginName, 'series')
27
-
28
- return combineLatest({
29
- seriesLabels: seriesLabels$,
30
- separateSeries: separateSeries$
31
- }).pipe(
32
- switchMap(async d => d),
33
- map((data, i) => {
34
- const selectionData = data.separateSeries ? data.seriesLabels : [data.seriesLabels.join('')]
35
- return selection
36
- .selectAll<SVGGElement, string>(`g.${seriesClassName}`)
37
- .data(selectionData, d => d)
38
- .join(
39
- enter => {
40
- return enter
41
- .append('g')
42
- .classed(seriesClassName, true)
43
- },
44
- update => update,
45
- exit => exit.remove()
46
- )
47
- }),
48
- shareReplay(1)
49
- )
50
- }
51
-
52
- // series選取器,以起始座標位置為基準
53
- export const seriesStartSelectionObservable = ({ selection, pluginName, separateSeries$, seriesLabels$, seriesContainerPosition$ }: {
54
- selection: d3.Selection<any, unknown, any, unknown>
55
- pluginName: string
56
- separateSeries$: Observable<boolean>
57
- seriesLabels$: Observable<string[]>
58
- seriesContainerPosition$: Observable<SeriesContainerPosition[]>
59
- }) => {
60
-
61
- const seriesStartSelection$ = createSeriesSelection({ selection, pluginName, separateSeries$, seriesLabels$ })
62
-
63
- combineLatest({
64
- seriesStartSelection: seriesStartSelection$,
65
- seriesContainerPosition: seriesContainerPosition$
66
- }).pipe(
67
- switchMap(async d => d),
68
- // selection數量相同的時候才執行
69
- distinctUntilChanged((a, b) => a.seriesContainerPosition.length === b.seriesContainerPosition.length)
70
- ).subscribe(data => {
71
- // 無transition動畫
72
- data.seriesStartSelection
73
- .attr('transform', (d, i) => {
74
- const seriesContainerPosition = data.seriesContainerPosition[i] ?? data.seriesContainerPosition[0]
75
- return `translate(${seriesContainerPosition.startX}, ${seriesContainerPosition.startY})`
76
- })
77
- })
78
-
79
- combineLatest({
80
- seriesStartSelection: seriesStartSelection$,
81
- seriesContainerPosition: seriesContainerPosition$
82
- }).pipe(
83
- switchMap(async d => d),
84
- ).subscribe(data => {
85
- // 有transition動畫
86
- data.seriesStartSelection
87
- .transition()
88
- .attr('transform', (d, i) => {
89
- const seriesContainerPosition = data.seriesContainerPosition[i] ?? data.seriesContainerPosition[0]
90
- return `translate(${seriesContainerPosition.startX}, ${seriesContainerPosition.startY})`
91
- })
92
- })
93
-
94
- return {
95
- seriesStartSelection$
96
- }
97
- }
98
-
99
- // series選取器,以中心座標位置為基準
100
- export const seriesCenterSelectionObservable = ({ selection, pluginName, separateSeries$, seriesLabels$, seriesContainerPosition$ }: {
101
- selection: d3.Selection<any, unknown, any, unknown>
102
- pluginName: string
103
- separateSeries$: Observable<boolean>
104
- seriesLabels$: Observable<string[]>
105
- seriesContainerPosition$: Observable<SeriesContainerPosition[]>
106
- }) => {
107
-
108
- const seriesCenterSelection$ = createSeriesSelection({ selection, pluginName, separateSeries$, seriesLabels$ })
109
-
110
- combineLatest({
111
- seriesCenterSelection: seriesCenterSelection$,
112
- seriesContainerPosition: seriesContainerPosition$
113
- }).pipe(
114
- switchMap(async d => d),
115
- // selection數量相同的時候才執行
116
- distinctUntilChanged((a, b) => a.seriesContainerPosition.length === b.seriesContainerPosition.length)
117
- ).subscribe(data => {
118
- // 無transition動畫
119
- data.seriesCenterSelection
120
- .attr('transform', (d, i) => {
121
- const seriesContainerPosition = data.seriesContainerPosition[i] ?? data.seriesContainerPosition[0]
122
- return `translate(${seriesContainerPosition.centerX}, ${seriesContainerPosition.centerY})`
123
- })
124
- })
125
-
126
- combineLatest({
127
- seriesCenterSelection: seriesCenterSelection$,
128
- seriesContainerPosition: seriesContainerPosition$
129
- }).pipe(
130
- switchMap(async d => d),
131
- ).subscribe(data => {
132
- // 有transition動畫
133
- data.seriesCenterSelection
134
- .transition()
135
- .attr('transform', (d, i) => {
136
- const seriesContainerPosition = data.seriesContainerPosition[i] ?? data.seriesContainerPosition[0]
137
- return `translate(${seriesContainerPosition.centerX}, ${seriesContainerPosition.centerY})`
138
- })
139
- })
140
-
141
- return {
142
- seriesCenterSelection$,
143
- }
144
- }
145
-
1
+ import * as d3 from 'd3'
2
+ import {
3
+ Observable,
4
+ Subject,
5
+ of,
6
+ takeUntil,
7
+ filter,
8
+ first,
9
+ map,
10
+ switchMap,
11
+ combineLatest,
12
+ merge,
13
+ shareReplay,
14
+ distinctUntilChanged
15
+ } from 'rxjs'
16
+ import type {
17
+ ContainerPosition } from '../../lib/core-types'
18
+ import { getClassName, getUniID } from '../utils/orbchartsUtils'
19
+
20
+ function createSeriesSelection ({ selection, pluginName, separateSeries$, seriesLabels$ }: {
21
+ selection: d3.Selection<any, unknown, any, unknown>
22
+ pluginName: string
23
+ separateSeries$: Observable<boolean>
24
+ seriesLabels$: Observable<string[]>
25
+ }) {
26
+ const seriesClassName = getClassName(pluginName, 'series')
27
+
28
+ return combineLatest({
29
+ seriesLabels: seriesLabels$,
30
+ separateSeries: separateSeries$
31
+ }).pipe(
32
+ switchMap(async d => d),
33
+ map((data, i) => {
34
+ const selectionData = data.separateSeries ? data.seriesLabels : [data.seriesLabels.join('')]
35
+ return selection
36
+ .selectAll<SVGGElement, string>(`g.${seriesClassName}`)
37
+ .data(selectionData, d => d)
38
+ .join(
39
+ enter => {
40
+ return enter
41
+ .append('g')
42
+ .classed(seriesClassName, true)
43
+ },
44
+ update => update,
45
+ exit => exit.remove()
46
+ )
47
+ }),
48
+ shareReplay(1)
49
+ )
50
+ }
51
+
52
+ // series選取器,以起始座標位置為基準
53
+ export const seriesStartSelectionObservable = ({ selection, pluginName, separateSeries$, seriesLabels$, seriesContainerPosition$ }: {
54
+ selection: d3.Selection<any, unknown, any, unknown>
55
+ pluginName: string
56
+ separateSeries$: Observable<boolean>
57
+ seriesLabels$: Observable<string[]>
58
+ seriesContainerPosition$: Observable<ContainerPosition[]>
59
+ }) => {
60
+
61
+ const seriesStartSelection$ = createSeriesSelection({ selection, pluginName, separateSeries$, seriesLabels$ })
62
+
63
+ combineLatest({
64
+ seriesStartSelection: seriesStartSelection$,
65
+ seriesContainerPosition: seriesContainerPosition$
66
+ }).pipe(
67
+ switchMap(async d => d),
68
+ // selection數量相同的時候才執行
69
+ distinctUntilChanged((a, b) => a.seriesContainerPosition.length === b.seriesContainerPosition.length)
70
+ ).subscribe(data => {
71
+ // 無transition動畫
72
+ data.seriesStartSelection
73
+ .attr('transform', (d, i) => {
74
+ const seriesContainerPosition = data.seriesContainerPosition[i] ?? data.seriesContainerPosition[0]
75
+ return `translate(${seriesContainerPosition.startX}, ${seriesContainerPosition.startY})`
76
+ })
77
+ })
78
+
79
+ combineLatest({
80
+ seriesStartSelection: seriesStartSelection$,
81
+ seriesContainerPosition: seriesContainerPosition$
82
+ }).pipe(
83
+ switchMap(async d => d),
84
+ ).subscribe(data => {
85
+ // 有transition動畫
86
+ data.seriesStartSelection
87
+ .transition()
88
+ .attr('transform', (d, i) => {
89
+ const seriesContainerPosition = data.seriesContainerPosition[i] ?? data.seriesContainerPosition[0]
90
+ return `translate(${seriesContainerPosition.startX}, ${seriesContainerPosition.startY})`
91
+ })
92
+ })
93
+
94
+ return {
95
+ seriesStartSelection$
96
+ }
97
+ }
98
+
99
+ // series選取器,以中心座標位置為基準
100
+ export const seriesCenterSelectionObservable = ({ selection, pluginName, separateSeries$, seriesLabels$, seriesContainerPosition$ }: {
101
+ selection: d3.Selection<any, unknown, any, unknown>
102
+ pluginName: string
103
+ separateSeries$: Observable<boolean>
104
+ seriesLabels$: Observable<string[]>
105
+ seriesContainerPosition$: Observable<ContainerPosition[]>
106
+ }) => {
107
+
108
+ const seriesCenterSelection$ = createSeriesSelection({ selection, pluginName, separateSeries$, seriesLabels$ })
109
+
110
+ combineLatest({
111
+ seriesCenterSelection: seriesCenterSelection$,
112
+ seriesContainerPosition: seriesContainerPosition$
113
+ }).pipe(
114
+ switchMap(async d => d),
115
+ // selection數量相同的時候才執行
116
+ distinctUntilChanged((a, b) => a.seriesContainerPosition.length === b.seriesContainerPosition.length)
117
+ ).subscribe(data => {
118
+ // 無transition動畫
119
+ data.seriesCenterSelection
120
+ .attr('transform', (d, i) => {
121
+ const seriesContainerPosition = data.seriesContainerPosition[i] ?? data.seriesContainerPosition[0]
122
+ return `translate(${seriesContainerPosition.centerX}, ${seriesContainerPosition.centerY})`
123
+ })
124
+ })
125
+
126
+ combineLatest({
127
+ seriesCenterSelection: seriesCenterSelection$,
128
+ seriesContainerPosition: seriesContainerPosition$
129
+ }).pipe(
130
+ switchMap(async d => d),
131
+ ).subscribe(data => {
132
+ // 有transition動畫
133
+ data.seriesCenterSelection
134
+ .transition()
135
+ .attr('transform', (d, i) => {
136
+ const seriesContainerPosition = data.seriesContainerPosition[i] ?? data.seriesContainerPosition[0]
137
+ return `translate(${seriesContainerPosition.centerX}, ${seriesContainerPosition.centerY})`
138
+ })
139
+ })
140
+
141
+ return {
142
+ seriesCenterSelection$,
143
+ }
144
+ }
145
+
@@ -1,52 +1,52 @@
1
- import * as d3 from 'd3'
2
- import type { ComputedDataSeries, ComputedDatumSeries, EventName, EventSeries, HighlightTarget } from '../../lib/core-types'
3
- // import type { D3PieDatum, PieDatum } from '../types'
4
-
5
- // 由d3.pie()建出來的資料格式
6
- export interface D3PieDatum {
7
- data: any
8
- index: number,
9
- value: number,
10
- startAngle: number,
11
- endAngle: number,
12
- padAngle: number,
13
- }
14
-
15
- export interface PieDatum extends D3PieDatum {
16
- data: ComputedDatumSeries
17
- id: string
18
- }
19
-
20
- export function makePieData ({ data, startAngle, endAngle }: {
21
- data: ComputedDatumSeries[]
22
- startAngle: number
23
- endAngle: number
24
- // itemLabels: string[]
25
- // arcLabels: string[]
26
- }): PieDatum[] {
27
- let pie = d3.pie<any, any>()
28
- .startAngle(startAngle)
29
- // .endAngle(startAngle + (endAngle - startAngle) * t)
30
- .endAngle(endAngle)
31
- .value(d => d.value)
32
- // .value((d) => d.visible == false ? 0 : d.value)
33
- // .sort(null) // 不要排序
34
- .sort((a, b) => a.seq - b.seq)
35
- // .sort((a: any, b: any) => {
36
- // return b.value - a.value
37
- // })
38
- // .sort(d3.ascending)
39
- const pieData = pie(data)
40
- return pieData.map((d: D3PieDatum, i: number) => {
41
- // const itemLabel = d.data.itemLabel
42
- let _d: any = d
43
- _d.id = d.data.id
44
- return _d
45
- // return {
46
- // ...d,
47
- // itemIndex: itemLabels.indexOf(itemLabel),
48
- // itemLabel,
49
- // id: d.data.id,
50
- // }
51
- })
1
+ import * as d3 from 'd3'
2
+ import type { ComputedDataSeries, ComputedDatumSeries, EventName, EventSeries, HighlightTarget } from '../../lib/core-types'
3
+ // import type { D3PieDatum, PieDatum } from '../types'
4
+
5
+ // 由d3.pie()建出來的資料格式
6
+ export interface D3PieDatum {
7
+ data: any
8
+ index: number,
9
+ value: number,
10
+ startAngle: number,
11
+ endAngle: number,
12
+ padAngle: number,
13
+ }
14
+
15
+ export interface PieDatum extends D3PieDatum {
16
+ data: ComputedDatumSeries
17
+ id: string
18
+ }
19
+
20
+ export function makePieData ({ data, startAngle, endAngle }: {
21
+ data: ComputedDatumSeries[]
22
+ startAngle: number
23
+ endAngle: number
24
+ // itemLabels: string[]
25
+ // arcLabels: string[]
26
+ }): PieDatum[] {
27
+ let pie = d3.pie<any, any>()
28
+ .startAngle(startAngle)
29
+ // .endAngle(startAngle + (endAngle - startAngle) * t)
30
+ .endAngle(endAngle)
31
+ .value(d => d.value)
32
+ // .value((d) => d.visible == false ? 0 : d.value)
33
+ // .sort(null) // 不要排序
34
+ .sort((a, b) => a.seq - b.seq)
35
+ // .sort((a: any, b: any) => {
36
+ // return b.value - a.value
37
+ // })
38
+ // .sort(d3.ascending)
39
+ const pieData = pie(data)
40
+ return pieData.map((d: D3PieDatum, i: number) => {
41
+ // const itemLabel = d.data.itemLabel
42
+ let _d: any = d
43
+ _d.id = d.data.id
44
+ return _d
45
+ // return {
46
+ // ...d,
47
+ // itemIndex: itemLabels.indexOf(itemLabel),
48
+ // itemLabel,
49
+ // id: d.data.id,
50
+ // }
51
+ })
52
52
  }