@orbcharts/plugin-basic 4.0.0-pre-alpha.0

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 (208) hide show
  1. package/LICENSE +201 -0
  2. package/dist/orbcharts-plugin-basic.es.js +25335 -0
  3. package/dist/orbcharts-plugin-basic.umd.js +341 -0
  4. package/dist/plugin-basic/src/baseLayers/BaseBars.d.ts +38 -0
  5. package/dist/plugin-basic/src/baseLayers/BaseBarsTriangle.d.ts +37 -0
  6. package/dist/plugin-basic/src/baseLayers/BaseCategoryAxis.d.ts +42 -0
  7. package/dist/plugin-basic/src/baseLayers/BaseDots.d.ts +38 -0
  8. package/dist/plugin-basic/src/baseLayers/BaseLegend.d.ts +31 -0
  9. package/dist/plugin-basic/src/baseLayers/BaseLineAreas.d.ts +36 -0
  10. package/dist/plugin-basic/src/baseLayers/BaseLines.d.ts +36 -0
  11. package/dist/plugin-basic/src/baseLayers/BaseStackedBars.d.ts +41 -0
  12. package/dist/plugin-basic/src/baseLayers/BaseTooltip.d.ts +47 -0
  13. package/dist/plugin-basic/src/baseLayers/BaseValueAxis.d.ts +38 -0
  14. package/dist/plugin-basic/src/baseLayers/BaseXAxis.d.ts +25 -0
  15. package/dist/plugin-basic/src/baseLayers/BaseXZoom.d.ts +22 -0
  16. package/dist/plugin-basic/src/baseLayers/BaseYAxis.d.ts +23 -0
  17. package/dist/plugin-basic/src/baseLayers/types.d.ts +171 -0
  18. package/dist/plugin-basic/src/const/layerIndex.d.ts +10 -0
  19. package/dist/plugin-basic/src/const/sharedPluginParams.d.ts +6 -0
  20. package/dist/plugin-basic/src/index.d.ts +2 -0
  21. package/dist/plugin-basic/src/plugins/CompositionPlot/CompositionPlot.d.ts +22 -0
  22. package/dist/plugin-basic/src/plugins/CompositionPlot/contextObservables.d.ts +40 -0
  23. package/dist/plugin-basic/src/plugins/CompositionPlot/defaults.d.ts +10 -0
  24. package/dist/plugin-basic/src/plugins/CompositionPlot/index.d.ts +3 -0
  25. package/dist/plugin-basic/src/plugins/CompositionPlot/layers/Bubbles.d.ts +16 -0
  26. package/dist/plugin-basic/src/plugins/CompositionPlot/layers/Indicator.d.ts +0 -0
  27. package/dist/plugin-basic/src/plugins/CompositionPlot/layers/Pie.d.ts +16 -0
  28. package/dist/plugin-basic/src/plugins/CompositionPlot/layers/PieEventTexts.d.ts +16 -0
  29. package/dist/plugin-basic/src/plugins/CompositionPlot/layers/PieLabels.d.ts +16 -0
  30. package/dist/plugin-basic/src/plugins/CompositionPlot/layers/Rose.d.ts +16 -0
  31. package/dist/plugin-basic/src/plugins/CompositionPlot/layers/RoseLabels.d.ts +16 -0
  32. package/dist/plugin-basic/src/plugins/CompositionPlot/layers/Waffle.d.ts +0 -0
  33. package/dist/plugin-basic/src/plugins/CompositionPlot/types.d.ts +110 -0
  34. package/dist/plugin-basic/src/plugins/CompositionPlot/utils.d.ts +19 -0
  35. package/dist/plugin-basic/src/plugins/HierarchyPlot/HierarchyPlot.d.ts +22 -0
  36. package/dist/plugin-basic/src/plugins/HierarchyPlot/contextObservables.d.ts +16 -0
  37. package/dist/plugin-basic/src/plugins/HierarchyPlot/defaults.d.ts +4 -0
  38. package/dist/plugin-basic/src/plugins/HierarchyPlot/index.d.ts +3 -0
  39. package/dist/plugin-basic/src/plugins/HierarchyPlot/layers/TreeMap.d.ts +16 -0
  40. package/dist/plugin-basic/src/plugins/HierarchyPlot/types.d.ts +29 -0
  41. package/dist/plugin-basic/src/plugins/Legend/Legend.d.ts +22 -0
  42. package/dist/plugin-basic/src/plugins/Legend/contextObservables.d.ts +9 -0
  43. package/dist/plugin-basic/src/plugins/Legend/defaults.d.ts +4 -0
  44. package/dist/plugin-basic/src/plugins/Legend/index.d.ts +3 -0
  45. package/dist/plugin-basic/src/plugins/Legend/layers/Legend.d.ts +16 -0
  46. package/dist/plugin-basic/src/plugins/Legend/types.d.ts +31 -0
  47. package/dist/plugin-basic/src/plugins/Legend/utils.d.ts +19 -0
  48. package/dist/plugin-basic/src/plugins/NetworkPlot/NetworkPlot.d.ts +22 -0
  49. package/dist/plugin-basic/src/plugins/NetworkPlot/contextObservables.d.ts +19 -0
  50. package/dist/plugin-basic/src/plugins/NetworkPlot/defaults.d.ts +5 -0
  51. package/dist/plugin-basic/src/plugins/NetworkPlot/index.d.ts +3 -0
  52. package/dist/plugin-basic/src/plugins/NetworkPlot/layers/ForceDirected.d.ts +16 -0
  53. package/dist/plugin-basic/src/plugins/NetworkPlot/layers/ForceDirectedBubbles.d.ts +16 -0
  54. package/dist/plugin-basic/src/plugins/NetworkPlot/types.d.ts +117 -0
  55. package/dist/plugin-basic/src/plugins/ScatterPlot/ScatterPlot.d.ts +22 -0
  56. package/dist/plugin-basic/src/plugins/ScatterPlot/contextObservables.d.ts +140 -0
  57. package/dist/plugin-basic/src/plugins/ScatterPlot/defaults.d.ts +8 -0
  58. package/dist/plugin-basic/src/plugins/ScatterPlot/index.d.ts +3 -0
  59. package/dist/plugin-basic/src/plugins/ScatterPlot/layers/Scatter.d.ts +16 -0
  60. package/dist/plugin-basic/src/plugins/ScatterPlot/layers/ScatterBubbles.d.ts +16 -0
  61. package/dist/plugin-basic/src/plugins/ScatterPlot/layers/XYAux.d.ts +16 -0
  62. package/dist/plugin-basic/src/plugins/ScatterPlot/layers/XYAxes.d.ts +16 -0
  63. package/dist/plugin-basic/src/plugins/ScatterPlot/layers/XZoom.d.ts +16 -0
  64. package/dist/plugin-basic/src/plugins/ScatterPlot/types.d.ts +146 -0
  65. package/dist/plugin-basic/src/plugins/SeriesPlot/SeriesPlot.d.ts +22 -0
  66. package/dist/plugin-basic/src/plugins/SeriesPlot/contextObservables.d.ts +77 -0
  67. package/dist/plugin-basic/src/plugins/SeriesPlot/defaults.d.ts +15 -0
  68. package/dist/plugin-basic/src/plugins/SeriesPlot/index.d.ts +3 -0
  69. package/dist/plugin-basic/src/plugins/SeriesPlot/layers/Bars.d.ts +16 -0
  70. package/dist/plugin-basic/src/plugins/SeriesPlot/layers/BarsPN.d.ts +16 -0
  71. package/dist/plugin-basic/src/plugins/SeriesPlot/layers/BarsTriangle.d.ts +16 -0
  72. package/dist/plugin-basic/src/plugins/SeriesPlot/layers/CategoryAux.d.ts +16 -0
  73. package/dist/plugin-basic/src/plugins/SeriesPlot/layers/CategoryAxis.d.ts +16 -0
  74. package/dist/plugin-basic/src/plugins/SeriesPlot/layers/CategoryZoom.d.ts +16 -0
  75. package/dist/plugin-basic/src/plugins/SeriesPlot/layers/Dots.d.ts +16 -0
  76. package/dist/plugin-basic/src/plugins/SeriesPlot/layers/LineAreas.d.ts +16 -0
  77. package/dist/plugin-basic/src/plugins/SeriesPlot/layers/Lines.d.ts +16 -0
  78. package/dist/plugin-basic/src/plugins/SeriesPlot/layers/StackedBars.d.ts +16 -0
  79. package/dist/plugin-basic/src/plugins/SeriesPlot/layers/StackedValueAxis.d.ts +16 -0
  80. package/dist/plugin-basic/src/plugins/SeriesPlot/layers/ValueAxis.d.ts +16 -0
  81. package/dist/plugin-basic/src/plugins/SeriesPlot/types.d.ts +140 -0
  82. package/dist/plugin-basic/src/plugins/Tooltip/Tooltip.d.ts +22 -0
  83. package/dist/plugin-basic/src/plugins/Tooltip/contextObservables.d.ts +9 -0
  84. package/dist/plugin-basic/src/plugins/Tooltip/defaults.d.ts +4 -0
  85. package/dist/plugin-basic/src/plugins/Tooltip/index.d.ts +3 -0
  86. package/dist/plugin-basic/src/plugins/Tooltip/layers/Tooltip.d.ts +16 -0
  87. package/dist/plugin-basic/src/plugins/Tooltip/types.d.ts +35 -0
  88. package/dist/plugin-basic/src/plugins/Tooltip/utils.d.ts +19 -0
  89. package/dist/plugin-basic/src/plugins/index.d.ts +7 -0
  90. package/dist/plugin-basic/src/types/BaseLayer.d.ts +3 -0
  91. package/dist/plugin-basic/src/types/Common.d.ts +14 -0
  92. package/dist/plugin-basic/src/types/ComputedData.d.ts +27 -0
  93. package/dist/plugin-basic/src/types/PluginParams.d.ts +66 -0
  94. package/dist/plugin-basic/src/types/index.d.ts +3 -0
  95. package/dist/plugin-basic/src/utils/commonUtils.d.ts +3 -0
  96. package/dist/plugin-basic/src/utils/d3Graphics.d.ts +24 -0
  97. package/dist/plugin-basic/src/utils/d3Scale.d.ts +28 -0
  98. package/dist/plugin-basic/src/utils/d3Utils.d.ts +14 -0
  99. package/dist/plugin-basic/src/utils/graphObservables.d.ts +0 -0
  100. package/dist/plugin-basic/src/utils/gridObservables.d.ts +51 -0
  101. package/dist/plugin-basic/src/utils/multivariateObservables.d.ts +74 -0
  102. package/dist/plugin-basic/src/utils/observables.d.ts +34 -0
  103. package/dist/plugin-basic/src/utils/orbchartsUtils.d.ts +26 -0
  104. package/dist/plugin-basic/src/utils/seriesObservables.d.ts +22 -0
  105. package/dist/plugin-basic/vite.config.d.ts +2 -0
  106. package/dist/src/index.d.ts +1 -0
  107. package/package.json +62 -0
  108. package/src/baseLayers/BaseBars.ts +783 -0
  109. package/src/baseLayers/BaseBarsTriangle.ts +692 -0
  110. package/src/baseLayers/BaseCategoryAxis.ts +708 -0
  111. package/src/baseLayers/BaseDots.ts +495 -0
  112. package/src/baseLayers/BaseLegend.ts +684 -0
  113. package/src/baseLayers/BaseLineAreas.ts +644 -0
  114. package/src/baseLayers/BaseLines.ts +721 -0
  115. package/src/baseLayers/BaseStackedBars.ts +818 -0
  116. package/src/baseLayers/BaseTooltip.ts +435 -0
  117. package/src/baseLayers/BaseValueAxis.ts +612 -0
  118. package/src/baseLayers/BaseXAxis.ts +412 -0
  119. package/src/baseLayers/BaseXZoom.ts +250 -0
  120. package/src/baseLayers/BaseYAxis.ts +371 -0
  121. package/src/baseLayers/types.ts +174 -0
  122. package/src/const/layerIndex.ts +36 -0
  123. package/src/const/sharedPluginParams.ts +29 -0
  124. package/src/index.ts +3 -0
  125. package/src/plugins/CompositionPlot/CompositionPlot.ts +308 -0
  126. package/src/plugins/CompositionPlot/contextObservables.ts +251 -0
  127. package/src/plugins/CompositionPlot/defaults.ts +162 -0
  128. package/src/plugins/CompositionPlot/index.ts +3 -0
  129. package/src/plugins/CompositionPlot/layers/Bubbles.ts +808 -0
  130. package/src/plugins/CompositionPlot/layers/Indicator.ts +0 -0
  131. package/src/plugins/CompositionPlot/layers/Pie.ts +776 -0
  132. package/src/plugins/CompositionPlot/layers/PieEventTexts.ts +326 -0
  133. package/src/plugins/CompositionPlot/layers/PieLabels.ts +651 -0
  134. package/src/plugins/CompositionPlot/layers/Rose.ts +546 -0
  135. package/src/plugins/CompositionPlot/layers/RoseLabels.ts +616 -0
  136. package/src/plugins/CompositionPlot/layers/Waffle.ts +0 -0
  137. package/src/plugins/CompositionPlot/types.ts +129 -0
  138. package/src/plugins/CompositionPlot/utils.ts +53 -0
  139. package/src/plugins/HierarchyPlot/HierarchyPlot.ts +190 -0
  140. package/src/plugins/HierarchyPlot/contextObservables.ts +136 -0
  141. package/src/plugins/HierarchyPlot/defaults.ts +31 -0
  142. package/src/plugins/HierarchyPlot/index.ts +3 -0
  143. package/src/plugins/HierarchyPlot/layers/TreeMap.ts +371 -0
  144. package/src/plugins/HierarchyPlot/types.ts +36 -0
  145. package/src/plugins/Legend/Legend.ts +151 -0
  146. package/src/plugins/Legend/contextObservables.ts +55 -0
  147. package/src/plugins/Legend/defaults.ts +37 -0
  148. package/src/plugins/Legend/index.ts +3 -0
  149. package/src/plugins/Legend/layers/Legend.ts +114 -0
  150. package/src/plugins/Legend/types.ts +45 -0
  151. package/src/plugins/Legend/utils.ts +53 -0
  152. package/src/plugins/NetworkPlot/NetworkPlot.ts +228 -0
  153. package/src/plugins/NetworkPlot/contextObservables.ts +123 -0
  154. package/src/plugins/NetworkPlot/defaults.ts +147 -0
  155. package/src/plugins/NetworkPlot/index.ts +3 -0
  156. package/src/plugins/NetworkPlot/layers/ForceDirected.ts +1048 -0
  157. package/src/plugins/NetworkPlot/layers/ForceDirectedBubbles.ts +1318 -0
  158. package/src/plugins/NetworkPlot/types.ts +146 -0
  159. package/src/plugins/ScatterPlot/ScatterPlot.ts +569 -0
  160. package/src/plugins/ScatterPlot/contextObservables.ts +901 -0
  161. package/src/plugins/ScatterPlot/defaults.ts +212 -0
  162. package/src/plugins/ScatterPlot/index.ts +3 -0
  163. package/src/plugins/ScatterPlot/layers/Scatter.ts +518 -0
  164. package/src/plugins/ScatterPlot/layers/ScatterBubbles.ts +670 -0
  165. package/src/plugins/ScatterPlot/layers/XYAux.ts +686 -0
  166. package/src/plugins/ScatterPlot/layers/XYAxes.ts +205 -0
  167. package/src/plugins/ScatterPlot/layers/XZoom.ts +48 -0
  168. package/src/plugins/ScatterPlot/types.ts +179 -0
  169. package/src/plugins/SeriesPlot/SeriesPlot.ts +494 -0
  170. package/src/plugins/SeriesPlot/contextObservables.ts +726 -0
  171. package/src/plugins/SeriesPlot/defaults.ts +142 -0
  172. package/src/plugins/SeriesPlot/index.ts +3 -0
  173. package/src/plugins/SeriesPlot/layers/Bars.ts +84 -0
  174. package/src/plugins/SeriesPlot/layers/BarsPN.ts +85 -0
  175. package/src/plugins/SeriesPlot/layers/BarsTriangle.ts +89 -0
  176. package/src/plugins/SeriesPlot/layers/CategoryAux.ts +1131 -0
  177. package/src/plugins/SeriesPlot/layers/CategoryAxis.ts +92 -0
  178. package/src/plugins/SeriesPlot/layers/CategoryZoom.ts +233 -0
  179. package/src/plugins/SeriesPlot/layers/Dots.ts +91 -0
  180. package/src/plugins/SeriesPlot/layers/LineAreas.ts +82 -0
  181. package/src/plugins/SeriesPlot/layers/Lines.ts +75 -0
  182. package/src/plugins/SeriesPlot/layers/StackedBars.ts +85 -0
  183. package/src/plugins/SeriesPlot/layers/StackedValueAxis.ts +111 -0
  184. package/src/plugins/SeriesPlot/layers/ValueAxis.ts +111 -0
  185. package/src/plugins/SeriesPlot/types.ts +201 -0
  186. package/src/plugins/Tooltip/Tooltip.ts +159 -0
  187. package/src/plugins/Tooltip/contextObservables.ts +55 -0
  188. package/src/plugins/Tooltip/defaults.ts +458 -0
  189. package/src/plugins/Tooltip/index.ts +3 -0
  190. package/src/plugins/Tooltip/layers/Tooltip.ts +90 -0
  191. package/src/plugins/Tooltip/types.ts +55 -0
  192. package/src/plugins/Tooltip/utils.ts +53 -0
  193. package/src/plugins/index.ts +8 -0
  194. package/src/types/BaseLayer.ts +3 -0
  195. package/src/types/Common.ts +20 -0
  196. package/src/types/ComputedData.ts +55 -0
  197. package/src/types/PluginParams.ts +81 -0
  198. package/src/types/index.ts +3 -0
  199. package/src/utils/commonUtils.ts +31 -0
  200. package/src/utils/d3Graphics.ts +177 -0
  201. package/src/utils/d3Scale.ts +198 -0
  202. package/src/utils/d3Utils.ts +92 -0
  203. package/src/utils/graphObservables.ts +0 -0
  204. package/src/utils/gridObservables.ts +637 -0
  205. package/src/utils/multivariateObservables.ts +790 -0
  206. package/src/utils/observables.ts +357 -0
  207. package/src/utils/orbchartsUtils.ts +335 -0
  208. package/src/utils/seriesObservables.ts +172 -0
@@ -0,0 +1,129 @@
1
+
2
+ import { Observable } from 'rxjs'
3
+ import type { ColorType, ModelDatumSeries, EventData } from '@orbcharts/core'
4
+ import type { ContainerPosition, Container, GraphicStyles, Layout } from '../../types/PluginParams'
5
+ import { ComputedDatumSeries } from '../../types/ComputedData'
6
+ import type { ArcScaleType, Placement } from '../../types/Common'
7
+
8
+ // context
9
+ export interface CompositionPlotExtendContext {
10
+ layout$: Observable<Layout>
11
+ computedData$: Observable<ComputedDatumSeries[][]>
12
+ fontSizePx$: Observable<number>
13
+ datumLabels$: Observable<string[]>
14
+ separateSeries$: Observable<boolean>
15
+ separateName$: Observable<boolean>
16
+ computedSortedData$: Observable<ComputedDatumSeries[][]>
17
+ visibleComputedSortedData$: Observable<ComputedDatumSeries[][]>
18
+ datumList$: Observable<ComputedDatumSeries[]>
19
+ seriesHighlight$: Observable<ComputedDatumSeries[]>
20
+ seriesLabels$: Observable<string[]>
21
+ SeriesDataMap$: Observable<Map<string, ComputedDatumSeries[]>>
22
+ seriesContainerPosition$: Observable<ContainerPosition[]>
23
+ DatumContainerPositionMap$: Observable<Map<string, ContainerPosition>>
24
+ }
25
+
26
+ // plugin params
27
+ export interface CompositionPlotPluginParams {
28
+ styles: GraphicStyles
29
+ visibleFilter: (datum: ModelDatumSeries) => boolean | null
30
+ sort: ((a: ModelDatumSeries, b: ModelDatumSeries) => number) | null
31
+ // seriesLabels: string[]
32
+ container: Container
33
+ separateSeries: boolean
34
+ separateName: boolean
35
+ // sumSeries: boolean
36
+ datasetIndex: number
37
+ }
38
+
39
+ // all layer params
40
+ export interface CompositionPlotAllLayerParams {
41
+ Bubbles: BubblesParams
42
+ Pie: PieParams
43
+ PieEventTexts: PieEventTextsParams
44
+ PieLabels: PieLabelsParams
45
+ Rose: RoseParams
46
+ RoseLabels: RoseLabelsParams
47
+ Indicator: IndicatorParams
48
+ }
49
+
50
+ // -- layer params --
51
+ export interface BubblesParams {
52
+ force: {
53
+ strength: number; // 泡泡引力
54
+ velocityDecay: number; // 衰減數
55
+ collisionSpacing: number // 泡泡間距
56
+ }
57
+ bubbleLabel: {
58
+ labelFn: ((d: ComputedDatumSeries) => string)
59
+ colorType: ColorType
60
+ fillRate: number
61
+ lineHeight: number
62
+ maxLineLength: number
63
+ wordBreakAll: boolean
64
+ }
65
+ // highlightRIncrease: number
66
+ arcScaleType: ArcScaleType
67
+ }
68
+
69
+ export interface PieParams {
70
+ outerRadius: number;
71
+ innerRadius: number;
72
+ outerRadiusWhileHighlight: number;
73
+ startAngle: number;
74
+ endAngle: number;
75
+ padAngle: number;
76
+ strokeColorType: ColorType;
77
+ strokeWidth: number;
78
+ cornerRadius: number;
79
+ }
80
+
81
+ export interface PieEventTextsParams {
82
+ renderFn: (d: EventData) => string[] | string | null
83
+ textAttrs: Array<{ [key:string]: string | number }>
84
+ textStyles: Array<{ [key:string]: string | number }>
85
+ }
86
+
87
+ export interface PieLabelsParams {
88
+ // solidColor?: string;
89
+ // colors?: string[];
90
+ outerRadius: number
91
+ outerRadiusWhileHighlight: number
92
+ // innerRadius?: number;
93
+ // enterDuration?: number
94
+ startAngle: number
95
+ endAngle: number
96
+ labelCentroid: number
97
+ // fontSize?: number
98
+ labelFn: ((d: ComputedDatumSeries) => string)
99
+ labelColorType: ColorType
100
+ }
101
+
102
+ export interface RoseParams {
103
+ outerRadius: number
104
+ padAngle: number
105
+ strokeColorType: ColorType
106
+ strokeWidth: number
107
+ cornerRadius: number
108
+ arcScaleType: ArcScaleType
109
+ angleIncreaseWhileHighlight: number
110
+ }
111
+
112
+ export interface RoseLabelsParams {
113
+ outerRadius: number
114
+ labelCentroid: number
115
+ labelFn: ((d: ComputedDatumSeries) => string)
116
+ labelColorType: ColorType
117
+ arcScaleType: ArcScaleType
118
+ }
119
+
120
+ export interface IndicatorParams {
121
+ startAngle: number
122
+ endAngle: number
123
+ radius: number
124
+ indicatorType: 'line' | 'needle' | 'pin' | 'triangle'
125
+ size: number
126
+ colorType: ColorType
127
+ // autoHighlight: boolean
128
+ value: number
129
+ }
@@ -0,0 +1,53 @@
1
+ import * as d3 from 'd3'
2
+ // import type { ModelDatumSeries } from '@orbcharts/core'
3
+ import type { ComputedDatumSeries } from '../../types/ComputedData'
4
+ // import type { D3PieDatum, PieDatum } from '../types'
5
+
6
+ // 由d3.pie()建出來的資料格式
7
+ export interface D3PieDatum {
8
+ data: any
9
+ index: number,
10
+ value: number,
11
+ startAngle: number,
12
+ endAngle: number,
13
+ padAngle: number,
14
+ }
15
+
16
+ export interface PieDatum extends D3PieDatum {
17
+ data: ComputedDatumSeries
18
+ id: string
19
+ }
20
+
21
+ export function makePieData ({ data, startAngle, endAngle }: {
22
+ data: ComputedDatumSeries[]
23
+ startAngle: number
24
+ endAngle: number
25
+ // itemLabels: string[]
26
+ // arcLabels: string[]
27
+ }): PieDatum[] {
28
+ let pie = d3.pie<any, any>()
29
+ .startAngle(startAngle)
30
+ // .endAngle(startAngle + (endAngle - startAngle) * t)
31
+ .endAngle(endAngle)
32
+ .value(d => d.value)
33
+ // .value((d) => d.visible == false ? 0 : d.value)
34
+ // .sort(null) // 不要排序
35
+ .sort((a, b) => a.seq - b.seq)
36
+ // .sort((a: any, b: any) => {
37
+ // return b.value - a.value
38
+ // })
39
+ // .sort(d3.ascending)
40
+ const pieData = pie(data)
41
+ return pieData.map((d: D3PieDatum, i: number) => {
42
+ // const itemLabel = d.data.itemLabel
43
+ let _d: any = d
44
+ _d.id = d.data.id
45
+ return _d
46
+ // return {
47
+ // ...d,
48
+ // itemIndex: itemLabels.indexOf(itemLabel),
49
+ // itemLabel,
50
+ // id: d.data.id,
51
+ // }
52
+ })
53
+ }
@@ -0,0 +1,190 @@
1
+ import * as d3 from 'd3'
2
+ import {
3
+ shareReplay,
4
+ map,
5
+ filter,
6
+ combineLatest,
7
+ debounceTime,
8
+ distinctUntilChanged,
9
+ Subject,
10
+ switchMap,
11
+ Observable,
12
+ BehaviorSubject
13
+ } from 'rxjs'
14
+
15
+ import type { HierarchyPlotExtendContext, HierarchyPlotPluginParams, HierarchyPlotAllLayerParams } from './types'
16
+ import { defineSVGPlugin } from '@orbcharts/core'
17
+ import { validateObject } from '@orbcharts/core'
18
+ import { DEFAULT_HIERARCHY_PLOT_PARAMS } from './defaults'
19
+ import {
20
+ categoryDataMapObservable,
21
+ containerSizeObservable,
22
+ layoutObservable,
23
+ fontSizePxObservable,
24
+ highlightObservable,
25
+ seriesDataMapObservable
26
+ } from '../../utils/observables'
27
+ import {
28
+ treeComputedDataObservable,
29
+ nodeListObservable,
30
+ categoryLabelsObservable,
31
+ treeVisibleComputedDataObservable
32
+ } from './contextObservables'
33
+ import { TreeMap } from './layers/TreeMap'
34
+ const treeMap = new TreeMap()
35
+
36
+ export const HierarchyPlot = defineSVGPlugin<
37
+ HierarchyPlotExtendContext,
38
+ HierarchyPlotPluginParams,
39
+ HierarchyPlotAllLayerParams
40
+ >({
41
+ name: 'HierarchyPlot',
42
+ defaultParams: DEFAULT_HIERARCHY_PLOT_PARAMS,
43
+ layers: [treeMap],
44
+ setup: (props) => {
45
+
46
+ const selectedTreeData$ = combineLatest({
47
+ treeData: props.context.treeData$,
48
+ datasetIndex: props.pluginParams$.pipe(
49
+ map(pluginParams => pluginParams.datasetIndex)
50
+ )
51
+ }).pipe(
52
+ debounceTime(0),
53
+ map(({ treeData, datasetIndex }) => treeData[datasetIndex]),
54
+ shareReplay(1)
55
+ )
56
+
57
+ const layout$ = layoutObservable({
58
+ size$: props.context.size$,
59
+ padding$: props.pluginParams$.pipe(
60
+ map(pluginParams => pluginParams.styles.padding)
61
+ )
62
+ }).pipe(
63
+ shareReplay(1)
64
+ )
65
+
66
+ const computedData$ = treeComputedDataObservable({
67
+ selectedTreeData$: selectedTreeData$,
68
+ pluginParams$: props.pluginParams$
69
+ }).pipe(
70
+ shareReplay(1)
71
+ )
72
+
73
+ const fontSizePx$ = fontSizePxObservable(props.context.theme$).pipe(
74
+ shareReplay(1)
75
+ )
76
+
77
+ const nodeList$ = nodeListObservable({
78
+ computedData$: computedData$
79
+ }).pipe(
80
+ shareReplay(1)
81
+ )
82
+
83
+ const treeHighlight$ = highlightObservable({
84
+ datumList$: nodeList$,
85
+ styles$: props.pluginParams$.pipe(
86
+ map(pluginParams => pluginParams.styles)
87
+ ),
88
+ event$: props.context.event$
89
+ }).pipe(
90
+ shareReplay(1)
91
+ )
92
+
93
+ const CategoryDataMap$ = categoryDataMapObservable({
94
+ datumList$: nodeList$
95
+ }).pipe(
96
+ shareReplay(1)
97
+ )
98
+
99
+ const categoryLabels$ = categoryLabelsObservable(CategoryDataMap$).pipe(
100
+ shareReplay(1)
101
+ )
102
+
103
+ const visibleComputedData$ = treeVisibleComputedDataObservable({
104
+ computedData$: computedData$
105
+ }).pipe(
106
+ shareReplay(1)
107
+ )
108
+
109
+ const extendsContext: HierarchyPlotExtendContext = {
110
+ layout$,
111
+ computedData$,
112
+ fontSizePx$,
113
+ treeHighlight$,
114
+ categoryLabels$,
115
+ CategoryDataMap$,
116
+ visibleComputedData$
117
+ }
118
+
119
+ props.context = {
120
+ ...props.context,
121
+ ...extendsContext,
122
+ }
123
+
124
+ return () => {
125
+ // layoutSubscription.unsubscribe()
126
+ }
127
+ },
128
+ validator: (params: HierarchyPlotPluginParams) => {
129
+ const result = validateObject(params, {
130
+ styles: {
131
+ toBeTypes: ['object'],
132
+ },
133
+ visibleFilter: {
134
+ toBeTypes: ['Function']
135
+ },
136
+ datasetIndex: {
137
+ toBeTypes: ['number']
138
+ }
139
+ })
140
+ if (result.status === 'error') {
141
+ return result
142
+ }
143
+ if (params.styles) {
144
+ const stylesResult = validateObject(params.styles, {
145
+ padding: {
146
+ toBeTypes: ['object']
147
+ },
148
+ highlightTarget: {
149
+ toBeTypes: ['string']
150
+ },
151
+ highlightDefault: {
152
+ toBeTypes: ['string', 'null']
153
+ },
154
+ unhighlightedOpacity: {
155
+ toBeTypes: ['number']
156
+ },
157
+ transitionDuration: {
158
+ toBeTypes: ['number']
159
+ },
160
+ transitionEase: {
161
+ toBeTypes: ['string']
162
+ }
163
+ })
164
+ if (stylesResult.status === 'error') {
165
+ return stylesResult
166
+ }
167
+ if (params.styles.padding) {
168
+ const paddingResult = validateObject(params.styles.padding, {
169
+ top: {
170
+ toBeTypes: ['number']
171
+ },
172
+ right: {
173
+ toBeTypes: ['number']
174
+ },
175
+ bottom: {
176
+ toBeTypes: ['number']
177
+ },
178
+ left: {
179
+ toBeTypes: ['number']
180
+ }
181
+ })
182
+ if (paddingResult.status === 'error') {
183
+ return paddingResult
184
+ }
185
+ }
186
+ }
187
+
188
+ return result
189
+ },
190
+ })
@@ -0,0 +1,136 @@
1
+ import {
2
+ combineLatest,
3
+ distinctUntilChanged,
4
+ debounceTime,
5
+ filter,
6
+ map,
7
+ merge,
8
+ takeUntil,
9
+ shareReplay,
10
+ switchMap,
11
+ Subject,
12
+ Observable } from 'rxjs'
13
+ import type { ModelData, ModelDatumSeries, ModelDatumTree } from '@orbcharts/core'
14
+ import type {
15
+ ComputedData,
16
+ ComputedDatumTree,
17
+ } from '../../types'
18
+ import { HierarchyPlotPluginParams } from './types'
19
+
20
+ export const treeComputedDataObservable = ({ selectedTreeData$, pluginParams$ }: {
21
+ selectedTreeData$: Observable<ModelData<'tree'>>
22
+ pluginParams$: Observable<HierarchyPlotPluginParams>
23
+ }): Observable<ComputedData<'tree'>> => {
24
+ return combineLatest({
25
+ selectedTreeData: selectedTreeData$,
26
+ pluginParams: pluginParams$
27
+ }).pipe(
28
+ debounceTime(0),
29
+ map(({ selectedTreeData, pluginParams }) => {
30
+ function buildComputedTree (node: ModelDatumTree, parentVisible: boolean = true): ComputedDatumTree {
31
+ // 父節點必須可見,子節點才有機會可見
32
+ const selfVisible = parentVisible && (
33
+ !pluginParams.visibleFilter || pluginParams.visibleFilter(node)
34
+ )
35
+
36
+ return {
37
+ ...node,
38
+ visible: selfVisible,
39
+ children: (node.children || []).map(child => buildComputedTree(child, selfVisible))
40
+ }
41
+ }
42
+ return buildComputedTree(selectedTreeData)
43
+ })
44
+ )
45
+ }
46
+
47
+ // 所有節點list結構
48
+ export const nodeListObservable = ({ computedData$ }: { computedData$: Observable<ComputedData<'tree'>> }) => {
49
+ return computedData$.pipe(
50
+ map(data => {
51
+ function setNodeList (accNodeList: ComputedDatumTree[], branch: ComputedDatumTree) {
52
+ accNodeList.push(branch)
53
+ if (branch.children) {
54
+ branch.children.forEach(childBranch => {
55
+ accNodeList = setNodeList(accNodeList, childBranch) // 遞迴子節點
56
+ })
57
+ }
58
+ return accNodeList
59
+ }
60
+ return setNodeList([], data)
61
+ })
62
+ )
63
+ }
64
+
65
+ // export const categoryLabelsObservable = ({ nodeList$, fullDataFormatter$ }: {
66
+ // nodeList$: Observable<ComputedDataTree[]>
67
+ // fullDataFormatter$: Observable<DataFormatterTree>
68
+ // }) => {
69
+
70
+ // const categoryLabels$ = fullDataFormatter$.pipe(
71
+ // map(d => d.categoryLabels),
72
+ // distinctUntilChanged((a, b) => {
73
+ // return JSON.stringify(a) === JSON.stringify(b)
74
+ // }),
75
+ // )
76
+
77
+ // return combineLatest({
78
+ // nodeList: nodeList$,
79
+ // categoryLabels: categoryLabels$
80
+ // }).pipe(
81
+ // switchMap(async d => d),
82
+ // map(data => {
83
+ // const CurrentLabelSet = new Set(data.categoryLabels)
84
+ // const ExistLabelSet = new Set(
85
+ // data.nodeList.filter(node => node.visible).map(node => node.categoryLabel)
86
+ // )
87
+ // // 加入已存在的label(data.nodeList有,但是dataFormatter.categoryLabels沒有)
88
+ // Array.from(ExistLabelSet).forEach(label => {
89
+ // if (!CurrentLabelSet.has(label)) {
90
+ // CurrentLabelSet.add(label)
91
+ // }
92
+ // })
93
+ // // 移除不存在的label(dataFormatter.categoryLabels有,但是data.nodeList沒有)
94
+ // Array.from(CurrentLabelSet).forEach(label => {
95
+ // if (!ExistLabelSet.has(label)) {
96
+ // ExistLabelSet.delete(label)
97
+ // }
98
+ // })
99
+
100
+ // return Array.from(CurrentLabelSet)
101
+ // }),
102
+ // distinctUntilChanged((a, b) => {
103
+ // return JSON.stringify(a) === JSON.stringify(b)
104
+ // }),
105
+ // )
106
+ // }
107
+
108
+ export const categoryLabelsObservable = (CategoryDataMap$: Observable<Map<string, ComputedDatumTree[]>>) => {
109
+ return CategoryDataMap$.pipe(
110
+ map(data => {
111
+ return Array.from(data.keys())
112
+ }),
113
+ distinctUntilChanged((a, b) => {
114
+ return JSON.stringify(a) === JSON.stringify(b)
115
+ }),
116
+ )
117
+ }
118
+
119
+ // 所有可見的節點
120
+ export const treeVisibleComputedDataObservable = ({ computedData$ }: { computedData$: Observable<ComputedData<'tree'>> }) => {
121
+ return computedData$.pipe(
122
+ map(data => {
123
+ function filterChildren (accTree: ComputedDatumTree): ComputedDatumTree {
124
+ const nextChildren = (accTree.children || [])
125
+ .filter(child => child.visible !== false) // 預設視為可見
126
+ .map(child => filterChildren(child)) // 遞迴子節點
127
+
128
+ return {
129
+ ...accTree,
130
+ children: nextChildren
131
+ }
132
+ }
133
+ return filterChildren(data)
134
+ })
135
+ )
136
+ }
@@ -0,0 +1,31 @@
1
+ import type {
2
+ TreeMapParams
3
+ } from './types'
4
+ import { HierarchyPlotPluginParams } from './types'
5
+
6
+ export const DEFAULT_HIERARCHY_PLOT_PARAMS: HierarchyPlotPluginParams = {
7
+ styles: {
8
+ padding: {
9
+ top: 20,
10
+ right: 20,
11
+ bottom: 60,
12
+ left: 20
13
+ },
14
+ highlightTarget: 'datum',
15
+ highlightDefault: null,
16
+ unhighlightedOpacity: 0.3,
17
+ transitionDuration: 800,
18
+ transitionEase: 'easeCubic'
19
+ },
20
+ visibleFilter: (datum) => true,
21
+ datasetIndex: 0
22
+ }
23
+
24
+ export const DEFAULT_TREE_MAP_PARAMS: TreeMapParams = {
25
+ paddingInner: 2,
26
+ paddingOuter: 2,
27
+ labelColorType: 'dataContrast',
28
+ squarifyRatio: 1.618034, // 黃金比例
29
+ sort: (a, b) => b.value - a.value
30
+ }
31
+ DEFAULT_TREE_MAP_PARAMS.sort.toString = () => `(a, b) => b.value - a.value`
@@ -0,0 +1,3 @@
1
+ export { HierarchyPlot } from './HierarchyPlot'
2
+ export * from './defaults'
3
+ export * from './types'