@antv/gpt-vis 0.5.5 → 0.5.7

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 (118) hide show
  1. package/dist/cjs/Area/index.d.ts +2 -3
  2. package/dist/cjs/Area/index.js +48 -5
  3. package/dist/cjs/Bar/index.d.ts +5 -2
  4. package/dist/cjs/Bar/index.js +43 -7
  5. package/dist/cjs/Boxplot/index.d.ts +13 -0
  6. package/dist/cjs/Boxplot/index.js +88 -0
  7. package/dist/cjs/ChartCodeRender/VisChart.d.ts +7 -1
  8. package/dist/cjs/ChartCodeRender/VisChart.js +100 -12
  9. package/dist/cjs/ChartCodeRender/index.js +16 -2
  10. package/dist/cjs/ChartCodeRender/type.d.ts +104 -5
  11. package/dist/cjs/Column/index.d.ts +5 -3
  12. package/dist/cjs/Column/index.js +44 -7
  13. package/dist/cjs/ConfigProvider/hooks/useConfig.js +2 -1
  14. package/dist/cjs/DualAxes/index.d.ts +1 -1
  15. package/dist/cjs/DualAxes/index.js +20 -8
  16. package/dist/cjs/FishboneDiagram/index.d.ts +1 -0
  17. package/dist/cjs/FishboneDiagram/index.js +21 -7
  18. package/dist/cjs/Funnel/index.d.ts +12 -0
  19. package/dist/cjs/Funnel/index.js +173 -0
  20. package/dist/cjs/Histogram/index.d.ts +4 -3
  21. package/dist/cjs/Histogram/index.js +32 -3
  22. package/dist/cjs/IndentedTree/index.d.ts +1 -0
  23. package/dist/cjs/IndentedTree/index.js +32 -20
  24. package/dist/cjs/Line/index.d.ts +2 -3
  25. package/dist/cjs/Line/index.js +36 -3
  26. package/dist/cjs/Liquid/index.d.ts +11 -0
  27. package/dist/cjs/Liquid/index.js +85 -0
  28. package/dist/cjs/MindMap/index.d.ts +1 -0
  29. package/dist/cjs/MindMap/index.js +29 -21
  30. package/dist/cjs/Pie/index.d.ts +2 -2
  31. package/dist/cjs/Pie/index.js +22 -3
  32. package/dist/cjs/Radar/index.d.ts +5 -3
  33. package/dist/cjs/Radar/index.js +106 -37
  34. package/dist/cjs/Sankey/index.d.ts +12 -0
  35. package/dist/cjs/Sankey/index.js +106 -0
  36. package/dist/cjs/Scatter/index.d.ts +2 -3
  37. package/dist/cjs/Scatter/index.js +52 -6
  38. package/dist/cjs/Treemap/index.d.ts +2 -3
  39. package/dist/cjs/Treemap/index.js +23 -3
  40. package/dist/cjs/Venn/index.d.ts +32 -0
  41. package/dist/cjs/Venn/index.js +87 -0
  42. package/dist/cjs/Violin/index.d.ts +10 -0
  43. package/dist/cjs/Violin/index.js +185 -0
  44. package/dist/cjs/WordCloud/index.d.ts +2 -3
  45. package/dist/cjs/WordCloud/index.js +34 -7
  46. package/dist/cjs/export.d.ts +7 -1
  47. package/dist/cjs/export.js +38 -8
  48. package/dist/cjs/theme.d.ts +2 -0
  49. package/dist/cjs/theme.js +133 -0
  50. package/dist/cjs/types/chart.d.ts +17 -0
  51. package/dist/cjs/types/chart.js +6 -0
  52. package/dist/cjs/utils/palette.d.ts +2 -0
  53. package/dist/cjs/utils/palette.js +54 -0
  54. package/dist/cjs/utils/plot.d.ts +1 -0
  55. package/dist/cjs/utils/plot.js +15 -0
  56. package/dist/cjs/version.d.ts +1 -1
  57. package/dist/cjs/version.js +1 -1
  58. package/dist/esm/Area/index.d.ts +2 -3
  59. package/dist/esm/Area/index.js +80 -6
  60. package/dist/esm/Bar/index.d.ts +5 -2
  61. package/dist/esm/Bar/index.js +66 -9
  62. package/dist/esm/Boxplot/index.d.ts +13 -0
  63. package/dist/esm/Boxplot/index.js +83 -0
  64. package/dist/esm/ChartCodeRender/VisChart.d.ts +7 -1
  65. package/dist/esm/ChartCodeRender/VisChart.js +144 -34
  66. package/dist/esm/ChartCodeRender/index.js +15 -1
  67. package/dist/esm/ChartCodeRender/type.d.ts +104 -5
  68. package/dist/esm/Column/index.d.ts +5 -3
  69. package/dist/esm/Column/index.js +67 -9
  70. package/dist/esm/ConfigProvider/hooks/useConfig.js +9 -1
  71. package/dist/esm/DualAxes/index.d.ts +1 -1
  72. package/dist/esm/DualAxes/index.js +35 -12
  73. package/dist/esm/FishboneDiagram/index.d.ts +1 -0
  74. package/dist/esm/FishboneDiagram/index.js +23 -7
  75. package/dist/esm/Funnel/index.d.ts +12 -0
  76. package/dist/esm/Funnel/index.js +171 -0
  77. package/dist/esm/Histogram/index.d.ts +4 -3
  78. package/dist/esm/Histogram/index.js +55 -5
  79. package/dist/esm/IndentedTree/index.d.ts +1 -0
  80. package/dist/esm/IndentedTree/index.js +36 -29
  81. package/dist/esm/Line/index.d.ts +2 -3
  82. package/dist/esm/Line/index.js +63 -4
  83. package/dist/esm/Liquid/index.d.ts +11 -0
  84. package/dist/esm/Liquid/index.js +100 -0
  85. package/dist/esm/MindMap/index.d.ts +1 -0
  86. package/dist/esm/MindMap/index.js +37 -30
  87. package/dist/esm/Pie/index.d.ts +2 -2
  88. package/dist/esm/Pie/index.js +37 -4
  89. package/dist/esm/Radar/index.d.ts +5 -3
  90. package/dist/esm/Radar/index.js +138 -42
  91. package/dist/esm/Sankey/index.d.ts +12 -0
  92. package/dist/esm/Sankey/index.js +88 -0
  93. package/dist/esm/Scatter/index.d.ts +2 -3
  94. package/dist/esm/Scatter/index.js +76 -11
  95. package/dist/esm/Treemap/index.d.ts +2 -3
  96. package/dist/esm/Treemap/index.js +39 -4
  97. package/dist/esm/Venn/index.d.ts +32 -0
  98. package/dist/esm/Venn/index.js +69 -0
  99. package/dist/esm/Violin/index.d.ts +10 -0
  100. package/dist/esm/Violin/index.js +192 -0
  101. package/dist/esm/WordCloud/index.d.ts +2 -3
  102. package/dist/esm/WordCloud/index.js +51 -9
  103. package/dist/esm/export.d.ts +7 -1
  104. package/dist/esm/export.js +8 -2
  105. package/dist/esm/theme.d.ts +2 -0
  106. package/dist/esm/theme.js +103 -0
  107. package/dist/esm/types/chart.d.ts +17 -0
  108. package/dist/esm/types/chart.js +6 -0
  109. package/dist/esm/utils/palette.d.ts +2 -0
  110. package/dist/esm/utils/palette.js +2 -0
  111. package/dist/esm/utils/plot.d.ts +1 -0
  112. package/dist/esm/utils/plot.js +10 -0
  113. package/dist/esm/version.d.ts +1 -1
  114. package/dist/esm/version.js +1 -1
  115. package/dist/umd/373.async.js +1 -0
  116. package/dist/umd/index.min.js +1 -1
  117. package/package.json +2 -1
  118. package/dist/umd/962.async.js +0 -1
@@ -1,11 +1,10 @@
1
- import type { AreaConfig } from '@ant-design/plots';
2
1
  import React from 'react';
3
- import type { BasePlotProps } from '../types';
2
+ import type { BasePlotProps, Style, Theme } from '../types';
4
3
  type AreaDataItem = {
5
4
  time: string | number;
6
5
  value: number;
7
6
  [key: string]: string | number;
8
7
  };
9
- export type AreaProps = BasePlotProps<AreaDataItem> & Partial<AreaConfig>;
8
+ export type AreaProps = BasePlotProps<AreaDataItem> & Theme & Style;
10
9
  declare const Area: (props: AreaProps) => React.JSX.Element;
11
10
  export default Area;
@@ -36,27 +36,70 @@ var import_plots = require("@ant-design/plots");
36
36
  var import_lodash = require("lodash");
37
37
  var import_react = __toESM(require("react"));
38
38
  var import_hooks = require("../ConfigProvider/hooks");
39
+ var import_theme = require("../theme");
40
+ var getLinearGradientColor = (color) => `linear-gradient(-90deg, white 0%, ${color} 100%)`;
41
+ var DEFAULT_COLOR = "#3A95FF";
39
42
  var defaultConfig = (props) => {
40
- const { data, xField = "time", yField = "value" } = props;
43
+ const { data, xField = "time", yField = "value", style = {} } = props;
44
+ const { backgroundColor, palette, lineWidth = 2 } = style;
41
45
  const hasGroupField = (0, import_lodash.get)(data, "[0].group") !== void 0;
42
46
  const axisYTitle = (0, import_lodash.get)(props, "axis.y.title");
43
- const defalutStyle = hasGroupField ? {} : { opacity: 0.6 };
47
+ const fillColor = getLinearGradientColor((palette == null ? void 0 : palette[0]) || DEFAULT_COLOR);
48
+ const defaultStyle = hasGroupField ? { opacity: 0.6 } : { opacity: 0.6, fill: fillColor };
49
+ let paletteConfig = { color: void 0 };
50
+ let encode = {};
51
+ const hasPalette = !!(palette == null ? void 0 : palette[0]);
52
+ if (hasPalette) {
53
+ paletteConfig = {
54
+ color: {
55
+ range: palette
56
+ }
57
+ };
58
+ }
59
+ if (hasGroupField) {
60
+ encode = { x: xField, y: yField, color: "group" };
61
+ } else {
62
+ encode = { x: xField, y: yField, color: () => "all" };
63
+ }
44
64
  return {
45
65
  xField,
46
66
  yField,
47
- style: defalutStyle,
67
+ style: defaultStyle,
48
68
  colorField: hasGroupField ? "group" : void 0,
69
+ stack: hasGroupField,
70
+ // @ts-ignore
71
+ encode,
72
+ legend: hasGroupField ? {} : false,
49
73
  tooltip: (d) => {
50
74
  const tooltipName = axisYTitle || d[xField];
51
75
  return {
52
76
  name: tooltipName,
53
77
  value: d[yField]
54
78
  };
55
- }
79
+ },
80
+ scale: {
81
+ y: {
82
+ nice: true
83
+ },
84
+ ...paletteConfig
85
+ },
86
+ line: {
87
+ encode,
88
+ style: {
89
+ lineWidth,
90
+ strokeOpacity: 0.6
91
+ },
92
+ ...paletteConfig
93
+ },
94
+ ...backgroundColor ? { viewStyle: { viewFill: backgroundColor } } : { viewStyle: void 0 }
56
95
  };
57
96
  };
58
97
  var Area = (props) => {
59
- const config = (0, import_hooks.usePlotConfig)("Area", defaultConfig, props);
98
+ const themeConfig = import_theme.THEME_MAP[props.theme ?? "default"];
99
+ const config = (0, import_hooks.usePlotConfig)("Area", defaultConfig, {
100
+ ...props,
101
+ theme: themeConfig
102
+ });
60
103
  return /* @__PURE__ */ import_react.default.createElement(import_plots.Area, { ...config });
61
104
  };
62
105
  var Area_default = Area;
@@ -1,11 +1,14 @@
1
1
  import type { BarConfig } from '@ant-design/plots';
2
2
  import React from 'react';
3
- import type { BasePlotProps } from '../types';
3
+ import type { BasePlotProps, Style, Theme } from '../types';
4
4
  type BarDataItem = {
5
5
  category: string;
6
6
  value: number;
7
7
  [key: string]: string | number;
8
8
  };
9
- export type BarProps = BasePlotProps<BarDataItem> & Partial<BarConfig>;
9
+ export type BarProps = BasePlotProps<BarDataItem> & Partial<BarConfig> & Theme & Style & {
10
+ group?: boolean;
11
+ stack?: boolean;
12
+ };
10
13
  declare const Bar: (props: BarProps) => React.JSX.Element;
11
14
  export default Bar;
@@ -36,14 +36,35 @@ var import_plots = require("@ant-design/plots");
36
36
  var import_lodash = require("lodash");
37
37
  var import_react = __toESM(require("react"));
38
38
  var import_hooks = require("../ConfigProvider/hooks");
39
+ var import_theme = require("../theme");
39
40
  var defaultConfig = (props) => {
40
- const { data, xField = "category", yField = "value" } = props;
41
+ const { data, xField = "category", yField = "value", style = {}, theme = {} } = props;
42
+ const { backgroundColor, palette } = style;
41
43
  const hasGroupField = (0, import_lodash.get)(data, "[0].group") !== void 0;
42
44
  const axisYTitle = (0, import_lodash.get)(props, "axis.y.title");
45
+ const hasPalette = !!(palette == null ? void 0 : palette[0]);
46
+ let paletteConfig = { color: void 0 };
47
+ let radiusStyle = {
48
+ radiusTopLeft: 4,
49
+ radiusTopRight: 4
50
+ };
51
+ if ((theme == null ? void 0 : theme.type) === "academy") {
52
+ radiusStyle = {
53
+ radiusTopLeft: 0,
54
+ radiusTopRight: 0
55
+ };
56
+ }
57
+ if (hasPalette) {
58
+ paletteConfig = {
59
+ color: {
60
+ range: palette
61
+ }
62
+ };
63
+ }
43
64
  return {
44
65
  xField,
45
66
  yField,
46
- colorField: hasGroupField ? "group" : void 0,
67
+ colorField: hasGroupField ? "group" : xField,
47
68
  tooltip: (d) => {
48
69
  const tooltipName = axisYTitle || d[xField];
49
70
  return {
@@ -52,14 +73,29 @@ var defaultConfig = (props) => {
52
73
  };
53
74
  },
54
75
  style: {
55
- // 圆角样式
56
- radiusTopLeft: 5,
57
- radiusTopRight: 5
58
- }
76
+ ...radiusStyle,
77
+ columnWidthRatio: 0.8
78
+ },
79
+ scale: {
80
+ y: {
81
+ nice: true
82
+ },
83
+ ...paletteConfig
84
+ },
85
+ ...backgroundColor ? { viewStyle: { viewFill: backgroundColor } } : { viewStyle: void 0 },
86
+ legend: hasGroupField ? {} : false
59
87
  };
60
88
  };
61
89
  var Bar = (props) => {
62
- const config = (0, import_hooks.usePlotConfig)("Bar", defaultConfig, props);
90
+ const themeConfig = import_theme.THEME_MAP[props.theme ?? "default"];
91
+ const { data, group = false, stack = false } = props;
92
+ const hasGroupField = (0, import_lodash.get)(data, "[0].group") !== void 0;
93
+ const config = (0, import_hooks.usePlotConfig)("Bar", defaultConfig, {
94
+ ...props,
95
+ theme: themeConfig,
96
+ group: hasGroupField && group,
97
+ stack: hasGroupField && stack
98
+ });
63
99
  return /* @__PURE__ */ import_react.default.createElement(import_plots.Bar, { ...config });
64
100
  };
65
101
  var Bar_default = Bar;
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import type { BasePlotProps, Style, Theme } from '../types';
3
+ type BoxplotDatum = {
4
+ category: string;
5
+ value: number;
6
+ group?: string;
7
+ };
8
+ export type BoxplotProps = BasePlotProps<BoxplotDatum> & Theme & Style & {
9
+ xField?: string;
10
+ yField?: string;
11
+ };
12
+ declare const Boxplot: (props: BoxplotProps) => React.JSX.Element;
13
+ export default Boxplot;
@@ -0,0 +1,88 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/Boxplot/index.tsx
30
+ var Boxplot_exports = {};
31
+ __export(Boxplot_exports, {
32
+ default: () => Boxplot_default
33
+ });
34
+ module.exports = __toCommonJS(Boxplot_exports);
35
+ var import_plots = require("@ant-design/plots");
36
+ var import_react = __toESM(require("react"));
37
+ var import_hooks = require("../ConfigProvider/hooks");
38
+ var import_theme = require("../theme");
39
+ var defaultConfig = (props) => {
40
+ var _a;
41
+ const { data, style = {}, axisYTitle, axisXTitle, xField = "category", yField = "value" } = props;
42
+ const { backgroundColor, palette } = style;
43
+ const hasGroupField = ((_a = (data || [])[0]) == null ? void 0 : _a.group) !== void 0;
44
+ let paletteConfig = { color: void 0 };
45
+ const hasPalette = !!(palette == null ? void 0 : palette[0]);
46
+ const colorField = hasGroupField ? "group" : "category";
47
+ const seriesField = hasGroupField ? "group" : "category";
48
+ if (hasPalette) {
49
+ paletteConfig = {
50
+ color: {
51
+ range: palette
52
+ }
53
+ };
54
+ }
55
+ return {
56
+ data,
57
+ boxType: "boxplot",
58
+ xField,
59
+ yField,
60
+ colorField,
61
+ seriesField,
62
+ axis: {
63
+ y: {
64
+ title: axisYTitle || false
65
+ },
66
+ x: {
67
+ title: axisXTitle || false
68
+ }
69
+ },
70
+ scale: {
71
+ x: { paddingInner: 0.6, paddingOuter: 0.3 },
72
+ series: { paddingInner: 0.3, paddingOuter: 0.1 },
73
+ y: { nice: true },
74
+ ...paletteConfig
75
+ },
76
+ style: { stroke: "black" },
77
+ ...backgroundColor ? { viewStyle: { viewFill: backgroundColor } } : {}
78
+ };
79
+ };
80
+ var Boxplot = (props) => {
81
+ const themeConfig = import_theme.THEME_MAP[props.theme ?? "default"];
82
+ const config = (0, import_hooks.usePlotConfig)("Boxplot", defaultConfig, {
83
+ ...props,
84
+ theme: themeConfig
85
+ });
86
+ return /* @__PURE__ */ import_react.default.createElement(import_plots.Box, { ...config });
87
+ };
88
+ var Boxplot_default = Boxplot;
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import type { ChartComponents, ComponentErrorRender, ErrorRender } from './type';
2
+ import type { ChartComponents, ComponentErrorRender, ErrorRender, TextLabels } from './type';
3
3
  type RenderVisChartProps = {
4
4
  content: string;
5
5
  components: ChartComponents;
@@ -8,6 +8,12 @@ type RenderVisChartProps = {
8
8
  style?: React.CSSProperties;
9
9
  componentErrorRender?: (errorInfo: ComponentErrorRender) => React.ReactElement;
10
10
  errorRender?: (errorInfo: ErrorRender) => React.ReactElement;
11
+ showTabs?: boolean;
12
+ showCodeTab?: boolean;
13
+ showChartTab?: boolean;
14
+ defaultTab?: 'chart' | 'code';
15
+ textLabels?: TextLabels;
16
+ locale?: string;
11
17
  };
12
18
  export declare const RenderVisChart: React.FC<RenderVisChartProps>;
13
19
  export {};
@@ -51,16 +51,77 @@ var G6List = [
51
51
  "network-graph",
52
52
  "indented-tree"
53
53
  ];
54
+ var DEFAULT_LABELS = {
55
+ "zh-CN": {
56
+ chartTab: "图表",
57
+ codeTab: "代码",
58
+ download: "下载",
59
+ copy: "复制",
60
+ copied: "完成",
61
+ renderError: "图表渲染失败",
62
+ parseError: "GPT-Vis parse content error!",
63
+ unsupportedChart: "Chart type not supported"
64
+ },
65
+ "en-US": {
66
+ chartTab: "Chart",
67
+ codeTab: "Code",
68
+ download: "Download",
69
+ copy: "Copy",
70
+ copied: "Copied",
71
+ renderError: "Chart render failed",
72
+ parseError: "Parse content error!",
73
+ unsupportedChart: "Chart type not supported"
74
+ },
75
+ "pt-BR": {
76
+ chartTab: "Gráfico",
77
+ codeTab: "Código",
78
+ download: "Baixar",
79
+ copy: "Copiar",
80
+ copied: "Copiado",
81
+ renderError: "Erro ao renderizar gráfico",
82
+ parseError: "Erro ao analisar conteúdo!",
83
+ unsupportedChart: "Tipo de gráfico não suportado"
84
+ }
85
+ };
54
86
  var RenderVisChart = (0, import_react.memo)(
55
- ({ style, content, components, debug, loadingTimeout, componentErrorRender, errorRender }) => {
87
+ ({
88
+ style,
89
+ content,
90
+ components,
91
+ debug = false,
92
+ loadingTimeout,
93
+ componentErrorRender,
94
+ errorRender,
95
+ showTabs = true,
96
+ showCodeTab = true,
97
+ showChartTab = true,
98
+ defaultTab = "chart",
99
+ textLabels = {},
100
+ locale = "zh-CN"
101
+ }) => {
56
102
  const timeoutRef = (0, import_react.useRef)();
57
103
  const copyTimeoutRef = (0, import_react.useRef)();
58
104
  const [loading, setLoading] = (0, import_react.useState)(true);
59
- const [activeTab, setActiveTab] = (0, import_react.useState)("chart");
60
105
  const [hasRenderError, setHasRenderError] = (0, import_react.useState)(false);
61
106
  const [copied, setCopied] = (0, import_react.useState)(false);
62
107
  const chartRef = (0, import_react.useRef)(null);
63
108
  const chartContainerRef = (0, import_react.useRef)(null);
109
+ const labels = {
110
+ ...DEFAULT_LABELS[locale] || DEFAULT_LABELS["en-US"],
111
+ ...textLabels
112
+ };
113
+ const getValidDefaultTab = () => {
114
+ if (defaultTab === "chart" && showChartTab)
115
+ return "chart";
116
+ if (defaultTab === "code" && showCodeTab)
117
+ return "code";
118
+ if (showChartTab)
119
+ return "chart";
120
+ if (showCodeTab)
121
+ return "code";
122
+ return "chart";
123
+ };
124
+ const [activeTab, setActiveTab] = (0, import_react.useState)(getValidDefaultTab());
64
125
  let chartJson;
65
126
  try {
66
127
  chartJson = JSON.parse(content);
@@ -84,7 +145,7 @@ var RenderVisChart = (0, import_react.memo)(
84
145
  content
85
146
  });
86
147
  }
87
- return /* @__PURE__ */ import_react.default.createElement("div", null, " GPT-Vis parse content error! ");
148
+ return /* @__PURE__ */ import_react.default.createElement("div", null, labels.parseError);
88
149
  }
89
150
  const { type, ...chartProps } = chartJson;
90
151
  const ChartComponent = components[type];
@@ -92,20 +153,22 @@ var RenderVisChart = (0, import_react.memo)(
92
153
  console.log("GPT-Vis withChartCode get chartJson parse from vis-chart code block", chartJson);
93
154
  }
94
155
  if (!ChartComponent) {
95
- const message = `Chart type "${type}" is not supported.`;
156
+ const message = `${labels.unsupportedChart}: "${type}"`;
96
157
  if (errorRender) {
97
158
  return errorRender({
98
159
  error: new Error(message),
99
160
  content
100
161
  });
101
162
  }
102
- return /* @__PURE__ */ import_react.default.createElement("div", null, " ", message, " ");
163
+ return /* @__PURE__ */ import_react.default.createElement("div", null, message);
103
164
  }
104
165
  const FallbackComponent = (fallbackProps) => {
105
166
  const { error } = fallbackProps;
106
167
  if (!hasRenderError) {
107
168
  setHasRenderError(true);
108
- setActiveTab("code");
169
+ if (showCodeTab && showTabs) {
170
+ setActiveTab("code");
171
+ }
109
172
  }
110
173
  if (componentErrorRender) {
111
174
  return componentErrorRender({
@@ -113,7 +176,7 @@ var RenderVisChart = (0, import_react.memo)(
113
176
  content
114
177
  });
115
178
  }
116
- return /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement(import_styles.ErrorMessage, null, "图表渲染失败"));
179
+ return /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement(import_styles.ErrorMessage, null, labels.renderError));
117
180
  };
118
181
  const handleCopy = async () => {
119
182
  try {
@@ -126,7 +189,7 @@ var RenderVisChart = (0, import_react.memo)(
126
189
  setCopied(false);
127
190
  }, 1e3);
128
191
  } catch (error) {
129
- console.error("复制失败:", error);
192
+ console.error("Copy failed:", error);
130
193
  }
131
194
  };
132
195
  const handleDownload = async () => {
@@ -139,7 +202,7 @@ var RenderVisChart = (0, import_react.memo)(
139
202
  });
140
203
  }
141
204
  } catch (error) {
142
- console.error("下载图片失败:", error);
205
+ console.error("Download image failed:", error);
143
206
  }
144
207
  };
145
208
  const isG6 = G6List.includes(type);
@@ -157,7 +220,30 @@ var RenderVisChart = (0, import_react.memo)(
157
220
  chartRef.current.zoomTo(newZoom);
158
221
  }
159
222
  };
160
- return /* @__PURE__ */ import_react.default.createElement(import_styles.TabContainer, { style }, /* @__PURE__ */ import_react.default.createElement(import_styles.TabHeader, null, /* @__PURE__ */ import_react.default.createElement(import_styles.TabLeftGroup, null, /* @__PURE__ */ import_react.default.createElement(import_styles.StyledTabButton, { active: activeTab === "chart", onClick: () => setActiveTab("chart") }, "图表"), /* @__PURE__ */ import_react.default.createElement(import_styles.StyledTabButton, { active: activeTab === "code", onClick: () => setActiveTab("code") }, "代码")), /* @__PURE__ */ import_react.default.createElement(import_styles.TabRightGroup, null, activeTab === "chart" ? /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, isG6 && /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(
223
+ if (!showTabs) {
224
+ return /* @__PURE__ */ import_react.default.createElement(import_styles.StyledGPTVis, { className: "gpt-vis", style }, /* @__PURE__ */ import_react.default.createElement(import_styles.GlobalStyles, null), /* @__PURE__ */ import_react.default.createElement(import_styles.ChartWrapper, { ref: chartContainerRef }, /* @__PURE__ */ import_react.default.createElement(
225
+ import_react_error_boundary.ErrorBoundary,
226
+ {
227
+ FallbackComponent,
228
+ onError: (error, errorInfo) => {
229
+ console.error("GPT-Vis Render error:", error);
230
+ if (debug) {
231
+ console.error("GPT-Vis Render error info:", errorInfo);
232
+ }
233
+ }
234
+ },
235
+ /* @__PURE__ */ import_react.default.createElement(
236
+ ChartComponent,
237
+ {
238
+ ...chartProps,
239
+ onReady: (chart) => {
240
+ chartRef.current = chart;
241
+ }
242
+ }
243
+ )
244
+ )));
245
+ }
246
+ return /* @__PURE__ */ import_react.default.createElement(import_styles.TabContainer, { style }, /* @__PURE__ */ import_react.default.createElement(import_styles.TabHeader, null, /* @__PURE__ */ import_react.default.createElement(import_styles.TabLeftGroup, null, showChartTab && /* @__PURE__ */ import_react.default.createElement(import_styles.StyledTabButton, { active: activeTab === "chart", onClick: () => setActiveTab("chart") }, labels.chartTab), showCodeTab && /* @__PURE__ */ import_react.default.createElement(import_styles.StyledTabButton, { active: activeTab === "code", onClick: () => setActiveTab("code") }, labels.codeTab)), /* @__PURE__ */ import_react.default.createElement(import_styles.TabRightGroup, null, activeTab === "chart" ? /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, isG6 && /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(
161
247
  import_styles.TextButton,
162
248
  {
163
249
  onClick: handleZoomIn,
@@ -171,7 +257,7 @@ var RenderVisChart = (0, import_react.memo)(
171
257
  style: { width: "24px", height: "24px", padding: 0 }
172
258
  },
173
259
  /* @__PURE__ */ import_react.default.createElement(import_icon.ZoomOut, { size: 18 })
174
- ), /* @__PURE__ */ import_react.default.createElement(import_styles.Divider, null)), /* @__PURE__ */ import_react.default.createElement(import_styles.TextButton, { onClick: handleDownload }, /* @__PURE__ */ import_react.default.createElement(import_icon.DownLoad, { size: 16 }), "下载")) : /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(import_styles.TextButton, { onClick: handleCopy }, copied ? /* @__PURE__ */ import_react.default.createElement(import_icon.Check, null) : /* @__PURE__ */ import_react.default.createElement(import_icon.Copy, null), copied ? "完成" : "复制")))), /* @__PURE__ */ import_react.default.createElement(import_styles.TabContent, null, activeTab === "chart" ? /* @__PURE__ */ import_react.default.createElement(
260
+ ), /* @__PURE__ */ import_react.default.createElement(import_styles.Divider, null)), /* @__PURE__ */ import_react.default.createElement(import_styles.TextButton, { onClick: handleDownload }, /* @__PURE__ */ import_react.default.createElement(import_icon.DownLoad, { size: 16 }), labels.download)) : /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(import_styles.TextButton, { onClick: handleCopy }, copied ? /* @__PURE__ */ import_react.default.createElement(import_icon.Check, null) : /* @__PURE__ */ import_react.default.createElement(import_icon.Copy, null), copied ? labels.copied : labels.copy)))), /* @__PURE__ */ import_react.default.createElement(import_styles.TabContent, null, activeTab === "chart" ? /* @__PURE__ */ import_react.default.createElement(
175
261
  import_react_error_boundary.ErrorBoundary,
176
262
  {
177
263
  FallbackComponent,
@@ -179,7 +265,9 @@ var RenderVisChart = (0, import_react.memo)(
179
265
  console.error("GPT-Vis Render error:", error);
180
266
  if (!hasRenderError) {
181
267
  setHasRenderError(true);
182
- setActiveTab("code");
268
+ if (showCodeTab) {
269
+ setActiveTab("code");
270
+ }
183
271
  }
184
272
  if (debug) {
185
273
  console.error("GPT-Vis Render error info:", errorInfo);
@@ -55,7 +55,15 @@ var withCodeBlock = (options) => {
55
55
  loadingTimeout = 5e3,
56
56
  style,
57
57
  errorRender,
58
- componentErrorRender
58
+ componentErrorRender,
59
+ // New options for tab control
60
+ showTabs,
61
+ showCodeTab,
62
+ showChartTab,
63
+ defaultTab,
64
+ // New options for text customization
65
+ textLabels,
66
+ locale
59
67
  } = options;
60
68
  if (isVisChart) {
61
69
  return /* @__PURE__ */ import_react.default.createElement(
@@ -67,7 +75,13 @@ var withCodeBlock = (options) => {
67
75
  debug,
68
76
  loadingTimeout,
69
77
  errorRender,
70
- componentErrorRender
78
+ componentErrorRender,
79
+ showTabs,
80
+ showCodeTab,
81
+ showChartTab,
82
+ defaultTab,
83
+ textLabels,
84
+ locale
71
85
  }
72
86
  );
73
87
  }