Skip to content

Commit 381ff66

Browse files
CopilotAnselmoo
andauthored
Replace deprecated ECharts-GL with TresJS, fix SSR build errors, and add mock benchmark data (#120)
* Initial plan * fix: remove echarts-gl and replace with TresJS for 3D visualization Co-authored-by: Anselmoo <13209783+Anselmoo@users.noreply.github.com> * fix: make ECharts and chart components SSR-safe with dynamic imports Co-authored-by: Anselmoo <13209783+Anselmoo@users.noreply.github.com> * docs: add test page demonstrating chart components Co-authored-by: Anselmoo <13209783+Anselmoo@users.noreply.github.com> * feat: add mock benchmark data and test script with schema validation Co-authored-by: Anselmoo <13209783+Anselmoo@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Anselmoo <13209783+Anselmoo@users.noreply.github.com>
1 parent 3db8a8b commit 381ff66

File tree

9 files changed

+1242
-271
lines changed

9 files changed

+1242
-271
lines changed

docs/.vitepress/theme/components/FitnessLandscape3D.vue

Lines changed: 167 additions & 219 deletions
Large diffs are not rendered by default.

docs/.vitepress/theme/index.ts

Lines changed: 49 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,65 @@
11
// https://vitepress.dev/guide/custom-theme
2-
import { h } from 'vue'
2+
import { h, defineAsyncComponent } from 'vue'
33
import type { Theme } from 'vitepress'
44
import DefaultTheme from 'vitepress/theme'
55
import './style.css'
66

7-
// Import ECharts components
8-
import VChart from 'vue-echarts'
9-
import { use } from 'echarts/core'
10-
import { CanvasRenderer } from 'echarts/renderers'
11-
import { LineChart, ScatterChart, BoxplotChart, BarChart } from 'echarts/charts'
12-
import {
13-
GridComponent,
14-
TooltipComponent,
15-
LegendComponent,
16-
TitleComponent,
17-
VisualMapComponent,
18-
Grid3DComponent,
19-
ToolboxComponent
20-
} from 'echarts/components'
21-
22-
// Import TresJS components
23-
import { TresCanvas } from '@tresjs/core'
24-
25-
// Import chart components
26-
import ECDFChart from './components/ECDFChart.vue'
27-
import ConvergenceChart from './components/ConvergenceChart.vue'
28-
import ViolinPlot from './components/ViolinPlot.vue'
29-
import FitnessLandscape3D from './components/FitnessLandscape3D.vue'
30-
31-
// Register ECharts components
32-
use([
33-
CanvasRenderer,
34-
LineChart,
35-
ScatterChart,
36-
BoxplotChart,
37-
BarChart,
38-
GridComponent,
39-
TooltipComponent,
40-
LegendComponent,
41-
TitleComponent,
42-
VisualMapComponent,
43-
Grid3DComponent,
44-
ToolboxComponent
45-
])
46-
477
export default {
488
extends: DefaultTheme,
499
Layout: () => {
5010
return h(DefaultTheme.Layout, null, {
5111
// https://vitepress.dev/guide/extending-default-theme#layout-slots
5212
})
5313
},
54-
enhanceApp({ app }) {
55-
// Register ECharts
56-
app.component('VChart', VChart)
14+
async enhanceApp({ app }) {
15+
// Only register components on client side
16+
if (typeof window !== 'undefined') {
17+
// Dynamically import and register ECharts
18+
const { default: VChart } = await import('vue-echarts')
19+
const { use } = await import('echarts/core')
20+
const { CanvasRenderer } = await import('echarts/renderers')
21+
const { LineChart, ScatterChart, BoxplotChart, BarChart } = await import('echarts/charts')
22+
const {
23+
GridComponent,
24+
TooltipComponent,
25+
LegendComponent,
26+
TitleComponent,
27+
VisualMapComponent,
28+
ToolboxComponent
29+
} = await import('echarts/components')
30+
31+
// Register ECharts components
32+
use([
33+
CanvasRenderer,
34+
LineChart,
35+
ScatterChart,
36+
BoxplotChart,
37+
BarChart,
38+
GridComponent,
39+
TooltipComponent,
40+
LegendComponent,
41+
TitleComponent,
42+
VisualMapComponent,
43+
ToolboxComponent
44+
])
45+
46+
app.component('VChart', VChart)
5747

58-
// Register TresJS for 3D
59-
app.component('TresCanvas', TresCanvas)
48+
// Register 2D chart components as async
49+
app.component('ECDFChart', defineAsyncComponent(() =>
50+
import('./components/ECDFChart.vue')
51+
))
52+
app.component('ConvergenceChart', defineAsyncComponent(() =>
53+
import('./components/ConvergenceChart.vue')
54+
))
55+
app.component('ViolinPlot', defineAsyncComponent(() =>
56+
import('./components/ViolinPlot.vue')
57+
))
6058

61-
// Register chart components
62-
app.component('ECDFChart', ECDFChart)
63-
app.component('ConvergenceChart', ConvergenceChart)
64-
app.component('ViolinPlot', ViolinPlot)
65-
app.component('FitnessLandscape3D', FitnessLandscape3D)
59+
// Register 3D components as async (client-only)
60+
app.component('FitnessLandscape3D', defineAsyncComponent(() =>
61+
import('./components/FitnessLandscape3D.vue')
62+
))
63+
}
6664
}
6765
} satisfies Theme

0 commit comments

Comments
 (0)