visualifyjs 2.5.3 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/mem/TIMELINE.md +36 -0
- package/.claude/mem/notes/2026-02-11-3d-visualization-docs-fix-external-script-solution.md +24 -0
- package/.claude/mem/notes/2026-02-11-3d-visualization-docs-fix-session-summary.md +43 -0
- package/.claude/mem/notes/2026-02-11-cli-fix-editor-command-alias.md +26 -0
- package/.claude/mem/notes/2026-02-11-phase-3-developer-experience-completed.md +51 -0
- package/.claude/mem/notes/2026-02-11-phase-4-web-workers-implementation-complete.md +59 -0
- package/.claude/mem/notes/2026-02-11-visualify-phase-2-3d-visualization-complete.md +50 -0
- package/.claude/mem/notes/2026-02-11-visualify-phase-2-committed-ready-for-phase-3.md +33 -0
- package/.claude/mem/notes/2026-02-11-visualify-phase-3-complete-developer-experience.md +52 -0
- package/.claude/mem/notes/2026-02-11-visualify-repository-cleanup-complete.md +28 -0
- package/.claude/mem/notes/2026-02-18-codebase-cleanup-docsify-plugin-documentation.md +37 -0
- package/.claude/mem/notes/2026-02-19-css-grid-layout-fix-displaycontents-on-vcontroller.md +18 -0
- package/.claude/mem/notes/2026-02-19-docsify-plugin-fixes-latex-and-visualify-code-bloc.md +26 -0
- package/.claude/mem/notes/2026-02-19-page-mode-docs-update-decisions.md +23 -0
- package/.claude/mem/notes/2026-02-19-react-context-infinite-re-render-loop-fix-pattern.md +31 -0
- package/.claude/mem/notes/2026-02-19-version-300-bump-and-build-fixes.md +32 -0
- package/.claude/mem/notes/2026-02-19-visualify-build-deployment-architecture-bug-fixes.md +25 -0
- package/.claude/mem/notes/2026-02-19-visualify-dist-iife-self-contained-build-config.md +30 -0
- package/.claude/mem/notes/2026-02-19-visualify-infinite-loop-i18n-fixes.md +31 -0
- package/.claude/mem/notes/2026-02-19-visualify-v3-bundle-splitting-docs-restructuring.md +32 -0
- package/.claude/mem/notes/2026-02-20-bundle-externalization-final-architecture.md +29 -0
- package/.claude/mem/notes/2026-02-20-chromium-page-fix-unstable-keys-and-double-event-b.md +27 -0
- package/.claude/mem/notes/2026-02-20-console-cleanup-bundle-optimization-commit.md +20 -0
- package/.claude/mem/notes/2026-02-20-dotbio-dot-plot-fix-useeffect-dependency.md +21 -0
- package/.claude/mem/notes/2026-02-20-public-folder-cleanup-and-readme-rewrite.md +25 -0
- package/.claude/mem/notes/2026-02-20-v300-release-and-beta-channel-strategy.md +29 -0
- package/.claude/mem/notes/2026-02-20-visium-background-image-unknown-legend-fix.md +19 -0
- package/.claude/mem/notes/2026-02-20-visualify-cdn-loader-bundle-externalization.md +34 -0
- package/.claude/mem/sessions/session-2026-02-20-031524.md +54 -0
- package/.claude/settings.local.json +21 -0
- package/.github/workflows/static.yml.bak +51 -51
- package/.sisyphus/boulder.json +65 -0
- package/.sisyphus/plans/phase-4-advanced-optimizations.md +217 -0
- package/LICENSE +674 -674
- package/README.md +94 -59
- package/config-overrides.js +31 -31
- package/dist/stats.html +4949 -0
- package/dist/visualify-3d.esm.js +1 -0
- package/dist/visualify-3d.js +1 -0
- package/dist/visualify-core.esm.js +1 -0
- package/dist/visualify-core.js +1 -0
- package/dist/visualify-docs.esm.js +1 -0
- package/dist/visualify-docs.js +1 -0
- package/dist/visualify-loader.js +1 -0
- package/dist/visualify-pages.esm.js +1 -0
- package/dist/visualify-pages.js +1 -0
- package/dist/visualify-portal.esm.js +1 -0
- package/dist/visualify-portal.js +1 -0
- package/dist/visualify-shared.js +26571 -0
- package/dist/visualify.js +1 -188
- package/docs/CHANGELOG.md +148 -0
- package/docs/cli/commands.md +513 -0
- package/docs/configuration/visualify-json.md +474 -0
- package/docs/docs/3d-visualization.md +374 -0
- package/docs/docs/CLI.md +303 -34
- package/docs/docs/README.md +65 -65
- package/docs/docs/Rechart/bar.md +190 -190
- package/docs/docs/Rechart/funnel.md +241 -193
- package/docs/docs/Rechart/line.md +355 -355
- package/docs/docs/Rechart/pie.md +225 -225
- package/docs/docs/Rechart/radar.md +253 -253
- package/docs/docs/Rechart/scatter.md +298 -0
- package/docs/docs/_404.md +51 -51
- package/docs/docs/_coverpage.md +11 -11
- package/docs/docs/_sidebar.md +54 -43
- package/docs/docs/components/dotBio.md +87 -34
- package/docs/docs/components/echart.md +171 -82
- package/docs/docs/components/html.md +61 -34
- package/docs/docs/components/macaron.md +156 -145
- package/docs/docs/components/markdown.md +42 -0
- package/docs/docs/components/more.md +183 -142
- package/docs/docs/components/plotly.md +132 -62
- package/docs/docs/components/scatterL.md +171 -70
- package/docs/docs/components/visium.md +112 -57
- package/docs/docs/configuration.md +121 -123
- package/docs/docs/deploy.md +31 -31
- package/docs/docs/docsify-plugin.md +655 -0
- package/docs/docs/hmr.md +165 -0
- package/docs/docs/i18n.md +332 -0
- package/docs/docs/log.md +30 -1
- package/docs/docs/more-pages.md +23 -23
- package/docs/docs/quickstart.md +148 -119
- package/docs/docs/rechart-attributes.md +74 -74
- package/docs/docs/rechart-basic-usage.md +160 -162
- package/docs/docs/theme.md +5 -5
- package/docs/docs/typescript.md +306 -0
- package/docs/docs/visual-editor.md +359 -0
- package/docs/index.html +85 -71
- package/docs/manifest.json +23 -23
- package/docs/migration/v3-migration.md +392 -0
- package/docs/static/css/fluff-stuff.css +169 -169
- package/docs/static/css/font-awesome.min.css +4 -4
- package/docs/static/css/visualify.css +6 -25
- package/docs/static/js/3d-viz-examples.js +181 -0
- package/docs/static/js/configuration.js +630 -448
- package/docs/static/js/visualify.js +1 -188
- package/package.json +106 -84
- package/rollup.config.mjs +766 -76
- package/src/_css/404.css +115 -115
- package/src/_css/App.css +37 -37
- package/src/_css/autoSuggestion.css +26 -26
- package/src/_css/circular-progress.css +32 -32
- package/src/_css/index.css +36 -36
- package/src/_css/modern.css +350 -25
- package/src/_media/corner.svg +8 -8
- package/src/_media/download.svg +3 -3
- package/src/_media/logo.svg +14 -14
- package/src/_test/App.test.js +15 -15
- package/src/_utils/reportWebVitals.js +13 -13
- package/src/a11y/README.md +177 -0
- package/src/a11y/aria-labels.js +339 -0
- package/src/a11y/color-contrast.js +535 -0
- package/src/a11y/index.js +197 -0
- package/src/a11y/keyboard-nav.js +523 -0
- package/src/a11y/styles.css +165 -0
- package/src/cli/commands/dev.js +214 -0
- package/src/cli/commands/docs.js +521 -0
- package/src/cli/commands/edit.js +379 -0
- package/src/cli/commands/init.js +213 -0
- package/src/cli/commands/portal.js +236 -0
- package/src/cli/dev-server.js +530 -0
- package/src/cli/hmr.js +456 -0
- package/src/cli/index.js +180 -0
- package/src/cli/utils/config.js +207 -0
- package/src/cli/utils/logger.js +241 -0
- package/src/config/defaults.ts +122 -0
- package/src/config/index.ts +72 -0
- package/src/config/loader.ts +478 -0
- package/src/config/schema.ts +227 -0
- package/src/config/validator.ts +337 -0
- package/src/core/appContext.js +34 -27
- package/src/core/components/Bar.js +383 -0
- package/src/core/components/Bar3D.js +473 -0
- package/src/core/components/LargeDatasetChart.js +296 -0
- package/src/core/components/Line3D.js +310 -0
- package/src/core/components/Scatter.js +392 -188
- package/src/core/components/Scatter3D.js +455 -0
- package/src/core/components/ScatterBio.js +601 -572
- package/src/core/components/Surface3D.js +326 -0
- package/src/core/components/ThreeCustom.js +648 -0
- package/src/core/components/ThreeScene.js +459 -0
- package/src/core/components/VisiumPlot.js +191 -165
- package/src/core/components/browser.js +42 -42
- package/src/core/components/dotplot.js +413 -413
- package/src/core/components/html.js +29 -29
- package/src/core/components/list.js +178 -178
- package/src/core/components/macaron.js +206 -201
- package/src/core/components/markdown.js +56 -56
- package/src/core/components/parser.scatterBio.js +582 -579
- package/src/core/components/ratio.js +82 -80
- package/src/core/components/scatterL.js +206 -173
- package/src/core/components/searchbar.js +156 -131
- package/src/core/components/selection.js +310 -193
- package/src/core/components/timeline.js +236 -281
- package/src/core/components/visium.js +114 -97
- package/src/core/data-processor.js +413 -0
- package/src/core/fetch/condfetch.js +82 -82
- package/src/core/fetch/fetch.js +92 -92
- package/src/core/fetch/json.js +29 -29
- package/src/core/fetch/vfetch.js +42 -42
- package/src/core/hmr-client.js +724 -0
- package/src/core/liveEditor.js +44 -44
- package/src/core/modules/codeEditorWithPreview.js +104 -104
- package/src/core/modules/echarts/common.js +20 -20
- package/src/core/modules/echarts/gl.js +228 -0
- package/src/core/modules/echarts/presetHandler.js +41 -41
- package/src/core/modules/echarts/presets/esodev.chromium.js +172 -172
- package/src/core/modules/echarts/presets/esodev.codex.js +130 -130
- package/src/core/modules/echarts/presets/esodev.visium.js +123 -123
- package/src/core/modules/echarts/presets/mmtrbc.js +186 -186
- package/src/core/modules/echarts.js +70 -71
- package/src/core/modules/echartsUtils.js +43 -43
- package/src/core/modules/echartswitcher.js +227 -152
- package/src/core/modules/replotly/presetHandler.js +24 -24
- package/src/core/modules/replotly/presets/minimum.js +18 -18
- package/src/core/modules/replotly/presets/mmtrbc.dot.js +114 -114
- package/src/core/modules/replotly/presets/mmtrbc.violin.js +100 -100
- package/src/core/modules/replotly.js +74 -71
- package/src/core/modules/threejs/Camera.js +373 -0
- package/src/core/modules/threejs/Lighting.js +459 -0
- package/src/core/modules/threejs/Renderer.js +364 -0
- package/src/core/modules/threejs/Scene.js +266 -0
- package/src/core/modules/threejs/index.js +155 -0
- package/src/core/pages/404.js +50 -50
- package/src/core/pages/error.js +27 -27
- package/src/core/pages/jsonPage.js +62 -62
- package/src/core/pages/loading.js +44 -44
- package/src/core/parser/echart.data.js +204 -183
- package/src/core/parser/echart.features.js +125 -125
- package/src/core/parser/echart.general.js +147 -143
- package/src/core/parser/echart.hilbert.js +57 -57
- package/src/core/parser/echart.parser.js +210 -210
- package/src/core/parser/echart.series.js +67 -67
- package/src/core/parser/echart.types.js +76 -76
- package/src/core/parser/plotly.config.js +10 -10
- package/src/core/parser/plotly.data.js +132 -132
- package/src/core/parser/plotly.layout.js +9 -9
- package/src/core/parser/plotly.violin.js +18 -18
- package/src/core/recharts.js +361 -62
- package/src/core/router/alias.js +49 -49
- package/src/core/router/jsonRouter.js +31 -31
- package/src/core/themes/modern.js +32 -32
- package/src/core/themes/themeSelector.js +33 -33
- package/src/core/visualify.js +213 -47
- package/src/core/widgets/circularProgress.js +23 -23
- package/src/core/widgets/controller.js +116 -83
- package/src/core/widgets/errorBoundary.js +36 -36
- package/src/core/widgets/footer.js +185 -177
- package/src/core/widgets/header.js +238 -234
- package/src/core/widgets/layout/Grid.js +31 -31
- package/src/core/widgets/layout.js +36 -36
- package/src/core/widgets/mapping.js +56 -42
- package/src/core/workers/data-worker.js +349 -0
- package/src/core/workers/worker-pool.js +396 -0
- package/src/docsify/bundle.js +215 -0
- package/src/docsify/markdown.js +271 -0
- package/src/docsify/plugin.js +268 -0
- package/src/editor/README.md +172 -0
- package/src/editor/components/ChartBuilder.jsx +341 -0
- package/src/editor/components/ChartTypeSidebar.jsx +91 -0
- package/src/editor/components/Editor.jsx +367 -0
- package/src/editor/components/Preview.jsx +446 -0
- package/src/editor/components/PropertyPanel.jsx +468 -0
- package/src/editor/components/StatusBar.jsx +85 -0
- package/src/editor/context/EditorContext.js +248 -0
- package/src/editor/hooks/useDebounce.js +32 -0
- package/src/editor/index.js +315 -0
- package/src/editor/styles/editor.css +637 -0
- package/src/editor/utils/chartValidator.js +263 -0
- package/src/entries/charts3d.js +70 -0
- package/src/entries/core.js +78 -0
- package/src/entries/docs.js +154 -0
- package/src/entries/pages.js +93 -0
- package/src/entries/portal.js +204 -0
- package/src/entries/shared.js +50 -0
- package/src/i18n/formatters.js +455 -0
- package/src/i18n/index.js +169 -0
- package/src/i18n/locales/ar.json +137 -0
- package/src/i18n/locales/de.json +137 -0
- package/src/i18n/locales/en.json +137 -0
- package/src/i18n/locales/es.json +137 -0
- package/src/i18n/locales/he.json +137 -0
- package/src/i18n/locales/zh.json +137 -0
- package/src/i18n/rtl.css +183 -0
- package/src/index.js +82 -62
- package/src/loader.js +103 -0
- package/src/setupTests.js +5 -5
- package/tsconfig.json +51 -0
- package/types/charts.d.ts +569 -0
- package/types/components.d.ts +441 -0
- package/types/config.d.ts +199 -0
- package/types/index.d.ts +353 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Visualify Infinite Loop & i18n Fixes
|
|
3
|
+
type: note
|
|
4
|
+
tags: [visualify, bugfix, react, useEffect, infinite-loop, i18n, rollup, potential-duplicate:2026-02-19-visualify-build-deployment-architecture-bug-fixes]
|
|
5
|
+
created: 2026-02-19T22:19:34.350Z
|
|
6
|
+
updated: 2026-02-19T22:19:34.350Z
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## React useEffect Infinite Loop Fixes in Visualify (2026-02-19)
|
|
10
|
+
|
|
11
|
+
### Root Cause Pattern
|
|
12
|
+
Components using `props` or `sharedData` (object references) as useEffect dependencies cause infinite re-renders because React compares by reference, not value.
|
|
13
|
+
|
|
14
|
+
### Fixes Applied:
|
|
15
|
+
|
|
16
|
+
1. **SearchBar** (`src/core/components/searchbar.js`):
|
|
17
|
+
- Replaced `[config.source, debug, triggerValue]` with stable primitives: `[sourceUrl, sourceName, isArraySource, debug, triggerValue]`
|
|
18
|
+
- Used `sourceRef` to access latest config.source without it being a dependency
|
|
19
|
+
- Fixed trigger key extraction: `typeof triggerKey === 'object' ? triggerKey.name : triggerKey`
|
|
20
|
+
|
|
21
|
+
2. **Selection** (`src/core/components/selection.js`):
|
|
22
|
+
- Replaced `[props, setSelectionOptions, sharedData, debug]` with extracted primitives: `[selection, urlval, rm_suffix, nested, entry, entryFirst, debug]`
|
|
23
|
+
- `entryFirst` tracks `sharedData[entry][0]` as a primitive instead of the whole sharedData object
|
|
24
|
+
|
|
25
|
+
3. **i18n Initialization** (`src/core/visualify.js`):
|
|
26
|
+
- `initializeI18n()` was defined in `src/i18n/index.js` but never called
|
|
27
|
+
- Added call in `CreateApp()` before ReactDOM render: `initializeI18n(config.i18n || {})`
|
|
28
|
+
|
|
29
|
+
4. **hilbert strict mode fix** (`rollup.config.mjs`):
|
|
30
|
+
- `hilbert/hilbert3d.js` has bare `debug = false; log = function(){}` — implicit globals break IIFE strict mode
|
|
31
|
+
- Added `fixImplicitGlobals()` Rollup plugin that prepends `var debug, log;` to hilbert modules
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Visualify v3 Bundle Splitting & Docs Restructuring
|
|
3
|
+
type: note
|
|
4
|
+
tags: [architecture, bundle-splitting, v3, rollup, docs, potential-duplicate:2026-02-19-version-300-bump-and-build-fixes]
|
|
5
|
+
created: 2026-02-19T20:02:41.423Z
|
|
6
|
+
updated: 2026-02-19T20:02:41.423Z
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Visualify v3 Bundle Splitting Architecture (2026-02-19)
|
|
10
|
+
|
|
11
|
+
### New on-demand chunks added to rollup.config.mjs:
|
|
12
|
+
- `visualify-core.js` (733KB) - Core 2D: Recharts, EChartSwitcher, parsers, themes, widgets
|
|
13
|
+
- `visualify-3d.js` (90KB) - 3D: Scatter3D, Bar3D, Surface3D, Line3D, ThreeScene, GL utils
|
|
14
|
+
- `visualify-pages.js` (481KB) - Page mode: all viz components, router, fetch, Plotly
|
|
15
|
+
|
|
16
|
+
### Entry files:
|
|
17
|
+
- `src/entries/core.js` → VisualifyCore
|
|
18
|
+
- `src/entries/charts3d.js` → Visualify3D
|
|
19
|
+
- `src/entries/pages.js` → VisualifyPages
|
|
20
|
+
|
|
21
|
+
### Bug fixed: `src/core/modules/threejs/index.js`
|
|
22
|
+
- `await import()` inside ThreeJSManager constructor (invalid syntax)
|
|
23
|
+
- Fixed: set managers to null in constructor, lazy-load in `init()`
|
|
24
|
+
|
|
25
|
+
### Docs restructuring:
|
|
26
|
+
- Sidebar: Docsify Plugin moved to "Getting Started", "Visualify.Recharts" → "Charts (2D)", 3D split out
|
|
27
|
+
- `rechart-basic-usage.md`: Migrated from `<script defers>` + `<div>` to ```visualify code blocks
|
|
28
|
+
- Chart demo pages (Rechart/*.md) still use LiveEditor pattern (intentionally kept for interactivity)
|
|
29
|
+
|
|
30
|
+
### Backward compatibility preserved:
|
|
31
|
+
- All existing builds (docs, portal, shared, legacy, docsStatic) unchanged
|
|
32
|
+
- New chunks are additive, not replacements
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Bundle Externalization Final Architecture
|
|
3
|
+
type: note
|
|
4
|
+
tags: [visualify, rollup, externalization, iife, echarts, plotly, three, bundle, architecture, potential-duplicate:2026-02-19-visualify-build-deployment-architecture-bug-fixes]
|
|
5
|
+
created: 2026-02-20T04:49:56.003Z
|
|
6
|
+
updated: 2026-02-20T04:49:56.003Z
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Bundle Externalization Final Architecture (2026-02-20)
|
|
10
|
+
|
|
11
|
+
**Key lesson learned**: You CANNOT externalize a library from an IIFE bundle if a bundled wrapper eagerly imports it at module initialization time. Specifically:
|
|
12
|
+
- `echarts-for-react` does `import * as echarts from 'echarts'` and assigns to `this.echarts` in constructor
|
|
13
|
+
- `react-plotly.js` does `require('plotly.js/dist/plotly')` and passes to factory
|
|
14
|
+
- When externalized, these imports resolve to IIFE parameters which are bare global references
|
|
15
|
+
- If CDN scripts haven't loaded, the globals are `undefined`, causing runtime crashes
|
|
16
|
+
|
|
17
|
+
**Final config for legacy/docs IIFE builds (rollup.config.mjs)**:
|
|
18
|
+
- `echarts` + `echarts-gl` → externalized (CDN required, bare `echarts` global)
|
|
19
|
+
- `plotly.js` (including deep path `plotly.js/dist/plotly`) → externalized (CDN required, bare `Plotly` global)
|
|
20
|
+
- `three` + `@react-three/*` → BUNDLED (eagerly imported via mapping.js, cannot be deferred with `inlineDynamicImports: true`)
|
|
21
|
+
- Function-based `external` needed for `plotly.js` deep path matching
|
|
22
|
+
- `safeExternalGlobals` typeof guards removed — CDN is required, not optional
|
|
23
|
+
- Bundle: 2.8 MB (down from 9.6 MB)
|
|
24
|
+
|
|
25
|
+
**Runtime CDN check**: Added to `src/index.js` — warns in console if `window.echarts` or `window.Plotly` missing with instructions.
|
|
26
|
+
|
|
27
|
+
**OOM risk**: Bundling everything (echarts + plotly + three) causes Node OOM at 4GB heap. Need `NODE_OPTIONS="--max-old-space-size=8192"` if attempting full bundle.
|
|
28
|
+
|
|
29
|
+
**docs/index.html**: Removed Three.js CDN and ReactThree stubs (now bundled). Kept echarts + plotly CDN scripts.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Chromium page fix - unstable keys and double event binding
|
|
3
|
+
type: note
|
|
4
|
+
tags: [bugfix, chromium, react, echarts, keys, events, potential-duplicate:2026-02-19-css-grid-layout-fix-displaycontents-on-vcontroller]
|
|
5
|
+
created: 2026-02-20T01:59:59.911Z
|
|
6
|
+
updated: 2026-02-20T01:59:59.911Z
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Chromium Page Fix - Root Cause Analysis (2026-02-19)
|
|
10
|
+
|
|
11
|
+
### Bug 1: Unstable React keys in Vcontroller (controller.js)
|
|
12
|
+
- `Vcontroller.generateUniqueId()` created random UUIDs during render
|
|
13
|
+
- `VisualifyWithStatePreservation` consumes sharedData context → re-renders on every state change
|
|
14
|
+
- This cascades to Vcontroller re-render → new keys → all child components unmount/remount
|
|
15
|
+
- All local state lost (Macaron selection, ScatterL chart instance, etc.)
|
|
16
|
+
- Fix: Use stable keys from `componentConfig.id || ${type}-${index}`
|
|
17
|
+
|
|
18
|
+
### Bug 2: Double event binding in ReCharts (echarts.js)
|
|
19
|
+
- `ReactEcharts` component binds `onEvents` internally
|
|
20
|
+
- Manual `useEffect` also binds the same events via `chart.on()`
|
|
21
|
+
- Click handlers fire twice per click
|
|
22
|
+
- Fix: Remove `onEvents` prop from ReactEcharts JSX, let useEffect handle events
|
|
23
|
+
|
|
24
|
+
### Key Files
|
|
25
|
+
- `src/core/widgets/controller.js` - Vcontroller stable keys
|
|
26
|
+
- `src/core/modules/echarts.js` - ReCharts single event binding
|
|
27
|
+
- `src/core/visualify.js` - VisualifyWithStatePreservation consumes context (causes re-renders)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Console cleanup + bundle optimization commit
|
|
3
|
+
type: note
|
|
4
|
+
tags: [visualify, commit, bundle-optimization, console-cleanup, docs, potential-duplicate:2026-02-19-visualify-infinite-loop-i18n-fixes]
|
|
5
|
+
created: 2026-02-20T03:48:49.579Z
|
|
6
|
+
updated: 2026-02-20T03:48:49.579Z
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Commit 2726d2f - Console Cleanup + Bundle Optimization (2026-02-19)
|
|
10
|
+
|
|
11
|
+
### Changes:
|
|
12
|
+
1. **i18n**: Added `debug: false` to suppress `[DEFAULT]: WARN` logger
|
|
13
|
+
2. **Console cleanup**: Removed debug console.logs from parser.scatterBio.js, Scatter.js, ScatterBio.js, recharts.js; changed error-path logs to console.error
|
|
14
|
+
3. **Bundle externalization**: echarts, plotly.js (including deep path plotly.js/dist/plotly), three.js externalized from legacy IIFE + docs static configs using function-based `external` in rollup
|
|
15
|
+
4. **CDN loader**: New `src/loader.js` → `dist/visualify-loader.js` (1.2KB) auto-loads CDN deps before visualify.js
|
|
16
|
+
5. **Docs updated**: coverpage version 2.5.3→3.0.0, changelog with 3.0.0 entry, quickstart with loader usage
|
|
17
|
+
|
|
18
|
+
### Bundle impact: 9.6MB → 1.8MB (-81%)
|
|
19
|
+
|
|
20
|
+
### User preference: commit without co-author tag
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: DotBio Dot Plot Fix - useEffect Dependency
|
|
3
|
+
type: note
|
|
4
|
+
tags: [visualify, bugfix, dotplot, react, useEffect, sharedData, DotBio, replotly, potential-duplicate:2026-02-19-visualify-infinite-loop-i18n-fixes]
|
|
5
|
+
created: 2026-02-20T06:02:42.342Z
|
|
6
|
+
updated: 2026-02-20T06:02:42.342Z
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## DotBio Dot Plot Fix (2026-02-20)
|
|
10
|
+
|
|
11
|
+
**Root cause**: The infinite-loop fix (commit `e16efee`) changed DotBio's useEffect dependency from `[props, sharedData, debug]` to `[genelistSnapshot, debug]`. The `genelistSnapshot` approach broke reactivity because it didn't detect when `sharedData['mmtrbc_genelist']` was populated by the List component.
|
|
12
|
+
|
|
13
|
+
**Fix**: Reverted dependency to `[sharedData, debug]` (without `props` to avoid unnecessary re-runs). Removed the ref pattern (sharedDataRef/propsRef) since we now depend on sharedData directly.
|
|
14
|
+
|
|
15
|
+
**Key insight**: DotBio depends on sharedData changing when genes are added to the list. The snapshot approach (JSON.stringify of a single key) was too narrow — it missed the initial population of the key. Using `sharedData` directly as a dependency catches all relevant changes.
|
|
16
|
+
|
|
17
|
+
**Also fixed in replotly.js**: Added `props.data` priority check — if parent passes data via props (like DotBio does), use that instead of preset.data. This prevents preset.data (empty `[]`) from overwriting actual data.
|
|
18
|
+
|
|
19
|
+
**Pattern to remember**: When fixing infinite re-render loops, be careful not to narrow useEffect dependencies too much. The genelistSnapshot pattern broke the dot plot because it didn't re-trigger when the key first appeared in sharedData. Test all dependent components after changing useEffect dependencies.
|
|
20
|
+
|
|
21
|
+
**User preference**: No co-author line in git commits.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Public folder cleanup and README rewrite
|
|
3
|
+
type: note
|
|
4
|
+
tags: [visualify, commit, readme, public-cleanup, changelog, potential-duplicate:2026-02-20-console-cleanup-bundle-optimization-commit]
|
|
5
|
+
created: 2026-02-20T04:09:55.739Z
|
|
6
|
+
updated: 2026-02-20T04:09:55.739Z
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Commit 99a4f26 - Public folder cleanup + README + CHANGELOG move
|
|
10
|
+
|
|
11
|
+
### Changes:
|
|
12
|
+
1. **CHANGELOG.md** moved from root → `docs/CHANGELOG.md`
|
|
13
|
+
2. **README.md** rewritten: concise 2-mode usage (Charts + Pages), CLI commands, features list
|
|
14
|
+
3. **public/** cleaned to match release branch: removed EsoDev-specific files (chromium.json, visium.json, codex.json, visualify.json, _nav.json, debug/, mainpage.png)
|
|
15
|
+
4. **.gitignore** updated with EsoDev config patterns to prevent accidental re-addition
|
|
16
|
+
5. **CLI verified**: `visualify --version` returns 3.0.0-1.dev, all 5 commands registered (dev, docs, portal, init, edit)
|
|
17
|
+
|
|
18
|
+
### Public folder now contains (matching release):
|
|
19
|
+
- index.html (simple example with LiveEditor)
|
|
20
|
+
- home.json (Browser component pointing to docs site)
|
|
21
|
+
- editor.html (LiveEditor standalone)
|
|
22
|
+
- manifest.json
|
|
23
|
+
- robots.txt
|
|
24
|
+
|
|
25
|
+
### User preference: commit without co-author
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: v3.0.0 Release and Beta Channel Strategy
|
|
3
|
+
type: note
|
|
4
|
+
tags: [visualify, release, v3.0.0, npm, beta-channel, workflow, potential-duplicate:2026-02-20-public-folder-cleanup-and-readme-rewrite]
|
|
5
|
+
created: 2026-02-20T06:29:24.054Z
|
|
6
|
+
updated: 2026-02-20T06:29:24.054Z
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## v3.0.0 Release Published
|
|
10
|
+
|
|
11
|
+
### Release workflow:
|
|
12
|
+
1. Commit on dev → squash merge to release → version bump to `3.0.0` → push release → tag `v3.0.0` → GitHub release → npm publish (manual)
|
|
13
|
+
2. Delete old dev branch (local + remote) → create fresh dev from release → set version `3.0.1-beta.0` → push
|
|
14
|
+
|
|
15
|
+
### Beta channel strategy:
|
|
16
|
+
- No npm beta publishing — too much version clutter
|
|
17
|
+
- Beta = git dev branch directly: `npm install github:visualify/visualify.js#dev`
|
|
18
|
+
- CDN beta: `https://cdn.jsdelivr.net/gh/visualify/visualify.js@dev/dist/visualify-loader.js`
|
|
19
|
+
- Official = npm registry: `npm install visualifyjs`
|
|
20
|
+
- Documented in README and docs/docs/quickstart.md
|
|
21
|
+
|
|
22
|
+
### User preferences:
|
|
23
|
+
- No co-author in git commits
|
|
24
|
+
- Prefers simple beta strategy (git branch, not npm tags)
|
|
25
|
+
|
|
26
|
+
### Git state after release:
|
|
27
|
+
- release branch: v3.0.0 (tag v3.0.0)
|
|
28
|
+
- dev branch: fresh from release, version 3.0.1-beta.0
|
|
29
|
+
- GitHub release: https://github.com/visualify/visualify.js/releases/tag/v3.0.0
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Visium Background Image + Unknown Legend Fix
|
|
3
|
+
type: note
|
|
4
|
+
tags: [visualify, bugfix, visium, react, useEffect, ScatterBio, potential-duplicate:2026-02-19-page-mode-docs-update-decisions]
|
|
5
|
+
created: 2026-02-20T00:55:11.181Z
|
|
6
|
+
updated: 2026-02-20T00:55:11.181Z
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Visium Background Image + Unknown Legend Fix (2026-02-19)
|
|
10
|
+
|
|
11
|
+
**Root cause**: ScatterBio's useEffect dependencies were insufficient. When VisiumPlot updated its props (adding background image, legend:false, hidden axes), ScatterBio re-rendered but its effect didn't re-run because `sharedDataSnapshot` and `visiumCellFraction` didn't change.
|
|
12
|
+
|
|
13
|
+
**Fix**: Added `configLegend` and `configHasBg` to ScatterBio's useEffect dependencies. This ensures the effect re-runs when:
|
|
14
|
+
- VisiumPlot sets `legend: false` (configLegend: undefined → false)
|
|
15
|
+
- Background image loads (configHasBg: false → true)
|
|
16
|
+
|
|
17
|
+
**Also**: When `config.legend === false` (Visium spatial mode), skip `itemStyle.color` on scatter series so `visualMap` controls dot coloring instead of forcing all dots to one color.
|
|
18
|
+
|
|
19
|
+
**Pattern**: When a parent component (VisiumPlot) wraps a child (ScatterBio) and updates props asynchronously, the child's useEffect must track ALL meaningful prop changes in its dependency array — not just sharedData-derived values.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Visualify CDN Loader + Bundle Externalization
|
|
3
|
+
type: note
|
|
4
|
+
tags: [visualify, rollup, cdn, bundle-optimization, loader, externalization, potential-duplicate:2026-02-19-visualify-dist-iife-self-contained-build-config]
|
|
5
|
+
created: 2026-02-20T03:26:40.997Z
|
|
6
|
+
updated: 2026-02-20T03:26:40.997Z
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Bundle Optimization (2026-02-19)
|
|
10
|
+
|
|
11
|
+
### Externalized from legacy IIFE + docs static builds:
|
|
12
|
+
- `echarts` → `window.echarts` (CDN: jsdelivr)
|
|
13
|
+
- `echarts-gl` → `window.echartsGL` (CDN: jsdelivr)
|
|
14
|
+
- `plotly.js` + `plotly.js/dist/plotly` → `window.Plotly` (CDN: cdn.plot.ly)
|
|
15
|
+
- `three` → `window.THREE` (CDN: unpkg)
|
|
16
|
+
- `@react-three/fiber`, `@react-three/drei` → globals (bundled in docs)
|
|
17
|
+
|
|
18
|
+
### Key: `react-plotly.js` imports `plotly.js/dist/plotly` (deep path)
|
|
19
|
+
- Must use function-based `external` in rollup to match deep paths
|
|
20
|
+
- Must include `plotly.js/dist/plotly` in globals mapping
|
|
21
|
+
|
|
22
|
+
### React wrappers (`echarts-for-react`, `react-plotly.js`) stay BUNDLED
|
|
23
|
+
- They depend on React internals, can't be loaded as standalone CDN globals
|
|
24
|
+
- They're small (~20KB each), the heavy deps are the core libraries
|
|
25
|
+
|
|
26
|
+
### CDN Loader (`dist/visualify-loader.js`, 1.2KB)
|
|
27
|
+
- Tiny IIFE bootstrap that auto-loads CDN deps then visualify.js
|
|
28
|
+
- Detects existing globals (skip if already loaded)
|
|
29
|
+
- Supports `window.$visualify.skip` array for opting out of deps
|
|
30
|
+
- Entry: `src/loader.js`, config: `loaderConfig` in rollup.config.mjs
|
|
31
|
+
|
|
32
|
+
### Bundle size impact:
|
|
33
|
+
- `dist/visualify.js`: 9.6MB → 1.8MB (-81%)
|
|
34
|
+
- `docs/static/js/visualify.js`: ~8MB → 1.8MB (-78%)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Session summary 2026-02-20"
|
|
3
|
+
type: session
|
|
4
|
+
tags: [auto-capture, session-end, zhipu]
|
|
5
|
+
created: "2026-02-20T03:15:24.947Z"
|
|
6
|
+
updated: "2026-02-20T03:15:24.947Z"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Session Summary: Recent Activity
|
|
10
|
+
|
|
11
|
+
## Key Learnings
|
|
12
|
+
|
|
13
|
+
### Pattern Observed: Repeated Incomplete Tasks
|
|
14
|
+
- **Issue**: The same optimization request was made 3 times within ~10 minutes without apparent resolution being committed or acknowledged
|
|
15
|
+
- **Learning**: When `/omc-sisyphus` commands are repeated, check if previous attempt made changes before re-working. May indicate a communication gap or tool execution failure.
|
|
16
|
+
|
|
17
|
+
### Technical Issues to Address (Pending)
|
|
18
|
+
|
|
19
|
+
#### 1. Python Logging Warning
|
|
20
|
+
- **Problem**: `[DEFAULT]: WARN : Using DEFAULT root logger`
|
|
21
|
+
- **Root Cause**: Code is using Python's root logger (`logging.warning()`) instead of a named logger
|
|
22
|
+
- **Solution Pattern**: Replace with named logger instantiation:
|
|
23
|
+
```python
|
|
24
|
+
import logging
|
|
25
|
+
logger = logging.getLogger(__name__) # Use module-specific logger
|
|
26
|
+
logger.warning("message") # Instead of logging.warning()
|
|
27
|
+
```
|
|
28
|
+
- **Why**: Named loggers allow proper log level configuration per module and prevent the default logger warning
|
|
29
|
+
|
|
30
|
+
#### 2. Async Listener Error (Browser Extension Context)
|
|
31
|
+
- **Problem**: `Uncaught (in promise) Error: A listener indicated an asynchronous response by...`
|
|
32
|
+
- **Context**: This is a common browser extension (Chrome/Firefox) error
|
|
33
|
+
- **Root Cause**: Usually occurs when:
|
|
34
|
+
- A `sendResponse` callback is called after the listener returns `true`
|
|
35
|
+
- A Promise is returned but the async operation takes too long
|
|
36
|
+
- The message port closes before response is sent
|
|
37
|
+
- **Solution Pattern**:
|
|
38
|
+
```javascript
|
|
39
|
+
// Ensure sendResponse is called synchronously or within timeout
|
|
40
|
+
browser.runtime.onMessage.addListener((message, sender, sendResponse) => {
|
|
41
|
+
// Option 1: Return true and call sendResponse in async callback
|
|
42
|
+
asyncOperation().then(result => {
|
|
43
|
+
sendResponse(result);
|
|
44
|
+
});
|
|
45
|
+
return true; // Keep channel open
|
|
46
|
+
});
|
|
47
|
+
```
|
|
48
|
+
- Or migrate to `return Promise.resolve(result)` pattern if supported
|
|
49
|
+
|
|
50
|
+
### Action Items for Next Session
|
|
51
|
+
1. **Check git status** - See if previous attempts made any commits
|
|
52
|
+
2. **Search codebase** for `logging.warning(`, `logging.error(`, `logging.info(` (root logger calls)
|
|
53
|
+
3. **Search extension code** for `onMessage.addListener` patterns that may have async issues
|
|
54
|
+
4. **Consider**: This may be a new codebase - verify logging setup and extension manifest version
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": [
|
|
4
|
+
"Bash(npx tsc:*)",
|
|
5
|
+
"Bash(node --check:*)",
|
|
6
|
+
"mcp__oh-my-claude-background__recall",
|
|
7
|
+
"mcp__oh-my-claude-background__remember",
|
|
8
|
+
"mcp__Playwright__browser_navigate",
|
|
9
|
+
"mcp__Playwright__browser_wait_for",
|
|
10
|
+
"mcp__Playwright__browser_snapshot",
|
|
11
|
+
"mcp__Playwright__browser_evaluate",
|
|
12
|
+
"mcp__Playwright__browser_take_screenshot",
|
|
13
|
+
"mcp__Playwright__browser_console_messages",
|
|
14
|
+
"Bash(npx rollup:*)",
|
|
15
|
+
"Bash(npm run build:*)",
|
|
16
|
+
"mcp__Playwright__browser_network_requests",
|
|
17
|
+
"mcp__Playwright__browser_click",
|
|
18
|
+
"mcp__Playwright__browser_run_code"
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
name: Build and Deploy Visualify
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
branches:
|
|
6
|
-
- main
|
|
7
|
-
|
|
8
|
-
permissions:
|
|
9
|
-
contents: write
|
|
10
|
-
|
|
11
|
-
jobs:
|
|
12
|
-
build_and_deploy:
|
|
13
|
-
runs-on: ubuntu-latest
|
|
14
|
-
|
|
15
|
-
steps:
|
|
16
|
-
- name: Checkout Code
|
|
17
|
-
uses: actions/checkout@v3
|
|
18
|
-
|
|
19
|
-
- name: Setup Node.js
|
|
20
|
-
uses: actions/setup-node@v3
|
|
21
|
-
with:
|
|
22
|
-
node-version: "16"
|
|
23
|
-
|
|
24
|
-
- name: Install Dependencies
|
|
25
|
-
run: npm install
|
|
26
|
-
|
|
27
|
-
# You may replace "build" with any specific build command for your application
|
|
28
|
-
- name: Build Application
|
|
29
|
-
env:
|
|
30
|
-
NODE_OPTIONS: --max_old_space_size=4096 # Adjust as needed
|
|
31
|
-
run: npm run
|
|
32
|
-
|
|
33
|
-
# Ensure the build artifacts are in the `docs` directory
|
|
34
|
-
- name: Move build artifacts to docs
|
|
35
|
-
run: mv ./dist ./docs
|
|
36
|
-
|
|
37
|
-
#- name: Move build artifacts to docs
|
|
38
|
-
# run: rm -rf ./docs/build/dist/visualify.js.map
|
|
39
|
-
|
|
40
|
-
- name: Deploy to GitHub Pages
|
|
41
|
-
uses: peaceiris/actions-gh-pages@v3
|
|
42
|
-
with:
|
|
43
|
-
github_token: ${{ secrets.VISUALIFY_BUILD }}
|
|
44
|
-
publish_dir: ./docs # Changed to docs
|
|
45
|
-
|
|
46
|
-
# If you want to upload the build artifact to GitHub
|
|
47
|
-
- name: Upload Build Artifact
|
|
48
|
-
uses: actions/upload-artifact@v3
|
|
49
|
-
with:
|
|
50
|
-
name: visualify-buildF
|
|
51
|
-
path: docs # Changed to docs
|
|
1
|
+
name: Build and Deploy Visualify
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
build_and_deploy:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
|
|
15
|
+
steps:
|
|
16
|
+
- name: Checkout Code
|
|
17
|
+
uses: actions/checkout@v3
|
|
18
|
+
|
|
19
|
+
- name: Setup Node.js
|
|
20
|
+
uses: actions/setup-node@v3
|
|
21
|
+
with:
|
|
22
|
+
node-version: "16"
|
|
23
|
+
|
|
24
|
+
- name: Install Dependencies
|
|
25
|
+
run: npm install
|
|
26
|
+
|
|
27
|
+
# You may replace "build" with any specific build command for your application
|
|
28
|
+
- name: Build Application
|
|
29
|
+
env:
|
|
30
|
+
NODE_OPTIONS: --max_old_space_size=4096 # Adjust as needed
|
|
31
|
+
run: npm run
|
|
32
|
+
|
|
33
|
+
# Ensure the build artifacts are in the `docs` directory
|
|
34
|
+
- name: Move build artifacts to docs
|
|
35
|
+
run: mv ./dist ./docs
|
|
36
|
+
|
|
37
|
+
#- name: Move build artifacts to docs
|
|
38
|
+
# run: rm -rf ./docs/build/dist/visualify.js.map
|
|
39
|
+
|
|
40
|
+
- name: Deploy to GitHub Pages
|
|
41
|
+
uses: peaceiris/actions-gh-pages@v3
|
|
42
|
+
with:
|
|
43
|
+
github_token: ${{ secrets.VISUALIFY_BUILD }}
|
|
44
|
+
publish_dir: ./docs # Changed to docs
|
|
45
|
+
|
|
46
|
+
# If you want to upload the build artifact to GitHub
|
|
47
|
+
- name: Upload Build Artifact
|
|
48
|
+
uses: actions/upload-artifact@v3
|
|
49
|
+
with:
|
|
50
|
+
name: visualify-buildF
|
|
51
|
+
path: docs # Changed to docs
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"active_plan": "/Users/axibapro/Downloads/gits/visualify.js/.sisyphus/plans/phase-4-advanced-optimizations.md",
|
|
3
|
+
"started_at": "2026-02-11T13:20:00Z",
|
|
4
|
+
"session_ids": ["session-003"],
|
|
5
|
+
"plan_name": "phase-4-advanced-optimizations",
|
|
6
|
+
"current_phase": "Phase 4",
|
|
7
|
+
"phases": {
|
|
8
|
+
"phase1": {
|
|
9
|
+
"status": "completed",
|
|
10
|
+
"commits": [
|
|
11
|
+
"22a19ea - feat(cli): merge CLI into core, add visualify.json config, dual-mode builds",
|
|
12
|
+
"eff6f6b - chore: add EsoDev showcase dataportal for testing",
|
|
13
|
+
"6b0a207 - chore: add visualify.json config for EsoDev showcase",
|
|
14
|
+
"b37dbb4 - chore: add /dist to .gitignore"
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
"phase2": {
|
|
18
|
+
"status": "completed",
|
|
19
|
+
"commits": [
|
|
20
|
+
"ead71c3 - feat(3d): add ECharts GL and Three.js 3D visualization support",
|
|
21
|
+
"4eec1ae - docs: add 3D visualization documentation and update CHANGELOG"
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
"phase3": {
|
|
25
|
+
"status": "completed",
|
|
26
|
+
"name": "Developer Experience Improvements",
|
|
27
|
+
"commits": [
|
|
28
|
+
"2a6fca8 - feat(dx): add TypeScript, HMR, Visual Editor, a11y, i18n",
|
|
29
|
+
"a016d2e - feat(dx): complete Phase 3 Developer Experience features",
|
|
30
|
+
"b2d3de7 - fix(cli): add 'editor' alias and update CLI documentation"
|
|
31
|
+
],
|
|
32
|
+
"tasks": [
|
|
33
|
+
"TypeScript migration with full type definitions",
|
|
34
|
+
"Hot Module Replacement (HMR) for configuration changes",
|
|
35
|
+
"Visual configuration editor (GUI)",
|
|
36
|
+
"Accessibility (ARIA labels, keyboard navigation)",
|
|
37
|
+
"Internationalization (i18n) support"
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
"phase4": {
|
|
41
|
+
"status": "in_progress",
|
|
42
|
+
"name": "Advanced Optimizations",
|
|
43
|
+
"tasks": [
|
|
44
|
+
"Web Workers for data processing",
|
|
45
|
+
"IndexedDB caching layer",
|
|
46
|
+
"Streaming data support (WebSocket)",
|
|
47
|
+
"Progressive Web App (PWA) support",
|
|
48
|
+
"WebAssembly integration"
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"completed_tasks": [
|
|
53
|
+
"Phase 1: Critical Breaking Changes - CLI merge, visualify.json, dual-mode builds",
|
|
54
|
+
"Phase 2: Feature Parity + 3D - ECharts GL, Three.js, Docsify plugin",
|
|
55
|
+
"Phase 3: Developer Experience - TypeScript, HMR, Visual Editor, a11y, i18n"
|
|
56
|
+
],
|
|
57
|
+
"next_tasks": [
|
|
58
|
+
"Phase 4: Web Workers for data processing",
|
|
59
|
+
"Phase 4: IndexedDB caching layer",
|
|
60
|
+
"Phase 4: Streaming data support (WebSocket)",
|
|
61
|
+
"Phase 4: Progressive Web App (PWA) support",
|
|
62
|
+
"Phase 4: WebAssembly integration"
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
</content>
|