@antv/gpt-vis 1.0.0-beta.1 → 1.0.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 (159) hide show
  1. package/README.md +223 -47
  2. package/README.zh-CN.md +227 -51
  3. package/dist/cjs/gpt-vis/index.d.ts +8 -1
  4. package/dist/cjs/gpt-vis/index.js +43 -20
  5. package/dist/cjs/index.d.ts +15 -2
  6. package/dist/cjs/index.js +22 -2
  7. package/dist/cjs/syntax/parser.d.ts +17 -2
  8. package/dist/cjs/syntax/parser.js +151 -38
  9. package/dist/cjs/util/container.d.ts +5 -0
  10. package/dist/cjs/util/container.js +43 -0
  11. package/dist/cjs/util/theme.d.ts +5 -0
  12. package/dist/cjs/util/theme.js +9 -2
  13. package/dist/cjs/vis/area/index.js +2 -1
  14. package/dist/cjs/vis/bar/index.js +5 -4
  15. package/dist/cjs/vis/boxplot/index.js +7 -2
  16. package/dist/cjs/vis/column/index.js +5 -4
  17. package/dist/cjs/vis/dual-axes/index.js +3 -3
  18. package/dist/cjs/vis/fishbone-diagram/index.d.ts +35 -0
  19. package/dist/cjs/vis/fishbone-diagram/index.js +191 -0
  20. package/dist/cjs/vis/flow-diagram/index.d.ts +27 -0
  21. package/dist/cjs/vis/flow-diagram/index.js +287 -0
  22. package/dist/cjs/vis/funnel/index.js +2 -1
  23. package/dist/cjs/vis/histogram/index.js +3 -7
  24. package/dist/cjs/vis/indented-tree/index.d.ts +40 -0
  25. package/dist/cjs/vis/indented-tree/index.js +385 -0
  26. package/dist/cjs/vis/line/index.js +2 -1
  27. package/dist/cjs/vis/liquid/index.js +2 -1
  28. package/dist/cjs/vis/mindmap/index.d.ts +32 -0
  29. package/dist/cjs/vis/mindmap/index.js +222 -0
  30. package/dist/cjs/vis/network-graph/index.d.ts +59 -0
  31. package/dist/cjs/vis/network-graph/index.js +175 -0
  32. package/dist/cjs/vis/organization-chart/index.d.ts +64 -0
  33. package/dist/cjs/vis/organization-chart/index.js +200 -0
  34. package/dist/cjs/vis/pie/index.js +3 -3
  35. package/dist/cjs/vis/radar/index.d.ts +1 -0
  36. package/dist/cjs/vis/radar/index.js +10 -9
  37. package/dist/cjs/vis/sankey/index.js +2 -1
  38. package/dist/cjs/vis/scatter/index.d.ts +2 -0
  39. package/dist/cjs/vis/scatter/index.js +9 -4
  40. package/dist/cjs/vis/summary/index.js +17 -3
  41. package/dist/cjs/vis/table/index.d.ts +1 -0
  42. package/dist/cjs/vis/table/index.js +37 -1
  43. package/dist/cjs/vis/treemap/index.js +2 -1
  44. package/dist/cjs/vis/venn/index.d.ts +2 -1
  45. package/dist/cjs/vis/venn/index.js +18 -3
  46. package/dist/cjs/vis/violin/index.js +2 -1
  47. package/dist/cjs/vis/waterfall/index.d.ts +6 -9
  48. package/dist/cjs/vis/waterfall/index.js +29 -6
  49. package/dist/cjs/vis/word-cloud/index.js +2 -1
  50. package/dist/cjs/vis-wrapper/icons.js +2 -2
  51. package/dist/cjs/vis-wrapper/index.d.ts +1 -0
  52. package/dist/cjs/vis-wrapper/index.js +27 -16
  53. package/dist/cjs/vis-wrapper/styles.d.ts +1 -1
  54. package/dist/cjs/vis-wrapper/styles.js +8 -1
  55. package/dist/esm/gpt-vis/index.d.ts +8 -1
  56. package/dist/esm/gpt-vis/index.js +47 -26
  57. package/dist/esm/index.d.ts +15 -2
  58. package/dist/esm/index.js +7 -1
  59. package/dist/esm/syntax/parser.d.ts +17 -2
  60. package/dist/esm/syntax/parser.js +248 -90
  61. package/dist/esm/util/container.d.ts +5 -0
  62. package/dist/esm/util/container.js +20 -0
  63. package/dist/esm/util/theme.d.ts +5 -0
  64. package/dist/esm/util/theme.js +9 -0
  65. package/dist/esm/vis/area/index.js +3 -2
  66. package/dist/esm/vis/bar/index.js +7 -6
  67. package/dist/esm/vis/boxplot/index.js +17 -4
  68. package/dist/esm/vis/column/index.js +7 -6
  69. package/dist/esm/vis/dual-axes/index.js +13 -5
  70. package/dist/esm/vis/fishbone-diagram/index.d.ts +35 -0
  71. package/dist/esm/vis/fishbone-diagram/index.js +219 -0
  72. package/dist/esm/vis/flow-diagram/index.d.ts +27 -0
  73. package/dist/esm/vis/flow-diagram/index.js +349 -0
  74. package/dist/esm/vis/funnel/index.js +3 -2
  75. package/dist/esm/vis/histogram/index.js +6 -7
  76. package/dist/esm/vis/indented-tree/index.d.ts +40 -0
  77. package/dist/esm/vis/indented-tree/index.js +569 -0
  78. package/dist/esm/vis/line/index.js +3 -2
  79. package/dist/esm/vis/liquid/index.js +3 -2
  80. package/dist/esm/vis/mindmap/index.d.ts +32 -0
  81. package/dist/esm/vis/mindmap/index.js +316 -0
  82. package/dist/esm/vis/network-graph/index.d.ts +59 -0
  83. package/dist/esm/vis/network-graph/index.js +242 -0
  84. package/dist/esm/vis/organization-chart/index.d.ts +64 -0
  85. package/dist/esm/vis/organization-chart/index.js +271 -0
  86. package/dist/esm/vis/pie/index.js +4 -8
  87. package/dist/esm/vis/radar/index.d.ts +1 -0
  88. package/dist/esm/vis/radar/index.js +20 -4
  89. package/dist/esm/vis/sankey/index.js +3 -2
  90. package/dist/esm/vis/scatter/index.d.ts +2 -0
  91. package/dist/esm/vis/scatter/index.js +15 -4
  92. package/dist/esm/vis/summary/index.js +25 -4
  93. package/dist/esm/vis/table/index.d.ts +1 -0
  94. package/dist/esm/vis/table/index.js +9 -2
  95. package/dist/esm/vis/treemap/index.js +3 -2
  96. package/dist/esm/vis/venn/index.d.ts +2 -1
  97. package/dist/esm/vis/venn/index.js +29 -4
  98. package/dist/esm/vis/violin/index.js +3 -2
  99. package/dist/esm/vis/waterfall/index.d.ts +6 -9
  100. package/dist/esm/vis/waterfall/index.js +33 -13
  101. package/dist/esm/vis/word-cloud/index.js +3 -2
  102. package/dist/esm/vis-wrapper/icons.js +2 -2
  103. package/dist/esm/vis-wrapper/index.d.ts +1 -0
  104. package/dist/esm/vis-wrapper/index.js +15 -10
  105. package/dist/esm/vis-wrapper/styles.d.ts +1 -1
  106. package/dist/esm/vis-wrapper/styles.js +1 -1
  107. package/dist/umd/index.min.js +1 -1
  108. package/package.json +17 -21
  109. package/src/gpt-vis/index.ts +0 -283
  110. package/src/index.ts +0 -44
  111. package/src/readme.md +0 -37
  112. package/src/syntax/index.ts +0 -2
  113. package/src/syntax/parser.ts +0 -411
  114. package/src/types/index.ts +0 -29
  115. package/src/util/theme.ts +0 -167
  116. package/src/vis/area/README.md +0 -143
  117. package/src/vis/area/index.ts +0 -212
  118. package/src/vis/bar/README.md +0 -158
  119. package/src/vis/bar/index.ts +0 -186
  120. package/src/vis/boxplot/README.md +0 -168
  121. package/src/vis/boxplot/index.ts +0 -162
  122. package/src/vis/column/README.md +0 -158
  123. package/src/vis/column/index.ts +0 -185
  124. package/src/vis/dual-axes/README.md +0 -191
  125. package/src/vis/dual-axes/index.ts +0 -218
  126. package/src/vis/funnel/README.md +0 -143
  127. package/src/vis/funnel/index.ts +0 -238
  128. package/src/vis/histogram/README.md +0 -130
  129. package/src/vis/histogram/index.ts +0 -153
  130. package/src/vis/line/README.md +0 -138
  131. package/src/vis/line/index.ts +0 -159
  132. package/src/vis/liquid/README.md +0 -150
  133. package/src/vis/liquid/index.ts +0 -130
  134. package/src/vis/pie/README.md +0 -127
  135. package/src/vis/pie/index.ts +0 -163
  136. package/src/vis/radar/README.md +0 -184
  137. package/src/vis/radar/index.ts +0 -214
  138. package/src/vis/sankey/README.md +0 -144
  139. package/src/vis/sankey/index.ts +0 -144
  140. package/src/vis/scatter/README.md +0 -145
  141. package/src/vis/scatter/index.ts +0 -147
  142. package/src/vis/summary/README.md +0 -272
  143. package/src/vis/summary/index.ts +0 -91
  144. package/src/vis/table/README.md +0 -174
  145. package/src/vis/table/index.ts +0 -241
  146. package/src/vis/treemap/README.md +0 -199
  147. package/src/vis/treemap/index.ts +0 -167
  148. package/src/vis/venn/README.md +0 -153
  149. package/src/vis/venn/index.ts +0 -149
  150. package/src/vis/violin/README.md +0 -168
  151. package/src/vis/violin/index.ts +0 -216
  152. package/src/vis/waterfall/README.md +0 -178
  153. package/src/vis/waterfall/index.ts +0 -258
  154. package/src/vis/word-cloud/README.md +0 -137
  155. package/src/vis/word-cloud/index.ts +0 -137
  156. package/src/vis-wrapper/README.md +0 -159
  157. package/src/vis-wrapper/icons.ts +0 -35
  158. package/src/vis-wrapper/index.ts +0 -276
  159. package/src/vis-wrapper/styles.ts +0 -195
@@ -1,163 +0,0 @@
1
- import { Chart } from '@antv/g2';
2
- import type { VisualizationOptions } from '../../types';
3
- import { getBackgroundColor, getThemeColors, getThemeObject } from '../../util/theme';
4
-
5
- /**
6
- * PieDataItem is the type for each data item in the pie chart.
7
- */
8
- type PieDataItem = {
9
- category: string;
10
- value: number;
11
- };
12
-
13
- /**
14
- * PieConfig defines the configuration for rendering the pie chart.
15
- */
16
- export interface PieConfig {
17
- type?: 'pie';
18
- data: PieDataItem[];
19
- innerRadius?: number;
20
- theme?: 'default' | 'academy' | 'dark';
21
- title?: string;
22
- style?: {
23
- backgroundColor?: string;
24
- palette?: string[];
25
- };
26
- }
27
-
28
- /**
29
- * PieInstance represents a pie chart instance with render and destroy methods.
30
- */
31
- export interface PieInstance {
32
- render: (config: PieConfig) => void;
33
- destroy: () => void;
34
- }
35
-
36
- /**
37
- * Pie chart component using G2 5.0.
38
- *
39
- * @example
40
- * ```ts
41
- * const pie = Pie({
42
- * container: '#container',
43
- * width: 600,
44
- * height: 400,
45
- * });
46
- *
47
- * pie.render({
48
- * type: 'pie',
49
- * data: [
50
- * { category: '分类一', value: 27 },
51
- * { category: '分类二', value: 25 },
52
- * ],
53
- * innerRadius: 0.6,
54
- * theme: 'academy'
55
- * });
56
- *
57
- * pie.destroy();
58
- * ```
59
- */
60
- export const Pie = (options: VisualizationOptions): PieInstance => {
61
- const { container, width, height, theme: chartTheme = 'default' } = options;
62
- let chart: Chart | null = null;
63
-
64
- // Precision multiplier for rounding percentages to 4 decimal places
65
- const PERCENTAGE_PRECISION_MULTIPLIER = 10000;
66
-
67
- /**
68
- * Render the pie chart with the given configuration.
69
- */
70
- const render = (config: PieConfig): void => {
71
- const { data = [], innerRadius = 0, theme = chartTheme, title, style = {} } = config;
72
-
73
- // Clean up previous chart if exists
74
- if (chart) {
75
- chart.destroy();
76
- }
77
-
78
- // Get colors from style.palette or theme defaults
79
- const colors = style.palette || getThemeColors(theme);
80
- const backgroundColor = style.backgroundColor || getBackgroundColor(theme);
81
-
82
- // Calculate sum for percentage labels
83
- const sumValue = data.reduce((sum, item) => sum + item.value, 0);
84
-
85
- // Create chart
86
- chart = new Chart({
87
- container,
88
- width,
89
- height,
90
- autoFit: true,
91
- });
92
-
93
- // Configure chart options
94
- // Note: Using 'any' type due to G2's complex type system with transformations
95
- // This is consistent with how G2 5.0 is used elsewhere in the codebase (e.g., Radar component)
96
- const chartOptions: any = {
97
- type: 'interval',
98
- data,
99
- title: title ?? '',
100
- encode: {
101
- y: 'value',
102
- color: 'category',
103
- },
104
- transform: [{ type: 'stackY' }],
105
- coordinate: { type: 'theta', innerRadius: Math.max(0, Math.min(1, innerRadius)) },
106
- scale: {
107
- color: { range: colors },
108
- },
109
- legend: {
110
- color: { position: 'top' },
111
- },
112
- labels: [
113
- {
114
- text: (d: any) => {
115
- const percentage =
116
- Math.round((d.value / sumValue) * 100 * PERCENTAGE_PRECISION_MULTIPLIER) /
117
- PERCENTAGE_PRECISION_MULTIPLIER;
118
- return `${d.category}: ${percentage}%`;
119
- },
120
- position: 'outside',
121
- transform: [{ type: 'overlapHide' }],
122
- },
123
- ],
124
- tooltip: {
125
- items: [
126
- (d: any) => ({
127
- name: d.category,
128
- value: d.value,
129
- }),
130
- ],
131
- },
132
- interaction: {
133
- elementSelect: { single: true },
134
- },
135
- style: {
136
- fillOpacity: 0.8,
137
- },
138
- viewStyle: {
139
- viewFill: backgroundColor,
140
- },
141
- theme: getThemeObject(theme),
142
- animate: { enter: { type: 'waveIn' } },
143
- };
144
-
145
- chart.options(chartOptions);
146
- chart.render();
147
- };
148
-
149
- /**
150
- * Destroy the chart instance and clean up resources.
151
- */
152
- const destroy = (): void => {
153
- if (chart) {
154
- chart.destroy();
155
- chart = null;
156
- }
157
- };
158
-
159
- return {
160
- render,
161
- destroy,
162
- };
163
- };
@@ -1,184 +0,0 @@
1
- # Radar
2
-
3
- A radar chart component for visualizing multi-dimensional data, built with G2 5.0.
4
-
5
- ## Usage
6
-
7
- ```ts
8
- import { Radar } from '@antv/gpt-vis/ai';
9
-
10
- const radar = Radar({
11
- container: '#container',
12
- width: 600,
13
- height: 400,
14
- });
15
-
16
- radar.render({
17
- data: [
18
- { name: '沟通能力', value: 2 },
19
- { name: '协作能力', value: 3 },
20
- { name: '领导能力', value: 2 },
21
- { name: '学习能力', value: 5 },
22
- { name: '创新能力', value: 6 },
23
- { name: '技术能力', value: 9 },
24
- ],
25
- });
26
-
27
- radar.destroy();
28
- ```
29
-
30
- ## Configuration
31
-
32
- ### Constructor Options (RadarOptions)
33
-
34
- | Property | Type | Default | Description |
35
- | --------- | --------------------- | ------- | ----------------------------- |
36
- | container | string \| HTMLElement | - | Container element or selector |
37
- | width | number | 640 | Chart width in pixels |
38
- | height | number | 480 | Chart height in pixels |
39
-
40
- ### Render Config (RadarConfig)
41
-
42
- | Property | Type | Default | Description |
43
- | -------- | ------ | --------- | ------------------------- |
44
- | type | string | 'radar' | Chart type |
45
- | data | Array | - | Chart data array |
46
- | title | string | - | Chart title |
47
- | theme | string | 'default' | Color theme |
48
- | style | object | - | Chart style configuration |
49
-
50
- ### Data Structure
51
-
52
- ```ts
53
- type RadarDataItem = {
54
- name: string; // Category name (axis label)
55
- value: number; // Value for this category
56
- group?: string; // Optional: group for multiple series
57
- };
58
- ```
59
-
60
- ### Style Options
61
-
62
- ```ts
63
- style?: {
64
- backgroundColor?: string; // Background color
65
- palette?: string[]; // Color palette for groups
66
- lineWidth?: number; // Line width (default: 2)
67
- }
68
- ```
69
-
70
- ## Examples
71
-
72
- ### Basic Radar Chart
73
-
74
- ```ts
75
- radar.render({
76
- data: [
77
- { name: '沟通能力', value: 2 },
78
- { name: '协作能力', value: 3 },
79
- { name: '领导能力', value: 2 },
80
- { name: '学习能力', value: 5 },
81
- { name: '创新能力', value: 6 },
82
- { name: '技术能力', value: 9 },
83
- ],
84
- });
85
- ```
86
-
87
- ### With Title
88
-
89
- ```ts
90
- radar.render({
91
- data: [
92
- { name: 'Vitamin C', value: 7 },
93
- { name: 'Fiber', value: 6 },
94
- { name: 'Sugar', value: 5 },
95
- { name: 'Protein', value: 4 },
96
- { name: 'Iron', value: 3 },
97
- { name: 'Calcium', value: 2 },
98
- ],
99
- title: 'Nutrition Analysis',
100
- });
101
- ```
102
-
103
- ### With Multiple Groups
104
-
105
- ```ts
106
- radar.render({
107
- data: [
108
- { name: '语文', value: 95, group: '一班' },
109
- { name: '数学', value: 96, group: '一班' },
110
- { name: '外语', value: 85, group: '一班' },
111
- { name: '物理', value: 63, group: '一班' },
112
- { name: '化学', value: 91, group: '一班' },
113
- { name: '语文', value: 75, group: '二班' },
114
- { name: '数学', value: 93, group: '二班' },
115
- { name: '外语', value: 66, group: '二班' },
116
- { name: '物理', value: 85, group: '二班' },
117
- { name: '化学', value: 88, group: '二班' },
118
- ],
119
- });
120
- ```
121
-
122
- ### With Academy Theme
123
-
124
- ```ts
125
- radar.render({
126
- data: [
127
- { name: 'Attack', value: 85, group: 'Hero A' },
128
- { name: 'Defense', value: 70, group: 'Hero A' },
129
- { name: 'Speed', value: 90, group: 'Hero A' },
130
- { name: 'HP', value: 75, group: 'Hero A' },
131
- { name: 'MP', value: 60, group: 'Hero A' },
132
- { name: 'Attack', value: 65, group: 'Hero B' },
133
- { name: 'Defense', value: 90, group: 'Hero B' },
134
- { name: 'Speed', value: 70, group: 'Hero B' },
135
- { name: 'HP', value: 85, group: 'Hero B' },
136
- { name: 'MP', value: 80, group: 'Hero B' },
137
- ],
138
- theme: 'academy',
139
- });
140
- ```
141
-
142
- ### With Custom Styles
143
-
144
- ```ts
145
- radar.render({
146
- data: [
147
- { name: 'Category A', value: 8, group: 'Product X' },
148
- { name: 'Category B', value: 7, group: 'Product X' },
149
- { name: 'Category C', value: 6, group: 'Product X' },
150
- { name: 'Category D', value: 5, group: 'Product X' },
151
- { name: 'Category E', value: 9, group: 'Product X' },
152
- { name: 'Category A', value: 6, group: 'Product Y' },
153
- { name: 'Category B', value: 9, group: 'Product Y' },
154
- { name: 'Category C', value: 8, group: 'Product Y' },
155
- { name: 'Category D', value: 7, group: 'Product Y' },
156
- { name: 'Category E', value: 5, group: 'Product Y' },
157
- ],
158
- style: {
159
- palette: ['#FF6B6B', '#4ECDC4'],
160
- backgroundColor: '#F8F9FA',
161
- lineWidth: 3,
162
- },
163
- });
164
- ```
165
-
166
- ### Dark Theme
167
-
168
- ```ts
169
- radar.render({
170
- data: [
171
- { name: 'Skill 1', value: 90 },
172
- { name: 'Skill 2', value: 75 },
173
- { name: 'Skill 3', value: 85 },
174
- { name: 'Skill 4', value: 70 },
175
- { name: 'Skill 5', value: 95 },
176
- ],
177
- theme: 'dark',
178
- });
179
- ```
180
-
181
- ## Methods
182
-
183
- - `render(config: RadarConfig): void` - Render or update the chart
184
- - `destroy(): void` - Destroy the chart instance and clean up resources
@@ -1,214 +0,0 @@
1
- import { Chart } from '@antv/g2';
2
- import type { VisualizationOptions } from '../../types';
3
- import { getBackgroundColor, getThemeColors, getThemeObject } from '../../util/theme';
4
-
5
- /**
6
- * RadarDataItem is the type for each data item in the radar chart.
7
- */
8
- export type RadarDataItem = {
9
- name: string;
10
- value: number;
11
- group?: string;
12
- };
13
-
14
- /**
15
- * RadarConfig defines the configuration for rendering the radar chart.
16
- */
17
- export interface RadarConfig {
18
- type?: 'radar';
19
- data: RadarDataItem[];
20
- title?: string;
21
- theme?: 'default' | 'academy' | 'dark';
22
- style?: {
23
- backgroundColor?: string;
24
- palette?: string[];
25
- lineWidth?: number;
26
- };
27
- }
28
-
29
- /**
30
- * RadarInstance represents a radar chart instance with render and destroy methods.
31
- */
32
- export interface RadarInstance {
33
- render: (config: RadarConfig) => void;
34
- destroy: () => void;
35
- }
36
-
37
- /**
38
- * Transform radar data to parallel coordinates format.
39
- * Groups data by group field and converts to position-based encoding.
40
- */
41
- function transformRadarToParallel(data: RadarDataItem[]) {
42
- if (!data || data.length === 0) {
43
- return [];
44
- }
45
-
46
- // Group data by group field
47
- const groups: { [key: string]: RadarDataItem[] } = {};
48
- data.forEach((item) => {
49
- const groupKey = item.group || '';
50
- if (!groups[groupKey]) {
51
- groups[groupKey] = [];
52
- }
53
- groups[groupKey].push(item);
54
- });
55
-
56
- // Transform to parallel format
57
- return Object.entries(groups).map(([group, values]) => {
58
- const parallelValues: any = {};
59
- values.forEach(({ name, value }) => {
60
- parallelValues[name] = value;
61
- });
62
- return {
63
- ...parallelValues,
64
- group,
65
- };
66
- });
67
- }
68
-
69
- /**
70
- * Radar chart component using G2 5.0.
71
- *
72
- * @example
73
- * ```ts
74
- * const radar = Radar({
75
- * container: '#container',
76
- * width: 600,
77
- * height: 400,
78
- * });
79
- *
80
- * radar.render({
81
- * type: 'radar',
82
- * data: [
83
- * { name: '沟通能力', value: 2 },
84
- * { name: '协作能力', value: 3 },
85
- * { name: '领导能力', value: 2 },
86
- * { name: '学习能力', value: 5 },
87
- * { name: '创新能力', value: 6 },
88
- * { name: '技术能力', value: 9 },
89
- * ],
90
- * });
91
- *
92
- * radar.destroy();
93
- * ```
94
- */
95
- export const Radar = (options: VisualizationOptions): RadarInstance => {
96
- const { container, width, height, theme: chartTheme = 'default' } = options;
97
- let chart: Chart | null = null;
98
-
99
- /**
100
- * Render the radar chart with the given configuration.
101
- */
102
- const render = (config: RadarConfig): void => {
103
- const { data = [], theme = chartTheme, title, style = {} } = config;
104
-
105
- // Clean up previous chart if exists
106
- if (chart) {
107
- chart.destroy();
108
- }
109
-
110
- const { lineWidth = 2 } = style;
111
- const colors = style.palette || getThemeColors(theme);
112
- const backgroundColor = style.backgroundColor || getBackgroundColor(theme);
113
-
114
- // Transform data to parallel format
115
- const parallelData = transformRadarToParallel(data);
116
- const position = Object.keys(parallelData[0] || {}).filter((key) => key !== 'group');
117
-
118
- // Create chart
119
- chart = new Chart({
120
- container,
121
- width,
122
- height,
123
- autoFit: true,
124
- });
125
-
126
- // Configure chart options
127
- // Note: Using 'any' type due to G2's complex type system with transformations
128
- // This is consistent with how G2 5.0 is used elsewhere in the codebase
129
- const chartOptions: any = {
130
- type: 'line',
131
- data: parallelData,
132
- title: title ?? '',
133
- coordinate: { type: 'radar' },
134
- inset: 18,
135
- encode: {
136
- position,
137
- color: 'group',
138
- },
139
- scale: {
140
- // Configure scales for each position axis
141
- ...Object.fromEntries(
142
- Array.from({ length: position.length }, (_, i) => [
143
- `position${i === 0 ? '' : i}`,
144
- {
145
- domainMin: 0,
146
- nice: true,
147
- },
148
- ]),
149
- ),
150
- color: {
151
- range: colors,
152
- },
153
- },
154
- axis: Object.fromEntries(
155
- Array.from({ length: position.length }, (_, i) => [
156
- `position${i === 0 ? '' : i}`,
157
- {
158
- zIndex: 1,
159
- titleFontSize: 10,
160
- titleSpacing: 8,
161
- label: true,
162
- labelFill: theme === 'dark' ? '#fff' : '#000',
163
- labelOpacity: 0.45,
164
- labelFontSize: 10,
165
- line: true,
166
- lineFill: '#000',
167
- lineStrokeOpacity: 0.25,
168
- tickFilter: (_: string, idx: number) => {
169
- return !(i !== 0 && idx === 0);
170
- },
171
- tickCount: 4,
172
- gridStrokeOpacity: 0.45,
173
- gridStroke: theme === 'dark' ? '#fff' : '#000',
174
- gridLineWidth: 1,
175
- gridLineDash: [4, 4],
176
- },
177
- ]),
178
- ),
179
- style: {
180
- lineWidth,
181
- lineCap: 'round',
182
- lineJoin: 'round',
183
- },
184
- legend: parallelData.length > 1 ? { color: { position: 'top', itemMarker: 'point' } } : false,
185
- interaction: {
186
- tooltip: {
187
- series: false,
188
- },
189
- },
190
- viewStyle: {
191
- viewFill: backgroundColor,
192
- },
193
- theme: getThemeObject(theme),
194
- };
195
-
196
- chart.options(chartOptions);
197
- chart.render();
198
- };
199
-
200
- /**
201
- * Destroy the chart instance and clean up resources.
202
- */
203
- const destroy = (): void => {
204
- if (chart) {
205
- chart.destroy();
206
- chart = null;
207
- }
208
- };
209
-
210
- return {
211
- render,
212
- destroy,
213
- };
214
- };
@@ -1,144 +0,0 @@
1
- # Sankey
2
-
3
- A sankey chart component for visualizing flow, energy, fund transfer relationships between nodes, built with G2 5.0.
4
-
5
- ## Usage
6
-
7
- ```ts
8
- import { Sankey } from '@antv/gpt-vis/ai';
9
-
10
- const sankey = Sankey({
11
- container: '#container',
12
- width: 600,
13
- height: 400,
14
- });
15
-
16
- sankey.render({
17
- data: [
18
- { source: '煤炭', target: '发电厂', value: 120 },
19
- { source: '天然气', target: '发电厂', value: 80 },
20
- { source: '发电厂', target: '工业', value: 100 },
21
- { source: '发电厂', target: '居民', value: 60 },
22
- { source: '发电厂', target: '商业', value: 40 },
23
- ],
24
- });
25
-
26
- sankey.destroy();
27
- ```
28
-
29
- ## Configuration
30
-
31
- ### Constructor Options (SankeyOptions)
32
-
33
- | Property | Type | Default | Description |
34
- | --------- | --------------------- | ------- | ----------------------------- |
35
- | container | string \| HTMLElement | - | Container element or selector |
36
- | width | number | 640 | Chart width in pixels |
37
- | height | number | 480 | Chart height in pixels |
38
-
39
- ### Render Config (SankeyConfig)
40
-
41
- | Property | Type | Default | Description |
42
- | --------- | ------ | --------- | ---------------------------------------------------------- |
43
- | data | Array | - | Chart data array |
44
- | nodeAlign | string | 'center' | Node alignment: 'left' \| 'center' \| 'right' \| 'justify' |
45
- | theme | string | 'default' | Color theme: 'default' \| 'academy' \| 'dark' |
46
- | title | string | - | Chart title |
47
- | style | object | - | Chart style configuration |
48
-
49
- ### Data Structure
50
-
51
- ```ts
52
- type SankeyDataItem = {
53
- source: string; // Source node name
54
- target: string; // Target node name
55
- value: number; // Flow value
56
- };
57
- ```
58
-
59
- ### Style Options
60
-
61
- ```ts
62
- style?: {
63
- backgroundColor?: string; // Background color
64
- palette?: string[]; // Color palette
65
- }
66
- ```
67
-
68
- ## Examples
69
-
70
- ### Basic Example
71
-
72
- ```ts
73
- sankey.render({
74
- data: [
75
- { source: '煤炭', target: '发电厂', value: 120 },
76
- { source: '天然气', target: '发电厂', value: 80 },
77
- { source: '发电厂', target: '工业', value: 100 },
78
- ],
79
- });
80
- ```
81
-
82
- ### With Title and Node Alignment
83
-
84
- ```ts
85
- sankey.render({
86
- data: [
87
- { source: '煤炭', target: '发电厂', value: 120 },
88
- { source: '天然气', target: '发电厂', value: 80 },
89
- { source: '发电厂', target: '工业', value: 100 },
90
- ],
91
- title: '能源流动关系',
92
- nodeAlign: 'justify',
93
- });
94
- ```
95
-
96
- ### With Academy Theme
97
-
98
- ```ts
99
- sankey.render({
100
- data: [
101
- { source: '投资人', target: '创业公司', value: 200 },
102
- { source: '创业公司', target: '市场营销', value: 80 },
103
- { source: '创业公司', target: '研发', value: 120 },
104
- ],
105
- theme: 'academy',
106
- title: '资金流转路径',
107
- });
108
- ```
109
-
110
- ### With Dark Theme
111
-
112
- ```ts
113
- sankey.render({
114
- data: [
115
- { source: '投资人', target: '创业公司', value: 200 },
116
- { source: '创业公司', target: '市场营销', value: 80 },
117
- { source: '创业公司', target: '研发', value: 120 },
118
- ],
119
- theme: 'dark',
120
- title: '资金流转路径',
121
- });
122
- ```
123
-
124
- ### With Custom Styles
125
-
126
- ```ts
127
- sankey.render({
128
- data: [
129
- { source: '首页', target: '产品页', value: 300 },
130
- { source: '产品页', target: '购物车', value: 150 },
131
- { source: '购物车', target: '结算页', value: 100 },
132
- ],
133
- title: '用户行为路径',
134
- style: {
135
- palette: ['#5B8FF9', '#61DDAA', '#65789B', '#F6BD16', '#7262FD'],
136
- backgroundColor: '#f0f2f5',
137
- },
138
- });
139
- ```
140
-
141
- ## Methods
142
-
143
- - `render(config: SankeyConfig): void` - Render or update the chart
144
- - `destroy(): void` - Destroy the chart instance and clean up resources