@orbcharts/core 3.0.0-alpha.21
Sign up to get free protection for your applications and to get access to all the features.
- package/.gitignore +23 -0
- package/LICENSE +201 -0
- package/dist/orbcharts-core.es.js +5096 -0
- package/dist/orbcharts-core.umd.js +3 -0
- package/dist/src/AbstractChart.d.ts +17 -0
- package/dist/src/GridChart.d.ts +6 -0
- package/dist/src/MultiGridChart.d.ts +6 -0
- package/dist/src/MultiValueChart.d.ts +6 -0
- package/dist/src/RelationshipChart.d.ts +6 -0
- package/dist/src/SeriesChart.d.ts +6 -0
- package/dist/src/TreeChart.d.ts +6 -0
- package/dist/src/base/createBaseChart.d.ts +3 -0
- package/dist/src/base/createBasePlugin.d.ts +3 -0
- package/dist/src/defaults.d.ts +37 -0
- package/dist/src/defineGridPlugin.d.ts +1 -0
- package/dist/src/defineMultiGridPlugin.d.ts +1 -0
- package/dist/src/defineMultiValuePlugin.d.ts +1 -0
- package/dist/src/defineNoneDataPlugin.d.ts +1 -0
- package/dist/src/defineRelationshipPlugin.d.ts +1 -0
- package/dist/src/defineSeriesPlugin.d.ts +1 -0
- package/dist/src/defineTreePlugin.d.ts +1 -0
- package/dist/src/grid/computeGridData.d.ts +3 -0
- package/dist/src/grid/createGridContextObserver.d.ts +3 -0
- package/dist/src/grid/gridObservables.d.ts +25 -0
- package/dist/src/index.d.ts +15 -0
- package/dist/src/multiGrid/computeMultiGridData.d.ts +3 -0
- package/dist/src/multiGrid/createMultiGridContextObserver.d.ts +3 -0
- package/dist/src/multiGrid/multiGridObservables.d.ts +0 -0
- package/dist/src/multiValue/computeMultiValueData.d.ts +3 -0
- package/dist/src/multiValue/createMultiValueContextObserver.d.ts +3 -0
- package/dist/src/multiValue/multiValueObservables.d.ts +0 -0
- package/dist/src/relationship/computeRelationshipData.d.ts +3 -0
- package/dist/src/relationship/createRelationshipContextObserver.d.ts +3 -0
- package/dist/src/relationship/relationshipObservables.d.ts +0 -0
- package/dist/src/series/computeSeriesData.d.ts +3 -0
- package/dist/src/series/createSeriesContextObserver.d.ts +3 -0
- package/dist/src/series/seriesObservables.d.ts +8 -0
- package/dist/src/tree/computeTreeData.d.ts +3 -0
- package/dist/src/tree/createTreeContextObserver.d.ts +3 -0
- package/dist/src/tree/treeObservables.d.ts +0 -0
- package/dist/src/types/Axis.d.ts +1 -0
- package/dist/src/types/Chart.d.ts +41 -0
- package/dist/src/types/ChartParams.d.ts +36 -0
- package/dist/src/types/ComputedData.d.ts +28 -0
- package/dist/src/types/ComputedDataGrid.d.ts +10 -0
- package/dist/src/types/ComputedDataMultiGrid.d.ts +3 -0
- package/dist/src/types/ComputedDataMultiValue.d.ts +6 -0
- package/dist/src/types/ComputedDataRelationship.d.ts +18 -0
- package/dist/src/types/ComputedDataSeries.d.ts +6 -0
- package/dist/src/types/ComputedDataTree.d.ts +7 -0
- package/dist/src/types/ContextObserver.d.ts +28 -0
- package/dist/src/types/ContextObserverGrid.d.ts +18 -0
- package/dist/src/types/ContextObserverMultiGrid.d.ts +4 -0
- package/dist/src/types/ContextObserverMultiValue.d.ts +4 -0
- package/dist/src/types/ContextObserverRelationship.d.ts +4 -0
- package/dist/src/types/ContextObserverSeries.d.ts +8 -0
- package/dist/src/types/ContextObserverTree.d.ts +4 -0
- package/dist/src/types/ContextSubject.d.ts +15 -0
- package/dist/src/types/Data.d.ts +19 -0
- package/dist/src/types/DataFormatter.d.ts +40 -0
- package/dist/src/types/DataFormatterGrid.d.ts +20 -0
- package/dist/src/types/DataFormatterMultiGrid.d.ts +16 -0
- package/dist/src/types/DataFormatterMultiValue.d.ts +13 -0
- package/dist/src/types/DataFormatterRelationship.d.ts +5 -0
- package/dist/src/types/DataFormatterSeries.d.ts +10 -0
- package/dist/src/types/DataFormatterTree.d.ts +5 -0
- package/dist/src/types/DataGrid.d.ts +6 -0
- package/dist/src/types/DataMultiGrid.d.ts +6 -0
- package/dist/src/types/DataMultiValue.d.ts +6 -0
- package/dist/src/types/DataRelationship.d.ts +20 -0
- package/dist/src/types/DataSeries.d.ts +6 -0
- package/dist/src/types/DataTree.d.ts +13 -0
- package/dist/src/types/Event.d.ts +64 -0
- package/dist/src/types/Layout.d.ts +8 -0
- package/dist/src/types/Padding.d.ts +6 -0
- package/dist/src/types/Plugin.d.ts +37 -0
- package/dist/src/types/TransformData.d.ts +8 -0
- package/dist/src/types/index.d.ts +37 -0
- package/dist/src/utils/commonUtils.d.ts +8 -0
- package/dist/src/utils/d3Utils.d.ts +25 -0
- package/dist/src/utils/index.d.ts +4 -0
- package/dist/src/utils/observables.d.ts +14 -0
- package/dist/src/utils/orbchartsUtils.d.ts +20 -0
- package/dist/vite.config.d.ts +2 -0
- package/package.json +40 -0
- package/src/AbstractChart.ts +48 -0
- package/src/GridChart.ts +21 -0
- package/src/MultiGridChart.ts +21 -0
- package/src/MultiValueChart.ts +21 -0
- package/src/RelationshipChart.ts +21 -0
- package/src/SeriesChart.ts +21 -0
- package/src/TreeChart.ts +21 -0
- package/src/base/createBaseChart.ts +329 -0
- package/src/base/createBasePlugin.ts +89 -0
- package/src/defaults.ts +229 -0
- package/src/defineGridPlugin.ts +3 -0
- package/src/defineMultiGridPlugin.ts +3 -0
- package/src/defineMultiValuePlugin.ts +3 -0
- package/src/defineNoneDataPlugin.ts +4 -0
- package/src/defineRelationshipPlugin.ts +3 -0
- package/src/defineSeriesPlugin.ts +3 -0
- package/src/defineTreePlugin.ts +3 -0
- package/src/grid/computeGridData.ts +192 -0
- package/src/grid/createGridContextObserver.ts +91 -0
- package/src/grid/gridObservables.ts +359 -0
- package/src/index.ts +21 -0
- package/src/multiGrid/computeMultiGridData.ts +48 -0
- package/src/multiGrid/createMultiGridContextObserver.ts +12 -0
- package/src/multiGrid/multiGridObservables.ts +0 -0
- package/src/multiValue/computeMultiValueData.ts +127 -0
- package/src/multiValue/createMultiValueContextObserver.ts +12 -0
- package/src/multiValue/multiValueObservables.ts +0 -0
- package/src/relationship/computeRelationshipData.ts +101 -0
- package/src/relationship/createRelationshipContextObserver.ts +12 -0
- package/src/relationship/relationshipObservables.ts +0 -0
- package/src/series/computeSeriesData.ts +154 -0
- package/src/series/createSeriesContextObserver.ts +33 -0
- package/src/series/seriesObservables.ts +23 -0
- package/src/tree/computeTreeData.ts +104 -0
- package/src/tree/createTreeContextObserver.ts +12 -0
- package/src/tree/treeObservables.ts +0 -0
- package/src/types/Axis.ts +1 -0
- package/src/types/Chart.ts +46 -0
- package/src/types/ChartParams.ts +50 -0
- package/src/types/ComputedData.ts +66 -0
- package/src/types/ComputedDataGrid.ts +12 -0
- package/src/types/ComputedDataMultiGrid.ts +3 -0
- package/src/types/ComputedDataMultiValue.ts +10 -0
- package/src/types/ComputedDataRelationship.ts +20 -0
- package/src/types/ComputedDataSeries.ts +8 -0
- package/src/types/ComputedDataTree.ts +20 -0
- package/src/types/ContextObserver.ts +38 -0
- package/src/types/ContextObserverGrid.ts +16 -0
- package/src/types/ContextObserverMultiGrid.ts +5 -0
- package/src/types/ContextObserverMultiValue.ts +5 -0
- package/src/types/ContextObserverRelationship.ts +5 -0
- package/src/types/ContextObserverSeries.ts +8 -0
- package/src/types/ContextObserverTree.ts +5 -0
- package/src/types/ContextSubject.ts +18 -0
- package/src/types/Data.ts +45 -0
- package/src/types/DataFormatter.ts +99 -0
- package/src/types/DataFormatterGrid.ts +40 -0
- package/src/types/DataFormatterMultiGrid.ts +23 -0
- package/src/types/DataFormatterMultiValue.ts +19 -0
- package/src/types/DataFormatterRelationship.ts +23 -0
- package/src/types/DataFormatterSeries.ts +26 -0
- package/src/types/DataFormatterTree.ts +10 -0
- package/src/types/DataGrid.ts +11 -0
- package/src/types/DataMultiGrid.ts +7 -0
- package/src/types/DataMultiValue.ts +11 -0
- package/src/types/DataRelationship.ts +27 -0
- package/src/types/DataSeries.ts +11 -0
- package/src/types/DataTree.ts +18 -0
- package/src/types/Event.ts +114 -0
- package/src/types/Layout.ts +12 -0
- package/src/types/Padding.ts +6 -0
- package/src/types/Plugin.ts +60 -0
- package/src/types/TransformData.ts +8 -0
- package/src/types/index.ts +37 -0
- package/src/utils/commonUtils.ts +50 -0
- package/src/utils/d3Utils.ts +87 -0
- package/src/utils/index.ts +4 -0
- package/src/utils/observables.ts +198 -0
- package/src/utils/orbchartsUtils.ts +150 -0
- package/tsconfig.json +14 -0
- package/vite.config.js +45 -0
@@ -0,0 +1,8 @@
|
|
1
|
+
import { Observable } from 'rxjs'
|
2
|
+
import type { ContextObserverBase } from './ContextObserver'
|
3
|
+
import type { ComputedDatumSeries } from './ComputedDataSeries'
|
4
|
+
|
5
|
+
export interface ContextObserverSeries<PluginParams> extends ContextObserverBase<'series', PluginParams> {
|
6
|
+
seriesHighlight$: Observable<string[]>
|
7
|
+
SeriesDataMap$: Observable<Map<string, ComputedDatumSeries[]>>
|
8
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import { Observable, Subject, BehaviorSubject } from 'rxjs'
|
2
|
+
import type { ChartType } from './Chart'
|
3
|
+
import type { EventTypeMap } from './Event'
|
4
|
+
import type { ChartParamsPartial } from './ChartParams'
|
5
|
+
// import type { Data } from './Data'
|
6
|
+
import type { DataFormatterPartialTypeMap } from './DataFormatter'
|
7
|
+
import type { DataTypeMap } from './Data'
|
8
|
+
import type { DataFormatterTypeMap } from './DataFormatter'
|
9
|
+
import type { PluginEntity } from './Plugin'
|
10
|
+
|
11
|
+
export interface ContextSubject<T extends ChartType> {
|
12
|
+
data$: Subject<DataTypeMap<T>>
|
13
|
+
dataFormatter$: Subject<DataFormatterPartialTypeMap<T>>
|
14
|
+
plugins$: Subject<PluginEntity<T, any, any>[]>
|
15
|
+
// pluginParams$: Subject<{[keys: string]: unknown}>
|
16
|
+
chartParams$: Subject<ChartParamsPartial>
|
17
|
+
event$: Subject<EventTypeMap<T>>
|
18
|
+
}
|
@@ -0,0 +1,45 @@
|
|
1
|
+
import { ChartType } from './Chart'
|
2
|
+
import { DataSeries, DataSeriesDatum, DataSeriesValue } from './DataSeries'
|
3
|
+
import { DataGrid, DataGridDatum, DataGridValue } from './DataGrid'
|
4
|
+
import { DataMultiGrid, DataMultiGridDatum, DataMultiGridValue } from './DataMultiGrid'
|
5
|
+
import { DataMultiValue, DataMultiValueDatum, DataMultiValueValue } from './DataMultiValue'
|
6
|
+
import { DataTree, DataTreeDatum, DataTreeObj } from './DataTree'
|
7
|
+
import { DataRelationship, Node, Edge } from './DataRelationship'
|
8
|
+
|
9
|
+
// 基本欄位(皆為可選,無填寫則在 formatXX 程式中產生預設值)
|
10
|
+
export interface DatumBase {
|
11
|
+
id?: string
|
12
|
+
label?: string
|
13
|
+
tooltipContent?: string
|
14
|
+
data?: any // 使用者注入的資料
|
15
|
+
}
|
16
|
+
|
17
|
+
// 需具備value的datum
|
18
|
+
export interface DatumValue {
|
19
|
+
value: number | null
|
20
|
+
}
|
21
|
+
|
22
|
+
// 透過類型選擇Data
|
23
|
+
export type DataTypeMap<T extends ChartType> = T extends 'series' ? DataSeries
|
24
|
+
: T extends 'grid' ? DataGrid
|
25
|
+
: T extends 'multiGrid' ? DataMultiGrid
|
26
|
+
: T extends 'multiValue' ? DataMultiValue
|
27
|
+
: T extends 'relationship' ? DataRelationship
|
28
|
+
: T extends 'tree' ? DataTree
|
29
|
+
: unknown
|
30
|
+
|
31
|
+
// 透過類型選擇Datum
|
32
|
+
export type DatumTypeMap<T extends ChartType> = T extends 'series' ? DataSeriesDatum | DataSeriesValue
|
33
|
+
: T extends 'grid' ? DataGridDatum | DataGridValue
|
34
|
+
: T extends 'multiGrid' ? DataMultiGridDatum | DataMultiGridValue
|
35
|
+
: T extends 'multiValue' ? DataMultiValueDatum | DataMultiValueValue
|
36
|
+
: T extends 'relationship' ? Node | Edge
|
37
|
+
: T extends 'tree' ? DataTreeDatum | DataTreeObj
|
38
|
+
: unknown
|
39
|
+
|
40
|
+
// export type Data = DataSeries
|
41
|
+
// | DataGrid
|
42
|
+
// | DataMultiGrid
|
43
|
+
// | DataMultiValue
|
44
|
+
// | DataTree
|
45
|
+
// | DataRelationship
|
@@ -0,0 +1,99 @@
|
|
1
|
+
import type { ChartType } from './Chart'
|
2
|
+
import type { ChartParams } from './ChartParams'
|
3
|
+
import type { DataTypeMap, DatumTypeMap } from './Data'
|
4
|
+
import type { DataFormatterSeries, DataFormatterSeriesPartial } from './DataFormatterSeries'
|
5
|
+
import type { DataFormatterGrid, DataFormatterGridPartial } from './DataFormatterGrid'
|
6
|
+
import type { DataFormatterMultiGrid, DataFormatterMultiGridPartial } from './DataFormatterMultiGrid'
|
7
|
+
import type { DataFormatterMultiValue, DataFormatterMultiValuePartial } from './DataFormatterMultiValue'
|
8
|
+
import type { DataFormatterTree, DataFormatterTreePartial } from './DataFormatterTree'
|
9
|
+
import type { DataFormatterRelationship, DataFormatterRelationshipPartial } from './DataFormatterRelationship'
|
10
|
+
import type { AxisPosition } from './Axis'
|
11
|
+
import type { Layout } from './Layout'
|
12
|
+
|
13
|
+
// export type DataFormatter = DataFormatterSeries
|
14
|
+
// | DataFormatterGrid
|
15
|
+
// | DataFormatterMultiGrid
|
16
|
+
// | DataFormatterMultiValue
|
17
|
+
// | DataFormatterTree
|
18
|
+
// | DataFormatterRelationship
|
19
|
+
|
20
|
+
// export type DataFormatterPartial = DataFormatterSeriesPartial
|
21
|
+
// | DataFormatterGridPartial
|
22
|
+
// | DataFormatterMultiGridPartial
|
23
|
+
// | DataFormatterMultiValuePartial
|
24
|
+
// | DataFormatterTreePartial
|
25
|
+
// | DataFormatterRelationshipPartial
|
26
|
+
|
27
|
+
// dataFormatter計算當中會使用的資料
|
28
|
+
export interface DataFormatterContext<T extends ChartType> {
|
29
|
+
data: DataTypeMap<T>
|
30
|
+
dataFormatter: DataFormatterTypeMap<T>
|
31
|
+
chartParams: ChartParams
|
32
|
+
layout: Layout
|
33
|
+
}
|
34
|
+
|
35
|
+
|
36
|
+
// 透過類型選擇DataFormatter
|
37
|
+
export type DataFormatterTypeMap<T extends ChartType> = T extends 'series' ? DataFormatterSeries
|
38
|
+
: T extends 'grid' ? DataFormatterGrid
|
39
|
+
: T extends 'multiGrid' ? DataFormatterMultiGrid
|
40
|
+
: T extends 'multiValue' ? DataFormatterMultiValue
|
41
|
+
: T extends 'relationship' ? DataFormatterRelationship
|
42
|
+
: T extends 'tree' ? DataFormatterTree
|
43
|
+
: DataFormatterBase<T>
|
44
|
+
|
45
|
+
// 透過類型選擇DataFormatter(可選欄位)
|
46
|
+
export type DataFormatterPartialTypeMap<T extends ChartType> = T extends 'series' ? DataFormatterSeriesPartial
|
47
|
+
: T extends 'grid' ? DataFormatterGridPartial
|
48
|
+
: T extends 'multiGrid' ? DataFormatterMultiGridPartial
|
49
|
+
: T extends 'multiValue' ? DataFormatterMultiValuePartial
|
50
|
+
: T extends 'relationship' ? DataFormatterRelationshipPartial
|
51
|
+
: T extends 'tree' ? DataFormatterTreePartial
|
52
|
+
: DataFormatterBasePartial<T>
|
53
|
+
|
54
|
+
// 基本介面
|
55
|
+
export interface DataFormatterBase<T extends ChartType> {
|
56
|
+
// colors: Colors
|
57
|
+
// padding: Padding
|
58
|
+
type: T
|
59
|
+
visibleFilter: VisibleFilter<T>
|
60
|
+
tooltipContentFormat: TooltipContentFormat<T>
|
61
|
+
}
|
62
|
+
|
63
|
+
export type DataFormatterBasePartial<T extends ChartType> = Partial<DataFormatterBase<T>>
|
64
|
+
|
65
|
+
// 有value
|
66
|
+
// export interface DataFormatterValue {
|
67
|
+
// valueFormat: ValueFormat
|
68
|
+
// }
|
69
|
+
|
70
|
+
// 有axis
|
71
|
+
// export interface DataFormatterAxis {
|
72
|
+
// // domainMinValue?: number
|
73
|
+
// // domainMaxValue?: number
|
74
|
+
// // domainMinRange?: number
|
75
|
+
// // domainMaxRange?: number
|
76
|
+
// valueDomain: [number | 'auto', number | 'auto']
|
77
|
+
// valueRange: [number, number] // 0-1
|
78
|
+
// }
|
79
|
+
|
80
|
+
export interface DataFormatterValueAxis {
|
81
|
+
position: AxisPosition
|
82
|
+
scaleDomain: [number | 'auto', number | 'auto']
|
83
|
+
scaleRange: [number, number]
|
84
|
+
label: string
|
85
|
+
}
|
86
|
+
|
87
|
+
export interface DataFormatterGroupAxis {
|
88
|
+
position: AxisPosition
|
89
|
+
scaleDomain: [number | 'auto', number | 'auto']
|
90
|
+
scalePadding: number
|
91
|
+
label: string
|
92
|
+
}
|
93
|
+
|
94
|
+
|
95
|
+
// export type ValueFormat = string | ((text: d3.NumberValue) => string)
|
96
|
+
|
97
|
+
export type VisibleFilter<T extends ChartType> = (datum: DatumTypeMap<T>, rowIndex: number, columnIndex: number, context: DataFormatterContext<T>) => boolean | null
|
98
|
+
|
99
|
+
export type TooltipContentFormat<T extends ChartType> = (datum: DatumTypeMap<T>, rowIndex: number, columnIndex: number, context: DataFormatterContext<T>) => string | null
|
@@ -0,0 +1,40 @@
|
|
1
|
+
import type { DataGridDatum, DataGridValue } from './DataGrid'
|
2
|
+
import type { DataFormatterBase, DataFormatterBasePartial, DataFormatterValueAxis, DataFormatterGroupAxis, DataFormatterContext } from './DataFormatter'
|
3
|
+
// import type { AxisPosition } from './Axis'
|
4
|
+
|
5
|
+
export type SeriesType = 'row' | 'column' // default: 'row'
|
6
|
+
|
7
|
+
export interface DataFormatterGrid
|
8
|
+
extends DataFormatterBase<'grid'> {
|
9
|
+
grid: DataFormatterGridGrid
|
10
|
+
valueAxis: DataFormatterValueAxis
|
11
|
+
groupAxis: DataFormatterGroupAxis
|
12
|
+
// visibleGroupRange: [number, number] | null
|
13
|
+
colorsPredicate: (datum: DataGridDatum | DataGridValue, rowIndex: number, columnIndex: number, context: DataFormatterContext<'grid'>) => string
|
14
|
+
}
|
15
|
+
|
16
|
+
export type DataFormatterGridPartial = Partial<DataFormatterGrid> | Partial<{
|
17
|
+
grid: Partial<DataFormatterGridGrid>
|
18
|
+
valueAxis: Partial<DataFormatterValueAxis>
|
19
|
+
groupAxis: Partial<DataFormatterGroupAxis>
|
20
|
+
}>
|
21
|
+
|
22
|
+
// grid欄位
|
23
|
+
export interface DataFormatterGridGrid {
|
24
|
+
// labelFormat: (datum: DataGridDatum) => string
|
25
|
+
// rowUnitLabel: string
|
26
|
+
rowLabels: string[]
|
27
|
+
// rowLabelFormat: string | ((text: any) => string)
|
28
|
+
// columnUnitLabel: string
|
29
|
+
columnLabels: string[]
|
30
|
+
// columnLabelFormat: string | ((text: any) => string)
|
31
|
+
seriesType: SeriesType
|
32
|
+
}
|
33
|
+
|
34
|
+
// const test: DataFormatterGridPartial = {
|
35
|
+
// type: 'grid',
|
36
|
+
// grid: {
|
37
|
+
// rowLabels: [],
|
38
|
+
// // a: ''
|
39
|
+
// }
|
40
|
+
// }
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import { DataGridDatum, DataGridValue } from './DataGrid'
|
2
|
+
import { DataFormatterGridGrid } from './DataFormatterGrid'
|
3
|
+
import { DataFormatterBase, DataFormatterValueAxis, DataFormatterGroupAxis, DataFormatterContext } from './DataFormatter'
|
4
|
+
import { AxisPosition } from './Axis'
|
5
|
+
|
6
|
+
export interface DataFormatterMultiGrid
|
7
|
+
extends DataFormatterBase<'multiGrid'> {
|
8
|
+
multiGrid: Array<DataFormatterMultiGridMultiGrid>
|
9
|
+
// visibleGroupRange: [number, number] | null
|
10
|
+
}
|
11
|
+
|
12
|
+
export type DataFormatterMultiGridPartial = Partial<DataFormatterMultiGrid> | Partial<{
|
13
|
+
multiGrid: Array<Partial<DataFormatterMultiGridMultiGrid>>
|
14
|
+
}>
|
15
|
+
|
16
|
+
// multiGrid欄位
|
17
|
+
export interface DataFormatterMultiGridMultiGrid {
|
18
|
+
grid: DataFormatterGridGrid
|
19
|
+
valueAxis: DataFormatterValueAxis // default: 'left'
|
20
|
+
groupAxis: DataFormatterGroupAxis // default: 'bottom'
|
21
|
+
colorsPredicate: (datum: DataGridDatum | DataGridValue, rowIndex: number, columnIndex: number, context: DataFormatterContext<'grid'>) => string
|
22
|
+
// colors: Colors
|
23
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import { DataMultiValueDatum, DataMultiValue } from './DataMultiValue'
|
2
|
+
import { DataFormatterBase, DataFormatterValueAxis } from './DataFormatter'
|
3
|
+
|
4
|
+
export interface DataFormatterMultiValue
|
5
|
+
extends DataFormatterBase<'multiValue'> {
|
6
|
+
// labelFormat: (datum: unknown) => string
|
7
|
+
multiValue: Array<DataFormatterMultiValueMultiValue>
|
8
|
+
xAxis: DataFormatterValueAxis
|
9
|
+
yAxis: DataFormatterValueAxis
|
10
|
+
}
|
11
|
+
|
12
|
+
export type DataFormatterMultiValuePartial = Partial<DataFormatterMultiValue> | Partial<{
|
13
|
+
multiValue: Array<Partial<DataFormatterMultiValueMultiValue>>
|
14
|
+
}>
|
15
|
+
|
16
|
+
// multiValue欄位
|
17
|
+
export interface DataFormatterMultiValueMultiValue {
|
18
|
+
unitLabel: string
|
19
|
+
}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import { Node, Edge, DataRelationship } from './DataRelationship'
|
2
|
+
import { DataFormatterBase } from './DataFormatter'
|
3
|
+
|
4
|
+
export interface DataFormatterRelationship
|
5
|
+
extends DataFormatterBase<'relationship'> {
|
6
|
+
// node: DataFormatterRelationshipNode
|
7
|
+
// edge: DataFormatterRelationshipEdge
|
8
|
+
}
|
9
|
+
|
10
|
+
export type DataFormatterRelationshipPartial = Partial<DataFormatterRelationship> | Partial<{
|
11
|
+
// node: Partial<DataFormatterRelationshipNode>
|
12
|
+
// edge: Partial<DataFormatterRelationshipEdge>
|
13
|
+
}>
|
14
|
+
|
15
|
+
// export interface DataFormatterRelationshipNode {
|
16
|
+
// labelFormat: (node: unknown) => string
|
17
|
+
// descriptionFormat: (node: unknown) => string
|
18
|
+
// }
|
19
|
+
|
20
|
+
// export interface DataFormatterRelationshipEdge {
|
21
|
+
// labelFormat: (edge: unknown, startNode: unknown, endNode: unknown) => string
|
22
|
+
// descriptionFormat: (edge: unknown, startNode: unknown, endNode: unknown) => string
|
23
|
+
// }
|
@@ -0,0 +1,26 @@
|
|
1
|
+
import { DataSeriesDatum, DataSeriesValue, DataSeries } from './DataSeries'
|
2
|
+
import { DataFormatterBase, DataFormatterContext } from './DataFormatter'
|
3
|
+
// import { ComputedDatumSeries } from './ComputedDataSeries'
|
4
|
+
|
5
|
+
export interface DataFormatterSeries
|
6
|
+
extends DataFormatterBase<'series'> {
|
7
|
+
// series: DataFormatterSeriesSeries
|
8
|
+
unitLabel: string
|
9
|
+
seriesLabels: string[]
|
10
|
+
// labelFormat: (datum: DataSeriesDatum) => string
|
11
|
+
// mapSeries: (datum: DataSeriesDatum | DataSeriesValue, rowIndex: number, columnIndex: number, context: DataFormatterContext<'series'>) => string
|
12
|
+
colorsPredicate: (datum: DataSeriesDatum | DataSeriesValue, rowIndex: number, columnIndex: number, context: DataFormatterContext<'series'>) => string
|
13
|
+
sort: ((a: DataSeriesDatum | DataSeriesValue, b: DataSeriesDatum | number) => number) | null
|
14
|
+
// colors: Colors
|
15
|
+
}
|
16
|
+
|
17
|
+
export type DataFormatterSeriesPartial = Partial<DataFormatterSeries> | Partial<{
|
18
|
+
// series: Partial<DataFormatterSeriesSeries>
|
19
|
+
}>
|
20
|
+
|
21
|
+
// export interface DataFormatterSeriesSeries {
|
22
|
+
// unitLabel: string
|
23
|
+
// seriesLabels: string[]
|
24
|
+
// // labelFormat: (datum: DataSeriesDatum) => string
|
25
|
+
// sort: ((computedDatum: ComputedDatumSeries) => number) | null
|
26
|
+
// }
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { DataTreeDatum, DataTree } from './DataTree'
|
2
|
+
import { DataFormatterBase } from './DataFormatter'
|
3
|
+
|
4
|
+
export interface DataFormatterTree
|
5
|
+
extends DataFormatterBase<'tree'> {
|
6
|
+
// labelFormat: (datum: unknown) => string
|
7
|
+
// descriptionFormat: (datum: unknown) => string
|
8
|
+
}
|
9
|
+
|
10
|
+
export type DataFormatterTreePartial = Partial<DataFormatterTree>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import type { DatumBase, DatumValue } from './Data'
|
2
|
+
|
3
|
+
// export type DataGrid = DataGridDatum[][] | DataGridValue[][]
|
4
|
+
export type DataGrid = (DataGridDatum | DataGridValue)[][]
|
5
|
+
|
6
|
+
export type DataGridValue = number | null
|
7
|
+
|
8
|
+
export interface DataGridDatum extends DatumBase, DatumValue {
|
9
|
+
}
|
10
|
+
|
11
|
+
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import type { DatumBase, DatumValue } from './Data'
|
2
|
+
|
3
|
+
// export type DataMultiValue = DataMultiValueDatum[][] | DataMultiValueValue[][]
|
4
|
+
export type DataMultiValue = (DataMultiValueDatum | DataMultiValueValue)[][]
|
5
|
+
|
6
|
+
export type DataMultiValueValue = number
|
7
|
+
|
8
|
+
export interface DataMultiValueDatum extends DatumBase, DatumValue {
|
9
|
+
}
|
10
|
+
|
11
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
import type { DatumBase } from './Data'
|
2
|
+
|
3
|
+
export type DataRelationship = DataRelationshipObj | DataRelationshipList
|
4
|
+
|
5
|
+
// 物件資料
|
6
|
+
export interface DataRelationshipObj {
|
7
|
+
nodes: Node[]
|
8
|
+
edges: Edge[]
|
9
|
+
}
|
10
|
+
|
11
|
+
// 陣列資料
|
12
|
+
export type DataRelationshipList = [
|
13
|
+
Node[],
|
14
|
+
Edge[]
|
15
|
+
]
|
16
|
+
|
17
|
+
|
18
|
+
export interface Node extends DatumBase {
|
19
|
+
id: string
|
20
|
+
value?: number
|
21
|
+
}
|
22
|
+
|
23
|
+
export interface Edge extends DatumBase {
|
24
|
+
start: string
|
25
|
+
end: string
|
26
|
+
value?: number
|
27
|
+
}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import type { DatumBase, DatumValue } from './Data'
|
2
|
+
|
3
|
+
// export type DataSeries = DataSeriesDatum[][] | DataSeriesDatum[] | DataSeriesValue[][] | DataSeriesValue[]
|
4
|
+
export type DataSeries = (DataSeriesDatum | DataSeriesValue)[][] | (DataSeriesDatum | DataSeriesValue)[]
|
5
|
+
|
6
|
+
export type DataSeriesValue = number | null
|
7
|
+
|
8
|
+
export interface DataSeriesDatum extends DatumBase, DatumValue {
|
9
|
+
}
|
10
|
+
|
11
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import type { DatumBase } from './Data'
|
2
|
+
|
3
|
+
export type DataTree = DataTreeObj | DataTreeDatum[]
|
4
|
+
|
5
|
+
// 樹狀結構
|
6
|
+
export interface DataTreeObj extends DatumBase {
|
7
|
+
id: string
|
8
|
+
value?: number
|
9
|
+
children?: DataTreeObj[]
|
10
|
+
}
|
11
|
+
|
12
|
+
// 陣列資料
|
13
|
+
export interface DataTreeDatum extends DatumBase {
|
14
|
+
id: string
|
15
|
+
value?: number
|
16
|
+
parent?: string
|
17
|
+
}
|
18
|
+
|
@@ -0,0 +1,114 @@
|
|
1
|
+
import * as d3 from 'd3'
|
2
|
+
import type { ChartType } from './Chart'
|
3
|
+
import type { ComputedDatumBase } from './ComputedData'
|
4
|
+
import type { ComputedDataSeries, ComputedDatumSeries } from './ComputedDataSeries'
|
5
|
+
import type { ComputedDataGrid, ComputedDatumGrid } from './ComputedDataGrid'
|
6
|
+
import type { ComputedDataMultiGrid } from './ComputedDataMultiGrid'
|
7
|
+
import type { ComputedDataMultiValue, ComputedDatumMultiValue } from './ComputedDataMultiValue'
|
8
|
+
import type { ComputedNode } from './ComputedDataRelationship'
|
9
|
+
import type { ComputedDataTree } from './ComputedDataTree'
|
10
|
+
import type { HighlightTarget } from './ChartParams'
|
11
|
+
|
12
|
+
export type EventName = 'click'
|
13
|
+
| 'mouseover'
|
14
|
+
| 'mousemove'
|
15
|
+
| 'mouseout'
|
16
|
+
| 'dragstart'
|
17
|
+
| 'drag'
|
18
|
+
| 'dragend'
|
19
|
+
| 'resize'
|
20
|
+
| 'transitionMove'
|
21
|
+
| 'transitionEnd'
|
22
|
+
// | 'enterDuration'
|
23
|
+
|
24
|
+
// export interface Event<EventData = unknown> {
|
25
|
+
// eventName: EventName
|
26
|
+
// data: EventData
|
27
|
+
// }
|
28
|
+
|
29
|
+
// export interface ShareEvent<EventData = unknown> extends Event<EventData> {
|
30
|
+
// pluginName: string
|
31
|
+
// }
|
32
|
+
|
33
|
+
// export interface EventData {
|
34
|
+
|
35
|
+
// }
|
36
|
+
|
37
|
+
// 透過類型選擇Event
|
38
|
+
export type EventTypeMap<T extends ChartType> = T extends 'series' ? EventSeries
|
39
|
+
: T extends 'grid' ? EventGrid
|
40
|
+
: T extends 'multiGrid' ? EventMultiGrid
|
41
|
+
: T extends 'multiValue' ? EventMultiValue
|
42
|
+
: T extends 'relationship' ? EventRelationship
|
43
|
+
: T extends 'tree' ? EventTree
|
44
|
+
: EventBase
|
45
|
+
|
46
|
+
export interface EventBase {
|
47
|
+
eventName: EventName
|
48
|
+
pluginName: string
|
49
|
+
// data: EventData
|
50
|
+
type: ChartType
|
51
|
+
event: MouseEvent | undefined
|
52
|
+
highlightTarget: HighlightTarget
|
53
|
+
datum: ComputedDatumBase | null
|
54
|
+
tween?: number
|
55
|
+
}
|
56
|
+
|
57
|
+
export interface EventSeries extends EventBase {
|
58
|
+
type: 'series'
|
59
|
+
data: ComputedDataSeries
|
60
|
+
series: ComputedDatumSeries[]
|
61
|
+
seriesIndex: number
|
62
|
+
seriesLabel: string
|
63
|
+
datum: ComputedDatumSeries | null
|
64
|
+
// highlightTarget: 'series' | 'datum' | 'none'
|
65
|
+
// highlightLabel: string | null
|
66
|
+
// highlightId: string | null
|
67
|
+
}
|
68
|
+
|
69
|
+
export interface EventGrid extends EventBase {
|
70
|
+
type: 'grid'
|
71
|
+
data: ComputedDataGrid
|
72
|
+
series: ComputedDatumGrid[]
|
73
|
+
seriesIndex: number
|
74
|
+
seriesLabel: string
|
75
|
+
groups: ComputedDatumGrid[]
|
76
|
+
groupIndex: number
|
77
|
+
groupLabel: string
|
78
|
+
datum: ComputedDatumGrid | null
|
79
|
+
// highlightTarget: 'series' | 'group' | 'datum' | 'none'
|
80
|
+
// highlightLabel: string | null
|
81
|
+
// highlightId: string | null
|
82
|
+
}
|
83
|
+
|
84
|
+
export interface EventMultiGrid extends EventBase {
|
85
|
+
type: 'multiGrid'
|
86
|
+
data: ComputedDataMultiGrid
|
87
|
+
gridIndex: number
|
88
|
+
series: ComputedDatumGrid[]
|
89
|
+
seriesIndex: number
|
90
|
+
seriesLabel: string
|
91
|
+
group: ComputedDatumGrid[]
|
92
|
+
groupIndex: number
|
93
|
+
groupLabel: string
|
94
|
+
datum: ComputedDatumGrid | null
|
95
|
+
// highlightTarget: 'series' | 'group' | 'datum' | 'none'
|
96
|
+
// highlightLabel: string | null
|
97
|
+
// highlightId: string | null
|
98
|
+
}
|
99
|
+
|
100
|
+
export interface EventMultiValue extends EventBase {
|
101
|
+
type: 'multiValue'
|
102
|
+
datum: ComputedDatumMultiValue | null
|
103
|
+
}
|
104
|
+
|
105
|
+
export interface EventRelationship extends EventBase {
|
106
|
+
type: 'relationship'
|
107
|
+
datum: ComputedNode | null
|
108
|
+
}
|
109
|
+
|
110
|
+
export interface EventTree extends EventBase {
|
111
|
+
type: 'tree'
|
112
|
+
datum: ComputedDataTree | null
|
113
|
+
}
|
114
|
+
|
@@ -0,0 +1,60 @@
|
|
1
|
+
import * as d3 from 'd3'
|
2
|
+
import { Subject } from 'rxjs'
|
3
|
+
import type { ChartType } from './Chart'
|
4
|
+
import type { ContextSubject } from './ContextSubject'
|
5
|
+
import type { ContextObserverTypeMap } from './ContextObserver'
|
6
|
+
|
7
|
+
// // 透過類型選擇Plugin
|
8
|
+
// export type PluginParamsMap<T extends ChartType, PluginParams> = T extends 'series' ? Plugin<DataSeries, DataFormatterSeries, ComputedDataSeries, PluginParams>
|
9
|
+
// : T extends 'grid' ? Plugin<DataGrid, DataFormatterGrid, ComputedDataGrid, PluginParams>
|
10
|
+
// : T extends 'multiGrid' ? Plugin<DataMultiGrid, DataFormatterMultiGrid, ComputedDataMultiGrid, PluginParams>
|
11
|
+
// : T extends 'multiValue' ? Plugin<DataMultiValue, DataFormatterMultiValue, ComputedDataMultiValue, PluginParams>
|
12
|
+
// : T extends 'relationship' ? Plugin<DataRelationship, DataFormatterRelationship, ComputedDataRelationship, PluginParams>
|
13
|
+
// : T extends 'tree' ? Plugin<DataTree, DataFormatterTree, ComputedDataTree, PluginParams>
|
14
|
+
// : Plugin<unknown, unknown, unknown, unknown>
|
15
|
+
|
16
|
+
export interface CreateBasePlugin {
|
17
|
+
<T extends ChartType>(): DefinePlugin<T>
|
18
|
+
}
|
19
|
+
|
20
|
+
export interface DefinePlugin<T extends ChartType> {
|
21
|
+
<PluginName, PluginParams>(name: PluginName , defaultParams: PluginParams): DefinePluginInitFn<T, PluginName, PluginParams>
|
22
|
+
}
|
23
|
+
|
24
|
+
export interface DefinePluginInitFn<T extends ChartType, PluginName, PluginParams> {
|
25
|
+
(initFn: PluginInitFn<T, PluginName, PluginParams>): PluginConstructor<T, PluginName, PluginParams>
|
26
|
+
}
|
27
|
+
|
28
|
+
// export interface CreatePlugin<T extends ChartType, PluginName, PluginParams> {
|
29
|
+
// (): PluginEntity<T, PluginName, PluginParams>
|
30
|
+
// }
|
31
|
+
|
32
|
+
export interface PluginConstructor<T extends ChartType, PluginName, PluginParams> {
|
33
|
+
new (): PluginEntity<T, PluginName, PluginParams>
|
34
|
+
}
|
35
|
+
|
36
|
+
export interface PluginEntity<T extends ChartType, PluginName, PluginParams> {
|
37
|
+
params$: Subject<Partial<PluginParams>>
|
38
|
+
name: PluginName
|
39
|
+
defaultParams: PluginParams
|
40
|
+
// presetParams: Partial<PluginParams>
|
41
|
+
init: () => void
|
42
|
+
destroy: () => void
|
43
|
+
setPresetParams: (presetParams: Partial<PluginParams>) => void
|
44
|
+
setContext: (pluginContext: PluginContext<T, PluginName, PluginParams>) => void
|
45
|
+
}
|
46
|
+
|
47
|
+
export interface PluginInitFn<T extends ChartType, PluginName, PluginParams> {
|
48
|
+
(pluginContext: PluginContext<T, PluginName, PluginParams>): () => void
|
49
|
+
}
|
50
|
+
|
51
|
+
export interface PluginContext<T extends ChartType, PluginName, PluginParams> {
|
52
|
+
selection: d3.Selection<any, unknown, any, unknown>
|
53
|
+
rootSelection: d3.Selection<any, unknown, any, unknown>
|
54
|
+
name: PluginName
|
55
|
+
chartType: ChartType, // 這邊的ChartType是由 createChart 時依 chart類別決定的,所以不能使用 pluginContext 本身的類別 T
|
56
|
+
// 原本的store
|
57
|
+
// selection: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>
|
58
|
+
subject: ContextSubject<T>
|
59
|
+
observer: ContextObserverTypeMap<T, PluginParams>
|
60
|
+
}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
export * from './Axis'
|
2
|
+
export * from './Chart'
|
3
|
+
export * from './ChartParams'
|
4
|
+
export * from './ComputedData'
|
5
|
+
export * from './ComputedDataGrid'
|
6
|
+
export * from './ComputedDataMultiGrid'
|
7
|
+
export * from './ComputedDataMultiValue'
|
8
|
+
export * from './ComputedDataRelationship'
|
9
|
+
export * from './ComputedDataSeries'
|
10
|
+
export * from './ComputedDataTree'
|
11
|
+
export * from './ContextObserver'
|
12
|
+
export * from './ContextObserverGrid'
|
13
|
+
export * from './ContextObserverMultiGrid'
|
14
|
+
export * from './ContextObserverMultiValue'
|
15
|
+
export * from './ContextObserverRelationship'
|
16
|
+
export * from './ContextObserverSeries'
|
17
|
+
export * from './ContextObserverTree'
|
18
|
+
export * from './ContextSubject'
|
19
|
+
export * from './Data'
|
20
|
+
export * from './DataFormatter'
|
21
|
+
export * from './DataFormatterGrid'
|
22
|
+
export * from './DataFormatterMultiGrid'
|
23
|
+
export * from './DataFormatterMultiValue'
|
24
|
+
export * from './DataFormatterRelationship'
|
25
|
+
export * from './DataFormatterSeries'
|
26
|
+
export * from './DataFormatterTree'
|
27
|
+
export * from './DataGrid'
|
28
|
+
export * from './DataMultiGrid'
|
29
|
+
export * from './DataMultiValue'
|
30
|
+
export * from './DataRelationship'
|
31
|
+
export * from './DataSeries'
|
32
|
+
export * from './DataTree'
|
33
|
+
export * from './Event'
|
34
|
+
export * from './Layout'
|
35
|
+
export * from './Padding'
|
36
|
+
export * from './Plugin'
|
37
|
+
export * from './TransformData'
|