@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,341 +1,341 @@
1
- import * as d3 from 'd3'
2
- import {
3
- Subject,
4
- Observable,
5
- of,
6
- takeUntil,
7
- map,
8
- switchMap,
9
- combineLatest,
10
- debounceTime,
11
- distinctUntilChanged } from 'rxjs'
12
- import type { DefinePluginConfig } from '../../../lib/core-types'
13
- import {
14
- defineTreePlugin } from '../../../lib/core'
15
- import type { Layout, ComputedDataTree, DataFormatterTree, ChartParams } from '../../../lib/core-types'
16
- import type { TreeMapParams } from '../../../lib/plugins-basic-types'
17
- import { DEFAULT_TREE_MAP_PARAMS } from '../defaults'
18
- import { getClassName, getDatumColor } from '../../utils/orbchartsUtils'
19
- import { LAYER_INDEX_OF_GRAPHIC } from '../../const'
20
-
21
- const pluginName = 'TreeMap'
22
- const treeClassName = getClassName(pluginName, 'tree')
23
- const tileClassName = getClassName(pluginName, 'tile')
24
-
25
- const pluginConfig: DefinePluginConfig<typeof pluginName, typeof DEFAULT_TREE_MAP_PARAMS> = {
26
- name: pluginName,
27
- defaultParams: DEFAULT_TREE_MAP_PARAMS,
28
- layerIndex: LAYER_INDEX_OF_GRAPHIC,
29
- validator: (params, { validateColumns }) => {
30
- const result = validateColumns(params, {
31
- paddingInner: {
32
- toBeTypes: ['number']
33
- },
34
- paddingOuter: {
35
- toBeTypes: ['number']
36
- },
37
- labelColorType: {
38
- toBeOption: 'ColorType'
39
- },
40
- squarifyRatio: {
41
- toBeTypes: ['number']
42
- },
43
- sort: {
44
- toBeTypes: ['Function']
45
- }
46
- })
47
- return result
48
- }
49
- }
50
-
51
- function renderTree ({ selection, treeData, fullParams, fullChartParams, textSizePx }: {
52
- selection: d3.Selection<any, any, any, any>
53
- treeData: d3.HierarchyRectangularNode<ComputedDataTree>[]
54
- fullParams: TreeMapParams
55
- fullChartParams: ChartParams
56
- textSizePx: number
57
- }) {
58
- const padding = textSizePx / 2
59
- const lineHeight = textSizePx // 行高
60
-
61
- const cell = selection.selectAll<SVGGElement, d3.HierarchyRectangularNode<ComputedDataTree>>(`g.${treeClassName}`)
62
- .data(treeData, d => d.data.id)
63
- .join('g')
64
- .attr('class', treeClassName)
65
-
66
- cell
67
- // .transition()
68
- // .duration(fullChartParams.transitionDuration)
69
- .attr('transform', (d) => !d.x0 || !d.y0 ? null : `translate(${d.x0},${d.y0})`)
70
- .each((d, i, nodes) => {
71
- const eachCell = d3.select(nodes[i])
72
-
73
- const tile = eachCell
74
- .selectAll<SVGRectElement, d3.HierarchyRectangularNode<ComputedDataTree>>(`rect.${tileClassName}`)
75
- .data([d], d => d.data.id)
76
- .join('rect')
77
- .attr("id", d => d.data.id)
78
- .attr("class", tileClassName)
79
- .attr('cursor', 'pointer')
80
- .attr("width", (d) => d.x1 - d.x0)
81
- .attr("height", (d) => d.y1 - d.y0)
82
- .attr('fill', d => d.data.color)
83
- .attr('data-name', d => d.data.label)
84
- .attr('data-category', d => d.data.categoryLabel)
85
- .attr('data-value', d => d.data.value)
86
-
87
- const label = eachCell
88
- .selectAll('g')
89
- .data([d])
90
- .join('g')
91
- .each((d, i, nodes) => {
92
- const eachLabel = d3.select(nodes[i])
93
- const text = eachLabel
94
- .selectAll('text')
95
- .data([d])
96
- .join('text')
97
- .text(d => d.data.label)
98
- .attr('dominant-baseline', 'hanging')
99
- .attr("x", padding)
100
- .attr("y", padding)
101
- .attr('font-size', fullChartParams.styles.textSize)
102
- .each(function(d) {
103
- // -- tspan(自動斷行) --
104
- const textElement = d3.select(this);
105
- const words = d.data.label.split(/\s+/).reverse() // 以空隔分割字串
106
- let word;
107
- let line: string[] = []
108
- const x = textElement.attr("x")
109
- let y = textElement.attr("y")
110
- let dy = 0
111
- let tspan = textElement
112
- .text(null)
113
- .append("tspan")
114
- .attr('cursor', 'pointer')
115
- .attr('fill', getDatumColor({
116
- colorType: fullParams.labelColorType,
117
- datum: d.data,
118
- fullChartParams
119
- }))
120
- .attr('font-size', fullChartParams.styles.textSize)
121
- .attr("x", x)
122
- .attr("y", y)
123
-
124
- while (word = words.pop()) {
125
- line.push(word)
126
- tspan.text(line.join(" "))
127
- if (tspan.node().getComputedTextLength() > (d.x1 - d.x0 - padding)) {
128
- line.pop()
129
- tspan.text(line.join(" "))
130
- line = [word]
131
- dy += lineHeight
132
- tspan = textElement
133
- .append("tspan")
134
- .attr('cursor', 'pointer')
135
- .attr('fill', getDatumColor({
136
- colorType: fullParams.labelColorType,
137
- datum: d.data,
138
- fullChartParams
139
- }))
140
- .attr('font-size', fullChartParams.styles.textSize)
141
- .attr("x", x)
142
- .attr("y", y)
143
- .attr("dy", dy + "px")
144
- .text(word)
145
- }
146
- }
147
- })
148
- })
149
-
150
- })
151
-
152
- return cell
153
- }
154
-
155
- function highlight ({ selection, ids, fullChartParams }: {
156
- selection: d3.Selection<any, d3.HierarchyRectangularNode<ComputedDataTree>, any, any>
157
- ids: string[]
158
- fullChartParams: ChartParams
159
- }) {
160
- selection.interrupt('highlight')
161
-
162
- if (!ids.length) {
163
- // remove highlight
164
- selection
165
- .transition('highlight')
166
- .duration(200)
167
- .style('opacity', 1)
168
- return
169
- }
170
-
171
- selection
172
- .each((d, i, n) => {
173
- if (ids.includes(d.data.id)) {
174
- d3.select(n[i])
175
- .style('opacity', 1)
176
- } else {
177
- d3.select(n[i])
178
- .style('opacity', fullChartParams.styles.unhighlightedOpacity)
179
- }
180
- })
181
- }
182
-
183
- export const TreeMap = defineTreePlugin(pluginConfig)(({ selection, name, subject, observer }) => {
184
- const destroy$ = new Subject()
185
-
186
- const treeData$ = combineLatest({
187
- layout: observer.layout$,
188
- visibleComputedData: observer.visibleComputedData$,
189
- fullParams: observer.fullParams$,
190
- fullDataFormatter: observer.fullDataFormatter$,
191
- fullChartParams: observer.fullChartParams$
192
- }).pipe(
193
- takeUntil(destroy$),
194
- switchMap(async d => d),
195
- map(data => {
196
- const treemap = d3.treemap()
197
- .size([data.layout.width, data.layout.height])
198
- .paddingInner(data.fullParams.paddingInner)
199
- .paddingOuter(data.fullParams.paddingOuter)
200
- .round(true)
201
- .tile(d3.treemapSquarify.ratio(data.fullParams.squarifyRatio))
202
-
203
- const root = d3.hierarchy(data.visibleComputedData)
204
- .sum(d => d.value)
205
- .sort(data.fullParams.sort as (a: any, b: any) => number)
206
-
207
- //call treemap
208
- treemap(root)
209
-
210
- const treeData: d3.HierarchyRectangularNode<ComputedDataTree>[] = root.leaves() as any
211
-
212
- return treeData
213
- })
214
- )
215
-
216
- const cellSelection$ = combineLatest({
217
- selection: of(selection),
218
- treeData: treeData$,
219
- fullParams: observer.fullParams$,
220
- fullChartParams: observer.fullChartParams$,
221
- textSizePx: observer.textSizePx$
222
- }).pipe(
223
- takeUntil(destroy$),
224
- switchMap(async d => d),
225
- map(data => {
226
- return renderTree({
227
- selection,
228
- treeData: data.treeData,
229
- fullParams: data.fullParams,
230
- fullChartParams: data.fullChartParams,
231
- textSizePx: data.textSizePx
232
- })
233
- })
234
- )
235
-
236
- const highlightTarget$ = observer.fullChartParams$.pipe(
237
- takeUntil(destroy$),
238
- map(d => d.highlightTarget),
239
- distinctUntilChanged()
240
- )
241
-
242
- combineLatest({
243
- cellSelection: cellSelection$,
244
- computedData: observer.computedData$,
245
- treeData: treeData$,
246
- fullParams: observer.fullParams$,
247
- fullChartParams: observer.fullChartParams$,
248
- highlightTarget: highlightTarget$,
249
- CategoryDataMap: observer.CategoryDataMap$,
250
- }).pipe(
251
- takeUntil(destroy$),
252
- switchMap(async d => d)
253
- ).subscribe(data => {
254
- data.cellSelection
255
- .on('mouseover', (event, datum) => {
256
- event.stopPropagation()
257
-
258
- subject.event$.next({
259
- type: 'tree',
260
- eventName: 'mouseover',
261
- pluginName,
262
- highlightTarget: data.highlightTarget,
263
- datum: datum.data,
264
- category: data.CategoryDataMap.get(datum.data.categoryLabel)!,
265
- categoryIndex: datum.data.categoryIndex,
266
- categoryLabel: datum.data.categoryLabel,
267
- event,
268
- data: data.computedData
269
- })
270
- })
271
- .on('mousemove', (event, datum) => {
272
- event.stopPropagation()
273
-
274
- subject.event$.next({
275
- type: 'tree',
276
- eventName: 'mousemove',
277
- pluginName,
278
- highlightTarget: data.highlightTarget,
279
- datum: datum.data,
280
- category: data.CategoryDataMap.get(datum.data.categoryLabel)!,
281
- categoryIndex: datum.data.categoryIndex,
282
- categoryLabel: datum.data.categoryLabel,
283
- event,
284
- data: data.computedData
285
- })
286
- })
287
- .on('mouseout', (event, datum) => {
288
- event.stopPropagation()
289
-
290
- subject.event$.next({
291
- type: 'tree',
292
- eventName: 'mouseout',
293
- pluginName,
294
- highlightTarget: data.highlightTarget,
295
- datum: datum.data,
296
- category: data.CategoryDataMap.get(datum.data.categoryLabel)!,
297
- categoryIndex: datum.data.categoryIndex,
298
- categoryLabel: datum.data.categoryLabel,
299
- event,
300
- data: data.computedData
301
- })
302
- })
303
- .on('click', (event, datum) => {
304
- event.stopPropagation()
305
-
306
- subject.event$.next({
307
- type: 'tree',
308
- eventName: 'click',
309
- pluginName,
310
- highlightTarget: data.highlightTarget,
311
- datum: datum.data,
312
- category: data.CategoryDataMap.get(datum.data.categoryLabel)!,
313
- categoryIndex: datum.data.categoryIndex,
314
- categoryLabel: datum.data.categoryLabel,
315
- event,
316
- data: data.computedData
317
- })
318
- })
319
- })
320
-
321
- combineLatest({
322
- cellSelection: cellSelection$,
323
- highlight: observer.treeHighlight$.pipe(
324
- map(data => data.map(d => d.id))
325
- ),
326
- fullChartParams: observer.fullChartParams$
327
- }).pipe(
328
- takeUntil(destroy$),
329
- switchMap(async d => d)
330
- ).subscribe(data => {
331
- highlight({
332
- selection: data.cellSelection,
333
- ids: data.highlight,
334
- fullChartParams: data.fullChartParams
335
- })
336
- })
337
-
338
- return () => {
339
- destroy$.next(undefined)
340
- }
341
- })
1
+ import * as d3 from 'd3'
2
+ import {
3
+ Subject,
4
+ Observable,
5
+ of,
6
+ takeUntil,
7
+ map,
8
+ switchMap,
9
+ combineLatest,
10
+ debounceTime,
11
+ distinctUntilChanged } from 'rxjs'
12
+ import type { DefinePluginConfig } from '../../../lib/core-types'
13
+ import {
14
+ defineTreePlugin } from '../../../lib/core'
15
+ import type { Layout, ComputedDataTree, DataFormatterTree, ChartParams } from '../../../lib/core-types'
16
+ import type { TreeMapParams } from '../../../lib/plugins-basic-types'
17
+ import { DEFAULT_TREE_MAP_PARAMS } from '../defaults'
18
+ import { getClassName, getDatumColor } from '../../utils/orbchartsUtils'
19
+ import { LAYER_INDEX_OF_GRAPHIC } from '../../const'
20
+
21
+ const pluginName = 'TreeMap'
22
+ const treeClassName = getClassName(pluginName, 'tree')
23
+ const tileClassName = getClassName(pluginName, 'tile')
24
+
25
+ const pluginConfig: DefinePluginConfig<typeof pluginName, typeof DEFAULT_TREE_MAP_PARAMS> = {
26
+ name: pluginName,
27
+ defaultParams: DEFAULT_TREE_MAP_PARAMS,
28
+ layerIndex: LAYER_INDEX_OF_GRAPHIC,
29
+ validator: (params, { validateColumns }) => {
30
+ const result = validateColumns(params, {
31
+ paddingInner: {
32
+ toBeTypes: ['number']
33
+ },
34
+ paddingOuter: {
35
+ toBeTypes: ['number']
36
+ },
37
+ labelColorType: {
38
+ toBeOption: 'ColorType'
39
+ },
40
+ squarifyRatio: {
41
+ toBeTypes: ['number']
42
+ },
43
+ sort: {
44
+ toBeTypes: ['Function']
45
+ }
46
+ })
47
+ return result
48
+ }
49
+ }
50
+
51
+ function renderTree ({ selection, treeData, fullParams, fullChartParams, textSizePx }: {
52
+ selection: d3.Selection<any, any, any, any>
53
+ treeData: d3.HierarchyRectangularNode<ComputedDataTree>[]
54
+ fullParams: TreeMapParams
55
+ fullChartParams: ChartParams
56
+ textSizePx: number
57
+ }) {
58
+ const padding = textSizePx / 2
59
+ const lineHeight = textSizePx // 行高
60
+
61
+ const cell = selection.selectAll<SVGGElement, d3.HierarchyRectangularNode<ComputedDataTree>>(`g.${treeClassName}`)
62
+ .data(treeData, d => d.data.id)
63
+ .join('g')
64
+ .attr('class', treeClassName)
65
+
66
+ cell
67
+ // .transition()
68
+ // .duration(fullChartParams.transitionDuration)
69
+ .attr('transform', (d) => !d.x0 || !d.y0 ? null : `translate(${d.x0},${d.y0})`)
70
+ .each((d, i, nodes) => {
71
+ const eachCell = d3.select(nodes[i])
72
+
73
+ const tile = eachCell
74
+ .selectAll<SVGRectElement, d3.HierarchyRectangularNode<ComputedDataTree>>(`rect.${tileClassName}`)
75
+ .data([d], d => d.data.id)
76
+ .join('rect')
77
+ .attr("id", d => d.data.id)
78
+ .attr("class", tileClassName)
79
+ .attr('cursor', 'pointer')
80
+ .attr("width", (d) => d.x1 - d.x0)
81
+ .attr("height", (d) => d.y1 - d.y0)
82
+ .attr('fill', d => d.data.color)
83
+ .attr('data-name', d => d.data.label)
84
+ .attr('data-category', d => d.data.categoryLabel)
85
+ .attr('data-value', d => d.data.value)
86
+
87
+ const label = eachCell
88
+ .selectAll('g')
89
+ .data([d])
90
+ .join('g')
91
+ .each((d, i, nodes) => {
92
+ const eachLabel = d3.select(nodes[i])
93
+ const text = eachLabel
94
+ .selectAll('text')
95
+ .data([d])
96
+ .join('text')
97
+ .text(d => d.data.label)
98
+ .attr('dominant-baseline', 'hanging')
99
+ .attr("x", padding)
100
+ .attr("y", padding)
101
+ .attr('font-size', fullChartParams.styles.textSize)
102
+ .each(function(d) {
103
+ // -- tspan(自動斷行) --
104
+ const textElement = d3.select(this);
105
+ const words = d.data.label.split(/\s+/).reverse() // 以空隔分割字串
106
+ let word;
107
+ let line: string[] = []
108
+ const x = textElement.attr("x")
109
+ let y = textElement.attr("y")
110
+ let dy = 0
111
+ let tspan = textElement
112
+ .text(null)
113
+ .append("tspan")
114
+ .attr('cursor', 'pointer')
115
+ .attr('fill', getDatumColor({
116
+ colorType: fullParams.labelColorType,
117
+ datum: d.data,
118
+ fullChartParams
119
+ }))
120
+ .attr('font-size', fullChartParams.styles.textSize)
121
+ .attr("x", x)
122
+ .attr("y", y)
123
+
124
+ while (word = words.pop()) {
125
+ line.push(word)
126
+ tspan.text(line.join(" "))
127
+ if (tspan.node().getComputedTextLength() > (d.x1 - d.x0 - padding)) {
128
+ line.pop()
129
+ tspan.text(line.join(" "))
130
+ line = [word]
131
+ dy += lineHeight
132
+ tspan = textElement
133
+ .append("tspan")
134
+ .attr('cursor', 'pointer')
135
+ .attr('fill', getDatumColor({
136
+ colorType: fullParams.labelColorType,
137
+ datum: d.data,
138
+ fullChartParams
139
+ }))
140
+ .attr('font-size', fullChartParams.styles.textSize)
141
+ .attr("x", x)
142
+ .attr("y", y)
143
+ .attr("dy", dy + "px")
144
+ .text(word)
145
+ }
146
+ }
147
+ })
148
+ })
149
+
150
+ })
151
+
152
+ return cell
153
+ }
154
+
155
+ function highlight ({ selection, ids, fullChartParams }: {
156
+ selection: d3.Selection<any, d3.HierarchyRectangularNode<ComputedDataTree>, any, any>
157
+ ids: string[]
158
+ fullChartParams: ChartParams
159
+ }) {
160
+ selection.interrupt('highlight')
161
+
162
+ if (!ids.length) {
163
+ // remove highlight
164
+ selection
165
+ .transition('highlight')
166
+ .duration(200)
167
+ .style('opacity', 1)
168
+ return
169
+ }
170
+
171
+ selection
172
+ .each((d, i, n) => {
173
+ if (ids.includes(d.data.id)) {
174
+ d3.select(n[i])
175
+ .style('opacity', 1)
176
+ } else {
177
+ d3.select(n[i])
178
+ .style('opacity', fullChartParams.styles.unhighlightedOpacity)
179
+ }
180
+ })
181
+ }
182
+
183
+ export const TreeMap = defineTreePlugin(pluginConfig)(({ selection, name, subject, observer }) => {
184
+ const destroy$ = new Subject()
185
+
186
+ const treeData$ = combineLatest({
187
+ layout: observer.layout$,
188
+ visibleComputedData: observer.visibleComputedData$,
189
+ fullParams: observer.fullParams$,
190
+ fullDataFormatter: observer.fullDataFormatter$,
191
+ fullChartParams: observer.fullChartParams$
192
+ }).pipe(
193
+ takeUntil(destroy$),
194
+ switchMap(async d => d),
195
+ map(data => {
196
+ const treemap = d3.treemap()
197
+ .size([data.layout.width, data.layout.height])
198
+ .paddingInner(data.fullParams.paddingInner)
199
+ .paddingOuter(data.fullParams.paddingOuter)
200
+ .round(true)
201
+ .tile(d3.treemapSquarify.ratio(data.fullParams.squarifyRatio))
202
+
203
+ const root = d3.hierarchy(data.visibleComputedData)
204
+ .sum(d => d.value)
205
+ .sort(data.fullParams.sort as (a: any, b: any) => number)
206
+
207
+ //call treemap
208
+ treemap(root)
209
+
210
+ const treeData: d3.HierarchyRectangularNode<ComputedDataTree>[] = root.leaves() as any
211
+
212
+ return treeData
213
+ })
214
+ )
215
+
216
+ const cellSelection$ = combineLatest({
217
+ selection: of(selection),
218
+ treeData: treeData$,
219
+ fullParams: observer.fullParams$,
220
+ fullChartParams: observer.fullChartParams$,
221
+ textSizePx: observer.textSizePx$
222
+ }).pipe(
223
+ takeUntil(destroy$),
224
+ switchMap(async d => d),
225
+ map(data => {
226
+ return renderTree({
227
+ selection,
228
+ treeData: data.treeData,
229
+ fullParams: data.fullParams,
230
+ fullChartParams: data.fullChartParams,
231
+ textSizePx: data.textSizePx
232
+ })
233
+ })
234
+ )
235
+
236
+ const highlightTarget$ = observer.fullChartParams$.pipe(
237
+ takeUntil(destroy$),
238
+ map(d => d.highlightTarget),
239
+ distinctUntilChanged()
240
+ )
241
+
242
+ combineLatest({
243
+ cellSelection: cellSelection$,
244
+ computedData: observer.computedData$,
245
+ treeData: treeData$,
246
+ fullParams: observer.fullParams$,
247
+ fullChartParams: observer.fullChartParams$,
248
+ highlightTarget: highlightTarget$,
249
+ CategoryDataMap: observer.CategoryDataMap$,
250
+ }).pipe(
251
+ takeUntil(destroy$),
252
+ switchMap(async d => d)
253
+ ).subscribe(data => {
254
+ data.cellSelection
255
+ .on('mouseover', (event, datum) => {
256
+ event.stopPropagation()
257
+
258
+ subject.event$.next({
259
+ type: 'tree',
260
+ eventName: 'mouseover',
261
+ pluginName,
262
+ highlightTarget: data.highlightTarget,
263
+ datum: datum.data,
264
+ category: data.CategoryDataMap.get(datum.data.categoryLabel)!,
265
+ categoryIndex: datum.data.categoryIndex,
266
+ categoryLabel: datum.data.categoryLabel,
267
+ event,
268
+ data: data.computedData
269
+ })
270
+ })
271
+ .on('mousemove', (event, datum) => {
272
+ event.stopPropagation()
273
+
274
+ subject.event$.next({
275
+ type: 'tree',
276
+ eventName: 'mousemove',
277
+ pluginName,
278
+ highlightTarget: data.highlightTarget,
279
+ datum: datum.data,
280
+ category: data.CategoryDataMap.get(datum.data.categoryLabel)!,
281
+ categoryIndex: datum.data.categoryIndex,
282
+ categoryLabel: datum.data.categoryLabel,
283
+ event,
284
+ data: data.computedData
285
+ })
286
+ })
287
+ .on('mouseout', (event, datum) => {
288
+ event.stopPropagation()
289
+
290
+ subject.event$.next({
291
+ type: 'tree',
292
+ eventName: 'mouseout',
293
+ pluginName,
294
+ highlightTarget: data.highlightTarget,
295
+ datum: datum.data,
296
+ category: data.CategoryDataMap.get(datum.data.categoryLabel)!,
297
+ categoryIndex: datum.data.categoryIndex,
298
+ categoryLabel: datum.data.categoryLabel,
299
+ event,
300
+ data: data.computedData
301
+ })
302
+ })
303
+ .on('click', (event, datum) => {
304
+ event.stopPropagation()
305
+
306
+ subject.event$.next({
307
+ type: 'tree',
308
+ eventName: 'click',
309
+ pluginName,
310
+ highlightTarget: data.highlightTarget,
311
+ datum: datum.data,
312
+ category: data.CategoryDataMap.get(datum.data.categoryLabel)!,
313
+ categoryIndex: datum.data.categoryIndex,
314
+ categoryLabel: datum.data.categoryLabel,
315
+ event,
316
+ data: data.computedData
317
+ })
318
+ })
319
+ })
320
+
321
+ combineLatest({
322
+ cellSelection: cellSelection$,
323
+ highlight: observer.treeHighlight$.pipe(
324
+ map(data => data.map(d => d.id))
325
+ ),
326
+ fullChartParams: observer.fullChartParams$
327
+ }).pipe(
328
+ takeUntil(destroy$),
329
+ switchMap(async d => d)
330
+ ).subscribe(data => {
331
+ highlight({
332
+ selection: data.cellSelection,
333
+ ids: data.highlight,
334
+ fullChartParams: data.fullChartParams
335
+ })
336
+ })
337
+
338
+ return () => {
339
+ destroy$.next(undefined)
340
+ }
341
+ })