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.
Files changed (252) hide show
  1. package/.claude/mem/TIMELINE.md +36 -0
  2. package/.claude/mem/notes/2026-02-11-3d-visualization-docs-fix-external-script-solution.md +24 -0
  3. package/.claude/mem/notes/2026-02-11-3d-visualization-docs-fix-session-summary.md +43 -0
  4. package/.claude/mem/notes/2026-02-11-cli-fix-editor-command-alias.md +26 -0
  5. package/.claude/mem/notes/2026-02-11-phase-3-developer-experience-completed.md +51 -0
  6. package/.claude/mem/notes/2026-02-11-phase-4-web-workers-implementation-complete.md +59 -0
  7. package/.claude/mem/notes/2026-02-11-visualify-phase-2-3d-visualization-complete.md +50 -0
  8. package/.claude/mem/notes/2026-02-11-visualify-phase-2-committed-ready-for-phase-3.md +33 -0
  9. package/.claude/mem/notes/2026-02-11-visualify-phase-3-complete-developer-experience.md +52 -0
  10. package/.claude/mem/notes/2026-02-11-visualify-repository-cleanup-complete.md +28 -0
  11. package/.claude/mem/notes/2026-02-18-codebase-cleanup-docsify-plugin-documentation.md +37 -0
  12. package/.claude/mem/notes/2026-02-19-css-grid-layout-fix-displaycontents-on-vcontroller.md +18 -0
  13. package/.claude/mem/notes/2026-02-19-docsify-plugin-fixes-latex-and-visualify-code-bloc.md +26 -0
  14. package/.claude/mem/notes/2026-02-19-page-mode-docs-update-decisions.md +23 -0
  15. package/.claude/mem/notes/2026-02-19-react-context-infinite-re-render-loop-fix-pattern.md +31 -0
  16. package/.claude/mem/notes/2026-02-19-version-300-bump-and-build-fixes.md +32 -0
  17. package/.claude/mem/notes/2026-02-19-visualify-build-deployment-architecture-bug-fixes.md +25 -0
  18. package/.claude/mem/notes/2026-02-19-visualify-dist-iife-self-contained-build-config.md +30 -0
  19. package/.claude/mem/notes/2026-02-19-visualify-infinite-loop-i18n-fixes.md +31 -0
  20. package/.claude/mem/notes/2026-02-19-visualify-v3-bundle-splitting-docs-restructuring.md +32 -0
  21. package/.claude/mem/notes/2026-02-20-bundle-externalization-final-architecture.md +29 -0
  22. package/.claude/mem/notes/2026-02-20-chromium-page-fix-unstable-keys-and-double-event-b.md +27 -0
  23. package/.claude/mem/notes/2026-02-20-console-cleanup-bundle-optimization-commit.md +20 -0
  24. package/.claude/mem/notes/2026-02-20-dotbio-dot-plot-fix-useeffect-dependency.md +21 -0
  25. package/.claude/mem/notes/2026-02-20-public-folder-cleanup-and-readme-rewrite.md +25 -0
  26. package/.claude/mem/notes/2026-02-20-v300-release-and-beta-channel-strategy.md +29 -0
  27. package/.claude/mem/notes/2026-02-20-visium-background-image-unknown-legend-fix.md +19 -0
  28. package/.claude/mem/notes/2026-02-20-visualify-cdn-loader-bundle-externalization.md +34 -0
  29. package/.claude/mem/sessions/session-2026-02-20-031524.md +54 -0
  30. package/.claude/settings.local.json +21 -0
  31. package/.github/workflows/static.yml.bak +51 -51
  32. package/.sisyphus/boulder.json +65 -0
  33. package/.sisyphus/plans/phase-4-advanced-optimizations.md +217 -0
  34. package/LICENSE +674 -674
  35. package/README.md +94 -59
  36. package/config-overrides.js +31 -31
  37. package/dist/stats.html +4949 -0
  38. package/dist/visualify-3d.esm.js +1 -0
  39. package/dist/visualify-3d.js +1 -0
  40. package/dist/visualify-core.esm.js +1 -0
  41. package/dist/visualify-core.js +1 -0
  42. package/dist/visualify-docs.esm.js +1 -0
  43. package/dist/visualify-docs.js +1 -0
  44. package/dist/visualify-loader.js +1 -0
  45. package/dist/visualify-pages.esm.js +1 -0
  46. package/dist/visualify-pages.js +1 -0
  47. package/dist/visualify-portal.esm.js +1 -0
  48. package/dist/visualify-portal.js +1 -0
  49. package/dist/visualify-shared.js +26571 -0
  50. package/dist/visualify.js +1 -188
  51. package/docs/CHANGELOG.md +148 -0
  52. package/docs/cli/commands.md +513 -0
  53. package/docs/configuration/visualify-json.md +474 -0
  54. package/docs/docs/3d-visualization.md +374 -0
  55. package/docs/docs/CLI.md +303 -34
  56. package/docs/docs/README.md +65 -65
  57. package/docs/docs/Rechart/bar.md +190 -190
  58. package/docs/docs/Rechart/funnel.md +241 -193
  59. package/docs/docs/Rechart/line.md +355 -355
  60. package/docs/docs/Rechart/pie.md +225 -225
  61. package/docs/docs/Rechart/radar.md +253 -253
  62. package/docs/docs/Rechart/scatter.md +298 -0
  63. package/docs/docs/_404.md +51 -51
  64. package/docs/docs/_coverpage.md +11 -11
  65. package/docs/docs/_sidebar.md +54 -43
  66. package/docs/docs/components/dotBio.md +87 -34
  67. package/docs/docs/components/echart.md +171 -82
  68. package/docs/docs/components/html.md +61 -34
  69. package/docs/docs/components/macaron.md +156 -145
  70. package/docs/docs/components/markdown.md +42 -0
  71. package/docs/docs/components/more.md +183 -142
  72. package/docs/docs/components/plotly.md +132 -62
  73. package/docs/docs/components/scatterL.md +171 -70
  74. package/docs/docs/components/visium.md +112 -57
  75. package/docs/docs/configuration.md +121 -123
  76. package/docs/docs/deploy.md +31 -31
  77. package/docs/docs/docsify-plugin.md +655 -0
  78. package/docs/docs/hmr.md +165 -0
  79. package/docs/docs/i18n.md +332 -0
  80. package/docs/docs/log.md +30 -1
  81. package/docs/docs/more-pages.md +23 -23
  82. package/docs/docs/quickstart.md +148 -119
  83. package/docs/docs/rechart-attributes.md +74 -74
  84. package/docs/docs/rechart-basic-usage.md +160 -162
  85. package/docs/docs/theme.md +5 -5
  86. package/docs/docs/typescript.md +306 -0
  87. package/docs/docs/visual-editor.md +359 -0
  88. package/docs/index.html +85 -71
  89. package/docs/manifest.json +23 -23
  90. package/docs/migration/v3-migration.md +392 -0
  91. package/docs/static/css/fluff-stuff.css +169 -169
  92. package/docs/static/css/font-awesome.min.css +4 -4
  93. package/docs/static/css/visualify.css +6 -25
  94. package/docs/static/js/3d-viz-examples.js +181 -0
  95. package/docs/static/js/configuration.js +630 -448
  96. package/docs/static/js/visualify.js +1 -188
  97. package/package.json +106 -84
  98. package/rollup.config.mjs +766 -76
  99. package/src/_css/404.css +115 -115
  100. package/src/_css/App.css +37 -37
  101. package/src/_css/autoSuggestion.css +26 -26
  102. package/src/_css/circular-progress.css +32 -32
  103. package/src/_css/index.css +36 -36
  104. package/src/_css/modern.css +350 -25
  105. package/src/_media/corner.svg +8 -8
  106. package/src/_media/download.svg +3 -3
  107. package/src/_media/logo.svg +14 -14
  108. package/src/_test/App.test.js +15 -15
  109. package/src/_utils/reportWebVitals.js +13 -13
  110. package/src/a11y/README.md +177 -0
  111. package/src/a11y/aria-labels.js +339 -0
  112. package/src/a11y/color-contrast.js +535 -0
  113. package/src/a11y/index.js +197 -0
  114. package/src/a11y/keyboard-nav.js +523 -0
  115. package/src/a11y/styles.css +165 -0
  116. package/src/cli/commands/dev.js +214 -0
  117. package/src/cli/commands/docs.js +521 -0
  118. package/src/cli/commands/edit.js +379 -0
  119. package/src/cli/commands/init.js +213 -0
  120. package/src/cli/commands/portal.js +236 -0
  121. package/src/cli/dev-server.js +530 -0
  122. package/src/cli/hmr.js +456 -0
  123. package/src/cli/index.js +180 -0
  124. package/src/cli/utils/config.js +207 -0
  125. package/src/cli/utils/logger.js +241 -0
  126. package/src/config/defaults.ts +122 -0
  127. package/src/config/index.ts +72 -0
  128. package/src/config/loader.ts +478 -0
  129. package/src/config/schema.ts +227 -0
  130. package/src/config/validator.ts +337 -0
  131. package/src/core/appContext.js +34 -27
  132. package/src/core/components/Bar.js +383 -0
  133. package/src/core/components/Bar3D.js +473 -0
  134. package/src/core/components/LargeDatasetChart.js +296 -0
  135. package/src/core/components/Line3D.js +310 -0
  136. package/src/core/components/Scatter.js +392 -188
  137. package/src/core/components/Scatter3D.js +455 -0
  138. package/src/core/components/ScatterBio.js +601 -572
  139. package/src/core/components/Surface3D.js +326 -0
  140. package/src/core/components/ThreeCustom.js +648 -0
  141. package/src/core/components/ThreeScene.js +459 -0
  142. package/src/core/components/VisiumPlot.js +191 -165
  143. package/src/core/components/browser.js +42 -42
  144. package/src/core/components/dotplot.js +413 -413
  145. package/src/core/components/html.js +29 -29
  146. package/src/core/components/list.js +178 -178
  147. package/src/core/components/macaron.js +206 -201
  148. package/src/core/components/markdown.js +56 -56
  149. package/src/core/components/parser.scatterBio.js +582 -579
  150. package/src/core/components/ratio.js +82 -80
  151. package/src/core/components/scatterL.js +206 -173
  152. package/src/core/components/searchbar.js +156 -131
  153. package/src/core/components/selection.js +310 -193
  154. package/src/core/components/timeline.js +236 -281
  155. package/src/core/components/visium.js +114 -97
  156. package/src/core/data-processor.js +413 -0
  157. package/src/core/fetch/condfetch.js +82 -82
  158. package/src/core/fetch/fetch.js +92 -92
  159. package/src/core/fetch/json.js +29 -29
  160. package/src/core/fetch/vfetch.js +42 -42
  161. package/src/core/hmr-client.js +724 -0
  162. package/src/core/liveEditor.js +44 -44
  163. package/src/core/modules/codeEditorWithPreview.js +104 -104
  164. package/src/core/modules/echarts/common.js +20 -20
  165. package/src/core/modules/echarts/gl.js +228 -0
  166. package/src/core/modules/echarts/presetHandler.js +41 -41
  167. package/src/core/modules/echarts/presets/esodev.chromium.js +172 -172
  168. package/src/core/modules/echarts/presets/esodev.codex.js +130 -130
  169. package/src/core/modules/echarts/presets/esodev.visium.js +123 -123
  170. package/src/core/modules/echarts/presets/mmtrbc.js +186 -186
  171. package/src/core/modules/echarts.js +70 -71
  172. package/src/core/modules/echartsUtils.js +43 -43
  173. package/src/core/modules/echartswitcher.js +227 -152
  174. package/src/core/modules/replotly/presetHandler.js +24 -24
  175. package/src/core/modules/replotly/presets/minimum.js +18 -18
  176. package/src/core/modules/replotly/presets/mmtrbc.dot.js +114 -114
  177. package/src/core/modules/replotly/presets/mmtrbc.violin.js +100 -100
  178. package/src/core/modules/replotly.js +74 -71
  179. package/src/core/modules/threejs/Camera.js +373 -0
  180. package/src/core/modules/threejs/Lighting.js +459 -0
  181. package/src/core/modules/threejs/Renderer.js +364 -0
  182. package/src/core/modules/threejs/Scene.js +266 -0
  183. package/src/core/modules/threejs/index.js +155 -0
  184. package/src/core/pages/404.js +50 -50
  185. package/src/core/pages/error.js +27 -27
  186. package/src/core/pages/jsonPage.js +62 -62
  187. package/src/core/pages/loading.js +44 -44
  188. package/src/core/parser/echart.data.js +204 -183
  189. package/src/core/parser/echart.features.js +125 -125
  190. package/src/core/parser/echart.general.js +147 -143
  191. package/src/core/parser/echart.hilbert.js +57 -57
  192. package/src/core/parser/echart.parser.js +210 -210
  193. package/src/core/parser/echart.series.js +67 -67
  194. package/src/core/parser/echart.types.js +76 -76
  195. package/src/core/parser/plotly.config.js +10 -10
  196. package/src/core/parser/plotly.data.js +132 -132
  197. package/src/core/parser/plotly.layout.js +9 -9
  198. package/src/core/parser/plotly.violin.js +18 -18
  199. package/src/core/recharts.js +361 -62
  200. package/src/core/router/alias.js +49 -49
  201. package/src/core/router/jsonRouter.js +31 -31
  202. package/src/core/themes/modern.js +32 -32
  203. package/src/core/themes/themeSelector.js +33 -33
  204. package/src/core/visualify.js +213 -47
  205. package/src/core/widgets/circularProgress.js +23 -23
  206. package/src/core/widgets/controller.js +116 -83
  207. package/src/core/widgets/errorBoundary.js +36 -36
  208. package/src/core/widgets/footer.js +185 -177
  209. package/src/core/widgets/header.js +238 -234
  210. package/src/core/widgets/layout/Grid.js +31 -31
  211. package/src/core/widgets/layout.js +36 -36
  212. package/src/core/widgets/mapping.js +56 -42
  213. package/src/core/workers/data-worker.js +349 -0
  214. package/src/core/workers/worker-pool.js +396 -0
  215. package/src/docsify/bundle.js +215 -0
  216. package/src/docsify/markdown.js +271 -0
  217. package/src/docsify/plugin.js +268 -0
  218. package/src/editor/README.md +172 -0
  219. package/src/editor/components/ChartBuilder.jsx +341 -0
  220. package/src/editor/components/ChartTypeSidebar.jsx +91 -0
  221. package/src/editor/components/Editor.jsx +367 -0
  222. package/src/editor/components/Preview.jsx +446 -0
  223. package/src/editor/components/PropertyPanel.jsx +468 -0
  224. package/src/editor/components/StatusBar.jsx +85 -0
  225. package/src/editor/context/EditorContext.js +248 -0
  226. package/src/editor/hooks/useDebounce.js +32 -0
  227. package/src/editor/index.js +315 -0
  228. package/src/editor/styles/editor.css +637 -0
  229. package/src/editor/utils/chartValidator.js +263 -0
  230. package/src/entries/charts3d.js +70 -0
  231. package/src/entries/core.js +78 -0
  232. package/src/entries/docs.js +154 -0
  233. package/src/entries/pages.js +93 -0
  234. package/src/entries/portal.js +204 -0
  235. package/src/entries/shared.js +50 -0
  236. package/src/i18n/formatters.js +455 -0
  237. package/src/i18n/index.js +169 -0
  238. package/src/i18n/locales/ar.json +137 -0
  239. package/src/i18n/locales/de.json +137 -0
  240. package/src/i18n/locales/en.json +137 -0
  241. package/src/i18n/locales/es.json +137 -0
  242. package/src/i18n/locales/he.json +137 -0
  243. package/src/i18n/locales/zh.json +137 -0
  244. package/src/i18n/rtl.css +183 -0
  245. package/src/index.js +82 -62
  246. package/src/loader.js +103 -0
  247. package/src/setupTests.js +5 -5
  248. package/tsconfig.json +51 -0
  249. package/types/charts.d.ts +569 -0
  250. package/types/components.d.ts +441 -0
  251. package/types/config.d.ts +199 -0
  252. 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>