@orbcharts/plugins-basic 3.0.0-beta.7 → 3.0.0-beta.9

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 (169) hide show
  1. package/LICENSE +200 -200
  2. package/dist/orbcharts-plugins-basic/lib/plugins-basic-types.d.ts +1 -1
  3. package/dist/orbcharts-plugins-basic/src/base/{BaseBarStack.d.ts → BaseStackedBar.d.ts} +4 -4
  4. package/dist/orbcharts-plugins-basic/src/grid/defaults.d.ts +3 -3
  5. package/dist/orbcharts-plugins-basic/src/grid/index.d.ts +2 -2
  6. package/dist/orbcharts-plugins-basic/src/grid/plugins/Bars.d.ts +1 -1
  7. package/dist/orbcharts-plugins-basic/src/grid/plugins/BarsPN.d.ts +1 -1
  8. package/dist/orbcharts-plugins-basic/src/grid/plugins/BarsTriangle.d.ts +1 -1
  9. package/dist/orbcharts-plugins-basic/src/grid/plugins/Dots.d.ts +1 -1
  10. package/dist/orbcharts-plugins-basic/src/grid/plugins/GridLegend.d.ts +1 -1
  11. package/dist/orbcharts-plugins-basic/src/grid/plugins/GridTooltip.d.ts +1 -1
  12. package/dist/orbcharts-plugins-basic/src/grid/plugins/GridZoom.d.ts +1 -1
  13. package/dist/orbcharts-plugins-basic/src/grid/plugins/GroupAux.d.ts +1 -1
  14. package/dist/orbcharts-plugins-basic/src/grid/plugins/GroupAxis.d.ts +1 -1
  15. package/dist/orbcharts-plugins-basic/src/grid/plugins/LineAreas.d.ts +1 -1
  16. package/dist/orbcharts-plugins-basic/src/grid/plugins/Lines.d.ts +1 -1
  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/grid/plugins/ValueAxis.d.ts +1 -1
  20. package/dist/orbcharts-plugins-basic/src/index.d.ts +1 -0
  21. package/dist/orbcharts-plugins-basic/src/multiGrid/defaults.d.ts +4 -4
  22. package/dist/orbcharts-plugins-basic/src/multiGrid/index.d.ts +3 -3
  23. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiBars.d.ts +1 -1
  24. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiBarsTriangle.d.ts +1 -1
  25. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiDots.d.ts +1 -1
  26. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiGridLegend.d.ts +1 -1
  27. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiGridTooltip.d.ts +1 -1
  28. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiGroupAxis.d.ts +1 -1
  29. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiLineAreas.d.ts +1 -1
  30. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiLines.d.ts +1 -1
  31. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiStackedBar.d.ts +1 -0
  32. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiStackedValueAxis.d.ts +1 -0
  33. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiValueAxis.d.ts +1 -1
  34. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/OverlappingStackedValueAxes.d.ts +1 -0
  35. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/OverlappingValueAxes.d.ts +1 -1
  36. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/MultiValueLegend.d.ts +1 -1
  37. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/MultiValueTooltip.d.ts +1 -1
  38. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/Scatter.d.ts +1 -1
  39. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/ScatterBubbles.d.ts +1 -1
  40. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/XYAux.d.ts +1 -1
  41. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/XYAxes.d.ts +1 -1
  42. package/dist/orbcharts-plugins-basic/src/multiValue/plugins/XYZoom.d.ts +1 -1
  43. package/dist/orbcharts-plugins-basic/src/noneData/plugins/Container.d.ts +0 -1
  44. package/dist/orbcharts-plugins-basic/src/noneData/plugins/Tooltip.d.ts +0 -3
  45. package/dist/orbcharts-plugins-basic/src/relationship/defaults.d.ts +6 -0
  46. package/dist/orbcharts-plugins-basic/src/relationship/index.d.ts +5 -0
  47. package/dist/orbcharts-plugins-basic/src/relationship/plugins/ForceDirected.d.ts +3 -0
  48. package/dist/orbcharts-plugins-basic/src/relationship/plugins/ForceDirectedBubbles.d.ts +3 -0
  49. package/dist/orbcharts-plugins-basic/src/relationship/plugins/RelationshipLegend.d.ts +1 -0
  50. package/dist/orbcharts-plugins-basic/src/relationship/plugins/RelationshipTooltip.d.ts +1 -0
  51. package/dist/orbcharts-plugins-basic/src/relationship/relationshipObservables.d.ts +1 -0
  52. package/dist/orbcharts-plugins-basic/src/series/plugins/Bubbles.d.ts +1 -1
  53. package/dist/orbcharts-plugins-basic/src/series/plugins/Pie.d.ts +1 -1
  54. package/dist/orbcharts-plugins-basic/src/series/plugins/PieEventTexts.d.ts +1 -1
  55. package/dist/orbcharts-plugins-basic/src/series/plugins/PieLabels.d.ts +1 -1
  56. package/dist/orbcharts-plugins-basic/src/series/plugins/Rose.d.ts +1 -1
  57. package/dist/orbcharts-plugins-basic/src/series/plugins/RoseLabels.d.ts +1 -1
  58. package/dist/orbcharts-plugins-basic/src/series/plugins/SeriesLegend.d.ts +1 -1
  59. package/dist/orbcharts-plugins-basic/src/series/plugins/SeriesTooltip.d.ts +1 -1
  60. package/dist/orbcharts-plugins-basic/src/tree/plugins/TreeLegend.d.ts +1 -1
  61. package/dist/orbcharts-plugins-basic/src/tree/plugins/TreeMap.d.ts +1 -1
  62. package/dist/orbcharts-plugins-basic/src/tree/plugins/TreeTooltip.d.ts +1 -1
  63. package/dist/orbcharts-plugins-basic/src/utils/commonUtils.d.ts +1 -1
  64. package/dist/orbcharts-plugins-basic/src/utils/orbchartsUtils.d.ts +1 -1
  65. package/dist/orbcharts-plugins-basic.es.js +9421 -8102
  66. package/dist/orbcharts-plugins-basic.umd.js +69 -51
  67. package/lib/core-types.ts +7 -7
  68. package/lib/core.ts +6 -6
  69. package/lib/plugins-basic-types.ts +6 -6
  70. package/package.json +44 -44
  71. package/src/base/BaseBars.ts +765 -765
  72. package/src/base/BaseBarsTriangle.ts +676 -676
  73. package/src/base/BaseDots.ts +464 -464
  74. package/src/base/BaseGroupAxis.ts +679 -679
  75. package/src/base/BaseLegend.ts +684 -684
  76. package/src/base/BaseLineAreas.ts +629 -629
  77. package/src/base/BaseLines.ts +706 -706
  78. package/src/base/{BaseBarStack.ts → BaseStackedBar.ts} +782 -782
  79. package/src/base/BaseTooltip.ts +385 -385
  80. package/src/base/BaseValueAxis.ts +583 -583
  81. package/src/base/types.ts +2 -2
  82. package/src/const.ts +30 -30
  83. package/src/grid/defaults.ts +246 -246
  84. package/src/grid/gridObservables.ts +554 -554
  85. package/src/grid/index.ts +16 -16
  86. package/src/grid/plugins/Bars.ts +69 -69
  87. package/src/grid/plugins/BarsPN.ts +66 -66
  88. package/src/grid/plugins/BarsTriangle.ts +73 -73
  89. package/src/grid/plugins/Dots.ts +68 -68
  90. package/src/grid/plugins/GridLegend.ts +107 -107
  91. package/src/grid/plugins/GridTooltip.ts +66 -66
  92. package/src/grid/plugins/GridZoom.ts +218 -218
  93. package/src/grid/plugins/GroupAux.ts +1103 -1103
  94. package/src/grid/plugins/GroupAxis.ts +97 -97
  95. package/src/grid/plugins/LineAreas.ts +65 -65
  96. package/src/grid/plugins/Lines.ts +59 -59
  97. package/src/grid/plugins/{BarStack.ts → StackedBar.ts} +64 -64
  98. package/src/grid/plugins/{ValueStackAxis.ts → StackedValueAxis.ts} +96 -96
  99. package/src/grid/plugins/ValueAxis.ts +94 -94
  100. package/src/index.ts +6 -10
  101. package/src/multiGrid/defaults.ts +224 -224
  102. package/src/multiGrid/index.ts +15 -15
  103. package/src/multiGrid/multiGridObservables.ts +49 -49
  104. package/src/multiGrid/plugins/MultiBars.ts +108 -108
  105. package/src/multiGrid/plugins/MultiBarsTriangle.ts +114 -114
  106. package/src/multiGrid/plugins/MultiDots.ts +102 -102
  107. package/src/multiGrid/plugins/MultiGridLegend.ts +159 -159
  108. package/src/multiGrid/plugins/MultiGridTooltip.ts +66 -66
  109. package/src/multiGrid/plugins/MultiGroupAxis.ts +137 -137
  110. package/src/multiGrid/plugins/MultiLineAreas.ts +107 -107
  111. package/src/multiGrid/plugins/MultiLines.ts +101 -101
  112. package/src/multiGrid/plugins/{MultiBarStack.ts → MultiStackedBar.ts} +106 -106
  113. package/src/multiGrid/plugins/{MultiValueStackAxis.ts → MultiStackedValueAxis.ts} +134 -134
  114. package/src/multiGrid/plugins/MultiValueAxis.ts +134 -134
  115. package/src/multiGrid/plugins/{OverlappingValueStackAxes.ts → OverlappingStackedValueAxes.ts} +299 -299
  116. package/src/multiGrid/plugins/OverlappingValueAxes.ts +300 -300
  117. package/src/multiValue/defaults.ts +166 -166
  118. package/src/multiValue/index.ts +8 -8
  119. package/src/multiValue/multiValueObservables.ts +297 -297
  120. package/src/multiValue/plugins/MultiValueLegend.ts +107 -107
  121. package/src/multiValue/plugins/MultiValueTooltip.ts +66 -66
  122. package/src/multiValue/plugins/Scatter.ts +426 -426
  123. package/src/multiValue/plugins/ScatterBubbles.ts +554 -554
  124. package/src/multiValue/plugins/XYAux.ts +681 -681
  125. package/src/multiValue/plugins/XYAxes.ts +684 -684
  126. package/src/multiValue/plugins/XYZoom.ts +299 -299
  127. package/src/noneData/defaults.ts +102 -102
  128. package/src/noneData/index.ts +3 -3
  129. package/src/noneData/plugins/Container.ts +28 -28
  130. package/src/noneData/plugins/Tooltip.ts +374 -374
  131. package/src/relationship/defaults.ts +196 -0
  132. package/src/relationship/index.ts +5 -0
  133. package/src/relationship/plugins/ForceDirected.ts +1167 -0
  134. package/src/relationship/plugins/ForceDirectedBubbles.ts +1391 -0
  135. package/src/relationship/plugins/RelationshipLegend.ts +100 -0
  136. package/src/relationship/plugins/RelationshipTooltip.ts +66 -0
  137. package/src/relationship/relationshipObservables.ts +50 -0
  138. package/src/series/defaults.ts +206 -206
  139. package/src/series/index.ts +9 -9
  140. package/src/series/plugins/Bubbles.ts +606 -603
  141. package/src/series/plugins/Pie.ts +623 -623
  142. package/src/series/plugins/PieEventTexts.ts +284 -283
  143. package/src/series/plugins/PieLabels.ts +640 -640
  144. package/src/series/plugins/Rose.ts +516 -516
  145. package/src/series/plugins/RoseLabels.ts +600 -600
  146. package/src/series/plugins/SeriesLegend.ts +107 -107
  147. package/src/series/plugins/SeriesTooltip.ts +66 -66
  148. package/src/series/seriesObservables.ts +145 -145
  149. package/src/series/seriesUtils.ts +51 -51
  150. package/src/tree/defaults.ts +78 -78
  151. package/src/tree/index.ts +4 -4
  152. package/src/tree/plugins/TreeLegend.ts +100 -100
  153. package/src/tree/plugins/TreeMap.ts +333 -333
  154. package/src/tree/plugins/TreeTooltip.ts +66 -66
  155. package/src/utils/commonUtils.ts +21 -21
  156. package/src/utils/d3Graphics.ts +174 -174
  157. package/src/utils/d3Utils.ts +74 -74
  158. package/src/utils/observables.ts +14 -14
  159. package/src/utils/orbchartsUtils.ts +115 -115
  160. package/tsconfig.base.json +13 -13
  161. package/tsconfig.json +2 -2
  162. package/vite.config.js +22 -22
  163. package/dist/orbcharts-plugins-basic/src/grid/plugins/BarStack.d.ts +0 -1
  164. package/dist/orbcharts-plugins-basic/src/grid/plugins/ValueStackAxis.d.ts +0 -1
  165. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiBarStack.d.ts +0 -1
  166. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/MultiValueStackAxis.d.ts +0 -1
  167. package/dist/orbcharts-plugins-basic/src/multiGrid/plugins/OverlappingValueStackAxes.d.ts +0 -1
  168. package/dist/orbcharts-plugins-basic/src/relationship/plugins/Relationship.d.ts +0 -0
  169. package/src/relationship/plugins/Relationship.ts +0 -0
@@ -1,465 +1,465 @@
1
- import * as d3 from 'd3'
2
- import {
3
- combineLatest,
4
- map,
5
- switchMap,
6
- takeUntil,
7
- distinctUntilChanged,
8
- Observable,
9
- Subject } from 'rxjs'
10
- import type { BasePluginFn } from './types'
11
- import type {
12
- ComputedDatumGrid,
13
- ComputedDataGrid,
14
- ComputedLayoutDataGrid,
15
- EventGrid,
16
- ChartParams,
17
- ContainerPositionScaled,
18
- Layout,
19
- TransformData,
20
- ColorType
21
- } from '../../lib/core-types'
22
- import type { BaseDotsParams } from '../../lib/plugins-basic-types'
23
- import { getDatumColor, getClassName, getUniID } from '../utils/orbchartsUtils'
24
- import { gridSelectionsObservable } from '../grid/gridObservables'
25
-
26
- // export interface BaseDotsParams {
27
- // radius: number
28
- // fillColorType: ColorType
29
- // strokeColorType: ColorType
30
- // strokeWidth: number
31
- // // strokeWidthWhileHighlight: number
32
- // onlyShowHighlighted: boolean
33
- // }
34
-
35
- interface BaseDotsContext {
36
- selection: d3.Selection<any, unknown, any, unknown>
37
- computedData$: Observable<ComputedDataGrid>
38
- computedLayoutData$: Observable<ComputedLayoutDataGrid>
39
- visibleComputedData$: Observable<ComputedDatumGrid[][]>
40
- visibleComputedLayoutData$: Observable<ComputedLayoutDataGrid>
41
- seriesLabels$: Observable<string[]>
42
- SeriesDataMap$: Observable<Map<string, ComputedDatumGrid[]>>
43
- GroupDataMap$: Observable<Map<string, ComputedDatumGrid[]>>
44
- fullParams$: Observable<BaseDotsParams>
45
- fullChartParams$: Observable<ChartParams>
46
- gridAxesTransform$: Observable<TransformData>
47
- gridGraphicTransform$: Observable<TransformData>
48
- gridGraphicReverseScale$: Observable<[number, number][]>
49
- gridAxesSize$: Observable<{
50
- width: number;
51
- height: number;
52
- }>
53
- gridHighlight$: Observable<ComputedDatumGrid[]>
54
- gridContainerPosition$: Observable<ContainerPositionScaled[]>
55
- event$: Subject<EventGrid>
56
- }
57
-
58
-
59
- type ClipPathDatum = {
60
- id: string;
61
- // x: number;
62
- // y: number;
63
- width: number;
64
- height: number;
65
- }
66
-
67
- // const pluginName = 'Dots'
68
- // const circleGClassName = getClassName(pluginName, 'circleG')
69
- // const circleClassName = getClassName(pluginName, 'circle')
70
-
71
- function renderDots ({ graphicGSelection, circleGClassName, circleClassName, visibleComputedLayoutData, fullParams, fullChartParams, graphicReverseScale }: {
72
- graphicGSelection: d3.Selection<SVGGElement, any, any, any>
73
- circleGClassName: string
74
- circleClassName: string
75
- visibleComputedLayoutData: ComputedLayoutDataGrid
76
- fullParams: BaseDotsParams
77
- fullChartParams: ChartParams
78
- graphicReverseScale: [number, number][]
79
- }) {
80
- const createEnterDuration = (enter: d3.Selection<d3.EnterElement, ComputedDatumGrid, SVGGElement, any>) => {
81
- const enterSize = enter.size()
82
- const eachDuration = fullChartParams.transitionDuration / enterSize
83
- return eachDuration
84
- }
85
- // enterDuration
86
- let enterDuration = 0
87
-
88
- graphicGSelection
89
- .each((seriesData, seriesIndex, g) => {
90
- d3.select(g[seriesIndex])
91
- .selectAll<SVGGElement, ComputedDatumGrid>('g')
92
- .data(visibleComputedLayoutData[seriesIndex], d => d.id)
93
- .join(
94
- enter => {
95
- // enterDuration
96
- enterDuration = createEnterDuration(enter)
97
-
98
- return enter
99
- .append('g')
100
- .classed(circleGClassName, true)
101
- },
102
- update => update,
103
- exit => exit.remove()
104
- )
105
- .attr('transform', d => `translate(${d.axisX}, ${d.axisY})`)
106
- .each((d, i, g) => {
107
- const circle = d3.select(g[i])
108
- .selectAll('circle')
109
- .data([d])
110
- .join(
111
- enter => {
112
- return enter
113
- .append('circle')
114
- .style('cursor', 'pointer')
115
- .style('vector-effect', 'non-scaling-stroke')
116
- .classed(circleClassName, true)
117
- .attr('opacity', 0)
118
- .transition()
119
- .delay((_d, _i) => {
120
- return i * enterDuration
121
- })
122
- .attr('opacity', 1)
123
- },
124
- update => {
125
- return update
126
- .transition()
127
- .duration(50)
128
- // .attr('cx', d => d.axisX)
129
- // .attr('cy', d => d.axisY)
130
- .attr('opacity', 1)
131
- },
132
- exit => exit.remove()
133
- )
134
- .attr('r', fullParams.radius)
135
- .attr('fill', (d, i) => getDatumColor({ datum: d, colorType: fullParams.fillColorType, fullChartParams }))
136
- .attr('stroke', (d, i) => getDatumColor({ datum: d, colorType: fullParams.strokeColorType, fullChartParams }))
137
- .attr('stroke-width', fullParams.strokeWidth)
138
- .attr('transform', `scale(${graphicReverseScale[seriesIndex][0] ?? 1}, ${graphicReverseScale[seriesIndex][1] ?? 1})`)
139
- })
140
- })
141
-
142
- const graphicCircleSelection: d3.Selection<SVGRectElement, ComputedDatumGrid, SVGGElement, unknown> = graphicGSelection.selectAll(`circle.${circleClassName}`)
143
-
144
- return graphicCircleSelection
145
- }
146
-
147
-
148
- function highlightDots ({ selection, ids, onlyShowHighlighted, fullChartParams }: {
149
- selection: d3.Selection<SVGGElement, ComputedDatumGrid, any, any>
150
- ids: string[]
151
- onlyShowHighlighted: boolean
152
- // fullParams: BaseDotsParams
153
- fullChartParams: ChartParams
154
- }) {
155
- selection.interrupt('highlight')
156
- if (!ids.length) {
157
- // remove highlight
158
- selection
159
- .transition('highlight')
160
- .duration(200)
161
- .style('opacity', onlyShowHighlighted === true ? 0 : 1)
162
- // selection
163
- // .attr('stroke-width', fullParams.strokeWidth)
164
-
165
- return
166
- }
167
-
168
- selection
169
- .each((d, i, n) => {
170
- if (ids.includes(d.id)) {
171
- const dot = d3.select(n[i])
172
- dot
173
- .style('opacity', 1)
174
- .transition('highlight')
175
- .duration(200)
176
- // dot
177
- // .attr('stroke-width', fullParams.strokeWidthWhileHighlight)
178
- } else {
179
- const dot = d3.select(n[i])
180
- dot
181
- .style('opacity', onlyShowHighlighted === true ? 0 : fullChartParams.styles.unhighlightedOpacity)
182
- .transition('highlight')
183
- .duration(200)
184
- // dot
185
- // .attr('stroke-width', fullParams.strokeWidth)
186
-
187
- }
188
- })
189
- }
190
-
191
- function renderClipPath ({ defsSelection, clipPathData }: {
192
- defsSelection: d3.Selection<SVGDefsElement, any, any, any>
193
- clipPathData: ClipPathDatum[]
194
- }) {
195
- const clipPath = defsSelection
196
- .selectAll<SVGClipPathElement, Layout>('clipPath')
197
- .data(clipPathData)
198
- .join(
199
- enter => {
200
- return enter
201
- .append('clipPath')
202
- },
203
- update => update,
204
- exit => exit.remove()
205
- )
206
- .attr('id', d => d.id)
207
- .each((d, i, g) => {
208
- const rect = d3.select(g[i])
209
- .selectAll<SVGRectElement, typeof d>('rect')
210
- .data([d])
211
- .join('rect')
212
- .attr('x', 0)
213
- .attr('y', 0)
214
- .attr('width', _d => _d.width)
215
- .attr('height', _d => _d.height)
216
- })
217
-
218
- }
219
-
220
-
221
-
222
- export const createBaseDots: BasePluginFn<BaseDotsContext> = (pluginName: string, {
223
- selection,
224
- computedData$,
225
- computedLayoutData$,
226
- visibleComputedData$,
227
- visibleComputedLayoutData$,
228
- seriesLabels$,
229
- SeriesDataMap$,
230
- GroupDataMap$,
231
- fullParams$,
232
- fullChartParams$,
233
- gridAxesTransform$,
234
- gridGraphicTransform$,
235
- gridGraphicReverseScale$,
236
- gridAxesSize$,
237
- gridHighlight$,
238
- gridContainerPosition$,
239
- event$
240
- }) => {
241
-
242
- const destroy$ = new Subject()
243
-
244
- const clipPathID = getUniID(pluginName, 'clipPath-box')
245
- const circleGClassName = getClassName(pluginName, 'circleG')
246
- const circleClassName = getClassName(pluginName, 'circle')
247
-
248
- // const axisSelection: d3.Selection<SVGGElement, any, any, any> = selection
249
- // .append('g')
250
- // .attr('clip-path', `url(#${clipPathID})`)
251
- // const defsSelection: d3.Selection<SVGDefsElement, any, any, any> = axisSelection.append('defs')
252
- // const dataAreaSelection: d3.Selection<SVGGElement, any, any, any> = axisSelection.append('g')
253
- // const graphicSelection$: Subject<d3.Selection<SVGGElement, ComputedDatumGrid, any, any>> = new Subject()
254
-
255
- const {
256
- seriesSelection$,
257
- axesSelection$,
258
- defsSelection$,
259
- graphicGSelection$
260
- } = gridSelectionsObservable({
261
- selection,
262
- pluginName,
263
- clipPathID,
264
- seriesLabels$,
265
- gridContainerPosition$,
266
- gridAxesTransform$,
267
- gridGraphicTransform$
268
- })
269
-
270
- const graphicReverseScale$: Observable<[number, number][]> = combineLatest({
271
- // gridGraphicTransform: gridGraphicTransform$,
272
- // gridContainerPosition: gridContainerPosition$,
273
- // gridAxesTransform: gridAxesTransform$
274
- computedData: computedData$,
275
- gridGraphicReverseScale: gridGraphicReverseScale$
276
- }).pipe(
277
- takeUntil(destroy$),
278
- switchMap(async data => data),
279
- map(data => {
280
- return data.computedData.map((series, seriesIndex) => {
281
- return data.gridGraphicReverseScale[seriesIndex]
282
- })
283
- })
284
- )
285
-
286
- const clipPathSubscription = combineLatest({
287
- defsSelection: defsSelection$,
288
- gridAxesSize: gridAxesSize$,
289
- }).pipe(
290
- takeUntil(destroy$),
291
- switchMap(async (d) => d),
292
- ).subscribe(data => {
293
- // 外層的遮罩
294
- const clipPathData = [{
295
- id: clipPathID,
296
- width: data.gridAxesSize.width,
297
- height: data.gridAxesSize.height
298
- }]
299
- renderClipPath({
300
- defsSelection: data.defsSelection,
301
- clipPathData,
302
- })
303
- })
304
-
305
- const highlightTarget$ = fullChartParams$.pipe(
306
- takeUntil(destroy$),
307
- map(d => d.highlightTarget),
308
- distinctUntilChanged()
309
- )
310
-
311
- const graphicSelection$ = combineLatest({
312
- graphicGSelection: graphicGSelection$,
313
- visibleComputedLayoutData: visibleComputedLayoutData$,
314
- graphicReverseScale: graphicReverseScale$,
315
- fullChartParams: fullChartParams$,
316
- fullParams: fullParams$,
317
- }).pipe(
318
- takeUntil(destroy$),
319
- switchMap(async (d) => d),
320
- map(data => {
321
- return renderDots({
322
- graphicGSelection: data.graphicGSelection,
323
- circleGClassName,
324
- circleClassName,
325
- visibleComputedLayoutData: data.visibleComputedLayoutData,
326
- fullParams: data.fullParams,
327
- fullChartParams: data.fullChartParams,
328
- graphicReverseScale: data.graphicReverseScale
329
- })
330
- })
331
- )
332
-
333
- combineLatest({
334
- graphicSelection: graphicSelection$,
335
- computedData: computedData$,
336
- SeriesDataMap: SeriesDataMap$,
337
- GroupDataMap: GroupDataMap$,
338
- highlightTarget: highlightTarget$
339
- }).pipe(
340
- takeUntil(destroy$),
341
- switchMap(async (d) => d),
342
- ).subscribe(data => {
343
-
344
- data.graphicSelection
345
- .on('mouseover', (event, datum) => {
346
- // event.stopPropagation()
347
-
348
- event$.next({
349
- type: 'grid',
350
- eventName: 'mouseover',
351
- pluginName,
352
- highlightTarget: data.highlightTarget,
353
- datum,
354
- gridIndex: datum.gridIndex,
355
- series: data.SeriesDataMap.get(datum.seriesLabel)!,
356
- seriesIndex: datum.seriesIndex,
357
- seriesLabel: datum.seriesLabel,
358
- groups: data.GroupDataMap.get(datum.groupLabel)!,
359
- groupIndex: datum.groupIndex,
360
- groupLabel: datum.groupLabel,
361
- event,
362
- data: data.computedData
363
- })
364
- })
365
- .on('mousemove', (event, datum) => {
366
- // event.stopPropagation()
367
-
368
- event$.next({
369
- type: 'grid',
370
- eventName: 'mousemove',
371
- pluginName,
372
- highlightTarget: data.highlightTarget,
373
- data: data.computedData,
374
- datum,
375
- gridIndex: datum.gridIndex,
376
- series: data.SeriesDataMap.get(datum.seriesLabel)!,
377
- seriesIndex: datum.seriesIndex,
378
- seriesLabel: datum.seriesLabel,
379
- groups: data.GroupDataMap.get(datum.groupLabel)!,
380
- groupIndex: datum.groupIndex,
381
- groupLabel: datum.groupLabel,
382
- event
383
- })
384
- })
385
- .on('mouseout', (event, datum) => {
386
- // event.stopPropagation()
387
-
388
- event$.next({
389
- type: 'grid',
390
- eventName: 'mouseout',
391
- pluginName,
392
- highlightTarget: data.highlightTarget,
393
- datum,
394
- gridIndex: datum.gridIndex,
395
- series: data.SeriesDataMap.get(datum.seriesLabel)!,
396
- seriesIndex: datum.seriesIndex,
397
- seriesLabel: datum.seriesLabel,
398
- groups: data.GroupDataMap.get(datum.groupLabel)!,
399
- groupIndex: datum.groupIndex,
400
- groupLabel: datum.groupLabel,
401
- event,
402
- data: data.computedData
403
- })
404
- })
405
- .on('click', (event, datum) => {
406
- // event.stopPropagation()
407
-
408
- event$.next({
409
- type: 'grid',
410
- eventName: 'click',
411
- pluginName,
412
- highlightTarget: data.highlightTarget,
413
- datum,
414
- gridIndex: datum.gridIndex,
415
- series: data.SeriesDataMap.get(datum.seriesLabel)!,
416
- seriesIndex: datum.seriesIndex,
417
- seriesLabel: datum.seriesLabel,
418
- groups: data.GroupDataMap.get(datum.groupLabel)!,
419
- groupIndex: datum.groupIndex,
420
- groupLabel: datum.groupLabel,
421
- event,
422
- data: data.computedData
423
- })
424
- })
425
-
426
- })
427
-
428
- // const datumList$ = computedData$.pipe(
429
- // takeUntil(destroy$),
430
- // map(d => d.flat())
431
- // )
432
- // const highlight$ = highlightObservable({ datumList$, fullChartParams$, event$: store.event$ })
433
- // const highlightSubscription = gridHighlight$.subscribe()
434
- const onlyShowHighlighted$ = fullParams$.pipe(
435
- takeUntil(destroy$),
436
- map(d => d.onlyShowHighlighted),
437
- distinctUntilChanged()
438
- )
439
-
440
- combineLatest({
441
- graphicSelection: graphicSelection$,
442
- highlight: gridHighlight$.pipe(
443
- map(data => data.map(d => d.id))
444
- ),
445
- onlyShowHighlighted: onlyShowHighlighted$,
446
- // fullParams: fullParams$,
447
- fullChartParams: fullChartParams$
448
- }).pipe(
449
- takeUntil(destroy$),
450
- switchMap(async d => d)
451
- ).subscribe(data => {
452
- highlightDots({
453
- selection: data.graphicSelection,
454
- ids: data.highlight,
455
- onlyShowHighlighted: data.onlyShowHighlighted,
456
- // fullParams: data.fullParams,
457
- fullChartParams: data.fullChartParams
458
- })
459
- })
460
-
461
- return () => {
462
- destroy$.next(undefined)
463
- // highlightSubscription.unsubscribe()
464
- }
1
+ import * as d3 from 'd3'
2
+ import {
3
+ combineLatest,
4
+ map,
5
+ switchMap,
6
+ takeUntil,
7
+ distinctUntilChanged,
8
+ Observable,
9
+ Subject } from 'rxjs'
10
+ import type { BasePluginFn } from './types'
11
+ import type {
12
+ ComputedDatumGrid,
13
+ ComputedDataGrid,
14
+ ComputedLayoutDataGrid,
15
+ EventGrid,
16
+ ChartParams,
17
+ ContainerPositionScaled,
18
+ Layout,
19
+ TransformData,
20
+ ColorType
21
+ } from '../../lib/core-types'
22
+ import type { BaseDotsParams } from '../../lib/plugins-basic-types'
23
+ import { getDatumColor, getClassName, getUniID } from '../utils/orbchartsUtils'
24
+ import { gridSelectionsObservable } from '../grid/gridObservables'
25
+
26
+ // export interface BaseDotsParams {
27
+ // radius: number
28
+ // fillColorType: ColorType
29
+ // strokeColorType: ColorType
30
+ // strokeWidth: number
31
+ // // strokeWidthWhileHighlight: number
32
+ // onlyShowHighlighted: boolean
33
+ // }
34
+
35
+ interface BaseDotsContext {
36
+ selection: d3.Selection<any, unknown, any, unknown>
37
+ computedData$: Observable<ComputedDataGrid>
38
+ computedLayoutData$: Observable<ComputedLayoutDataGrid>
39
+ visibleComputedData$: Observable<ComputedDatumGrid[][]>
40
+ visibleComputedLayoutData$: Observable<ComputedLayoutDataGrid>
41
+ seriesLabels$: Observable<string[]>
42
+ SeriesDataMap$: Observable<Map<string, ComputedDatumGrid[]>>
43
+ GroupDataMap$: Observable<Map<string, ComputedDatumGrid[]>>
44
+ fullParams$: Observable<BaseDotsParams>
45
+ fullChartParams$: Observable<ChartParams>
46
+ gridAxesTransform$: Observable<TransformData>
47
+ gridGraphicTransform$: Observable<TransformData>
48
+ gridGraphicReverseScale$: Observable<[number, number][]>
49
+ gridAxesSize$: Observable<{
50
+ width: number;
51
+ height: number;
52
+ }>
53
+ gridHighlight$: Observable<ComputedDatumGrid[]>
54
+ gridContainerPosition$: Observable<ContainerPositionScaled[]>
55
+ event$: Subject<EventGrid>
56
+ }
57
+
58
+
59
+ type ClipPathDatum = {
60
+ id: string;
61
+ // x: number;
62
+ // y: number;
63
+ width: number;
64
+ height: number;
65
+ }
66
+
67
+ // const pluginName = 'Dots'
68
+ // const circleGClassName = getClassName(pluginName, 'circleG')
69
+ // const circleClassName = getClassName(pluginName, 'circle')
70
+
71
+ function renderDots ({ graphicGSelection, circleGClassName, circleClassName, visibleComputedLayoutData, fullParams, fullChartParams, graphicReverseScale }: {
72
+ graphicGSelection: d3.Selection<SVGGElement, any, any, any>
73
+ circleGClassName: string
74
+ circleClassName: string
75
+ visibleComputedLayoutData: ComputedLayoutDataGrid
76
+ fullParams: BaseDotsParams
77
+ fullChartParams: ChartParams
78
+ graphicReverseScale: [number, number][]
79
+ }) {
80
+ const createEnterDuration = (enter: d3.Selection<d3.EnterElement, ComputedDatumGrid, SVGGElement, any>) => {
81
+ const enterSize = enter.size()
82
+ const eachDuration = fullChartParams.transitionDuration / enterSize
83
+ return eachDuration
84
+ }
85
+ // enterDuration
86
+ let enterDuration = 0
87
+
88
+ graphicGSelection
89
+ .each((seriesData, seriesIndex, g) => {
90
+ d3.select(g[seriesIndex])
91
+ .selectAll<SVGGElement, ComputedDatumGrid>('g')
92
+ .data(visibleComputedLayoutData[seriesIndex], d => d.id)
93
+ .join(
94
+ enter => {
95
+ // enterDuration
96
+ enterDuration = createEnterDuration(enter)
97
+
98
+ return enter
99
+ .append('g')
100
+ .classed(circleGClassName, true)
101
+ },
102
+ update => update,
103
+ exit => exit.remove()
104
+ )
105
+ .attr('transform', d => `translate(${d.axisX}, ${d.axisY})`)
106
+ .each((d, i, g) => {
107
+ const circle = d3.select(g[i])
108
+ .selectAll('circle')
109
+ .data([d])
110
+ .join(
111
+ enter => {
112
+ return enter
113
+ .append('circle')
114
+ .style('cursor', 'pointer')
115
+ .style('vector-effect', 'non-scaling-stroke')
116
+ .classed(circleClassName, true)
117
+ .attr('opacity', 0)
118
+ .transition()
119
+ .delay((_d, _i) => {
120
+ return i * enterDuration
121
+ })
122
+ .attr('opacity', 1)
123
+ },
124
+ update => {
125
+ return update
126
+ .transition()
127
+ .duration(50)
128
+ // .attr('cx', d => d.axisX)
129
+ // .attr('cy', d => d.axisY)
130
+ .attr('opacity', 1)
131
+ },
132
+ exit => exit.remove()
133
+ )
134
+ .attr('r', fullParams.radius)
135
+ .attr('fill', (d, i) => getDatumColor({ datum: d, colorType: fullParams.fillColorType, fullChartParams }))
136
+ .attr('stroke', (d, i) => getDatumColor({ datum: d, colorType: fullParams.strokeColorType, fullChartParams }))
137
+ .attr('stroke-width', fullParams.strokeWidth)
138
+ .attr('transform', `scale(${graphicReverseScale[seriesIndex][0] ?? 1}, ${graphicReverseScale[seriesIndex][1] ?? 1})`)
139
+ })
140
+ })
141
+
142
+ const graphicCircleSelection: d3.Selection<SVGRectElement, ComputedDatumGrid, SVGGElement, unknown> = graphicGSelection.selectAll(`circle.${circleClassName}`)
143
+
144
+ return graphicCircleSelection
145
+ }
146
+
147
+
148
+ function highlightDots ({ selection, ids, onlyShowHighlighted, fullChartParams }: {
149
+ selection: d3.Selection<SVGGElement, ComputedDatumGrid, any, any>
150
+ ids: string[]
151
+ onlyShowHighlighted: boolean
152
+ // fullParams: BaseDotsParams
153
+ fullChartParams: ChartParams
154
+ }) {
155
+ selection.interrupt('highlight')
156
+ if (!ids.length) {
157
+ // remove highlight
158
+ selection
159
+ .transition('highlight')
160
+ .duration(200)
161
+ .style('opacity', onlyShowHighlighted === true ? 0 : 1)
162
+ // selection
163
+ // .attr('stroke-width', fullParams.strokeWidth)
164
+
165
+ return
166
+ }
167
+
168
+ selection
169
+ .each((d, i, n) => {
170
+ if (ids.includes(d.id)) {
171
+ const dot = d3.select(n[i])
172
+ dot
173
+ .style('opacity', 1)
174
+ .transition('highlight')
175
+ .duration(200)
176
+ // dot
177
+ // .attr('stroke-width', fullParams.strokeWidthWhileHighlight)
178
+ } else {
179
+ const dot = d3.select(n[i])
180
+ dot
181
+ .style('opacity', onlyShowHighlighted === true ? 0 : fullChartParams.styles.unhighlightedOpacity)
182
+ .transition('highlight')
183
+ .duration(200)
184
+ // dot
185
+ // .attr('stroke-width', fullParams.strokeWidth)
186
+
187
+ }
188
+ })
189
+ }
190
+
191
+ function renderClipPath ({ defsSelection, clipPathData }: {
192
+ defsSelection: d3.Selection<SVGDefsElement, any, any, any>
193
+ clipPathData: ClipPathDatum[]
194
+ }) {
195
+ const clipPath = defsSelection
196
+ .selectAll<SVGClipPathElement, Layout>('clipPath')
197
+ .data(clipPathData)
198
+ .join(
199
+ enter => {
200
+ return enter
201
+ .append('clipPath')
202
+ },
203
+ update => update,
204
+ exit => exit.remove()
205
+ )
206
+ .attr('id', d => d.id)
207
+ .each((d, i, g) => {
208
+ const rect = d3.select(g[i])
209
+ .selectAll<SVGRectElement, typeof d>('rect')
210
+ .data([d])
211
+ .join('rect')
212
+ .attr('x', 0)
213
+ .attr('y', 0)
214
+ .attr('width', _d => _d.width)
215
+ .attr('height', _d => _d.height)
216
+ })
217
+
218
+ }
219
+
220
+
221
+
222
+ export const createBaseDots: BasePluginFn<BaseDotsContext> = (pluginName: string, {
223
+ selection,
224
+ computedData$,
225
+ computedLayoutData$,
226
+ visibleComputedData$,
227
+ visibleComputedLayoutData$,
228
+ seriesLabels$,
229
+ SeriesDataMap$,
230
+ GroupDataMap$,
231
+ fullParams$,
232
+ fullChartParams$,
233
+ gridAxesTransform$,
234
+ gridGraphicTransform$,
235
+ gridGraphicReverseScale$,
236
+ gridAxesSize$,
237
+ gridHighlight$,
238
+ gridContainerPosition$,
239
+ event$
240
+ }) => {
241
+
242
+ const destroy$ = new Subject()
243
+
244
+ const clipPathID = getUniID(pluginName, 'clipPath-box')
245
+ const circleGClassName = getClassName(pluginName, 'circleG')
246
+ const circleClassName = getClassName(pluginName, 'circle')
247
+
248
+ // const axisSelection: d3.Selection<SVGGElement, any, any, any> = selection
249
+ // .append('g')
250
+ // .attr('clip-path', `url(#${clipPathID})`)
251
+ // const defsSelection: d3.Selection<SVGDefsElement, any, any, any> = axisSelection.append('defs')
252
+ // const dataAreaSelection: d3.Selection<SVGGElement, any, any, any> = axisSelection.append('g')
253
+ // const graphicSelection$: Subject<d3.Selection<SVGGElement, ComputedDatumGrid, any, any>> = new Subject()
254
+
255
+ const {
256
+ seriesSelection$,
257
+ axesSelection$,
258
+ defsSelection$,
259
+ graphicGSelection$
260
+ } = gridSelectionsObservable({
261
+ selection,
262
+ pluginName,
263
+ clipPathID,
264
+ seriesLabels$,
265
+ gridContainerPosition$,
266
+ gridAxesTransform$,
267
+ gridGraphicTransform$
268
+ })
269
+
270
+ const graphicReverseScale$: Observable<[number, number][]> = combineLatest({
271
+ // gridGraphicTransform: gridGraphicTransform$,
272
+ // gridContainerPosition: gridContainerPosition$,
273
+ // gridAxesTransform: gridAxesTransform$
274
+ computedData: computedData$,
275
+ gridGraphicReverseScale: gridGraphicReverseScale$
276
+ }).pipe(
277
+ takeUntil(destroy$),
278
+ switchMap(async data => data),
279
+ map(data => {
280
+ return data.computedData.map((series, seriesIndex) => {
281
+ return data.gridGraphicReverseScale[seriesIndex]
282
+ })
283
+ })
284
+ )
285
+
286
+ const clipPathSubscription = combineLatest({
287
+ defsSelection: defsSelection$,
288
+ gridAxesSize: gridAxesSize$,
289
+ }).pipe(
290
+ takeUntil(destroy$),
291
+ switchMap(async (d) => d),
292
+ ).subscribe(data => {
293
+ // 外層的遮罩
294
+ const clipPathData = [{
295
+ id: clipPathID,
296
+ width: data.gridAxesSize.width,
297
+ height: data.gridAxesSize.height
298
+ }]
299
+ renderClipPath({
300
+ defsSelection: data.defsSelection,
301
+ clipPathData,
302
+ })
303
+ })
304
+
305
+ const highlightTarget$ = fullChartParams$.pipe(
306
+ takeUntil(destroy$),
307
+ map(d => d.highlightTarget),
308
+ distinctUntilChanged()
309
+ )
310
+
311
+ const graphicSelection$ = combineLatest({
312
+ graphicGSelection: graphicGSelection$,
313
+ visibleComputedLayoutData: visibleComputedLayoutData$,
314
+ graphicReverseScale: graphicReverseScale$,
315
+ fullChartParams: fullChartParams$,
316
+ fullParams: fullParams$,
317
+ }).pipe(
318
+ takeUntil(destroy$),
319
+ switchMap(async (d) => d),
320
+ map(data => {
321
+ return renderDots({
322
+ graphicGSelection: data.graphicGSelection,
323
+ circleGClassName,
324
+ circleClassName,
325
+ visibleComputedLayoutData: data.visibleComputedLayoutData,
326
+ fullParams: data.fullParams,
327
+ fullChartParams: data.fullChartParams,
328
+ graphicReverseScale: data.graphicReverseScale
329
+ })
330
+ })
331
+ )
332
+
333
+ combineLatest({
334
+ graphicSelection: graphicSelection$,
335
+ computedData: computedData$,
336
+ SeriesDataMap: SeriesDataMap$,
337
+ GroupDataMap: GroupDataMap$,
338
+ highlightTarget: highlightTarget$
339
+ }).pipe(
340
+ takeUntil(destroy$),
341
+ switchMap(async (d) => d),
342
+ ).subscribe(data => {
343
+
344
+ data.graphicSelection
345
+ .on('mouseover', (event, datum) => {
346
+ // event.stopPropagation()
347
+
348
+ event$.next({
349
+ type: 'grid',
350
+ eventName: 'mouseover',
351
+ pluginName,
352
+ highlightTarget: data.highlightTarget,
353
+ datum,
354
+ gridIndex: datum.gridIndex,
355
+ series: data.SeriesDataMap.get(datum.seriesLabel)!,
356
+ seriesIndex: datum.seriesIndex,
357
+ seriesLabel: datum.seriesLabel,
358
+ groups: data.GroupDataMap.get(datum.groupLabel)!,
359
+ groupIndex: datum.groupIndex,
360
+ groupLabel: datum.groupLabel,
361
+ event,
362
+ data: data.computedData
363
+ })
364
+ })
365
+ .on('mousemove', (event, datum) => {
366
+ // event.stopPropagation()
367
+
368
+ event$.next({
369
+ type: 'grid',
370
+ eventName: 'mousemove',
371
+ pluginName,
372
+ highlightTarget: data.highlightTarget,
373
+ data: data.computedData,
374
+ datum,
375
+ gridIndex: datum.gridIndex,
376
+ series: data.SeriesDataMap.get(datum.seriesLabel)!,
377
+ seriesIndex: datum.seriesIndex,
378
+ seriesLabel: datum.seriesLabel,
379
+ groups: data.GroupDataMap.get(datum.groupLabel)!,
380
+ groupIndex: datum.groupIndex,
381
+ groupLabel: datum.groupLabel,
382
+ event
383
+ })
384
+ })
385
+ .on('mouseout', (event, datum) => {
386
+ // event.stopPropagation()
387
+
388
+ event$.next({
389
+ type: 'grid',
390
+ eventName: 'mouseout',
391
+ pluginName,
392
+ highlightTarget: data.highlightTarget,
393
+ datum,
394
+ gridIndex: datum.gridIndex,
395
+ series: data.SeriesDataMap.get(datum.seriesLabel)!,
396
+ seriesIndex: datum.seriesIndex,
397
+ seriesLabel: datum.seriesLabel,
398
+ groups: data.GroupDataMap.get(datum.groupLabel)!,
399
+ groupIndex: datum.groupIndex,
400
+ groupLabel: datum.groupLabel,
401
+ event,
402
+ data: data.computedData
403
+ })
404
+ })
405
+ .on('click', (event, datum) => {
406
+ // event.stopPropagation()
407
+
408
+ event$.next({
409
+ type: 'grid',
410
+ eventName: 'click',
411
+ pluginName,
412
+ highlightTarget: data.highlightTarget,
413
+ datum,
414
+ gridIndex: datum.gridIndex,
415
+ series: data.SeriesDataMap.get(datum.seriesLabel)!,
416
+ seriesIndex: datum.seriesIndex,
417
+ seriesLabel: datum.seriesLabel,
418
+ groups: data.GroupDataMap.get(datum.groupLabel)!,
419
+ groupIndex: datum.groupIndex,
420
+ groupLabel: datum.groupLabel,
421
+ event,
422
+ data: data.computedData
423
+ })
424
+ })
425
+
426
+ })
427
+
428
+ // const datumList$ = computedData$.pipe(
429
+ // takeUntil(destroy$),
430
+ // map(d => d.flat())
431
+ // )
432
+ // const highlight$ = highlightObservable({ datumList$, fullChartParams$, event$: store.event$ })
433
+ // const highlightSubscription = gridHighlight$.subscribe()
434
+ const onlyShowHighlighted$ = fullParams$.pipe(
435
+ takeUntil(destroy$),
436
+ map(d => d.onlyShowHighlighted),
437
+ distinctUntilChanged()
438
+ )
439
+
440
+ combineLatest({
441
+ graphicSelection: graphicSelection$,
442
+ highlight: gridHighlight$.pipe(
443
+ map(data => data.map(d => d.id))
444
+ ),
445
+ onlyShowHighlighted: onlyShowHighlighted$,
446
+ // fullParams: fullParams$,
447
+ fullChartParams: fullChartParams$
448
+ }).pipe(
449
+ takeUntil(destroy$),
450
+ switchMap(async d => d)
451
+ ).subscribe(data => {
452
+ highlightDots({
453
+ selection: data.graphicSelection,
454
+ ids: data.highlight,
455
+ onlyShowHighlighted: data.onlyShowHighlighted,
456
+ // fullParams: data.fullParams,
457
+ fullChartParams: data.fullChartParams
458
+ })
459
+ })
460
+
461
+ return () => {
462
+ destroy$.next(undefined)
463
+ // highlightSubscription.unsubscribe()
464
+ }
465
465
  }