@orbcharts/plugins-basic 3.0.0-alpha.59 → 3.0.0-alpha.60

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 (78) hide show
  1. package/LICENSE +200 -200
  2. package/package.json +42 -43
  3. package/src/base/BaseBarStack.ts +778 -778
  4. package/src/base/BaseBars.ts +764 -764
  5. package/src/base/BaseBarsTriangle.ts +672 -672
  6. package/src/base/BaseDots.ts +513 -513
  7. package/src/base/BaseGroupAxis.ts +558 -558
  8. package/src/base/BaseLegend.ts +641 -641
  9. package/src/base/BaseLineAreas.ts +628 -628
  10. package/src/base/BaseLines.ts +704 -704
  11. package/src/base/BaseValueAxis.ts +478 -478
  12. package/src/base/types.ts +2 -2
  13. package/src/grid/defaults.ts +128 -128
  14. package/src/grid/gridObservables.ts +541 -541
  15. package/src/grid/index.ts +15 -15
  16. package/src/grid/plugins/BarStack.ts +43 -43
  17. package/src/grid/plugins/Bars.ts +44 -44
  18. package/src/grid/plugins/BarsPN.ts +41 -41
  19. package/src/grid/plugins/BarsTriangle.ts +42 -42
  20. package/src/grid/plugins/Dots.ts +37 -37
  21. package/src/grid/plugins/GridLegend.ts +59 -59
  22. package/src/grid/plugins/GroupAux.ts +976 -976
  23. package/src/grid/plugins/GroupAxis.ts +35 -35
  24. package/src/grid/plugins/LineAreas.ts +40 -40
  25. package/src/grid/plugins/Lines.ts +40 -40
  26. package/src/grid/plugins/ScalingArea.ts +173 -173
  27. package/src/grid/plugins/ValueAxis.ts +36 -36
  28. package/src/grid/plugins/ValueStackAxis.ts +38 -38
  29. package/src/grid/types.ts +123 -123
  30. package/src/index.ts +9 -9
  31. package/src/multiGrid/defaults.ts +158 -158
  32. package/src/multiGrid/index.ts +13 -13
  33. package/src/multiGrid/multiGridObservables.ts +49 -49
  34. package/src/multiGrid/plugins/MultiBarStack.ts +78 -78
  35. package/src/multiGrid/plugins/MultiBars.ts +77 -77
  36. package/src/multiGrid/plugins/MultiBarsTriangle.ts +77 -77
  37. package/src/multiGrid/plugins/MultiDots.ts +65 -65
  38. package/src/multiGrid/plugins/MultiGridLegend.ts +89 -89
  39. package/src/multiGrid/plugins/MultiGroupAxis.ts +69 -69
  40. package/src/multiGrid/plugins/MultiLineAreas.ts +77 -77
  41. package/src/multiGrid/plugins/MultiLines.ts +77 -77
  42. package/src/multiGrid/plugins/MultiValueAxis.ts +69 -69
  43. package/src/multiGrid/plugins/MultiValueStackAxis.ts +69 -69
  44. package/src/multiGrid/plugins/OverlappingValueAxes.ts +167 -167
  45. package/src/multiGrid/plugins/OverlappingValueStackAxes.ts +168 -168
  46. package/src/multiGrid/types.ts +72 -72
  47. package/src/noneData/defaults.ts +102 -102
  48. package/src/noneData/index.ts +3 -3
  49. package/src/noneData/plugins/Container.ts +10 -10
  50. package/src/noneData/plugins/Tooltip.ts +310 -310
  51. package/src/noneData/types.ts +26 -26
  52. package/src/series/defaults.ts +144 -144
  53. package/src/series/index.ts +9 -9
  54. package/src/series/plugins/Bubbles.ts +545 -545
  55. package/src/series/plugins/Pie.ts +576 -576
  56. package/src/series/plugins/PieEventTexts.ts +262 -262
  57. package/src/series/plugins/PieLabels.ts +304 -304
  58. package/src/series/plugins/Rose.ts +472 -472
  59. package/src/series/plugins/RoseLabels.ts +362 -362
  60. package/src/series/plugins/SeriesLegend.ts +59 -59
  61. package/src/series/seriesObservables.ts +145 -145
  62. package/src/series/seriesUtils.ts +51 -51
  63. package/src/series/types.ts +83 -83
  64. package/src/tree/defaults.ts +23 -23
  65. package/src/tree/index.ts +3 -3
  66. package/src/tree/plugins/TreeLegend.ts +59 -59
  67. package/src/tree/plugins/TreeMap.ts +305 -305
  68. package/src/tree/types.ts +23 -23
  69. package/src/utils/commonUtils.ts +21 -21
  70. package/src/utils/d3Graphics.ts +124 -124
  71. package/src/utils/d3Utils.ts +73 -73
  72. package/src/utils/observables.ts +14 -14
  73. package/src/utils/orbchartsUtils.ts +100 -100
  74. package/tsconfig.base.json +13 -13
  75. package/tsconfig.json +2 -7
  76. package/{vite.config.mjs → vite.config.js} +22 -40
  77. package/tsconfig.prod.json +0 -3
  78. /package/dist/{vite.config.d.mts → vite.config.d.ts} +0 -0
@@ -1,59 +1,59 @@
1
- import * as d3 from 'd3'
2
- import {
3
- combineLatest,
4
- map,
5
- switchMap,
6
- takeUntil,
7
- Observable,
8
- Subject } from 'rxjs'
9
- import {
10
- defineSeriesPlugin } from '@orbcharts/core'
11
- import { DEFAULT_SERIES_LEGEND_PARAMS } from '../defaults'
12
- import { createBaseLegend } from '../../base/BaseLegend'
13
-
14
- const pluginName = 'SeriesLegend'
15
-
16
- export const SeriesLegend = defineSeriesPlugin(pluginName, DEFAULT_SERIES_LEGEND_PARAMS)(({ selection, rootSelection, observer, subject }) => {
17
-
18
- const destroy$ = new Subject()
19
-
20
- const seriesLabels$: Observable<string[]> = observer.SeriesDataMap$.pipe(
21
- takeUntil(destroy$),
22
- map(data => {
23
- return Array.from(data.keys())
24
- })
25
- )
26
-
27
- // 全部列點矩型使用相同樣式參數
28
- const fullParams$ = observer.fullParams$.pipe(
29
- takeUntil(destroy$),
30
- map(d => {
31
- const seriesList = [
32
- {
33
- listRectWidth: d.listRectWidth,
34
- listRectHeight: d.listRectHeight,
35
- listRectRadius: d.listRectRadius,
36
- }
37
- ]
38
- return {
39
- ...d,
40
- seriesList
41
- }
42
- })
43
- )
44
-
45
- const unsubscribeBaseLegend = createBaseLegend(pluginName, {
46
- rootSelection,
47
- seriesLabels$,
48
- fullParams$,
49
- layout$: observer.layout$,
50
- fullChartParams$: observer.fullChartParams$,
51
- textSizePx$: observer.textSizePx$
52
- })
53
-
54
- return () => {
55
- destroy$.next(undefined)
56
- unsubscribeBaseLegend()
57
- }
58
- })
59
-
1
+ import * as d3 from 'd3'
2
+ import {
3
+ combineLatest,
4
+ map,
5
+ switchMap,
6
+ takeUntil,
7
+ Observable,
8
+ Subject } from 'rxjs'
9
+ import {
10
+ defineSeriesPlugin } from '@orbcharts/core'
11
+ import { DEFAULT_SERIES_LEGEND_PARAMS } from '../defaults'
12
+ import { createBaseLegend } from '../../base/BaseLegend'
13
+
14
+ const pluginName = 'SeriesLegend'
15
+
16
+ export const SeriesLegend = defineSeriesPlugin(pluginName, DEFAULT_SERIES_LEGEND_PARAMS)(({ selection, rootSelection, observer, subject }) => {
17
+
18
+ const destroy$ = new Subject()
19
+
20
+ const seriesLabels$: Observable<string[]> = observer.SeriesDataMap$.pipe(
21
+ takeUntil(destroy$),
22
+ map(data => {
23
+ return Array.from(data.keys())
24
+ })
25
+ )
26
+
27
+ // 全部列點矩型使用相同樣式參數
28
+ const fullParams$ = observer.fullParams$.pipe(
29
+ takeUntil(destroy$),
30
+ map(d => {
31
+ const seriesList = [
32
+ {
33
+ listRectWidth: d.listRectWidth,
34
+ listRectHeight: d.listRectHeight,
35
+ listRectRadius: d.listRectRadius,
36
+ }
37
+ ]
38
+ return {
39
+ ...d,
40
+ seriesList
41
+ }
42
+ })
43
+ )
44
+
45
+ const unsubscribeBaseLegend = createBaseLegend(pluginName, {
46
+ rootSelection,
47
+ seriesLabels$,
48
+ fullParams$,
49
+ layout$: observer.layout$,
50
+ fullChartParams$: observer.fullChartParams$,
51
+ textSizePx$: observer.textSizePx$
52
+ })
53
+
54
+ return () => {
55
+ destroy$.next(undefined)
56
+ unsubscribeBaseLegend()
57
+ }
58
+ })
59
+
@@ -1,145 +1,145 @@
1
- import * as d3 from 'd3'
2
- import {
3
- Observable,
4
- Subject,
5
- of,
6
- takeUntil,
7
- filter,
8
- first,
9
- map,
10
- switchMap,
11
- combineLatest,
12
- merge,
13
- shareReplay,
14
- distinctUntilChanged
15
- } from 'rxjs'
16
- import type {
17
- SeriesContainerPosition } from '@orbcharts/core'
18
- import { getClassName, getUniID } from '../utils/orbchartsUtils'
19
-
20
- function createSeriesSelection ({ selection, pluginName, separateSeries$, seriesLabels$ }: {
21
- selection: d3.Selection<any, unknown, any, unknown>
22
- pluginName: string
23
- separateSeries$: Observable<boolean>
24
- seriesLabels$: Observable<string[]>
25
- }) {
26
- const seriesClassName = getClassName(pluginName, 'series')
27
-
28
- return combineLatest({
29
- seriesLabels: seriesLabels$,
30
- separateSeries: separateSeries$
31
- }).pipe(
32
- switchMap(async d => d),
33
- map((data, i) => {
34
- const selectionData = data.separateSeries ? data.seriesLabels : [data.seriesLabels.join('')]
35
- return selection
36
- .selectAll<SVGGElement, string>(`g.${seriesClassName}`)
37
- .data(selectionData, d => d)
38
- .join(
39
- enter => {
40
- return enter
41
- .append('g')
42
- .classed(seriesClassName, true)
43
- },
44
- update => update,
45
- exit => exit.remove()
46
- )
47
- }),
48
- shareReplay(1)
49
- )
50
- }
51
-
52
- // series選取器,以起始座標位置為基準
53
- export const seriesStartSelectionObservable = ({ selection, pluginName, separateSeries$, seriesLabels$, seriesContainerPosition$ }: {
54
- selection: d3.Selection<any, unknown, any, unknown>
55
- pluginName: string
56
- separateSeries$: Observable<boolean>
57
- seriesLabels$: Observable<string[]>
58
- seriesContainerPosition$: Observable<SeriesContainerPosition[]>
59
- }) => {
60
-
61
- const seriesStartSelection$ = createSeriesSelection({ selection, pluginName, separateSeries$, seriesLabels$ })
62
-
63
- combineLatest({
64
- seriesStartSelection: seriesStartSelection$,
65
- seriesContainerPosition: seriesContainerPosition$
66
- }).pipe(
67
- switchMap(async d => d),
68
- // selection數量相同的時候才執行
69
- distinctUntilChanged((a, b) => a.seriesContainerPosition.length === b.seriesContainerPosition.length)
70
- ).subscribe(data => {
71
- // 無transition動畫
72
- data.seriesStartSelection
73
- .attr('transform', (d, i) => {
74
- const seriesContainerPosition = data.seriesContainerPosition[i] ?? data.seriesContainerPosition[0]
75
- return `translate(${seriesContainerPosition.startX}, ${seriesContainerPosition.startY})`
76
- })
77
- })
78
-
79
- combineLatest({
80
- seriesStartSelection: seriesStartSelection$,
81
- seriesContainerPosition: seriesContainerPosition$
82
- }).pipe(
83
- switchMap(async d => d),
84
- ).subscribe(data => {
85
- // 有transition動畫
86
- data.seriesStartSelection
87
- .transition()
88
- .attr('transform', (d, i) => {
89
- const seriesContainerPosition = data.seriesContainerPosition[i] ?? data.seriesContainerPosition[0]
90
- return `translate(${seriesContainerPosition.startX}, ${seriesContainerPosition.startY})`
91
- })
92
- })
93
-
94
- return {
95
- seriesStartSelection$
96
- }
97
- }
98
-
99
- // series選取器,以中心座標位置為基準
100
- export const seriesCenterSelectionObservable = ({ selection, pluginName, separateSeries$, seriesLabels$, seriesContainerPosition$ }: {
101
- selection: d3.Selection<any, unknown, any, unknown>
102
- pluginName: string
103
- separateSeries$: Observable<boolean>
104
- seriesLabels$: Observable<string[]>
105
- seriesContainerPosition$: Observable<SeriesContainerPosition[]>
106
- }) => {
107
-
108
- const seriesCenterSelection$ = createSeriesSelection({ selection, pluginName, separateSeries$, seriesLabels$ })
109
-
110
- combineLatest({
111
- seriesCenterSelection: seriesCenterSelection$,
112
- seriesContainerPosition: seriesContainerPosition$
113
- }).pipe(
114
- switchMap(async d => d),
115
- // selection數量相同的時候才執行
116
- distinctUntilChanged((a, b) => a.seriesContainerPosition.length === b.seriesContainerPosition.length)
117
- ).subscribe(data => {
118
- // 無transition動畫
119
- data.seriesCenterSelection
120
- .attr('transform', (d, i) => {
121
- const seriesContainerPosition = data.seriesContainerPosition[i] ?? data.seriesContainerPosition[0]
122
- return `translate(${seriesContainerPosition.centerX}, ${seriesContainerPosition.centerY})`
123
- })
124
- })
125
-
126
- combineLatest({
127
- seriesCenterSelection: seriesCenterSelection$,
128
- seriesContainerPosition: seriesContainerPosition$
129
- }).pipe(
130
- switchMap(async d => d),
131
- ).subscribe(data => {
132
- // 有transition動畫
133
- data.seriesCenterSelection
134
- .transition()
135
- .attr('transform', (d, i) => {
136
- const seriesContainerPosition = data.seriesContainerPosition[i] ?? data.seriesContainerPosition[0]
137
- return `translate(${seriesContainerPosition.centerX}, ${seriesContainerPosition.centerY})`
138
- })
139
- })
140
-
141
- return {
142
- seriesCenterSelection$,
143
- }
144
- }
145
-
1
+ import * as d3 from 'd3'
2
+ import {
3
+ Observable,
4
+ Subject,
5
+ of,
6
+ takeUntil,
7
+ filter,
8
+ first,
9
+ map,
10
+ switchMap,
11
+ combineLatest,
12
+ merge,
13
+ shareReplay,
14
+ distinctUntilChanged
15
+ } from 'rxjs'
16
+ import type {
17
+ SeriesContainerPosition } from '@orbcharts/core'
18
+ import { getClassName, getUniID } from '../utils/orbchartsUtils'
19
+
20
+ function createSeriesSelection ({ selection, pluginName, separateSeries$, seriesLabels$ }: {
21
+ selection: d3.Selection<any, unknown, any, unknown>
22
+ pluginName: string
23
+ separateSeries$: Observable<boolean>
24
+ seriesLabels$: Observable<string[]>
25
+ }) {
26
+ const seriesClassName = getClassName(pluginName, 'series')
27
+
28
+ return combineLatest({
29
+ seriesLabels: seriesLabels$,
30
+ separateSeries: separateSeries$
31
+ }).pipe(
32
+ switchMap(async d => d),
33
+ map((data, i) => {
34
+ const selectionData = data.separateSeries ? data.seriesLabels : [data.seriesLabels.join('')]
35
+ return selection
36
+ .selectAll<SVGGElement, string>(`g.${seriesClassName}`)
37
+ .data(selectionData, d => d)
38
+ .join(
39
+ enter => {
40
+ return enter
41
+ .append('g')
42
+ .classed(seriesClassName, true)
43
+ },
44
+ update => update,
45
+ exit => exit.remove()
46
+ )
47
+ }),
48
+ shareReplay(1)
49
+ )
50
+ }
51
+
52
+ // series選取器,以起始座標位置為基準
53
+ export const seriesStartSelectionObservable = ({ selection, pluginName, separateSeries$, seriesLabels$, seriesContainerPosition$ }: {
54
+ selection: d3.Selection<any, unknown, any, unknown>
55
+ pluginName: string
56
+ separateSeries$: Observable<boolean>
57
+ seriesLabels$: Observable<string[]>
58
+ seriesContainerPosition$: Observable<SeriesContainerPosition[]>
59
+ }) => {
60
+
61
+ const seriesStartSelection$ = createSeriesSelection({ selection, pluginName, separateSeries$, seriesLabels$ })
62
+
63
+ combineLatest({
64
+ seriesStartSelection: seriesStartSelection$,
65
+ seriesContainerPosition: seriesContainerPosition$
66
+ }).pipe(
67
+ switchMap(async d => d),
68
+ // selection數量相同的時候才執行
69
+ distinctUntilChanged((a, b) => a.seriesContainerPosition.length === b.seriesContainerPosition.length)
70
+ ).subscribe(data => {
71
+ // 無transition動畫
72
+ data.seriesStartSelection
73
+ .attr('transform', (d, i) => {
74
+ const seriesContainerPosition = data.seriesContainerPosition[i] ?? data.seriesContainerPosition[0]
75
+ return `translate(${seriesContainerPosition.startX}, ${seriesContainerPosition.startY})`
76
+ })
77
+ })
78
+
79
+ combineLatest({
80
+ seriesStartSelection: seriesStartSelection$,
81
+ seriesContainerPosition: seriesContainerPosition$
82
+ }).pipe(
83
+ switchMap(async d => d),
84
+ ).subscribe(data => {
85
+ // 有transition動畫
86
+ data.seriesStartSelection
87
+ .transition()
88
+ .attr('transform', (d, i) => {
89
+ const seriesContainerPosition = data.seriesContainerPosition[i] ?? data.seriesContainerPosition[0]
90
+ return `translate(${seriesContainerPosition.startX}, ${seriesContainerPosition.startY})`
91
+ })
92
+ })
93
+
94
+ return {
95
+ seriesStartSelection$
96
+ }
97
+ }
98
+
99
+ // series選取器,以中心座標位置為基準
100
+ export const seriesCenterSelectionObservable = ({ selection, pluginName, separateSeries$, seriesLabels$, seriesContainerPosition$ }: {
101
+ selection: d3.Selection<any, unknown, any, unknown>
102
+ pluginName: string
103
+ separateSeries$: Observable<boolean>
104
+ seriesLabels$: Observable<string[]>
105
+ seriesContainerPosition$: Observable<SeriesContainerPosition[]>
106
+ }) => {
107
+
108
+ const seriesCenterSelection$ = createSeriesSelection({ selection, pluginName, separateSeries$, seriesLabels$ })
109
+
110
+ combineLatest({
111
+ seriesCenterSelection: seriesCenterSelection$,
112
+ seriesContainerPosition: seriesContainerPosition$
113
+ }).pipe(
114
+ switchMap(async d => d),
115
+ // selection數量相同的時候才執行
116
+ distinctUntilChanged((a, b) => a.seriesContainerPosition.length === b.seriesContainerPosition.length)
117
+ ).subscribe(data => {
118
+ // 無transition動畫
119
+ data.seriesCenterSelection
120
+ .attr('transform', (d, i) => {
121
+ const seriesContainerPosition = data.seriesContainerPosition[i] ?? data.seriesContainerPosition[0]
122
+ return `translate(${seriesContainerPosition.centerX}, ${seriesContainerPosition.centerY})`
123
+ })
124
+ })
125
+
126
+ combineLatest({
127
+ seriesCenterSelection: seriesCenterSelection$,
128
+ seriesContainerPosition: seriesContainerPosition$
129
+ }).pipe(
130
+ switchMap(async d => d),
131
+ ).subscribe(data => {
132
+ // 有transition動畫
133
+ data.seriesCenterSelection
134
+ .transition()
135
+ .attr('transform', (d, i) => {
136
+ const seriesContainerPosition = data.seriesContainerPosition[i] ?? data.seriesContainerPosition[0]
137
+ return `translate(${seriesContainerPosition.centerX}, ${seriesContainerPosition.centerY})`
138
+ })
139
+ })
140
+
141
+ return {
142
+ seriesCenterSelection$,
143
+ }
144
+ }
145
+
@@ -1,52 +1,52 @@
1
- import * as d3 from 'd3'
2
- import type { ComputedDataSeries, ComputedDatumSeries, EventName, EventSeries, HighlightTarget } from '@orbcharts/core'
3
- // import type { D3PieDatum, PieDatum } from '../types'
4
-
5
- // 由d3.pie()建出來的資料格式
6
- export interface D3PieDatum {
7
- data: any
8
- index: number,
9
- value: number,
10
- startAngle: number,
11
- endAngle: number,
12
- padAngle: number,
13
- }
14
-
15
- export interface PieDatum extends D3PieDatum {
16
- data: ComputedDatumSeries
17
- id: string
18
- }
19
-
20
- export function makePieData ({ data, startAngle, endAngle }: {
21
- data: ComputedDatumSeries[]
22
- startAngle: number
23
- endAngle: number
24
- // itemLabels: string[]
25
- // arcLabels: string[]
26
- }): PieDatum[] {
27
- let pie = d3.pie<any, any>()
28
- .startAngle(startAngle)
29
- // .endAngle(startAngle + (endAngle - startAngle) * t)
30
- .endAngle(endAngle)
31
- .value(d => d.value)
32
- // .value((d) => d.visible == false ? 0 : d.value)
33
- // .sort(null) // 不要排序
34
- .sort((a, b) => a.seq - b.seq)
35
- // .sort((a: any, b: any) => {
36
- // return b.value - a.value
37
- // })
38
- // .sort(d3.ascending)
39
- const pieData = pie(data)
40
- return pieData.map((d: D3PieDatum, i: number) => {
41
- // const itemLabel = d.data.itemLabel
42
- let _d: any = d
43
- _d.id = d.data.id
44
- return _d
45
- // return {
46
- // ...d,
47
- // itemIndex: itemLabels.indexOf(itemLabel),
48
- // itemLabel,
49
- // id: d.data.id,
50
- // }
51
- })
1
+ import * as d3 from 'd3'
2
+ import type { ComputedDataSeries, ComputedDatumSeries, EventName, EventSeries, HighlightTarget } from '@orbcharts/core'
3
+ // import type { D3PieDatum, PieDatum } from '../types'
4
+
5
+ // 由d3.pie()建出來的資料格式
6
+ export interface D3PieDatum {
7
+ data: any
8
+ index: number,
9
+ value: number,
10
+ startAngle: number,
11
+ endAngle: number,
12
+ padAngle: number,
13
+ }
14
+
15
+ export interface PieDatum extends D3PieDatum {
16
+ data: ComputedDatumSeries
17
+ id: string
18
+ }
19
+
20
+ export function makePieData ({ data, startAngle, endAngle }: {
21
+ data: ComputedDatumSeries[]
22
+ startAngle: number
23
+ endAngle: number
24
+ // itemLabels: string[]
25
+ // arcLabels: string[]
26
+ }): PieDatum[] {
27
+ let pie = d3.pie<any, any>()
28
+ .startAngle(startAngle)
29
+ // .endAngle(startAngle + (endAngle - startAngle) * t)
30
+ .endAngle(endAngle)
31
+ .value(d => d.value)
32
+ // .value((d) => d.visible == false ? 0 : d.value)
33
+ // .sort(null) // 不要排序
34
+ .sort((a, b) => a.seq - b.seq)
35
+ // .sort((a: any, b: any) => {
36
+ // return b.value - a.value
37
+ // })
38
+ // .sort(d3.ascending)
39
+ const pieData = pie(data)
40
+ return pieData.map((d: D3PieDatum, i: number) => {
41
+ // const itemLabel = d.data.itemLabel
42
+ let _d: any = d
43
+ _d.id = d.data.id
44
+ return _d
45
+ // return {
46
+ // ...d,
47
+ // itemIndex: itemLabels.indexOf(itemLabel),
48
+ // itemLabel,
49
+ // id: d.data.id,
50
+ // }
51
+ })
52
52
  }