@antv/gpt-vis 0.5.4 → 0.5.6

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 (86) 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 +2 -2
  4. package/dist/cjs/Bar/index.js +38 -7
  5. package/dist/cjs/ChartCodeRender/VisChart.d.ts +7 -1
  6. package/dist/cjs/ChartCodeRender/VisChart.js +100 -12
  7. package/dist/cjs/ChartCodeRender/index.js +16 -2
  8. package/dist/cjs/ChartCodeRender/type.d.ts +104 -5
  9. package/dist/cjs/Column/index.d.ts +2 -3
  10. package/dist/cjs/Column/index.js +38 -7
  11. package/dist/cjs/ConfigProvider/hooks/useConfig.js +2 -1
  12. package/dist/cjs/DualAxes/index.d.ts +1 -1
  13. package/dist/cjs/DualAxes/index.js +20 -8
  14. package/dist/cjs/FishboneDiagram/index.d.ts +1 -0
  15. package/dist/cjs/FishboneDiagram/index.js +21 -7
  16. package/dist/cjs/Histogram/index.d.ts +4 -3
  17. package/dist/cjs/Histogram/index.js +32 -3
  18. package/dist/cjs/IndentedTree/index.d.ts +1 -0
  19. package/dist/cjs/IndentedTree/index.js +32 -20
  20. package/dist/cjs/Line/index.d.ts +2 -3
  21. package/dist/cjs/Line/index.js +36 -3
  22. package/dist/cjs/MindMap/index.d.ts +1 -0
  23. package/dist/cjs/MindMap/index.js +29 -21
  24. package/dist/cjs/Pie/index.d.ts +2 -2
  25. package/dist/cjs/Pie/index.js +22 -3
  26. package/dist/cjs/Radar/index.d.ts +5 -3
  27. package/dist/cjs/Radar/index.js +106 -37
  28. package/dist/cjs/Scatter/index.d.ts +2 -3
  29. package/dist/cjs/Scatter/index.js +46 -3
  30. package/dist/cjs/Treemap/index.d.ts +2 -3
  31. package/dist/cjs/Treemap/index.js +22 -3
  32. package/dist/cjs/WordCloud/index.d.ts +2 -3
  33. package/dist/cjs/WordCloud/index.js +34 -7
  34. package/dist/cjs/theme.d.ts +2 -0
  35. package/dist/cjs/theme.js +133 -0
  36. package/dist/cjs/types/chart.d.ts +11 -0
  37. package/dist/cjs/utils/palette.d.ts +2 -0
  38. package/dist/cjs/utils/palette.js +54 -0
  39. package/dist/cjs/utils/plot.d.ts +1 -0
  40. package/dist/cjs/utils/plot.js +15 -0
  41. package/dist/cjs/version.d.ts +1 -1
  42. package/dist/cjs/version.js +1 -1
  43. package/dist/esm/Area/index.d.ts +2 -3
  44. package/dist/esm/Area/index.js +80 -6
  45. package/dist/esm/Bar/index.d.ts +2 -2
  46. package/dist/esm/Bar/index.js +56 -9
  47. package/dist/esm/ChartCodeRender/VisChart.d.ts +7 -1
  48. package/dist/esm/ChartCodeRender/VisChart.js +144 -34
  49. package/dist/esm/ChartCodeRender/index.js +15 -1
  50. package/dist/esm/ChartCodeRender/type.d.ts +104 -5
  51. package/dist/esm/Column/index.d.ts +2 -3
  52. package/dist/esm/Column/index.js +56 -9
  53. package/dist/esm/ConfigProvider/hooks/useConfig.js +9 -1
  54. package/dist/esm/DualAxes/index.d.ts +1 -1
  55. package/dist/esm/DualAxes/index.js +35 -12
  56. package/dist/esm/FishboneDiagram/index.d.ts +1 -0
  57. package/dist/esm/FishboneDiagram/index.js +23 -7
  58. package/dist/esm/Histogram/index.d.ts +4 -3
  59. package/dist/esm/Histogram/index.js +55 -5
  60. package/dist/esm/IndentedTree/index.d.ts +1 -0
  61. package/dist/esm/IndentedTree/index.js +36 -29
  62. package/dist/esm/Line/index.d.ts +2 -3
  63. package/dist/esm/Line/index.js +63 -4
  64. package/dist/esm/MindMap/index.d.ts +1 -0
  65. package/dist/esm/MindMap/index.js +37 -30
  66. package/dist/esm/Pie/index.d.ts +2 -2
  67. package/dist/esm/Pie/index.js +37 -4
  68. package/dist/esm/Radar/index.d.ts +5 -3
  69. package/dist/esm/Radar/index.js +138 -42
  70. package/dist/esm/Scatter/index.d.ts +2 -3
  71. package/dist/esm/Scatter/index.js +65 -5
  72. package/dist/esm/Treemap/index.d.ts +2 -3
  73. package/dist/esm/Treemap/index.js +38 -4
  74. package/dist/esm/WordCloud/index.d.ts +2 -3
  75. package/dist/esm/WordCloud/index.js +51 -9
  76. package/dist/esm/theme.d.ts +2 -0
  77. package/dist/esm/theme.js +103 -0
  78. package/dist/esm/types/chart.d.ts +11 -0
  79. package/dist/esm/utils/palette.d.ts +2 -0
  80. package/dist/esm/utils/palette.js +2 -0
  81. package/dist/esm/utils/plot.d.ts +1 -0
  82. package/dist/esm/utils/plot.js +10 -0
  83. package/dist/esm/version.d.ts +1 -1
  84. package/dist/esm/version.js +1 -1
  85. package/dist/umd/index.min.js +1 -1
  86. package/package.json +2 -1
@@ -1,19 +1,53 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
6
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
1
7
  import { Bar as ADCBar } from '@ant-design/plots';
2
8
  import { get } from 'lodash';
3
9
  import React from 'react';
4
10
  import { usePlotConfig } from "../ConfigProvider/hooks";
11
+ import { THEME_MAP } from "../theme";
5
12
  var defaultConfig = function defaultConfig(props) {
6
13
  var data = props.data,
7
14
  _props$xField = props.xField,
8
15
  xField = _props$xField === void 0 ? 'category' : _props$xField,
9
16
  _props$yField = props.yField,
10
- yField = _props$yField === void 0 ? 'value' : _props$yField;
17
+ yField = _props$yField === void 0 ? 'value' : _props$yField,
18
+ _props$style = props.style,
19
+ style = _props$style === void 0 ? {} : _props$style,
20
+ _props$theme = props.theme,
21
+ theme = _props$theme === void 0 ? {} : _props$theme;
22
+ var backgroundColor = style.backgroundColor,
23
+ palette = style.palette;
11
24
  var hasGroupField = get(data, '[0].group') !== undefined;
12
25
  var axisYTitle = get(props, 'axis.y.title');
13
- return {
26
+ var hasPalette = !!(palette !== null && palette !== void 0 && palette[0]);
27
+ var paletteConfig = {
28
+ color: undefined
29
+ };
30
+ var radiusStyle = {
31
+ radiusTopLeft: 4,
32
+ radiusTopRight: 4
33
+ };
34
+ if ((theme === null || theme === void 0 ? void 0 : theme.type) === 'academy') {
35
+ radiusStyle = {
36
+ radiusTopLeft: 0,
37
+ radiusTopRight: 0
38
+ };
39
+ }
40
+ if (hasPalette) {
41
+ paletteConfig = {
42
+ color: {
43
+ range: palette
44
+ }
45
+ };
46
+ }
47
+ return _objectSpread({
14
48
  xField: xField,
15
49
  yField: yField,
16
- colorField: hasGroupField ? 'group' : undefined,
50
+ colorField: hasGroupField ? 'group' : xField,
17
51
  tooltip: function tooltip(d) {
18
52
  var tooltipName = axisYTitle || d[xField];
19
53
  return {
@@ -21,15 +55,28 @@ var defaultConfig = function defaultConfig(props) {
21
55
  value: d[yField]
22
56
  };
23
57
  },
24
- style: {
25
- // 圆角样式
26
- radiusTopLeft: 5,
27
- radiusTopRight: 5
58
+ style: _objectSpread(_objectSpread({}, radiusStyle), {}, {
59
+ columnWidthRatio: 0.8
60
+ }),
61
+ scale: _objectSpread({
62
+ y: {
63
+ nice: true
64
+ }
65
+ }, paletteConfig)
66
+ }, backgroundColor ? {
67
+ viewStyle: {
68
+ viewFill: backgroundColor
28
69
  }
29
- };
70
+ } : {
71
+ viewStyle: undefined
72
+ });
30
73
  };
31
74
  var Bar = function Bar(props) {
32
- var config = usePlotConfig('Bar', defaultConfig, props);
75
+ var _props$theme2;
76
+ var themeConfig = THEME_MAP[(_props$theme2 = props.theme) !== null && _props$theme2 !== void 0 ? _props$theme2 : 'default'];
77
+ var config = usePlotConfig('Bar', defaultConfig, _objectSpread(_objectSpread({}, props), {}, {
78
+ theme: themeConfig
79
+ }));
33
80
  return /*#__PURE__*/React.createElement(ADCBar, config);
34
81
  };
35
82
  export default Bar;
@@ -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 {};
@@ -6,6 +6,11 @@ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try
6
6
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
7
7
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
8
8
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
9
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
10
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
11
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
12
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
13
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
9
14
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
10
15
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
11
16
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
@@ -23,42 +28,107 @@ import Loading from "./Loading";
23
28
  import { ChartWrapper, Divider, ErrorMessage, GlobalStyles, StyledGPTVis, StyledTabButton, TabContainer, TabContent, TabHeader, TabLeftGroup, TabRightGroup, TextButton } from "./styles";
24
29
  import { handleCopyCode } from "./utils";
25
30
 
26
- // 注册 JSON 语言支持
31
+ // Register JSON language support for syntax highlighting
27
32
  SyntaxHighlighter.registerLanguage('json', json);
33
+
34
+ // Chart types that support G6 zooming functionality
28
35
  var G6List = ['mind-map', 'fishbone-diagram', 'flow-diagram', 'organization-chart', 'network-graph', 'indented-tree'];
36
+
37
+ // Default text labels by locale
38
+ var DEFAULT_LABELS = {
39
+ 'zh-CN': {
40
+ chartTab: '图表',
41
+ codeTab: '代码',
42
+ download: '下载',
43
+ copy: '复制',
44
+ copied: '完成',
45
+ renderError: '图表渲染失败',
46
+ parseError: 'GPT-Vis parse content error!',
47
+ unsupportedChart: 'Chart type not supported'
48
+ },
49
+ 'en-US': {
50
+ chartTab: 'Chart',
51
+ codeTab: 'Code',
52
+ download: 'Download',
53
+ copy: 'Copy',
54
+ copied: 'Copied',
55
+ renderError: 'Chart render failed',
56
+ parseError: 'Parse content error!',
57
+ unsupportedChart: 'Chart type not supported'
58
+ },
59
+ 'pt-BR': {
60
+ chartTab: 'Gráfico',
61
+ codeTab: 'Código',
62
+ download: 'Baixar',
63
+ copy: 'Copiar',
64
+ copied: 'Copiado',
65
+ renderError: 'Erro ao renderizar gráfico',
66
+ parseError: 'Erro ao analisar conteúdo!',
67
+ unsupportedChart: 'Tipo de gráfico não suportado'
68
+ }
69
+ };
29
70
  export var RenderVisChart = /*#__PURE__*/memo(function (_ref) {
30
71
  var style = _ref.style,
31
72
  content = _ref.content,
32
73
  components = _ref.components,
33
- debug = _ref.debug,
74
+ _ref$debug = _ref.debug,
75
+ debug = _ref$debug === void 0 ? false : _ref$debug,
34
76
  loadingTimeout = _ref.loadingTimeout,
35
77
  componentErrorRender = _ref.componentErrorRender,
36
- errorRender = _ref.errorRender;
78
+ errorRender = _ref.errorRender,
79
+ _ref$showTabs = _ref.showTabs,
80
+ showTabs = _ref$showTabs === void 0 ? true : _ref$showTabs,
81
+ _ref$showCodeTab = _ref.showCodeTab,
82
+ showCodeTab = _ref$showCodeTab === void 0 ? true : _ref$showCodeTab,
83
+ _ref$showChartTab = _ref.showChartTab,
84
+ showChartTab = _ref$showChartTab === void 0 ? true : _ref$showChartTab,
85
+ _ref$defaultTab = _ref.defaultTab,
86
+ defaultTab = _ref$defaultTab === void 0 ? 'chart' : _ref$defaultTab,
87
+ _ref$textLabels = _ref.textLabels,
88
+ textLabels = _ref$textLabels === void 0 ? {} : _ref$textLabels,
89
+ _ref$locale = _ref.locale,
90
+ locale = _ref$locale === void 0 ? 'zh-CN' : _ref$locale;
37
91
  var timeoutRef = useRef();
38
92
  var copyTimeoutRef = useRef();
39
93
  var _useState = useState(true),
40
94
  _useState2 = _slicedToArray(_useState, 2),
41
95
  loading = _useState2[0],
42
96
  setLoading = _useState2[1];
43
- var _useState3 = useState('chart'),
97
+ var _useState3 = useState(false),
44
98
  _useState4 = _slicedToArray(_useState3, 2),
45
- activeTab = _useState4[0],
46
- setActiveTab = _useState4[1];
99
+ hasRenderError = _useState4[0],
100
+ setHasRenderError = _useState4[1];
47
101
  var _useState5 = useState(false),
48
102
  _useState6 = _slicedToArray(_useState5, 2),
49
- hasRenderError = _useState6[0],
50
- setHasRenderError = _useState6[1];
51
- var _useState7 = useState(false),
52
- _useState8 = _slicedToArray(_useState7, 2),
53
- copied = _useState8[0],
54
- setCopied = _useState8[1];
103
+ copied = _useState6[0],
104
+ setCopied = _useState6[1];
55
105
  var chartRef = useRef(null);
56
106
  var chartContainerRef = useRef(null);
107
+
108
+ // Merge default labels with custom labels
109
+ var labels = _objectSpread(_objectSpread({}, DEFAULT_LABELS[locale] || DEFAULT_LABELS['en-US']), textLabels);
110
+
111
+ // Determine valid default tab based on visibility settings
112
+ var getValidDefaultTab = function getValidDefaultTab() {
113
+ if (defaultTab === 'chart' && showChartTab) return 'chart';
114
+ if (defaultTab === 'code' && showCodeTab) return 'code';
115
+ if (showChartTab) return 'chart';
116
+ if (showCodeTab) return 'code';
117
+ return 'chart';
118
+ };
119
+ var _useState7 = useState(getValidDefaultTab()),
120
+ _useState8 = _slicedToArray(_useState7, 2),
121
+ activeTab = _useState8[0],
122
+ setActiveTab = _useState8[1];
57
123
  var chartJson;
124
+
125
+ // Parse chart JSON with error handling
58
126
  try {
59
127
  chartJson = JSON.parse(content);
60
128
  } catch (e) {
61
129
  var parseError = e;
130
+
131
+ // Clear any existing timeout and set loading timeout
62
132
  if (timeoutRef.current) {
63
133
  clearTimeout(timeoutRef.current);
64
134
  if (debug) {
@@ -68,6 +138,8 @@ export var RenderVisChart = /*#__PURE__*/memo(function (_ref) {
68
138
  timeoutRef.current = setTimeout(function () {
69
139
  setLoading(false);
70
140
  }, loadingTimeout);
141
+
142
+ // Show loading state while timeout is active
71
143
  if (loading) {
72
144
  return /*#__PURE__*/React.createElement(StyledGPTVis, {
73
145
  className: "gpt-vis",
@@ -75,43 +147,49 @@ export var RenderVisChart = /*#__PURE__*/memo(function (_ref) {
75
147
  }, /*#__PURE__*/React.createElement(Loading, null));
76
148
  }
77
149
 
78
- // 使用自定义错误渲染函数
150
+ // Use custom error render function if provided
79
151
  if (errorRender) {
80
152
  return errorRender({
81
153
  error: parseError,
82
154
  content: content
83
155
  });
84
156
  }
85
- return /*#__PURE__*/React.createElement("div", null, " GPT-Vis parse content error! ");
157
+
158
+ // Return default error message
159
+ return /*#__PURE__*/React.createElement("div", null, labels.parseError);
86
160
  }
87
161
  var _chartJson = chartJson,
88
162
  type = _chartJson.type,
89
163
  chartProps = _objectWithoutProperties(_chartJson, _excluded);
90
164
  var ChartComponent = components[type];
91
165
 
92
- // debug mode print chartJson
166
+ // Debug mode: print chart JSON
93
167
  if (debug) {
94
168
  console.log('GPT-Vis withChartCode get chartJson parse from vis-chart code block', chartJson);
95
169
  }
96
170
 
97
- // If the chart type is not supported, display an error message
171
+ // Handle unsupported chart types
98
172
  if (!ChartComponent) {
99
- var message = "Chart type \"".concat(type, "\" is not supported.");
173
+ var message = "".concat(labels.unsupportedChart, ": \"").concat(type, "\"");
100
174
  if (errorRender) {
101
175
  return errorRender({
102
176
  error: new Error(message),
103
177
  content: content
104
178
  });
105
179
  }
106
- return /*#__PURE__*/React.createElement("div", null, " ", message, " ");
180
+ return /*#__PURE__*/React.createElement("div", null, message);
107
181
  }
182
+
183
+ // Error fallback component for chart rendering errors
108
184
  var FallbackComponent = function FallbackComponent(fallbackProps) {
109
185
  var error = fallbackProps.error;
110
186
 
111
- // 设置渲染错误状态并切换到代码 tab
187
+ // Set render error state and switch to code tab
112
188
  if (!hasRenderError) {
113
189
  setHasRenderError(true);
114
- setActiveTab('code');
190
+ if (showCodeTab && showTabs) {
191
+ setActiveTab('code');
192
+ }
115
193
  }
116
194
  if (componentErrorRender) {
117
195
  return componentErrorRender({
@@ -120,9 +198,11 @@ export var RenderVisChart = /*#__PURE__*/memo(function (_ref) {
120
198
  });
121
199
  }
122
200
 
123
- // 返回一个简单的错误提示
124
- return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(ErrorMessage, null, "\u56FE\u8868\u6E32\u67D3\u5931\u8D25"));
201
+ // Return simple error message
202
+ return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(ErrorMessage, null, labels.renderError));
125
203
  };
204
+
205
+ // Handle copy functionality
126
206
  var handleCopy = /*#__PURE__*/function () {
127
207
  var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
128
208
  return _regeneratorRuntime().wrap(function _callee$(_context) {
@@ -134,12 +214,12 @@ export var RenderVisChart = /*#__PURE__*/memo(function (_ref) {
134
214
  case 3:
135
215
  setCopied(true);
136
216
 
137
- // 清除之前的定时器
217
+ // Clear previous timeout
138
218
  if (copyTimeoutRef.current) {
139
219
  clearTimeout(copyTimeoutRef.current);
140
220
  }
141
221
 
142
- // 3秒后恢复原状态
222
+ // Reset state after 1 second
143
223
  copyTimeoutRef.current = setTimeout(function () {
144
224
  setCopied(false);
145
225
  }, 1000);
@@ -148,7 +228,7 @@ export var RenderVisChart = /*#__PURE__*/memo(function (_ref) {
148
228
  case 8:
149
229
  _context.prev = 8;
150
230
  _context.t0 = _context["catch"](0);
151
- console.error('复制失败:', _context.t0);
231
+ console.error('Copy failed:', _context.t0);
152
232
  case 11:
153
233
  case "end":
154
234
  return _context.stop();
@@ -159,6 +239,8 @@ export var RenderVisChart = /*#__PURE__*/memo(function (_ref) {
159
239
  return _ref2.apply(this, arguments);
160
240
  };
161
241
  }();
242
+
243
+ // Handle download functionality
162
244
  var handleDownload = /*#__PURE__*/function () {
163
245
  var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
164
246
  var result;
@@ -187,7 +269,7 @@ export var RenderVisChart = /*#__PURE__*/memo(function (_ref) {
187
269
  case 9:
188
270
  _context2.prev = 9;
189
271
  _context2.t0 = _context2["catch"](0);
190
- console.error('下载图片失败:', _context2.t0);
272
+ console.error('Download image failed:', _context2.t0);
191
273
  case 12:
192
274
  case "end":
193
275
  return _context2.stop();
@@ -198,9 +280,11 @@ export var RenderVisChart = /*#__PURE__*/memo(function (_ref) {
198
280
  return _ref3.apply(this, arguments);
199
281
  };
200
282
  }();
283
+
284
+ // Check if chart supports G6 zoom functionality
201
285
  var isG6 = G6List.includes(type);
202
286
 
203
- // 缩放功能函数
287
+ // Zoom out functionality
204
288
  var handleZoomOut = function handleZoomOut() {
205
289
  if (chartRef.current && typeof chartRef.current.zoomTo === 'function') {
206
290
  var currentZoom = chartRef.current.getZoom() || 1;
@@ -208,6 +292,8 @@ export var RenderVisChart = /*#__PURE__*/memo(function (_ref) {
208
292
  chartRef.current.zoomTo(newZoom);
209
293
  }
210
294
  };
295
+
296
+ // Zoom in functionality
211
297
  var handleZoomIn = function handleZoomIn() {
212
298
  if (chartRef.current && typeof chartRef.current.zoomTo === 'function') {
213
299
  var currentZoom = chartRef.current.getZoom() || 1;
@@ -216,20 +302,42 @@ export var RenderVisChart = /*#__PURE__*/memo(function (_ref) {
216
302
  }
217
303
  };
218
304
 
219
- // Render the supported chart component with data
305
+ // Render without tabs if showTabs is false
306
+ if (!showTabs) {
307
+ return /*#__PURE__*/React.createElement(StyledGPTVis, {
308
+ className: "gpt-vis",
309
+ style: style
310
+ }, /*#__PURE__*/React.createElement(GlobalStyles, null), /*#__PURE__*/React.createElement(ChartWrapper, {
311
+ ref: chartContainerRef
312
+ }, /*#__PURE__*/React.createElement(ErrorBoundary, {
313
+ FallbackComponent: FallbackComponent,
314
+ onError: function onError(error, errorInfo) {
315
+ console.error('GPT-Vis Render error:', error);
316
+ if (debug) {
317
+ console.error('GPT-Vis Render error info:', errorInfo);
318
+ }
319
+ }
320
+ }, /*#__PURE__*/React.createElement(ChartComponent, _extends({}, chartProps, {
321
+ onReady: function onReady(chart) {
322
+ chartRef.current = chart;
323
+ }
324
+ })))));
325
+ }
326
+
327
+ // Render with tabs
220
328
  return /*#__PURE__*/React.createElement(TabContainer, {
221
329
  style: style
222
- }, /*#__PURE__*/React.createElement(TabHeader, null, /*#__PURE__*/React.createElement(TabLeftGroup, null, /*#__PURE__*/React.createElement(StyledTabButton, {
330
+ }, /*#__PURE__*/React.createElement(TabHeader, null, /*#__PURE__*/React.createElement(TabLeftGroup, null, showChartTab && /*#__PURE__*/React.createElement(StyledTabButton, {
223
331
  active: activeTab === 'chart',
224
332
  onClick: function onClick() {
225
333
  return setActiveTab('chart');
226
334
  }
227
- }, "\u56FE\u8868"), /*#__PURE__*/React.createElement(StyledTabButton, {
335
+ }, labels.chartTab), showCodeTab && /*#__PURE__*/React.createElement(StyledTabButton, {
228
336
  active: activeTab === 'code',
229
337
  onClick: function onClick() {
230
338
  return setActiveTab('code');
231
339
  }
232
- }, "\u4EE3\u7801")), /*#__PURE__*/React.createElement(TabRightGroup, null, activeTab === 'chart' ? /*#__PURE__*/React.createElement(React.Fragment, null, isG6 && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(TextButton, {
340
+ }, labels.codeTab)), /*#__PURE__*/React.createElement(TabRightGroup, null, activeTab === 'chart' ? /*#__PURE__*/React.createElement(React.Fragment, null, isG6 && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(TextButton, {
233
341
  onClick: handleZoomIn,
234
342
  style: {
235
343
  width: '24px',
@@ -251,15 +359,17 @@ export var RenderVisChart = /*#__PURE__*/memo(function (_ref) {
251
359
  onClick: handleDownload
252
360
  }, /*#__PURE__*/React.createElement(DownLoad, {
253
361
  size: 16
254
- }), "\u4E0B\u8F7D")) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(TextButton, {
362
+ }), labels.download)) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(TextButton, {
255
363
  onClick: handleCopy
256
- }, copied ? /*#__PURE__*/React.createElement(Check, null) : /*#__PURE__*/React.createElement(Copy, null), copied ? '完成' : '复制')))), /*#__PURE__*/React.createElement(TabContent, null, activeTab === 'chart' ? /*#__PURE__*/React.createElement(ErrorBoundary, {
364
+ }, copied ? /*#__PURE__*/React.createElement(Check, null) : /*#__PURE__*/React.createElement(Copy, null), copied ? labels.copied : labels.copy)))), /*#__PURE__*/React.createElement(TabContent, null, activeTab === 'chart' ? /*#__PURE__*/React.createElement(ErrorBoundary, {
257
365
  FallbackComponent: FallbackComponent,
258
366
  onError: function onError(error, errorInfo) {
259
367
  console.error('GPT-Vis Render error:', error);
260
368
  if (!hasRenderError) {
261
369
  setHasRenderError(true);
262
- setActiveTab('code');
370
+ if (showCodeTab) {
371
+ setActiveTab('code');
372
+ }
263
373
  }
264
374
  if (debug) {
265
375
  console.error('GPT-Vis Render error info:', errorInfo);
@@ -40,7 +40,13 @@ var withCodeBlock = function withCodeBlock(options) {
40
40
  loadingTimeout = _options$loadingTimeo === void 0 ? 5000 : _options$loadingTimeo,
41
41
  style = options.style,
42
42
  errorRender = options.errorRender,
43
- componentErrorRender = options.componentErrorRender;
43
+ componentErrorRender = options.componentErrorRender,
44
+ showTabs = options.showTabs,
45
+ showCodeTab = options.showCodeTab,
46
+ showChartTab = options.showChartTab,
47
+ defaultTab = options.defaultTab,
48
+ textLabels = options.textLabels,
49
+ locale = options.locale;
44
50
 
45
51
  // If the code block is a VisChart, render the corresponding chart component
46
52
  if (isVisChart) {
@@ -52,6 +58,14 @@ var withCodeBlock = function withCodeBlock(options) {
52
58
  loadingTimeout: loadingTimeout,
53
59
  errorRender: errorRender,
54
60
  componentErrorRender: componentErrorRender
61
+ // Pass new props to RenderVisChart
62
+ ,
63
+ showTabs: showTabs,
64
+ showCodeTab: showCodeTab,
65
+ showChartTab: showChartTab,
66
+ defaultTab: defaultTab,
67
+ textLabels: textLabels,
68
+ locale: locale
55
69
  });
56
70
  }
57
71
 
@@ -1,73 +1,172 @@
1
1
  import type { FC } from 'react';
2
2
  import type { Components, ExtraProps } from 'react-markdown';
3
3
  /**
4
+ * Text labels type for internationalization
5
+ * 文本标签类型 - 用于国际化
6
+ */
7
+ export type TextLabels = {
8
+ chartTab?: string;
9
+ codeTab?: string;
10
+ download?: string;
11
+ copy?: string;
12
+ copied?: string;
13
+ renderError?: string;
14
+ parseError?: string;
15
+ unsupportedChart?: string;
16
+ };
17
+ /**
18
+ * Chart enhancement options - contains all new feature configurations
19
+ * 图表增强选项 - 包含所有新增的功能配置
20
+ */
21
+ export type ChartEnhancementOptions = {
22
+ /**
23
+ * Controls whether tabs are displayed (default: true)
24
+ * 控制是否显示标签页 (默认: true)
25
+ */
26
+ showTabs?: boolean;
27
+ /**
28
+ * Controls whether code tab is shown (default: true)
29
+ * 控制是否显示代码标签页 (默认: true)
30
+ */
31
+ showCodeTab?: boolean;
32
+ /**
33
+ * Controls whether chart tab is shown (default: true)
34
+ * 控制是否显示图表标签页 (默认: true)
35
+ */
36
+ showChartTab?: boolean;
37
+ /**
38
+ * Default active tab (default: 'chart')
39
+ * 默认激活的标签页 (默认: 'chart')
40
+ */
41
+ defaultTab?: 'chart' | 'code';
42
+ /**
43
+ * Custom text labels
44
+ * 自定义文本标签
45
+ */
46
+ textLabels?: TextLabels;
47
+ /**
48
+ * Locale setting for default text labels (default: 'zh-CN')
49
+ * Supports: 'zh-CN' | 'en-US' | 'pt-BR'
50
+ * 语言区域设置,用于默认文本标签 (默认: 'zh-CN')
51
+ * 支持: 'zh-CN' | 'en-US' | 'pt-BR'
52
+ */
53
+ locale?: string;
54
+ };
55
+ /**
56
+ * Error render function type
4
57
  * 错误渲染函数类型
5
58
  */
6
59
  export type ErrorRender = {
7
- /** 错误对象 */
60
+ /** Error object | 错误对象 */
8
61
  error?: Error;
9
- /** 原始内容 */
62
+ /** Original content | 原始内容 */
10
63
  content: string;
11
64
  };
65
+ /**
66
+ * Component error render type
67
+ * 组件错误渲染类型
68
+ */
12
69
  export type ComponentErrorRender = {
13
- /** 错误对象 */
70
+ /** Error object | 错误对象 */
14
71
  error?: Error;
15
- /** 原始内容 */
72
+ /** Original content | 原始内容 */
16
73
  content: string;
17
74
  };
75
+ /**
76
+ * Options for withChartCode HOC
77
+ * withChartCode 高阶组件选项
78
+ */
18
79
  export type WithChartCodeOptions = {
19
80
  /**
81
+ * Additional chart components to load
20
82
  * 要额外加载的图表组件
21
83
  */
22
84
  components: ChartComponents;
23
85
  /**
86
+ * Custom renderers for other language code blocks
24
87
  * 自定义其它语言代码块渲染器
25
88
  */
26
89
  languageRenderers?: LanguageRenderers;
27
90
  /**
91
+ * Default code renderer
28
92
  * 默认的代码渲染器
29
93
  */
30
94
  defaultRenderer?: CodeRenderer;
31
95
  /**
96
+ * Enable debug logging
32
97
  * 打开调试日志
33
98
  */
34
99
  debug?: boolean;
35
100
  /**
101
+ * Loading animation timeout, default 5s
36
102
  * 设置loading动画的超时时间,默认为 5s
37
103
  */
38
104
  loadingTimeout?: number;
39
105
  /**
106
+ * Chart styles, configure container styles
40
107
  * 图表样式,配置容器样式
41
108
  */
42
109
  style?: React.CSSProperties;
43
110
  /**
111
+ * Custom component error render function
44
112
  * 自定义组件错误渲染函数
45
113
  */
46
114
  componentErrorRender?: (errorInfo: ComponentErrorRender) => React.ReactElement;
47
115
  /**
116
+ * Custom error render function
48
117
  * 自定义错误渲染函数
49
118
  */
50
119
  errorRender?: (errorInfo: ErrorRender) => React.ReactElement;
51
- };
120
+ } & ChartEnhancementOptions;
121
+ /**
122
+ * RenderVisChart component props type
123
+ * RenderVisChart 组件属性类型
124
+ */
125
+ export type RenderVisChartProps = {
126
+ /** Chart content string | 图表内容字符串 */
127
+ content: string;
128
+ /** Chart components dictionary | 图表组件字典 */
129
+ components: ChartComponents;
130
+ /** Enable debug mode | 启用调试模式 */
131
+ debug?: boolean;
132
+ /** Loading timeout in milliseconds | 加载超时时间(毫秒) */
133
+ loadingTimeout: number;
134
+ /** Container styles | 容器样式 */
135
+ style?: React.CSSProperties;
136
+ /** Custom component error renderer | 自定义组件错误渲染器 */
137
+ componentErrorRender?: (errorInfo: ComponentErrorRender) => React.ReactElement;
138
+ /** Custom error renderer | 自定义错误渲染器 */
139
+ errorRender?: (errorInfo: ErrorRender) => React.ReactElement;
140
+ } & ChartEnhancementOptions;
52
141
  /**
142
+ * Chart render data interface, for future extension, this is just an example
53
143
  * 图表渲染数据接口,后续拓展,这里只是写个示例
54
144
  */
55
145
  export interface ChartJson {
146
+ /** Chart type | 图表类型 */
56
147
  type: string;
148
+ /** Chart data | 图表数据 */
57
149
  data: any;
58
150
  }
59
151
  /**
152
+ * Chart components dictionary
60
153
  * 图表组件字典
61
154
  */
62
155
  export interface ChartComponents {
63
156
  [key: string]: FC<any>;
64
157
  }
65
158
  /**
159
+ * Code block renderer interface
66
160
  * 代码块渲染器接口
67
161
  */
68
162
  export type CodeBlockComponent = Components['code'];
163
+ /**
164
+ * Code renderer type
165
+ * 代码渲染器类型
166
+ */
69
167
  type CodeRenderer = FC<React.ClassAttributes<HTMLElement> & React.HTMLAttributes<HTMLElement> & ExtraProps>;
70
168
  /**
169
+ * Custom renderers for other language code blocks
71
170
  * 自定义其它语言代码块渲染器
72
171
  */
73
172
  interface LanguageRenderers {