@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,494 @@
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
+ BehaviorSubject} from 'rxjs'
12
+
13
+ import type { SeriesPlotExtendContext, SeriesPlotPluginParams, SeriesPlotAllLayerParams } from './types'
14
+ import { defineSVGPlugin } from '@orbcharts/core'
15
+ import { validateObject } from '@orbcharts/core'
16
+ import { DEFAULT_SERIES_PLOT_PARAMS } from './defaults'
17
+ import {
18
+ categoryDataMapObservable,
19
+ containerSizeObservable,
20
+ layoutObservable,
21
+ fontSizePxObservable,
22
+ highlightObservable,
23
+ seriesDataMapObservable
24
+ } from '../../utils/observables'
25
+ import {
26
+ gridComputedDataObservable,
27
+ gridComputedAxesDataObservable,
28
+ gridAxesSizeObservable,
29
+ gridAxesContainerSizeObservable,
30
+ gridSeriesLabelsObservable,
31
+ gridVisibleComputedDataObservable,
32
+ gridVisibleComputedAxesDataObservable,
33
+ // isSeriesSeprateObservable,
34
+ gridContainerPositionObservable,
35
+ computedStackedDataObservables,
36
+ categoryScaleDomainValueObservable,
37
+ filteredMinMaxValueObservable,
38
+ gridAxesTransformObservable,
39
+ gridAxesReverseTransformObservable,
40
+ gridGraphicTransformObservable,
41
+ gridGraphicReverseScaleObservable,
42
+ } from './contextObservables'
43
+ import { Bars } from './layers/Bars'
44
+ import { BarsTriangle } from './layers/BarsTriangle'
45
+ import { CategoryAux } from './layers/CategoryAux'
46
+ import { CategoryAxis } from './layers/CategoryAxis'
47
+ import { CategoryZoom } from './layers/CategoryZoom'
48
+ import { Dots } from './layers/Dots'
49
+ import { LineAreas } from './layers/LineAreas'
50
+ import { Lines } from './layers/Lines'
51
+ import { StackedBars } from './layers/StackedBars'
52
+ import { StackedValueAxis } from './layers/StackedValueAxis'
53
+ import { ValueAxis } from './layers/ValueAxis'
54
+
55
+ const bars = new Bars()
56
+ const barsTriangle = new BarsTriangle()
57
+ const categoryAux = new CategoryAux()
58
+ const categoryAxis = new CategoryAxis()
59
+ const categoryZoom = new CategoryZoom()
60
+ const dots = new Dots()
61
+ const lineAreas = new LineAreas()
62
+ const lines = new Lines()
63
+ const stackedBars = new StackedBars()
64
+ const stackedValueAxis = new StackedValueAxis()
65
+ const valueAxis = new ValueAxis()
66
+
67
+ export const SeriesPlot = defineSVGPlugin<
68
+ SeriesPlotExtendContext,
69
+ SeriesPlotPluginParams,
70
+ SeriesPlotAllLayerParams
71
+ >({
72
+ name: 'SeriesPlot',
73
+ defaultParams: DEFAULT_SERIES_PLOT_PARAMS,
74
+ layers: [bars, barsTriangle, categoryAux, categoryAxis, categoryZoom, dots, lineAreas, lines, stackedBars, stackedValueAxis, valueAxis],
75
+ setup: (props) => {
76
+
77
+ const zoomedScaleDomain$ = new BehaviorSubject<[number, number | "max"] | undefined>(undefined)
78
+ props.context.event$.subscribe(event => {
79
+ if (event.eventName === 'zoom' && event.data && event.data.scaleDomain) {
80
+ zoomedScaleDomain$.next(event.data.scaleDomain)
81
+ }
82
+ })
83
+
84
+ const zoomedCategoryAxis$ = props.pluginParams$.pipe(
85
+ map(params => params.categoryAxis),
86
+ switchMap(categoryAxis => zoomedScaleDomain$.pipe(
87
+ map(scaleDomain => {
88
+ if (!scaleDomain) {
89
+ return categoryAxis
90
+ }
91
+ return {
92
+ ...categoryAxis,
93
+ scaleDomain
94
+ }
95
+ })
96
+ )),
97
+ shareReplay(1)
98
+ )
99
+
100
+ const valueAxis$ = props.pluginParams$.pipe(
101
+ map(params => params.valueAxis),
102
+ shareReplay(1)
103
+ )
104
+
105
+ const selectedGridData$ = combineLatest({
106
+ gridData: props.context.gridData$,
107
+ datasetIndex: props.pluginParams$.pipe(
108
+ map(pluginParams => pluginParams.datasetIndex)
109
+ )
110
+ }).pipe(
111
+ debounceTime(0),
112
+ map(({ gridData, datasetIndex }) => gridData[datasetIndex]),
113
+ shareReplay(1)
114
+ )
115
+
116
+ const layout$ = layoutObservable({
117
+ size$: props.context.size$,
118
+ padding$: props.pluginParams$.pipe(
119
+ map(pluginParams => pluginParams.styles.padding)
120
+ )
121
+ }).pipe(
122
+ shareReplay(1)
123
+ )
124
+
125
+ // combineLatest({
126
+ // layout: layout$,
127
+ // plugins: props.context.plugins$
128
+ // }).pipe(
129
+ // debounceTime(0)
130
+ // ).subscribe(data => {
131
+ // d3
132
+ // .select(props.context.svg)
133
+ // .selectAll(':scope > g') // 所有 layer
134
+ // .attr('transform', `translate(${data.layout.left}, ${data.layout.top})`)
135
+ // })
136
+
137
+ // const layoutSubscription = layout$.subscribe(layout => {
138
+ // props.svg.setAttribute('transform', `translate(${layout.left}, ${layout.top})`)
139
+ // })
140
+
141
+ const computedData$ = gridComputedDataObservable({
142
+ selectedGridData$: selectedGridData$,
143
+ pluginParams$: props.pluginParams$
144
+ }).pipe(
145
+ shareReplay(1)
146
+ )
147
+
148
+ const fontSizePx$ = fontSizePxObservable(props.context.theme$).pipe(
149
+ shareReplay(1)
150
+ )
151
+
152
+ const isSeriesSeprate$ = props.pluginParams$.pipe(
153
+ map(d => d.separateSeries),
154
+ distinctUntilChanged(),
155
+ shareReplay(1)
156
+ )
157
+
158
+ const gridContainerPosition$ = gridContainerPositionObservable({
159
+ selectedGridData$: selectedGridData$,
160
+ pluginParams$: props.pluginParams$,
161
+ layout$: layout$,
162
+ }).pipe(
163
+ shareReplay(1)
164
+ )
165
+
166
+ const containerSize$ = containerSizeObservable({
167
+ layout$: layout$,
168
+ containerPosition$: gridContainerPosition$,
169
+ container$: props.pluginParams$.pipe(
170
+ map(d => d.container)
171
+ )
172
+ }).pipe(
173
+ shareReplay(1)
174
+ )
175
+
176
+ const gridAxesSize$ = gridAxesSizeObservable({
177
+ categoryAxis$: zoomedCategoryAxis$,
178
+ valueAxis$,
179
+ layout$: layout$
180
+ }).pipe(
181
+ shareReplay(1)
182
+ )
183
+
184
+ const gridAxesContainerSize$ = gridAxesContainerSizeObservable({
185
+ categoryAxis$: zoomedCategoryAxis$,
186
+ valueAxis$,
187
+ containerSize$
188
+ }).pipe(
189
+ shareReplay(1)
190
+ )
191
+
192
+ const datumList$ = computedData$.pipe(
193
+ map(d => d.flat())
194
+ ).pipe(
195
+ shareReplay(1)
196
+ )
197
+
198
+ const gridHighlight$ = highlightObservable({
199
+ datumList$,
200
+ styles$: props.pluginParams$.pipe(
201
+ map(params => params.styles)
202
+ ),
203
+ event$: props.context.event$
204
+ }).pipe(
205
+ shareReplay(1)
206
+ )
207
+
208
+ const seriesLabels$ = gridSeriesLabelsObservable({
209
+ computedData$: computedData$,
210
+ })
211
+
212
+ const SeriesDataMap$ = seriesDataMapObservable({
213
+ datumList$: datumList$
214
+ }).pipe(
215
+ shareReplay(1)
216
+ )
217
+
218
+ const CategoryDataMap$ = categoryDataMapObservable({
219
+ datumList$: datumList$
220
+ }).pipe(
221
+ shareReplay(1)
222
+ )
223
+
224
+ const computedAxesData$ = gridComputedAxesDataObservable({
225
+ computedData$: computedData$,
226
+ categoryAxis$: zoomedCategoryAxis$,
227
+ valueAxis$,
228
+ layout$: layout$,
229
+ }).pipe(
230
+ shareReplay(1)
231
+ )
232
+
233
+ const visibleComputedData$ = gridVisibleComputedDataObservable({
234
+ computedData$: computedData$,
235
+ }).pipe(
236
+ shareReplay(1)
237
+ )
238
+
239
+ const visibleComputedAxesData$ = gridVisibleComputedAxesDataObservable({
240
+ computedAxesData$: computedAxesData$,
241
+ }).pipe(
242
+ shareReplay(1)
243
+ )
244
+
245
+ const computedStackedData$ = computedStackedDataObservables({
246
+ computedData$: computedData$,
247
+ isSeriesSeprate$: isSeriesSeprate$
248
+ }).pipe(
249
+ shareReplay(1)
250
+ )
251
+
252
+ const categoryScaleDomainValue$ = categoryScaleDomainValueObservable({
253
+ selectedGridData$: selectedGridData$,
254
+ categoryAxis$: zoomedCategoryAxis$
255
+ }).pipe(
256
+ shareReplay(1)
257
+ )
258
+
259
+ const filteredMinMaxValue$ = filteredMinMaxValueObservable({
260
+ computedData$: computedData$,
261
+ categoryScaleDomainValue$: categoryScaleDomainValue$,
262
+ }).pipe(
263
+ shareReplay(1)
264
+ )
265
+
266
+ const filteredStackedMinMaxValue$ = filteredMinMaxValueObservable({
267
+ computedData$: computedStackedData$,
268
+ categoryScaleDomainValue$: categoryScaleDomainValue$,
269
+ }).pipe(
270
+ shareReplay(1)
271
+ )
272
+
273
+ const gridAxesTransform$ = gridAxesTransformObservable({
274
+ categoryAxis$: zoomedCategoryAxis$,
275
+ valueAxis$,
276
+ layout$: layout$
277
+ }).pipe(
278
+ shareReplay(1)
279
+ )
280
+
281
+ const gridAxesReverseTransform$ = gridAxesReverseTransformObservable({
282
+ gridAxesTransform$
283
+ }).pipe(
284
+ shareReplay(1)
285
+ )
286
+
287
+ const gridGraphicTransform$ = gridGraphicTransformObservable({
288
+ computedData$: computedData$,
289
+ categoryScaleDomainValue$: categoryScaleDomainValue$,
290
+ filteredMinMaxValue$: filteredMinMaxValue$,
291
+ categoryAxis$: zoomedCategoryAxis$,
292
+ valueAxis$,
293
+ layout$: layout$
294
+ }).pipe(
295
+ shareReplay(1)
296
+ )
297
+
298
+ const gridGraphicReverseScale$ = gridGraphicReverseScaleObservable({
299
+ gridContainerPosition$: gridContainerPosition$,
300
+ gridAxesTransform$: gridAxesTransform$,
301
+ gridGraphicTransform$: gridGraphicTransform$,
302
+ }).pipe(
303
+ shareReplay(1)
304
+ )
305
+
306
+ const extendsContext: SeriesPlotExtendContext = {
307
+ layout$,
308
+ computedData$,
309
+ fontSizePx$,
310
+ isSeriesSeprate$,
311
+ gridContainerPosition$,
312
+ containerSize$,
313
+ gridAxesSize$,
314
+ gridAxesContainerSize$,
315
+ gridHighlight$,
316
+ seriesLabels$,
317
+ SeriesDataMap$,
318
+ CategoryDataMap$,
319
+ computedAxesData$,
320
+ visibleComputedData$,
321
+ visibleComputedAxesData$,
322
+ computedStackedData$,
323
+ categoryScaleDomainValue$,
324
+ filteredMinMaxValue$,
325
+ filteredStackedMinMaxValue$,
326
+ gridAxesTransform$,
327
+ gridAxesReverseTransform$,
328
+ gridGraphicTransform$,
329
+ gridGraphicReverseScale$,
330
+ zoomedCategoryAxis$
331
+ // updateScaleDomain$
332
+ }
333
+
334
+ props.context = {
335
+ ...props.context,
336
+ ...extendsContext,
337
+ }
338
+
339
+ return () => {
340
+ // layoutSubscription.unsubscribe()
341
+ }
342
+ },
343
+ validator: (params: SeriesPlotPluginParams) => {
344
+ const result = validateObject(params, {
345
+ styles: {
346
+ toBeTypes: ['object'],
347
+ },
348
+ visibleFilter: {
349
+ toBeTypes: ['Function']
350
+ },
351
+ // grid: {
352
+ // toBeTypes: ['object']
353
+ // },
354
+ container: {
355
+ toBeTypes: ['object']
356
+ },
357
+ // seriesDirection: {
358
+ // toBe: '"row" | "column"',
359
+ // test: (value) => value === 'row' || value === 'column'
360
+ // },
361
+ // rowLabels: {
362
+ // toBeTypes: ['string[]']
363
+ // },
364
+ // columnLabels: {
365
+ // toBeTypes: ['string[]']
366
+ // },
367
+ valueAxis: {
368
+ toBeTypes: ['object']
369
+ },
370
+ categoryAxis: {
371
+ toBeTypes: ['object']
372
+ },
373
+ separateSeries: {
374
+ toBeTypes: ['boolean']
375
+ },
376
+ datasetIndex: {
377
+ toBeTypes: ['number']
378
+ }
379
+ })
380
+ if (result.status === 'error') {
381
+ return result
382
+ }
383
+ if (params.styles) {
384
+ const stylesResult = validateObject(params.styles, {
385
+ padding: {
386
+ toBeTypes: ['object']
387
+ },
388
+ highlightTarget: {
389
+ toBeTypes: ['string']
390
+ },
391
+ highlightDefault: {
392
+ toBeTypes: ['string', 'null']
393
+ },
394
+ unhighlightedOpacity: {
395
+ toBeTypes: ['number']
396
+ },
397
+ transitionDuration: {
398
+ toBeTypes: ['number']
399
+ },
400
+ transitionEase: {
401
+ toBeTypes: ['string']
402
+ }
403
+ })
404
+ if (stylesResult.status === 'error') {
405
+ return stylesResult
406
+ }
407
+ if (params.styles.padding) {
408
+ const paddingResult = validateObject(params.styles.padding, {
409
+ top: {
410
+ toBeTypes: ['number']
411
+ },
412
+ right: {
413
+ toBeTypes: ['number']
414
+ },
415
+ bottom: {
416
+ toBeTypes: ['number']
417
+ },
418
+ left: {
419
+ toBeTypes: ['number']
420
+ }
421
+ })
422
+ if (paddingResult.status === 'error') {
423
+ return paddingResult
424
+ }
425
+ }
426
+ }
427
+ if (params.container) {
428
+ const containerResult = validateObject(params.container, {
429
+ columnAmount: {
430
+ toBeTypes: ['number']
431
+ },
432
+ rowAmount: {
433
+ toBeTypes: ['number']
434
+ },
435
+ columnGap: {
436
+ toBe: 'number | "auto"',
437
+ test: (value: any) => typeof value === 'number' || value === 'auto'
438
+ },
439
+ rowGap: {
440
+ toBe: 'number | "auto"',
441
+ test: (value: any) => typeof value === 'number' || value === 'auto'
442
+ }
443
+ })
444
+ if (containerResult.status === 'error') {
445
+ return containerResult
446
+ }
447
+ }
448
+ if (params.valueAxis) {
449
+ const valueAxisResult = validateObject(params.valueAxis, {
450
+ position: {
451
+ toBe: '"bottom" | "left" | "top" | "right"',
452
+ test: (value) => value === 'bottom' || value === 'left' || value === 'top' || value === 'right'
453
+ },
454
+ scaleDomain: {
455
+ toBe: '[number | "min" | "auto", number | "max" | "auto"]',
456
+ test: (value) => Array.isArray(value) && value.length === 2 && (typeof value[0] === 'number' || value[0] === 'min' || value[0] === 'auto') && (typeof value[1] === 'number' || value[1] === 'max' || value[1] === 'auto')
457
+ },
458
+ scaleRange: {
459
+ toBe: '[number, number]',
460
+ test: (value) => Array.isArray(value) && value.length === 2 && typeof value[0] === 'number' && typeof value[1] === 'number'
461
+ },
462
+ label: {
463
+ toBeTypes: ['string']
464
+ }
465
+ })
466
+ if (valueAxisResult.status === 'error') {
467
+ return valueAxisResult
468
+ }
469
+ }
470
+ if (params.categoryAxis) {
471
+ const categoryAxisResult = validateObject(params.categoryAxis, {
472
+ position: {
473
+ toBe: '"bottom" | "left" | "top" | "right"',
474
+ test: (value) => value === 'bottom' || value === 'left' || value === 'top' || value === 'right'
475
+ },
476
+ scaleDomain: {
477
+ toBe: '[number, number | "max"]',
478
+ test: (value) => Array.isArray(value) && value.length === 2 && typeof value[0] === 'number' && (typeof value[1] === 'number' || value[1] === 'max')
479
+ },
480
+ scalePadding: {
481
+ toBeTypes: ['number']
482
+ },
483
+ label: {
484
+ toBeTypes: ['string']
485
+ }
486
+ })
487
+ if (categoryAxisResult.status === 'error') {
488
+ return categoryAxisResult
489
+ }
490
+ }
491
+
492
+ return result
493
+ },
494
+ })