@orbcharts/plugins-basic 3.0.1 → 3.0.3

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 (133) hide show
  1. package/LICENSE +200 -200
  2. package/dist/lib/gridObservables.d.ts +1 -0
  3. package/dist/orbcharts-plugins-basic.es.js +14800 -13543
  4. package/dist/orbcharts-plugins-basic.umd.js +129 -99
  5. package/dist/src/base/BaseOrdinalBubbles.d.ts +26 -0
  6. package/dist/src/base/BaseRacingBars.d.ts +2 -1
  7. package/dist/src/base/BaseRacingLabels.d.ts +1 -0
  8. package/dist/src/base/BaseXZoom.d.ts +18 -0
  9. package/dist/src/grid/gridObservables.d.ts +4 -7
  10. package/dist/src/multiValue/defaults.d.ts +5 -1
  11. package/dist/src/multiValue/index.d.ts +4 -0
  12. package/dist/src/multiValue/multiValueObservables.d.ts +14 -1
  13. package/dist/src/multiValue/plugins/OrdinalAux.d.ts +3 -0
  14. package/dist/src/multiValue/plugins/OrdinalAxis.d.ts +3 -0
  15. package/dist/src/multiValue/plugins/OrdinalBubbles.d.ts +3 -0
  16. package/dist/src/multiValue/plugins/OrdinalZoom.d.ts +1 -0
  17. package/lib/core-types.ts +7 -7
  18. package/lib/core.ts +6 -6
  19. package/lib/gridObservables.ts +6 -0
  20. package/lib/plugins-basic-types.ts +6 -6
  21. package/package.json +48 -44
  22. package/src/base/BaseBars.ts +765 -765
  23. package/src/base/BaseBarsTriangle.ts +676 -676
  24. package/src/base/BaseDots.ts +464 -464
  25. package/src/base/BaseGroupAxis.ts +691 -691
  26. package/src/base/BaseLegend.ts +684 -684
  27. package/src/base/BaseLineAreas.ts +629 -629
  28. package/src/base/BaseLines.ts +706 -706
  29. package/src/base/BaseOrdinalBubbles.ts +728 -0
  30. package/src/base/BaseRacingBars.ts +582 -551
  31. package/src/base/BaseRacingLabels.ts +404 -396
  32. package/src/base/BaseRacingValueLabels.ts +403 -403
  33. package/src/base/BaseStackedBars.ts +782 -782
  34. package/src/base/BaseTooltip.ts +386 -386
  35. package/src/base/BaseValueAxis.ts +600 -600
  36. package/src/base/BaseXAxis.ts +427 -427
  37. package/src/base/BaseXZoom.ts +242 -0
  38. package/src/base/BaseYAxis.ts +389 -389
  39. package/src/base/types.ts +2 -2
  40. package/src/const.ts +30 -30
  41. package/src/grid/defaults.ts +213 -213
  42. package/src/grid/gridObservables.ts +635 -612
  43. package/src/grid/index.ts +16 -16
  44. package/src/grid/plugins/Bars.ts +69 -69
  45. package/src/grid/plugins/BarsPN.ts +66 -66
  46. package/src/grid/plugins/BarsTriangle.ts +73 -73
  47. package/src/grid/plugins/Dots.ts +68 -68
  48. package/src/grid/plugins/GridLegend.ts +107 -107
  49. package/src/grid/plugins/GridTooltip.ts +66 -66
  50. package/src/grid/plugins/GroupAux.ts +1095 -1120
  51. package/src/grid/plugins/GroupAxis.ts +73 -73
  52. package/src/grid/plugins/GroupZoom.ts +218 -218
  53. package/src/grid/plugins/LineAreas.ts +65 -65
  54. package/src/grid/plugins/Lines.ts +59 -59
  55. package/src/grid/plugins/StackedBars.ts +64 -64
  56. package/src/grid/plugins/StackedValueAxis.ts +96 -96
  57. package/src/grid/plugins/ValueAxis.ts +94 -94
  58. package/src/index.ts +6 -6
  59. package/src/multiGrid/defaults.ts +244 -244
  60. package/src/multiGrid/index.ts +14 -14
  61. package/src/multiGrid/multiGridObservables.ts +50 -50
  62. package/src/multiGrid/plugins/MultiBars.ts +108 -108
  63. package/src/multiGrid/plugins/MultiBarsTriangle.ts +114 -114
  64. package/src/multiGrid/plugins/MultiDots.ts +102 -102
  65. package/src/multiGrid/plugins/MultiGridLegend.ts +169 -169
  66. package/src/multiGrid/plugins/MultiGridTooltip.ts +66 -66
  67. package/src/multiGrid/plugins/MultiGroupAxis.ts +137 -137
  68. package/src/multiGrid/plugins/MultiLineAreas.ts +107 -107
  69. package/src/multiGrid/plugins/MultiLines.ts +101 -101
  70. package/src/multiGrid/plugins/MultiStackedBars.ts +106 -106
  71. package/src/multiGrid/plugins/MultiStackedValueAxis.ts +134 -134
  72. package/src/multiGrid/plugins/MultiValueAxis.ts +134 -134
  73. package/src/multiGrid/plugins/OverlappingStackedValueAxes.ts +300 -300
  74. package/src/multiGrid/plugins/OverlappingValueAxes.ts +300 -300
  75. package/src/multiValue/defaults.ts +523 -431
  76. package/src/multiValue/index.ts +16 -12
  77. package/src/multiValue/multiValueObservables.ts +781 -666
  78. package/src/multiValue/plugins/MultiValueLegend.ts +107 -107
  79. package/src/multiValue/plugins/MultiValueTooltip.ts +66 -66
  80. package/src/multiValue/plugins/OrdinalAux.ts +661 -0
  81. package/src/multiValue/plugins/OrdinalAxis.ts +525 -0
  82. package/src/multiValue/plugins/OrdinalBubbles.ts +226 -0
  83. package/src/multiValue/plugins/OrdinalZoom.ts +57 -0
  84. package/src/multiValue/plugins/RacingBars.ts +375 -373
  85. package/src/multiValue/plugins/RacingCounterTexts.ts +300 -300
  86. package/src/multiValue/plugins/RacingValueAxis.ts +114 -114
  87. package/src/multiValue/plugins/Scatter.ts +486 -426
  88. package/src/multiValue/plugins/ScatterBubbles.ts +635 -554
  89. package/src/multiValue/plugins/XAxis.ts +107 -107
  90. package/src/multiValue/plugins/XYAux.ts +683 -682
  91. package/src/multiValue/plugins/XYAxes.ts +194 -194
  92. package/src/multiValue/plugins/XYAxes_legacy.ts +683 -683
  93. package/src/multiValue/plugins/XZoom.ts +40 -299
  94. package/src/noneData/defaults.ts +102 -102
  95. package/src/noneData/index.ts +3 -3
  96. package/src/noneData/plugins/Container.ts +27 -27
  97. package/src/noneData/plugins/Tooltip.ts +373 -373
  98. package/src/relationship/defaults.ts +221 -221
  99. package/src/relationship/index.ts +5 -5
  100. package/src/relationship/plugins/ForceDirected.ts +1173 -1173
  101. package/src/relationship/plugins/ForceDirectedBubbles.ts +1411 -1411
  102. package/src/relationship/plugins/RelationshipLegend.ts +100 -100
  103. package/src/relationship/plugins/RelationshipTooltip.ts +66 -66
  104. package/src/relationship/relationshipObservables.ts +49 -49
  105. package/src/series/defaults.ts +221 -221
  106. package/src/series/index.ts +9 -9
  107. package/src/series/plugins/Bubbles.ts +636 -636
  108. package/src/series/plugins/Pie.ts +623 -623
  109. package/src/series/plugins/PieEventTexts.ts +284 -284
  110. package/src/series/plugins/PieLabels.ts +640 -640
  111. package/src/series/plugins/Rose.ts +516 -516
  112. package/src/series/plugins/RoseLabels.ts +600 -600
  113. package/src/series/plugins/SeriesLegend.ts +107 -107
  114. package/src/series/plugins/SeriesTooltip.ts +66 -66
  115. package/src/series/seriesObservables.ts +145 -145
  116. package/src/series/seriesUtils.ts +51 -51
  117. package/src/tree/defaults.ts +102 -102
  118. package/src/tree/index.ts +4 -4
  119. package/src/tree/plugins/TreeLegend.ts +100 -100
  120. package/src/tree/plugins/TreeMap.ts +341 -341
  121. package/src/tree/plugins/TreeTooltip.ts +66 -66
  122. package/src/utils/commonUtils.ts +31 -31
  123. package/src/utils/d3Graphics.ts +176 -176
  124. package/src/utils/d3Utils.ts +92 -92
  125. package/src/utils/observables.ts +14 -14
  126. package/src/utils/orbchartsUtils.ts +129 -129
  127. package/tsconfig.base.json +13 -13
  128. package/tsconfig.json +2 -2
  129. package/vite.config.js +22 -22
  130. package/dist/src/multiValue/plugins/OrdinalXAxis.d.ts +0 -0
  131. package/dist/src/multiValue/plugins/RankingAxis_legacy.d.ts +0 -0
  132. package/src/multiValue/plugins/OrdinalXAxis.ts +0 -0
  133. package/src/multiValue/plugins/RankingAxis_legacy.ts +0 -109
@@ -0,0 +1,242 @@
1
+ import * as d3 from 'd3'
2
+ import {
3
+ Observable,
4
+ combineLatest,
5
+ switchMap,
6
+ distinctUntilChanged,
7
+ first,
8
+ map,
9
+ takeUntil,
10
+ debounceTime,
11
+ Subject } from 'rxjs'
12
+ import type { BasePluginFn } from './types'
13
+ import type {
14
+ ComputedDataMultiValue,
15
+ DataFormatterTypeMap,
16
+ DataFormatterMultiValue,
17
+ DataFormatterMultiValuePartial,
18
+ EventMultiValue,
19
+ Layout
20
+ } from '../../lib/core-types'
21
+ import {
22
+ defineMultiValuePlugin, createValueToAxisScale } from '../../lib/core'
23
+
24
+ interface BaseRacingBarsContext {
25
+ rootSelection: d3.Selection<any, unknown, any, unknown>
26
+ dataFormatter$: Subject<DataFormatterMultiValuePartial>
27
+ fullDataFormatter$: Observable<DataFormatterTypeMap<'multiValue'>>
28
+ xyMinMax$: Observable<{
29
+ minX: number;
30
+ maxX: number;
31
+ minY: number;
32
+ maxY: number;
33
+ }>
34
+ layout$: Observable<Layout>
35
+ }
36
+
37
+ export const createBaseXZoom: BasePluginFn<BaseRacingBarsContext> = (pluginName: string, {
38
+ rootSelection,
39
+ dataFormatter$,
40
+ fullDataFormatter$,
41
+ xyMinMax$,
42
+ layout$,
43
+ }) => {
44
+
45
+ const destroy$ = new Subject()
46
+
47
+ // 紀錄zoom最後一次的transform
48
+ let lastTransform = {
49
+ k: 1,
50
+ x: 0,
51
+ y: 0
52
+ }
53
+
54
+ const initXAxis$ = fullDataFormatter$.pipe(
55
+ map(d => d.xAxis),
56
+ // 只用第一次資料來計算scale才不會造成每次變動都受到影響
57
+ first()
58
+ )
59
+
60
+ const initYAxis$ = fullDataFormatter$.pipe(
61
+ map(d => d.yAxis),
62
+ // 只用第一次資料來計算scale才不會造成每次變動都受到影響
63
+ first()
64
+ )
65
+
66
+ const initXScale$: Observable<d3.ScaleLinear<number, number>> = new Observable(subscriber => {
67
+ combineLatest({
68
+ initXAxis: initXAxis$,
69
+ layout: layout$,
70
+ xyMinMax: xyMinMax$
71
+ }).pipe(
72
+ takeUntil(destroy$),
73
+ switchMap(async (d) => d),
74
+ ).subscribe(data => {
75
+
76
+ const xScale: d3.ScaleLinear<number, number> = createValueToAxisScale({
77
+ maxValue: data.xyMinMax.maxX,
78
+ minValue: data.xyMinMax.minX,
79
+ axisWidth: data.layout.width,
80
+ scaleDomain: data.initXAxis.scaleDomain,
81
+ scaleRange: data.initXAxis.scaleRange,
82
+ })
83
+
84
+ subscriber.next(xScale)
85
+ })
86
+ })
87
+
88
+ // const initYScale$: Observable<d3.ScaleLinear<number, number>> = new Observable(subscriber => {
89
+ // combineLatest({
90
+ // initYAxis: initYAxis$,
91
+ // layout: observer.layout$,
92
+ // xyMinMax: observer.xyMinMax$
93
+ // }).pipe(
94
+ // takeUntil(destroy$),
95
+ // switchMap(async (d) => d),
96
+ // ).subscribe(data => {
97
+
98
+ // const yScale: d3.ScaleLinear<number, number> = createValueToAxisScale({
99
+ // maxValue: data.xyMinMax.maxY,
100
+ // minValue: data.xyMinMax.minY,
101
+ // axisWidth: data.layout.height,
102
+ // scaleDomain: data.initYAxis.scaleDomain,
103
+ // scaleRange: data.initYAxis.scaleRange,
104
+ // reverse: true
105
+ // })
106
+
107
+ // subscriber.next(yScale)
108
+ // })
109
+ // })
110
+
111
+ const minMaxScaleDomain$ = combineLatest({
112
+ initXAxis: initXAxis$,
113
+ initYAxis: initYAxis$,
114
+ xyMinMax: xyMinMax$
115
+ }).pipe(
116
+ takeUntil(destroy$),
117
+ switchMap(async (d) => d),
118
+ map(data => {
119
+ let minX = data.xyMinMax.minX
120
+ let maxX = data.xyMinMax.maxX
121
+ let minY = data.xyMinMax.minY
122
+ let maxY = data.xyMinMax.maxY
123
+
124
+ // 原始設定為auto時要額外判斷
125
+ if (data.initXAxis.scaleDomain[0] === 'auto' && minX > 0) {
126
+ minX = 0
127
+ }
128
+ if (data.initXAxis.scaleDomain[1] === 'auto' && maxX < 0) {
129
+ maxX = 0
130
+ }
131
+ if (data.initYAxis.scaleDomain[0] === 'auto' && minY > 0) {
132
+ minY = 0
133
+ }
134
+ if (data.initYAxis.scaleDomain[1] === 'auto' && maxY < 0) {
135
+ maxY = 0
136
+ }
137
+
138
+ return {
139
+ minX,
140
+ maxX,
141
+ minY,
142
+ maxY
143
+ }
144
+ }),
145
+ )
146
+
147
+ combineLatest({
148
+ initXScale: initXScale$,
149
+ fullDataFormatter: fullDataFormatter$,
150
+ minMaxScaleDomain: minMaxScaleDomain$,
151
+ }).pipe(
152
+ takeUntil(destroy$),
153
+ switchMap(async (d) => d),
154
+ ).subscribe(data => {
155
+ // const groupMin = 0
156
+
157
+ const shadowScale = data.initXScale.copy()
158
+
159
+ const zoom = d3.zoom()
160
+ // .scaleExtent([1, data.groupMaxIndex])
161
+ // .translateExtent([[0, 0], [data.layout.rootWidth, data.layout.rootWidth]])
162
+ .on("zoom", function zoomed(event) {
163
+ // debugger
164
+ // console.log('event', event)
165
+ const t = event.transform;
166
+
167
+ // if (event.sourceEvent.type === 'mousemove') {
168
+ // // 當進行平移時,反向計算 x 軸
169
+ // const dx = event.transform.x - currentTransform.x; // 本次平移增量
170
+ // const reversedX = currentTransform.x - dx; // 反向累積平移
171
+ // // 更新變換狀態
172
+ // currentTransform = d3.zoomIdentity
173
+ // .translate(reversedX, event.transform.y)
174
+ // .scale(event.transform.k);
175
+ // } else {
176
+ // // 縮放操作:只更新縮放比例
177
+ // currentTransform = d3.zoomIdentity
178
+ // .translate(currentTransform.x, currentTransform.y)
179
+ // .scale(event.transform.k);
180
+ // }
181
+ // console.log('currentTransform', currentTransform)
182
+
183
+ // console.log('t.x', t.x)
184
+ const mapGroupindex = (d: number) => {
185
+ const n = Math.round(d)
186
+ return Math.min(data.minMaxScaleDomain.maxX, Math.max(data.minMaxScaleDomain.minX, n));
187
+ }
188
+
189
+ const zoomedDomain = t.rescaleX(shadowScale)
190
+ .domain()
191
+ .map(mapGroupindex)
192
+
193
+
194
+ // domain超過極限值
195
+ if (zoomedDomain[0] <= data.minMaxScaleDomain.minX && zoomedDomain[1] >= data.minMaxScaleDomain.maxX) {
196
+ // 繼續縮小
197
+ if (t.k < lastTransform.k) {
198
+ // 維持前一次的transform
199
+ t.k = lastTransform.k
200
+ t.x = lastTransform.x
201
+ t.y = lastTransform.y
202
+ }
203
+ // domain間距小於1
204
+ } else if ((zoomedDomain[1] - zoomedDomain[0]) <= 1) {
205
+ // 繼續放大
206
+ if (t.k > lastTransform.k) {
207
+ // 維持前一次的transform
208
+ t.k = lastTransform.k
209
+ t.x = lastTransform.x
210
+ t.y = lastTransform.y
211
+ }
212
+ }
213
+
214
+ // 紀錄transform
215
+ lastTransform.k = t.k
216
+ lastTransform.x = t.x
217
+ lastTransform.y = t.y
218
+
219
+ // console.log(zoomedDomain)
220
+ const newDataFormatter: DataFormatterMultiValue = {
221
+ ...data.fullDataFormatter,
222
+ xAxis: {
223
+ ...data.fullDataFormatter.xAxis,
224
+ scaleDomain: zoomedDomain
225
+ }
226
+ }
227
+ dataFormatter$.next(newDataFormatter)
228
+ })
229
+
230
+ // 傳入外層selection
231
+ // subject.selection.call(zoom as any)
232
+ rootSelection.call(zoom)
233
+
234
+ })
235
+
236
+ return () => {
237
+ destroy$.next(undefined)
238
+ // rootRectSelection.remove()
239
+
240
+ rootSelection.call(d3.zoom().on('zoom', null))
241
+ }
242
+ }