@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,205 @@
1
+ import * as d3 from 'd3'
2
+ import {
3
+ combineLatest,
4
+ of,
5
+ map,
6
+ switchMap,
7
+ debounceTime,
8
+ takeUntil,
9
+ distinctUntilChanged,
10
+ Observable,
11
+ Subject,
12
+ iif
13
+ } from 'rxjs'
14
+ import type { ScatterPlotPluginParams, ScatterPlotExtendContext, XYAxesParams, ComputedXYDataMultivariate } from '../types'
15
+ import { defineSVGLayer } from '@orbcharts/core'
16
+ import { validateObject } from '@orbcharts/core'
17
+ import { DEFAULT_X_Y_AUX_PARAMS, DEFAULT_X_Y_AXES_PARAMS } from "../defaults"
18
+ import { LAYER_INDEX_OF_AUX, LAYER_INDEX_OF_AXIS } from '../../../const/layerIndex'
19
+ import { createBaseXAxis } from '../../../baseLayers/BaseXAxis'
20
+ import { createBaseYAxis } from '../../../baseLayers/BaseYAxis'
21
+
22
+ const pluginName = 'ScatterPlot'
23
+ const layerName = 'XYAxes'
24
+
25
+ export const XYAxes = defineSVGLayer<ScatterPlotExtendContext, ScatterPlotPluginParams, XYAxesParams>({
26
+ name: layerName,
27
+ defaultParams: DEFAULT_X_Y_AXES_PARAMS,
28
+ layerIndex: LAYER_INDEX_OF_AXIS,
29
+ initShow: true,
30
+ validator: (params) => {
31
+ const result = validateObject(params, {
32
+ xAxis: {
33
+ toBeTypes: ['object']
34
+ },
35
+ yAxis: {
36
+ toBeTypes: ['object']
37
+ }
38
+ })
39
+ if (params.xAxis) {
40
+ const forceResult = validateObject(params.xAxis, {
41
+ labelOffset: {
42
+ toBe: '[number, number]',
43
+ test: (value: any) => {
44
+ return Array.isArray(value)
45
+ && value.length === 2
46
+ && typeof value[0] === 'number'
47
+ && typeof value[1] === 'number'
48
+ }
49
+ },
50
+ labelColorType: {
51
+ toBeOption: 'ColorType',
52
+ },
53
+ axisLineVisible: {
54
+ toBeTypes: ['boolean']
55
+ },
56
+ axisLineColorType: {
57
+ toBeOption: 'ColorType',
58
+ },
59
+ ticks: {
60
+ toBeTypes: ['number', 'null']
61
+ },
62
+ tickFormat: {
63
+ toBeTypes: ['string', 'Function']
64
+ },
65
+ tickLineVisible: {
66
+ toBeTypes: ['boolean']
67
+ },
68
+ tickPadding: {
69
+ toBeTypes: ['number']
70
+ },
71
+ tickFullLine: {
72
+ toBeTypes: ['boolean']
73
+ },
74
+ tickFullLineDasharray: {
75
+ toBeTypes: ['string']
76
+ },
77
+ tickColorType: {
78
+ toBeOption: 'ColorType',
79
+ },
80
+ tickTextColorType: {
81
+ toBeOption: 'ColorType',
82
+ }
83
+ })
84
+ if (forceResult.status === 'error') {
85
+ return forceResult
86
+ }
87
+ }
88
+ if (params.yAxis) {
89
+ const forceResult = validateObject(params.yAxis, {
90
+ labelOffset: {
91
+ toBe: '[number, number]',
92
+ test: (value: any) => {
93
+ return Array.isArray(value)
94
+ && value.length === 2
95
+ && typeof value[0] === 'number'
96
+ && typeof value[1] === 'number'
97
+ }
98
+ },
99
+ labelColorType: {
100
+ toBeOption: 'ColorType',
101
+ },
102
+ axisLineVisible: {
103
+ toBeTypes: ['boolean']
104
+ },
105
+ axisLineColorType: {
106
+ toBeOption: 'ColorType',
107
+ },
108
+ ticks: {
109
+ toBeTypes: ['number', 'null']
110
+ },
111
+ tickFormat: {
112
+ toBeTypes: ['string', 'Function']
113
+ },
114
+ tickLineVisible: {
115
+ toBeTypes: ['boolean']
116
+ },
117
+ tickPadding: {
118
+ toBeTypes: ['number']
119
+ },
120
+ tickFullLine: {
121
+ toBeTypes: ['boolean']
122
+ },
123
+ tickFullLineDasharray: {
124
+ toBeTypes: ['string']
125
+ },
126
+ tickColorType: {
127
+ toBeOption: 'ColorType',
128
+ },
129
+ tickTextColorType: {
130
+ toBeOption: 'ColorType',
131
+ }
132
+ })
133
+ if (forceResult.status === 'error') {
134
+ return forceResult
135
+ }
136
+ }
137
+ return result
138
+ },
139
+ setup: ({ svgG, pluginParams$, layerParams$, context }) => {
140
+
141
+ const destroy$ = new Subject()
142
+
143
+ context.layout$
144
+ .pipe(
145
+ takeUntil(destroy$)
146
+ )
147
+ .subscribe(layout => {
148
+ d3.select(svgG)
149
+ .attr('transform', `translate(${layout.left}, ${layout.top})`)
150
+ })
151
+
152
+ const xAxisFullParams$ = layerParams$.pipe(
153
+ takeUntil(destroy$),
154
+ map(layerParams => layerParams.xAxis),
155
+ distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),
156
+ )
157
+
158
+ const yAxisFullParams$ = layerParams$.pipe(
159
+ takeUntil(destroy$),
160
+ map(layerParams => layerParams.yAxis),
161
+ distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),
162
+ )
163
+
164
+ const unsubscribeBaseXAxis = createBaseXAxis({
165
+ selection: d3.select(svgG),
166
+ pluginName,
167
+ layerName: `${layerName}-x`,
168
+ position$: of('bottom'),
169
+ transitionDuration$: of(100),
170
+ computedData$: context.computedData$,
171
+ layerParams$: xAxisFullParams$,
172
+ theme$: context.theme$,
173
+ xAxis$: context.zoomedXAxis$,
174
+ isSeriesSeprate$: context.isSeriesSeprate$,
175
+ containerPosition$: context.containerPosition$,
176
+ // layout$: context.layout$,
177
+ containerSize$: context.containerSize$,
178
+ xScale$: context.xScale$,
179
+ // filteredXYMinMaxData$: context.filteredXYMinMaxData$,
180
+ // xyMinMax$: context.xyMinMax$,
181
+ })
182
+
183
+ const unsubscribeBaseYAxis = createBaseYAxis({
184
+ selection: d3.select(svgG),
185
+ pluginName,
186
+ layerName: `${layerName}-y`,
187
+ computedData$: context.computedData$,
188
+ layerParams$: yAxisFullParams$,
189
+ theme$: context.theme$,
190
+ yAxis$: context.yAxis$,
191
+ isSeriesSeprate$: context.isSeriesSeprate$,
192
+ containerPosition$: context.containerPosition$,
193
+ containerSize$: context.containerSize$,
194
+ yScale$: context.yScale$,
195
+ // filteredXYMinMaxData$: context.filteredXYMinMaxData$,
196
+ // xyMinMax$: context.xyMinMax$,
197
+ })
198
+
199
+ return () => {
200
+ destroy$.next(undefined)
201
+ unsubscribeBaseXAxis()
202
+ unsubscribeBaseYAxis()
203
+ }
204
+ }
205
+ })
@@ -0,0 +1,48 @@
1
+ import * as d3 from 'd3'
2
+ import {
3
+ map,
4
+ Subject
5
+ } from 'rxjs'
6
+ import type { ScatterPlotPluginParams, ScatterPlotExtendContext, XZoomParams, ComputedXYDataMultivariate } from '../types'
7
+ import { defineSVGLayer } from '@orbcharts/core'
8
+ // import { validateObject } from '@orbcharts/core'
9
+ import { DEFAULT_X_Y_AUX_PARAMS, DEFAULT_X_ZOOM_PARAMS } from "../defaults"
10
+ import { LAYER_INDEX_OF_AUX, LAYER_INDEX_OF_AXIS } from '../../../const/layerIndex'
11
+ import { createBaseXZoom } from '../../../baseLayers/BaseXZoom'
12
+
13
+ const pluginName = 'ScatterPlot'
14
+ const layerName = 'XZoom'
15
+
16
+ export const XZoom = defineSVGLayer<ScatterPlotExtendContext, ScatterPlotPluginParams, XZoomParams>({
17
+ name: layerName,
18
+ defaultParams: DEFAULT_X_ZOOM_PARAMS,
19
+ layerIndex: LAYER_INDEX_OF_AXIS,
20
+ initShow: true,
21
+ validator: (params) => {
22
+ return {
23
+ status: 'success',
24
+ columnName: '',
25
+ expectToBe: ''
26
+ }
27
+ },
28
+ setup: ({ svgG, pluginParams$, layerParams$, context }) => {
29
+
30
+ const destroy$ = new Subject()
31
+
32
+ const unsubscribeBaseXZoom = createBaseXZoom({
33
+ rootSelection: d3.select(context.svg),
34
+ pluginName,
35
+ layerName,
36
+ initXAxis$: pluginParams$.pipe(map(params => params.xAxis)),
37
+ initYAxis$: pluginParams$.pipe(map(params => params.yAxis)),
38
+ xyMinMax$: context.xyMinMax$,
39
+ layout$: context.layout$,
40
+ eventTrigger$: context.eventTrigger$,
41
+ })
42
+
43
+ return () => {
44
+ destroy$.next(undefined)
45
+ unsubscribeBaseXZoom()
46
+ }
47
+ }
48
+ })
@@ -0,0 +1,179 @@
1
+
2
+ import { Observable, Subject } from 'rxjs'
3
+ import type { ColorType, ModelDatumSeries, EventData } from '@orbcharts/core'
4
+ import type { AxisPosition, ContainerPosition, ContainerPositionScaled, Container, GraphicStyles, Layout, VisibleFilter, XYAxis, CategoryAxis } from '../../types/PluginParams'
5
+ import { ComputedDatumMultivariate } from '../../types/ComputedData'
6
+ import type { ArcScaleType, ContainerSize, Placement, TransformData } from '../../types/Common'
7
+
8
+ // context
9
+ export interface ComputedXYDatumMultivariate extends ComputedDatumMultivariate {
10
+ axisX: number
11
+ axisY: number
12
+ }
13
+ export type ComputedXYDataMultivariate = ComputedXYDatumMultivariate[][]
14
+
15
+ export interface ScatterPlotExtendContext {
16
+ layout$: Observable<Layout>
17
+ computedData$: Observable<ComputedDatumMultivariate[][]>
18
+ fontSizePx$: Observable<number>
19
+ isSeriesSeprate$: Observable<boolean>
20
+ containerPosition$: Observable<ContainerPositionScaled[]>
21
+ containerSize$: Observable<ContainerSize>
22
+ highlight$: Observable<ComputedDatumMultivariate[]>
23
+
24
+ seriesLabels$: Observable<string[]>
25
+ SeriesDataMap$: Observable<Map<string, ComputedDatumMultivariate[]>>
26
+ valueLabels$: Observable<string[]>
27
+ xyMinMax$: Observable<{ // xy
28
+ minX: number
29
+ maxX: number
30
+ minY: number
31
+ maxY: number
32
+ }>
33
+ xyValueIndex$: Observable<[number, number]> // xy
34
+ filteredXYMinMaxData$: Observable<{ // xy
35
+ datumList: ComputedXYDatumMultivariate[]
36
+ minXDatum: ComputedXYDatumMultivariate | null
37
+ maxXDatum: ComputedXYDatumMultivariate | null
38
+ minYDatum: ComputedXYDatumMultivariate | null
39
+ maxYDatum: ComputedXYDatumMultivariate | null
40
+ }>
41
+ visibleComputedData$: Observable<ComputedDatumMultivariate[][]>
42
+ visibleComputedRankingByIndexData$: Observable<ComputedDatumMultivariate[][]> // ranking
43
+ visibleComputedXYData$: Observable<ComputedXYDataMultivariate> // xy
44
+ graphicTransform$: Observable<TransformData>
45
+ graphicReverseScale$: Observable<[number, number][]>
46
+ xScale$: Observable<d3.ScaleLinear<number, number>>
47
+ // xSumScale$: Observable<d3.ScaleLinear<number, number>>
48
+ yScale$: Observable<d3.ScaleLinear<number, number>>
49
+
50
+ zoomedXAxis$: Observable<XYAxis>
51
+ yAxis$: Observable<XYAxis>
52
+
53
+ }
54
+
55
+ // plugin params
56
+ export interface ScatterPlotPluginParams {
57
+ styles: GraphicStyles
58
+ visibleFilter: VisibleFilter<'grid'>
59
+ container: Container
60
+ xAxis: XYAxis
61
+ yAxis: XYAxis
62
+ separateSeries: boolean
63
+ datasetIndex: number
64
+ }
65
+
66
+ // all layer params
67
+ export interface ScatterPlotAllLayerParams {
68
+ Scatter: ScatterParams
69
+ ScatterBubbles: ScatterBubblesParams
70
+ XYAux: XYAuxParams
71
+ XYAxes: XYAxesParams
72
+ XZoom: XZoomParams
73
+ }
74
+
75
+ // -- layer params --
76
+ export interface OrdinalBubblesParams {
77
+ bubble: {
78
+ // radiusMin: number // 對應value最小值
79
+ // radiusMax: number // 對應value最大值
80
+ sizeAdjust: number
81
+ arcScaleType: 'area' | 'radius',
82
+ valueLinearOpacity: [number, number]
83
+ }
84
+ itemLabel: {
85
+ padding: number
86
+ // rotate: number
87
+ colorType: ColorType
88
+ }
89
+ axisLabel: {
90
+ offset: [number, number]
91
+ colorType: ColorType
92
+ }
93
+ rankingAmount: 'auto' | number
94
+ }
95
+
96
+ export interface ScatterParams {
97
+ radius: number
98
+ fillColorType: ColorType
99
+ strokeColorType: ColorType
100
+ strokeWidth: number
101
+ }
102
+
103
+ export interface ScatterBubblesParams {
104
+ // radius: number
105
+ fillColorType: ColorType
106
+ strokeColorType: ColorType
107
+ strokeWidth: number
108
+ valueLinearOpacity: [number, number]
109
+ arcScaleType: ArcScaleType
110
+ sizeAdjust: number
111
+ }
112
+
113
+ export interface XYAuxParams {
114
+ xAxis: {
115
+ showLine: boolean
116
+ showLabel: boolean
117
+ lineDashArray: string
118
+ lineColorType: ColorType
119
+ labelColorType: ColorType
120
+ labelTextColorType: ColorType
121
+ labelTextFormat: string | ((text: any) => string)
122
+ labelPadding: number
123
+ // labelRotate: number
124
+ }
125
+ yAxis: {
126
+ showLine: boolean
127
+ showLabel: boolean
128
+ lineDashArray: string
129
+ lineColorType: ColorType
130
+ labelColorType: ColorType
131
+ labelTextColorType: ColorType
132
+ labelTextFormat: string | ((text: any) => string)
133
+ labelPadding: number
134
+ // labelRotate: number
135
+ }
136
+ }
137
+
138
+ export interface XYAxesParams {
139
+ xAxis: {
140
+ labelOffset: [number, number]
141
+ labelColorType: ColorType
142
+ axisLineVisible: boolean
143
+ axisLineColorType: ColorType
144
+ ticks: number | null
145
+ tickFormat: string | ((text: d3.NumberValue) => string | d3.NumberValue)
146
+ tickLineVisible: boolean
147
+ tickPadding: number
148
+ tickFullLine: boolean
149
+ tickFullLineDasharray: string
150
+ tickColorType: ColorType
151
+ // axisLineColor: string
152
+ // axisLabelColor: string
153
+ // tickTextRotate: number
154
+ tickTextColorType: ColorType
155
+ }
156
+ yAxis: {
157
+ labelOffset: [number, number]
158
+ labelColorType: ColorType
159
+ axisLineVisible: boolean
160
+ axisLineColorType: ColorType
161
+ ticks: number | null
162
+ tickFormat: string | ((text: d3.NumberValue) => string | d3.NumberValue)
163
+ tickLineVisible: boolean
164
+ tickPadding: number
165
+ tickFullLine: boolean
166
+ tickFullLineDasharray: string
167
+ tickColorType: ColorType
168
+ // axisLineColor: string
169
+ // axisLabelColor: string
170
+ // tickTextRotate: number
171
+ tickTextColorType: ColorType
172
+ }
173
+ }
174
+
175
+
176
+ export interface XZoomParams {
177
+
178
+ }
179
+