@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.
- package/dist/cjs/Area/index.d.ts +2 -3
- package/dist/cjs/Area/index.js +48 -5
- package/dist/cjs/Bar/index.d.ts +2 -2
- package/dist/cjs/Bar/index.js +38 -7
- package/dist/cjs/ChartCodeRender/VisChart.d.ts +7 -1
- package/dist/cjs/ChartCodeRender/VisChart.js +100 -12
- package/dist/cjs/ChartCodeRender/index.js +16 -2
- package/dist/cjs/ChartCodeRender/type.d.ts +104 -5
- package/dist/cjs/Column/index.d.ts +2 -3
- package/dist/cjs/Column/index.js +38 -7
- package/dist/cjs/ConfigProvider/hooks/useConfig.js +2 -1
- package/dist/cjs/DualAxes/index.d.ts +1 -1
- package/dist/cjs/DualAxes/index.js +20 -8
- package/dist/cjs/FishboneDiagram/index.d.ts +1 -0
- package/dist/cjs/FishboneDiagram/index.js +21 -7
- package/dist/cjs/Histogram/index.d.ts +4 -3
- package/dist/cjs/Histogram/index.js +32 -3
- package/dist/cjs/IndentedTree/index.d.ts +1 -0
- package/dist/cjs/IndentedTree/index.js +32 -20
- package/dist/cjs/Line/index.d.ts +2 -3
- package/dist/cjs/Line/index.js +36 -3
- package/dist/cjs/MindMap/index.d.ts +1 -0
- package/dist/cjs/MindMap/index.js +29 -21
- package/dist/cjs/Pie/index.d.ts +2 -2
- package/dist/cjs/Pie/index.js +22 -3
- package/dist/cjs/Radar/index.d.ts +5 -3
- package/dist/cjs/Radar/index.js +106 -37
- package/dist/cjs/Scatter/index.d.ts +2 -3
- package/dist/cjs/Scatter/index.js +46 -3
- package/dist/cjs/Treemap/index.d.ts +2 -3
- package/dist/cjs/Treemap/index.js +22 -3
- package/dist/cjs/WordCloud/index.d.ts +2 -3
- package/dist/cjs/WordCloud/index.js +34 -7
- package/dist/cjs/theme.d.ts +2 -0
- package/dist/cjs/theme.js +133 -0
- package/dist/cjs/types/chart.d.ts +11 -0
- package/dist/cjs/utils/palette.d.ts +2 -0
- package/dist/cjs/utils/palette.js +54 -0
- package/dist/cjs/utils/plot.d.ts +1 -0
- package/dist/cjs/utils/plot.js +15 -0
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/Area/index.d.ts +2 -3
- package/dist/esm/Area/index.js +80 -6
- package/dist/esm/Bar/index.d.ts +2 -2
- package/dist/esm/Bar/index.js +56 -9
- package/dist/esm/ChartCodeRender/VisChart.d.ts +7 -1
- package/dist/esm/ChartCodeRender/VisChart.js +144 -34
- package/dist/esm/ChartCodeRender/index.js +15 -1
- package/dist/esm/ChartCodeRender/type.d.ts +104 -5
- package/dist/esm/Column/index.d.ts +2 -3
- package/dist/esm/Column/index.js +56 -9
- package/dist/esm/ConfigProvider/hooks/useConfig.js +9 -1
- package/dist/esm/DualAxes/index.d.ts +1 -1
- package/dist/esm/DualAxes/index.js +35 -12
- package/dist/esm/FishboneDiagram/index.d.ts +1 -0
- package/dist/esm/FishboneDiagram/index.js +23 -7
- package/dist/esm/Histogram/index.d.ts +4 -3
- package/dist/esm/Histogram/index.js +55 -5
- package/dist/esm/IndentedTree/index.d.ts +1 -0
- package/dist/esm/IndentedTree/index.js +36 -29
- package/dist/esm/Line/index.d.ts +2 -3
- package/dist/esm/Line/index.js +63 -4
- package/dist/esm/MindMap/index.d.ts +1 -0
- package/dist/esm/MindMap/index.js +37 -30
- package/dist/esm/Pie/index.d.ts +2 -2
- package/dist/esm/Pie/index.js +37 -4
- package/dist/esm/Radar/index.d.ts +5 -3
- package/dist/esm/Radar/index.js +138 -42
- package/dist/esm/Scatter/index.d.ts +2 -3
- package/dist/esm/Scatter/index.js +65 -5
- package/dist/esm/Treemap/index.d.ts +2 -3
- package/dist/esm/Treemap/index.js +38 -4
- package/dist/esm/WordCloud/index.d.ts +2 -3
- package/dist/esm/WordCloud/index.js +51 -9
- package/dist/esm/theme.d.ts +2 -0
- package/dist/esm/theme.js +103 -0
- package/dist/esm/types/chart.d.ts +11 -0
- package/dist/esm/utils/palette.d.ts +2 -0
- package/dist/esm/utils/palette.js +2 -0
- package/dist/esm/utils/plot.d.ts +1 -0
- package/dist/esm/utils/plot.js +10 -0
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/umd/index.min.js +1 -1
- package/package.json +2 -1
package/dist/esm/Bar/index.js
CHANGED
|
@@ -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
|
-
|
|
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' :
|
|
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
|
-
|
|
27
|
-
|
|
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
|
|
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
|
-
//
|
|
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(
|
|
97
|
+
var _useState3 = useState(false),
|
|
44
98
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
45
|
-
|
|
46
|
-
|
|
99
|
+
hasRenderError = _useState4[0],
|
|
100
|
+
setHasRenderError = _useState4[1];
|
|
47
101
|
var _useState5 = useState(false),
|
|
48
102
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
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
|
-
//
|
|
171
|
+
// Handle unsupported chart types
|
|
98
172
|
if (!ChartComponent) {
|
|
99
|
-
var message = "
|
|
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,
|
|
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
|
-
//
|
|
187
|
+
// Set render error state and switch to code tab
|
|
112
188
|
if (!hasRenderError) {
|
|
113
189
|
setHasRenderError(true);
|
|
114
|
-
|
|
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,
|
|
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
|
-
//
|
|
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('
|
|
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('
|
|
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
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
}),
|
|
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 ?
|
|
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
|
-
|
|
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 {
|