@orbcharts/plugins-basic 3.0.0-alpha.36 → 3.0.0-alpha.38

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. package/dist/{src → orbcharts-plugins-basic/src}/grid/defaults.d.ts +1 -0
  2. package/dist/{src → orbcharts-plugins-basic/src}/grid/index.d.ts +1 -0
  3. package/dist/orbcharts-plugins-basic/src/grid/plugins/BarsDiverging.d.ts +1 -0
  4. package/dist/{src → orbcharts-plugins-basic/src}/grid/types.d.ts +2 -0
  5. package/dist/orbcharts-plugins-basic/src/index.d.ts +5 -0
  6. package/dist/orbcharts-plugins-basic/src/tree/defaults.d.ts +4 -0
  7. package/dist/orbcharts-plugins-basic/src/tree/index.d.ts +4 -0
  8. package/dist/orbcharts-plugins-basic/src/tree/plugins/TreeLegend.d.ts +1 -0
  9. package/dist/orbcharts-plugins-basic/src/tree/plugins/TreeMap.d.ts +3 -0
  10. package/dist/orbcharts-plugins-basic/src/tree/types.d.ts +21 -0
  11. package/dist/orbcharts-plugins-basic.es.js +5857 -5639
  12. package/dist/orbcharts-plugins-basic.umd.js +7 -7
  13. package/dist/src/index.d.ts +1 -4
  14. package/package.json +2 -2
  15. package/src/base/BaseValueAxis.ts +5 -0
  16. package/src/grid/defaults.ts +4 -0
  17. package/src/grid/index.ts +1 -0
  18. package/src/grid/plugins/BarsDiverging.ts +39 -0
  19. package/src/grid/types.ts +2 -0
  20. package/src/index.ts +2 -1
  21. package/src/tree/defaults.ts +21 -0
  22. package/src/tree/index.ts +4 -0
  23. package/src/tree/plugins/TreeLegend.ts +58 -0
  24. package/src/tree/plugins/TreeMap.ts +298 -0
  25. package/src/tree/types.ts +23 -0
  26. package/dist/src/multiGrid/plugins/Diverging.d.ts +0 -0
  27. package/dist/src/multiGrid/plugins/DivergingValueAxes.d.ts +0 -0
  28. package/dist/src/tree/index.d.ts +0 -0
  29. package/dist/src/tree/plugins/TreeMap.d.ts +0 -0
  30. package/src/multiGrid/plugins/Diverging.ts +0 -0
  31. package/src/multiGrid/plugins/DivergingValueAxes.ts +0 -0
  32. /package/dist/{src → orbcharts-plugins-basic/src}/base/BaseBarStack.d.ts +0 -0
  33. /package/dist/{src → orbcharts-plugins-basic/src}/base/BaseBars.d.ts +0 -0
  34. /package/dist/{src → orbcharts-plugins-basic/src}/base/BaseBarsTriangle.d.ts +0 -0
  35. /package/dist/{src → orbcharts-plugins-basic/src}/base/BaseDots.d.ts +0 -0
  36. /package/dist/{src → orbcharts-plugins-basic/src}/base/BaseGroupArea.d.ts +0 -0
  37. /package/dist/{src → orbcharts-plugins-basic/src}/base/BaseGroupAxis.d.ts +0 -0
  38. /package/dist/{src → orbcharts-plugins-basic/src}/base/BaseLegend.d.ts +0 -0
  39. /package/dist/{src → orbcharts-plugins-basic/src}/base/BaseLines.d.ts +0 -0
  40. /package/dist/{src → orbcharts-plugins-basic/src}/base/BaseValueAxis.d.ts +0 -0
  41. /package/dist/{src → orbcharts-plugins-basic/src}/base/types.d.ts +0 -0
  42. /package/dist/{src → orbcharts-plugins-basic/src}/grid/gridObservables.d.ts +0 -0
  43. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/BarStack.d.ts +0 -0
  44. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/Bars.d.ts +0 -0
  45. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/BarsTriangle.d.ts +0 -0
  46. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/Dots.d.ts +0 -0
  47. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/GridLegend.d.ts +0 -0
  48. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/GroupAux.d.ts +0 -0
  49. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/GroupAxis.d.ts +0 -0
  50. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/Lines.d.ts +0 -0
  51. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/Ranking.d.ts +0 -0
  52. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/RankingAxis.d.ts +0 -0
  53. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/ScalingArea.d.ts +0 -0
  54. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/ValueAxis.d.ts +0 -0
  55. /package/dist/{src → orbcharts-plugins-basic/src}/grid/plugins/ValueStackAxis.d.ts +0 -0
  56. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/defaults.d.ts +0 -0
  57. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/index.d.ts +0 -0
  58. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/multiGridObservables.d.ts +0 -0
  59. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiBarStack.d.ts +0 -0
  60. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiBars.d.ts +0 -0
  61. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiBarsTriangle.d.ts +0 -0
  62. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiDots.d.ts +0 -0
  63. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiGridLegend.d.ts +0 -0
  64. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiGroupAxis.d.ts +0 -0
  65. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiLines.d.ts +0 -0
  66. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/MultiValueAxis.d.ts +0 -0
  67. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/plugins/OverlappingValueAxes.d.ts +0 -0
  68. /package/dist/{src → orbcharts-plugins-basic/src}/multiGrid/types.d.ts +0 -0
  69. /package/dist/{src → orbcharts-plugins-basic/src}/multiValue/index.d.ts +0 -0
  70. /package/dist/{src → orbcharts-plugins-basic/src}/multiValue/plugins/Scatter.d.ts +0 -0
  71. /package/dist/{src → orbcharts-plugins-basic/src}/multiValue/plugins/ScatterAxes.d.ts +0 -0
  72. /package/dist/{src → orbcharts-plugins-basic/src}/noneData/defaults.d.ts +0 -0
  73. /package/dist/{src → orbcharts-plugins-basic/src}/noneData/index.d.ts +0 -0
  74. /package/dist/{src → orbcharts-plugins-basic/src}/noneData/plugins/Container.d.ts +0 -0
  75. /package/dist/{src → orbcharts-plugins-basic/src}/noneData/plugins/Tooltip.d.ts +0 -0
  76. /package/dist/{src → orbcharts-plugins-basic/src}/noneData/types.d.ts +0 -0
  77. /package/dist/{src → orbcharts-plugins-basic/src}/relationship/index.d.ts +0 -0
  78. /package/dist/{src → orbcharts-plugins-basic/src}/relationship/plugins/Relationship.d.ts +0 -0
  79. /package/dist/{src → orbcharts-plugins-basic/src}/series/defaults.d.ts +0 -0
  80. /package/dist/{src → orbcharts-plugins-basic/src}/series/index.d.ts +0 -0
  81. /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/Bubbles.d.ts +0 -0
  82. /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/Pie.d.ts +0 -0
  83. /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/PieEventTexts.d.ts +0 -0
  84. /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/PieLabels.d.ts +0 -0
  85. /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/SeriesLegend.d.ts +0 -0
  86. /package/dist/{src → orbcharts-plugins-basic/src}/series/plugins/Waffle.d.ts +0 -0
  87. /package/dist/{src → orbcharts-plugins-basic/src}/series/seriesUtils.d.ts +0 -0
  88. /package/dist/{src → orbcharts-plugins-basic/src}/series/types.d.ts +0 -0
  89. /package/dist/{src → orbcharts-plugins-basic/src}/utils/commonUtils.d.ts +0 -0
  90. /package/dist/{src → orbcharts-plugins-basic/src}/utils/d3Graphics.d.ts +0 -0
  91. /package/dist/{src → orbcharts-plugins-basic/src}/utils/d3Utils.d.ts +0 -0
  92. /package/dist/{src → orbcharts-plugins-basic/src}/utils/observables.d.ts +0 -0
  93. /package/dist/{src → orbcharts-plugins-basic/src}/utils/orbchartsUtils.d.ts +0 -0
  94. /package/dist/{vite.config.d.ts → orbcharts-plugins-basic/vite.config.d.ts} +0 -0
@@ -1,4 +1 @@
1
- export * from './grid';
2
- export * from './multiGrid';
3
- export * from './noneData';
4
- export * from './series';
1
+ export * from '../orbcharts-plugins-basic/src/index'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orbcharts/plugins-basic",
3
- "version": "3.0.0-alpha.36",
3
+ "version": "3.0.0-alpha.38",
4
4
  "description": "plugins for OrbCharts",
5
5
  "author": "Blue Planet Inc.",
6
6
  "license": "Apache-2.0",
@@ -35,7 +35,7 @@
35
35
  "vite-plugin-dts": "^3.7.3"
36
36
  },
37
37
  "dependencies": {
38
- "@orbcharts/core": "^3.0.0-alpha.35",
38
+ "@orbcharts/core": "^3.0.0-alpha.37",
39
39
  "d3": "^7.8.5",
40
40
  "rxjs": "^7.8.1"
41
41
  }
@@ -116,6 +116,10 @@ function renderLinearAxis ({ selection, yAxisClassName, textClassName, fullParam
116
116
 
117
117
  const valueLength = minAndMax[1] - minAndMax[0]
118
118
 
119
+ // const _valueScale = d3.scaleLinear()
120
+ // .domain([0, 150])
121
+ // .range([416.5, 791.349])
122
+
119
123
  // 設定Y軸刻度
120
124
  const yAxis = d3.axisLeft(valueScale)
121
125
  .scale(valueScale)
@@ -365,6 +369,7 @@ export const createBaseValueAxis: BasePluginFn<BaseLinesContext> = (pluginName:
365
369
  // 轉換後會退訂前一個未完成的訂閱事件,因此可以取到「同時間」最後一次的訂閱事件
366
370
  switchMap(async (d) => d),
367
371
  ).subscribe(data => {
372
+ console.log(data)
368
373
 
369
374
  const valueScale: d3.ScaleLinear<number, number> = createAxisLinearScale({
370
375
  maxValue: data.minAndMax[1],
@@ -43,6 +43,10 @@ export const DEFAULT_BARS_PARAMS: BarsParams = {
43
43
  barRadius: false,
44
44
  }
45
45
 
46
+ export const DEFAULT_BARS_DIVERGING_PARAMS: BarsParams = {
47
+ ...DEFAULT_BARS_PARAMS
48
+ }
49
+
46
50
  export const DEFAULT_BAR_STACK_PARAMS: BarStackParams = {
47
51
  barWidth: 0,
48
52
  barGroupPadding: 10,
package/src/grid/index.ts CHANGED
@@ -2,6 +2,7 @@ export * from './defaults'
2
2
  export * from './types'
3
3
  export { Lines } from './plugins/Lines'
4
4
  export { Bars } from './plugins/Bars'
5
+ export { BarsDiverging } from './plugins/BarsDiverging'
5
6
  export { BarStack } from './plugins/BarStack'
6
7
  export { BarsTriangle } from './plugins/BarsTriangle'
7
8
  export { Dots } from './plugins/Dots'
@@ -0,0 +1,39 @@
1
+ import {
2
+ of,
3
+ Subject,
4
+ Observable } from 'rxjs'
5
+ import {
6
+ defineGridPlugin } from '@orbcharts/core'
7
+ import { DEFAULT_BARS_PARAMS } from '../defaults'
8
+ import { createBaseBars } from '../../base/BaseBars'
9
+
10
+ const pluginName = 'BarsDiverging'
11
+
12
+ export const BarsDiverging = defineGridPlugin(pluginName, DEFAULT_BARS_PARAMS)(({ selection, name, subject, observer }) => {
13
+ const destroy$ = new Subject()
14
+
15
+ const unsubscribeBaseBars = createBaseBars(pluginName, {
16
+ selection,
17
+ computedData$: observer.computedData$,
18
+ visibleComputedData$: observer.visibleComputedData$,
19
+ existedSeriesLabels$: observer.existedSeriesLabels$,
20
+ SeriesDataMap$: observer.SeriesDataMap$,
21
+ GroupDataMap$: observer.GroupDataMap$,
22
+ fullParams$: observer.fullParams$,
23
+ fullChartParams$: observer.fullChartParams$,
24
+ gridAxesTransform$: observer.gridAxesTransform$,
25
+ gridGraphicTransform$: observer.gridGraphicTransform$,
26
+ gridGraphicReverseScale$: observer.gridGraphicReverseScale$,
27
+ gridAxesSize$: observer.gridAxesSize$,
28
+ gridHighlight$: observer.gridHighlight$,
29
+ gridContainer$: observer.gridContainer$,
30
+ // isSeriesPositionSeprate$: observer.isSeriesPositionSeprate$,
31
+ isSeriesPositionSeprate$: of(true), // hack: 永遠為true,可以強制讓每組series的bars的x位置都是一樣的
32
+ event$: subject.event$,
33
+ })
34
+
35
+ return () => {
36
+ destroy$.next(undefined)
37
+ unsubscribeBaseBars()
38
+ }
39
+ })
package/src/grid/types.ts CHANGED
@@ -43,6 +43,8 @@ export interface BarsParams {
43
43
  barRadius: number | boolean
44
44
  }
45
45
 
46
+ export interface BarsDivergingParams extends BarsParams {}
47
+
46
48
  export interface BarStackParams {
47
49
  barWidth: number
48
50
  barGroupPadding: number
package/src/index.ts CHANGED
@@ -6,4 +6,5 @@
6
6
  export * from './grid'
7
7
  export * from './multiGrid'
8
8
  export * from './noneData'
9
- export * from './series'
9
+ export * from './series'
10
+ export * from './tree'
@@ -0,0 +1,21 @@
1
+ import type { TreeMapParams, TreeLegendParams } from './types'
2
+
3
+ export const DEFAULT_TREE_MAP_PARAMS: TreeMapParams = {
4
+ paddingInner: 2,
5
+ paddingOuter: 2,
6
+ labelColorType: 'primary',
7
+ squarifyRatio: 1.618034, // 黃金比例
8
+ sort: (a, b) => b.value - a.value
9
+ }
10
+
11
+ export const DEFAULT_TREE_LEGEND_PARAMS: TreeLegendParams = {
12
+ position: 'right',
13
+ justify: 'end',
14
+ padding: 28,
15
+ backgroundFill: 'none',
16
+ backgroundStroke: 'none',
17
+ gap: 10,
18
+ listRectWidth: 14,
19
+ listRectHeight: 14,
20
+ listRectRadius: 0,
21
+ }
package/src/tree/index.ts CHANGED
@@ -0,0 +1,4 @@
1
+ export * from './defaults'
2
+ export * from './types'
3
+ export { TreeLegend } from './plugins/TreeLegend'
4
+ export { TreeMap } from './plugins/TreeMap'
@@ -0,0 +1,58 @@
1
+ import * as d3 from 'd3'
2
+ import {
3
+ combineLatest,
4
+ map,
5
+ switchMap,
6
+ takeUntil,
7
+ Observable,
8
+ Subject } from 'rxjs'
9
+ import {
10
+ defineTreePlugin } from '@orbcharts/core'
11
+ import { DEFAULT_TREE_LEGEND_PARAMS } from '../defaults'
12
+ import { createBaseLegend } from '../../base/BaseLegend'
13
+
14
+ const pluginName = 'TreeLegend'
15
+
16
+ export const TreeLegend = defineTreePlugin(pluginName, DEFAULT_TREE_LEGEND_PARAMS)(({ selection, rootSelection, observer, subject }) => {
17
+
18
+ const destroy$ = new Subject()
19
+
20
+ const categoryLabels$: Observable<string[]> = observer.CategoryDataMap$.pipe(
21
+ takeUntil(destroy$),
22
+ map(data => {
23
+ return Array.from(data.keys())
24
+ })
25
+ )
26
+
27
+ // 全部列點矩型使用相同樣式參數
28
+ const fullParams$ = observer.fullParams$.pipe(
29
+ takeUntil(destroy$),
30
+ map(d => {
31
+ const seriesList = [
32
+ {
33
+ listRectWidth: d.listRectWidth,
34
+ listRectHeight: d.listRectHeight,
35
+ listRectRadius: d.listRectRadius,
36
+ }
37
+ ]
38
+ return {
39
+ ...d,
40
+ seriesList
41
+ }
42
+ })
43
+ )
44
+
45
+ const unsubscribeBaseLegend = createBaseLegend(pluginName, {
46
+ rootSelection,
47
+ seriesLabels$: categoryLabels$,
48
+ fullParams$,
49
+ layout$: observer.layout$,
50
+ fullChartParams$: observer.fullChartParams$
51
+ })
52
+
53
+ return () => {
54
+ destroy$.next(undefined)
55
+ unsubscribeBaseLegend()
56
+ }
57
+ })
58
+
@@ -0,0 +1,298 @@
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 {
13
+ defineTreePlugin } from '@orbcharts/core'
14
+ import type { Layout, ComputedDataTree, DataFormatterTree, ChartParams } from '../../../../orbcharts-core/src'
15
+ import type { TreeMapParams } from '../types'
16
+ import { DEFAULT_TREE_MAP_PARAMS } from '../defaults'
17
+ import { getClassName, getColor } from '../../utils/orbchartsUtils'
18
+
19
+ const pluginName = 'TreeMap'
20
+ const treeClassName = getClassName(pluginName, 'tree')
21
+
22
+ function renderTree ({ selection, treeData, fullParams, fullChartParams }: {
23
+ selection: d3.Selection<any, any, any, any>
24
+ treeData: d3.HierarchyRectangularNode<ComputedDataTree>[]
25
+ fullParams: TreeMapParams
26
+ fullChartParams: ChartParams
27
+ }) {
28
+ const padding = fullChartParams.styles.textSize / 2
29
+
30
+ const cell = selection.selectAll<SVGGElement, d3.HierarchyRectangularNode<ComputedDataTree>>(`g.${treeClassName}`)
31
+ .data(treeData, d => d.data.id)
32
+ .join('g')
33
+ .attr('class', treeClassName)
34
+
35
+ cell
36
+ // .transition()
37
+ // .duration(fullChartParams.transitionDuration)
38
+ .attr('transform', (d) => !d.x0 || !d.y0 ? null : `translate(${d.x0},${d.y0})`)
39
+ .each((d, i, nodes) => {
40
+ const eachCell = d3.select(nodes[i])
41
+
42
+ const tile = eachCell
43
+ .selectAll<SVGRectElement, d3.HierarchyRectangularNode<ComputedDataTree>>('rect')
44
+ .data([d], d => d.data.id)
45
+ .join('rect')
46
+ .attr("id", d => d.data.id)
47
+ .attr("class", "tile")
48
+ .attr("width", (d) => d.x1 - d.x0)
49
+ .attr("height", (d) => d.y1 - d.y0)
50
+ .attr('fill', d => d.data.color)
51
+ .attr('data-name', d => d.data.label)
52
+ .attr('data-category', d => d.data.categoryLabel)
53
+ .attr('data-value', d => d.data.value)
54
+
55
+ const label = eachCell
56
+ .selectAll('g')
57
+ .data([d])
58
+ .join('g')
59
+ .each((d, i, nodes) => {
60
+ const eachLabel = d3.select(nodes[i])
61
+ const text = eachLabel
62
+ .selectAll('text')
63
+ .data([d])
64
+ .join('text')
65
+ .text(d => d.data.label)
66
+ .attr('dominant-baseline', 'hanging')
67
+ .attr("x", padding)
68
+ .attr("y", padding)
69
+ .attr('font-size', fullChartParams.styles.textSize)
70
+ .each(function(d) {
71
+ // -- tspan(自動斷行) --
72
+ const textElement = d3.select(this);
73
+ const words = d.data.label.split(/\s+/).reverse() // 以空隔分割字串
74
+ let word;
75
+ let line: string[] = []
76
+ const lineHeight = fullChartParams.styles.textSize // 行高
77
+ const x = textElement.attr("x")
78
+ let y = textElement.attr("y")
79
+ let dy = 0
80
+ let tspan = textElement
81
+ .text(null)
82
+ .append("tspan")
83
+ .attr('cursor', 'default')
84
+ .attr('fill', getColor(fullParams.labelColorType, fullChartParams))
85
+ .attr('font-size', fullChartParams.styles.textSize)
86
+ .attr("x", x)
87
+ .attr("y", y)
88
+
89
+ while (word = words.pop()) {
90
+ line.push(word)
91
+ tspan.text(line.join(" "))
92
+ if (tspan.node().getComputedTextLength() > (d.x1 - d.x0 - padding)) {
93
+ line.pop()
94
+ tspan.text(line.join(" "))
95
+ line = [word]
96
+ dy += lineHeight
97
+ tspan = textElement
98
+ .append("tspan")
99
+ .attr('cursor', 'default')
100
+ .attr('fill', getColor(fullParams.labelColorType, fullChartParams))
101
+ .attr('font-size', fullChartParams.styles.textSize)
102
+ .attr("x", x)
103
+ .attr("y", y)
104
+ .attr("dy", dy + "px")
105
+ .text(word)
106
+ }
107
+ }
108
+ })
109
+ })
110
+
111
+ })
112
+
113
+ return cell
114
+ }
115
+
116
+ function highlight ({ selection, ids, fullChartParams }: {
117
+ selection: d3.Selection<any, d3.HierarchyRectangularNode<ComputedDataTree>, any, any>
118
+ ids: string[]
119
+ fullChartParams: ChartParams
120
+ }) {
121
+ selection.interrupt('highlight')
122
+
123
+ if (!ids.length) {
124
+ // remove highlight
125
+ selection
126
+ .transition('highlight')
127
+ .duration(200)
128
+ .style('opacity', 1)
129
+ return
130
+ }
131
+
132
+ selection
133
+ .each((d, i, n) => {
134
+ if (ids.includes(d.data.id)) {
135
+ d3.select(n[i])
136
+ .style('opacity', 1)
137
+ } else {
138
+ d3.select(n[i])
139
+ .style('opacity', fullChartParams.styles.unhighlightedOpacity)
140
+ }
141
+ })
142
+ }
143
+
144
+ export const TreeMap = defineTreePlugin(pluginName, DEFAULT_TREE_MAP_PARAMS)(({ selection, name, subject, observer }) => {
145
+ const destroy$ = new Subject()
146
+
147
+ const treeData$ = combineLatest({
148
+ layout: observer.layout$,
149
+ visibleComputedData: observer.visibleComputedData$,
150
+ fullParams: observer.fullParams$,
151
+ fullDataFormatter: observer.fullDataFormatter$,
152
+ fullChartParams: observer.fullChartParams$
153
+ }).pipe(
154
+ takeUntil(destroy$),
155
+ switchMap(async d => d),
156
+ map(data => {
157
+ const treemap = d3.treemap()
158
+ .size([data.layout.width, data.layout.height])
159
+ .paddingInner(data.fullParams.paddingInner)
160
+ .paddingOuter(data.fullParams.paddingOuter)
161
+ .round(true)
162
+ .tile(d3.treemapSquarify.ratio(data.fullParams.squarifyRatio))
163
+
164
+ const root = d3.hierarchy(data.visibleComputedData)
165
+ .sum(d => d.value)
166
+ .sort(data.fullParams.sort as (a: any, b: any) => number)
167
+
168
+ //call treemap
169
+ treemap(root)
170
+
171
+ const treeData: d3.HierarchyRectangularNode<ComputedDataTree>[] = root.leaves() as any
172
+
173
+ return treeData
174
+ })
175
+ )
176
+
177
+ const cellSelection$ = combineLatest({
178
+ selection: of(selection),
179
+ treeData: treeData$,
180
+ fullParams: observer.fullParams$,
181
+ fullChartParams: observer.fullChartParams$
182
+ }).pipe(
183
+ takeUntil(destroy$),
184
+ switchMap(async d => d),
185
+ map(data => {
186
+ return renderTree({
187
+ selection,
188
+ treeData: data.treeData,
189
+ fullParams: data.fullParams,
190
+ fullChartParams: data.fullChartParams
191
+ })
192
+ })
193
+ )
194
+
195
+ const highlightTarget$ = observer.fullChartParams$.pipe(
196
+ takeUntil(destroy$),
197
+ map(d => d.highlightTarget),
198
+ distinctUntilChanged()
199
+ )
200
+
201
+ combineLatest({
202
+ cellSelection: cellSelection$,
203
+ computedData: observer.computedData$,
204
+ treeData: treeData$,
205
+ fullParams: observer.fullParams$,
206
+ fullChartParams: observer.fullChartParams$,
207
+ highlightTarget: highlightTarget$,
208
+ CategoryDataMap: observer.CategoryDataMap$,
209
+ }).pipe(
210
+ takeUntil(destroy$),
211
+ switchMap(async d => d)
212
+ ).subscribe(data => {
213
+ data.cellSelection
214
+ .on('mouseover', (event, datum) => {
215
+ event.stopPropagation()
216
+
217
+ subject.event$.next({
218
+ type: 'tree',
219
+ eventName: 'mouseover',
220
+ pluginName,
221
+ highlightTarget: data.highlightTarget,
222
+ datum: datum.data,
223
+ category: data.CategoryDataMap.get(datum.data.categoryLabel)!,
224
+ categoryIndex: datum.data.categoryIndex,
225
+ categoryLabel: datum.data.categoryLabel,
226
+ event,
227
+ data: data.computedData
228
+ })
229
+ })
230
+ .on('mousemove', (event, datum) => {
231
+ event.stopPropagation()
232
+
233
+ subject.event$.next({
234
+ type: 'tree',
235
+ eventName: 'mousemove',
236
+ pluginName,
237
+ highlightTarget: data.highlightTarget,
238
+ datum: datum.data,
239
+ category: data.CategoryDataMap.get(datum.data.categoryLabel)!,
240
+ categoryIndex: datum.data.categoryIndex,
241
+ categoryLabel: datum.data.categoryLabel,
242
+ event,
243
+ data: data.computedData
244
+ })
245
+ })
246
+ .on('mouseout', (event, datum) => {
247
+ event.stopPropagation()
248
+
249
+ subject.event$.next({
250
+ type: 'tree',
251
+ eventName: 'mouseout',
252
+ pluginName,
253
+ highlightTarget: data.highlightTarget,
254
+ datum: datum.data,
255
+ category: data.CategoryDataMap.get(datum.data.categoryLabel)!,
256
+ categoryIndex: datum.data.categoryIndex,
257
+ categoryLabel: datum.data.categoryLabel,
258
+ event,
259
+ data: data.computedData
260
+ })
261
+ })
262
+ .on('click', (event, datum) => {
263
+ event.stopPropagation()
264
+
265
+ subject.event$.next({
266
+ type: 'tree',
267
+ eventName: 'click',
268
+ pluginName,
269
+ highlightTarget: data.highlightTarget,
270
+ datum: datum.data,
271
+ category: data.CategoryDataMap.get(datum.data.categoryLabel)!,
272
+ categoryIndex: datum.data.categoryIndex,
273
+ categoryLabel: datum.data.categoryLabel,
274
+ event,
275
+ data: data.computedData
276
+ })
277
+ })
278
+ })
279
+
280
+ combineLatest({
281
+ cellSelection: cellSelection$,
282
+ highlight: observer.treeHighlight$,
283
+ fullChartParams: observer.fullChartParams$
284
+ }).pipe(
285
+ takeUntil(destroy$),
286
+ switchMap(async d => d)
287
+ ).subscribe(data => {
288
+ highlight({
289
+ selection: data.cellSelection,
290
+ ids: data.highlight,
291
+ fullChartParams: data.fullChartParams
292
+ })
293
+ })
294
+
295
+ return () => {
296
+ destroy$.next(undefined)
297
+ }
298
+ })
@@ -0,0 +1,23 @@
1
+ import type { ColorType } from '@orbcharts/core'
2
+ import type { ComputedDataTree } from '../../../orbcharts-core/src'
3
+
4
+ export interface TreeMapParams {
5
+ paddingInner: number
6
+ paddingOuter: number
7
+ labelColorType: ColorType
8
+ squarifyRatio: number
9
+ sort: (a: ComputedDataTree, b: ComputedDataTree) => number
10
+ }
11
+
12
+ export interface TreeLegendParams {
13
+ position: 'top' | 'bottom' | 'left' | 'right'
14
+ justify: 'start' | 'center' | 'end'
15
+ padding: number
16
+ backgroundFill: ColorType
17
+ backgroundStroke: ColorType
18
+ gap: number
19
+ listRectWidth: number
20
+ listRectHeight: number
21
+ listRectRadius: number
22
+ }
23
+
File without changes
File without changes
File without changes
File without changes
File without changes